@futdevpro/ccap 1.1.3020 → 1.1.3029

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 (177) hide show
  1. package/client-dist/{agent-instances.module-QJYTOFVD.js → agent-instances.module-ZEDAGCTO.js} +2 -2
  2. package/client-dist/{ca.module-V6FHCYQZ.js → ca.module-PGILVKST.js} +2 -2
  3. package/client-dist/{cc-usage-dashboard.component-KKBXRYK2.js → cc-usage-dashboard.component-HW55BF7X.js} +2 -2
  4. package/client-dist/{cc.module-TWMW5L4N.js → cc.module-FWD5FAE2.js} +2 -2
  5. package/client-dist/{chunk-MNSQBWJT.js → chunk-2E5MEUC6.js} +2 -2
  6. package/client-dist/{chunk-IQY4KZS6.js → chunk-2HOSTFZM.js} +2 -2
  7. package/client-dist/{chunk-EHUUQ4OK.js → chunk-2QKSYFBS.js} +2 -2
  8. package/client-dist/{chunk-BXG7G2X6.js → chunk-3COYWANK.js} +2 -2
  9. package/client-dist/{chunk-6NBGNC3H.js → chunk-3CSKYOXL.js} +2 -2
  10. package/client-dist/{chunk-RKSXVMK3.js → chunk-3LQ5ZNQK.js} +2 -2
  11. package/client-dist/{chunk-2DVBHA4Z.js → chunk-4AMEHBWO.js} +2 -2
  12. package/client-dist/{chunk-OI272NTT.js → chunk-57RXVP5S.js} +2 -2
  13. package/client-dist/{chunk-64BJE4DK.js → chunk-5WWTZ2LQ.js} +2 -2
  14. package/client-dist/{chunk-FWKJUH2U.js → chunk-6NKAOL4H.js} +2 -2
  15. package/client-dist/{chunk-LFUANSXL.js → chunk-7O5Q7ZE5.js} +2 -2
  16. package/client-dist/{chunk-6AZPCJZH.js → chunk-AFMSZ2A4.js} +2 -2
  17. package/client-dist/{chunk-V675ASMV.js → chunk-AMUBZLYY.js} +2 -2
  18. package/client-dist/{chunk-XVDUJ377.js → chunk-ATCDMHJZ.js} +2 -2
  19. package/client-dist/{chunk-KCRKTCBJ.js → chunk-B5OAVRIE.js} +2 -2
  20. package/client-dist/{chunk-BHLFSRHB.js → chunk-CPT4H4CB.js} +2 -2
  21. package/client-dist/{chunk-6YEOZ4N2.js → chunk-E4MCYQLX.js} +2 -2
  22. package/client-dist/{chunk-23CFTV2G.js → chunk-EPQSURW3.js} +3 -3
  23. package/client-dist/{chunk-23CFTV2G.js.map → chunk-EPQSURW3.js.map} +4 -4
  24. package/client-dist/{chunk-LPEBEZLT.js → chunk-F7CCYE3D.js} +2 -2
  25. package/client-dist/{chunk-AMWUKLOU.js → chunk-F7EMYMLE.js} +2 -2
  26. package/client-dist/{chunk-CZCAVIJH.js → chunk-FES32KDN.js} +2 -2
  27. package/client-dist/{chunk-Y3RRN6DW.js → chunk-GC7C3V7Z.js} +2 -2
  28. package/client-dist/{chunk-BB7FGQZ6.js → chunk-HOPBJ2PM.js} +2 -2
  29. package/client-dist/{chunk-4WXLIFZO.js → chunk-ISSG57FN.js} +2 -2
  30. package/client-dist/{chunk-NU2KNJJR.js → chunk-JC5YKRA2.js} +2 -2
  31. package/client-dist/{chunk-UTLVTJDS.js → chunk-JIVE4XG6.js} +2 -2
  32. package/client-dist/{chunk-7ZGELPVY.js → chunk-K5ULMCZN.js} +2 -2
  33. package/client-dist/{chunk-3RSQSP4C.js → chunk-KKBOPOS7.js} +2 -2
  34. package/client-dist/{chunk-ML4DFCM7.js → chunk-KMDWVDZN.js} +2 -2
  35. package/client-dist/{chunk-H72IPZYU.js → chunk-KMQOD27X.js} +2 -2
  36. package/client-dist/{chunk-EDVIWTET.js → chunk-KQ62B5RJ.js} +2 -2
  37. package/client-dist/{chunk-EDVIWTET.js.map → chunk-KQ62B5RJ.js.map} +1 -1
  38. package/client-dist/{chunk-EZVZVLJ5.js → chunk-KRDY4QE4.js} +2 -2
  39. package/client-dist/{chunk-SXNYAZ4X.js → chunk-KVLIWG6J.js} +2 -2
  40. package/client-dist/{chunk-HLDXMJXQ.js → chunk-LFUSTUZT.js} +2 -2
  41. package/client-dist/{chunk-3AX4B4S2.js → chunk-LYGC4TVK.js} +2 -2
  42. package/client-dist/{chunk-SHV4JGOU.js → chunk-NMWXUTFQ.js} +2 -2
  43. package/client-dist/{chunk-DCWGOTWA.js → chunk-ODNT6WDP.js} +2 -2
  44. package/client-dist/{chunk-W7SAAPHP.js → chunk-Q4MVYEES.js} +2 -2
  45. package/client-dist/{chunk-T2GOFY7H.js → chunk-Q5KLVNNE.js} +2 -2
  46. package/client-dist/{chunk-C7INBKQK.js → chunk-QMPZ46LB.js} +2 -2
  47. package/client-dist/{chunk-DNRMCCHG.js → chunk-QUFSDVHR.js} +2 -2
  48. package/client-dist/{chunk-QV3SDDFJ.js → chunk-RCRXEUZM.js} +2 -2
  49. package/client-dist/{chunk-CXIYKPBA.js → chunk-RMJTPSHP.js} +2 -2
  50. package/client-dist/{chunk-OXDWH3A2.js → chunk-RWNN5KRV.js} +2 -2
  51. package/client-dist/{chunk-JUK4XI7S.js → chunk-RZY5FFKY.js} +2 -2
  52. package/client-dist/{chunk-JUK4XI7S.js.map → chunk-RZY5FFKY.js.map} +1 -1
  53. package/client-dist/{chunk-W2SLMCXE.js → chunk-SREB74HR.js} +2 -2
  54. package/client-dist/{chunk-67F7P6KL.js → chunk-TLAPOIAO.js} +2 -2
  55. package/client-dist/{chunk-FQHJM7LJ.js → chunk-TTI6NQVT.js} +2 -2
  56. package/client-dist/{chunk-QPQEQKWT.js → chunk-UHRVQGRT.js} +2 -2
  57. package/client-dist/{chunk-PEGIXIM2.js → chunk-W36ACK74.js} +2 -2
  58. package/client-dist/{chunk-LDJGPMMN.js → chunk-W3AWLRVB.js} +2 -2
  59. package/client-dist/{chunk-MAA7SWVG.js → chunk-WETMMHZO.js} +2 -2
  60. package/client-dist/{chunk-H3DS6OH7.js → chunk-WF6HPH3A.js} +2 -2
  61. package/client-dist/{chunk-YQD6EY4L.js → chunk-WIWLBRQI.js} +2 -2
  62. package/client-dist/{chunk-H4ZDV4Z3.js → chunk-ZBEUOVWM.js} +2 -2
  63. package/client-dist/{chunk-YGFCHNXR.js → chunk-ZYHUZVCB.js} +2 -2
  64. package/client-dist/{consultant.module-LQMXZENA.js → consultant.module-IBY4ZJRF.js} +2 -2
  65. package/client-dist/{consultant.module-LQMXZENA.js.map → consultant.module-IBY4ZJRF.js.map} +2 -2
  66. package/client-dist/{crd.module-WGQKKE3M.js → crd.module-XJ435KXN.js} +2 -2
  67. package/client-dist/{dashboard.module-C4WZIP4Y.js → dashboard.module-NUTWD5IC.js} +2 -2
  68. package/client-dist/{do.module-CAPIRHU6.js → do.module-C2QZR75Z.js} +2 -2
  69. package/client-dist/{document-library.module-IPYWYSAQ.js → document-library.module-OGNPLK6G.js} +2 -2
  70. package/client-dist/{embedding-eval.module-3QA5HRDF.js → embedding-eval.module-66JRL7MA.js} +2 -2
  71. package/client-dist/{embedding-registry.module-LM26SUUJ.js → embedding-registry.module-JHKAP6KF.js} +2 -2
  72. package/client-dist/{err.module-IZTPG7LQ.js → err.module-TK43XPZB.js} +2 -2
  73. package/client-dist/{feedback.module-MX4GLRZK.js → feedback.module-7R5EBLO4.js} +2 -2
  74. package/client-dist/{host-runtime-mcp.module-6KK7IW7M.js → host-runtime-mcp.module-SUOQT2ZI.js} +2 -2
  75. package/client-dist/index.html +1 -1
  76. package/client-dist/{live-dev-pipeline.module-KHZRQJ4E.js → live-dev-pipeline.module-CHSRLAND.js} +2 -2
  77. package/client-dist/{logs.module-GCB2VJNV.js → logs.module-MC4V6CB2.js} +2 -2
  78. package/client-dist/{main-ZW4FR256.js → main-RS7R4GTV.js} +3 -3
  79. package/client-dist/{master-control-remote-poc.module-GKP2IF4U.js → master-control-remote-poc.module-SREH7RYL.js} +2 -2
  80. package/client-dist/{mobile-app.module-JOXNLUM2.js → mobile-app.module-2A5OJQ46.js} +2 -2
  81. package/client-dist/{model-registry.module-KRFLXT23.js → model-registry.module-XIOF6NIA.js} +2 -2
  82. package/client-dist/{oc.module-ZQV6ELSQ.js → oc.module-MVIAO2U2.js} +2 -2
  83. package/client-dist/{orc.module-BOS7IKQO.js → orc.module-T4VFJF4P.js} +2 -2
  84. package/client-dist/{project-management.module-54PADR43.js → project-management.module-LRYIMGFZ.js} +2 -2
  85. package/client-dist/project-source-routed.module-FVGM4IBL.js +2 -0
  86. package/client-dist/{scheduler.module-Z2HR2ZZQ.js → scheduler.module-5VRTICQ7.js} +2 -2
  87. package/client-dist/{session.module-HYDKLM4I.js → session.module-N3QOIA3B.js} +2 -2
  88. package/client-dist/{set.module-MY7SOS6L.js → set.module-3LY5JECS.js} +2 -2
  89. package/client-dist/{setup.module-JEOJCKS5.js → setup.module-IVQJMJMO.js} +2 -2
  90. package/client-dist/{terminals.module-SFUXL6IK.js → terminals.module-TDVJE7TG.js} +2 -2
  91. package/client-dist/{voice-notes-poc.module-T6WAIRNR.js → voice-notes-poc.module-KD4FX6MQ.js} +2 -2
  92. package/client-dist/{wfs.module-SBGLOPUM.js → wfs.module-7FFTZILZ.js} +2 -2
  93. package/package.json +1 -1
  94. package/client-dist/project-source-routed.module-XPZTKJ4O.js +0 -2
  95. /package/client-dist/{agent-instances.module-QJYTOFVD.js.map → agent-instances.module-ZEDAGCTO.js.map} +0 -0
  96. /package/client-dist/{ca.module-V6FHCYQZ.js.map → ca.module-PGILVKST.js.map} +0 -0
  97. /package/client-dist/{cc-usage-dashboard.component-KKBXRYK2.js.map → cc-usage-dashboard.component-HW55BF7X.js.map} +0 -0
  98. /package/client-dist/{cc.module-TWMW5L4N.js.map → cc.module-FWD5FAE2.js.map} +0 -0
  99. /package/client-dist/{chunk-MNSQBWJT.js.map → chunk-2E5MEUC6.js.map} +0 -0
  100. /package/client-dist/{chunk-IQY4KZS6.js.map → chunk-2HOSTFZM.js.map} +0 -0
  101. /package/client-dist/{chunk-EHUUQ4OK.js.map → chunk-2QKSYFBS.js.map} +0 -0
  102. /package/client-dist/{chunk-BXG7G2X6.js.map → chunk-3COYWANK.js.map} +0 -0
  103. /package/client-dist/{chunk-6NBGNC3H.js.map → chunk-3CSKYOXL.js.map} +0 -0
  104. /package/client-dist/{chunk-RKSXVMK3.js.map → chunk-3LQ5ZNQK.js.map} +0 -0
  105. /package/client-dist/{chunk-2DVBHA4Z.js.map → chunk-4AMEHBWO.js.map} +0 -0
  106. /package/client-dist/{chunk-OI272NTT.js.map → chunk-57RXVP5S.js.map} +0 -0
  107. /package/client-dist/{chunk-64BJE4DK.js.map → chunk-5WWTZ2LQ.js.map} +0 -0
  108. /package/client-dist/{chunk-FWKJUH2U.js.map → chunk-6NKAOL4H.js.map} +0 -0
  109. /package/client-dist/{chunk-LFUANSXL.js.map → chunk-7O5Q7ZE5.js.map} +0 -0
  110. /package/client-dist/{chunk-6AZPCJZH.js.map → chunk-AFMSZ2A4.js.map} +0 -0
  111. /package/client-dist/{chunk-V675ASMV.js.map → chunk-AMUBZLYY.js.map} +0 -0
  112. /package/client-dist/{chunk-XVDUJ377.js.map → chunk-ATCDMHJZ.js.map} +0 -0
  113. /package/client-dist/{chunk-KCRKTCBJ.js.map → chunk-B5OAVRIE.js.map} +0 -0
  114. /package/client-dist/{chunk-BHLFSRHB.js.map → chunk-CPT4H4CB.js.map} +0 -0
  115. /package/client-dist/{chunk-6YEOZ4N2.js.map → chunk-E4MCYQLX.js.map} +0 -0
  116. /package/client-dist/{chunk-LPEBEZLT.js.map → chunk-F7CCYE3D.js.map} +0 -0
  117. /package/client-dist/{chunk-AMWUKLOU.js.map → chunk-F7EMYMLE.js.map} +0 -0
  118. /package/client-dist/{chunk-CZCAVIJH.js.map → chunk-FES32KDN.js.map} +0 -0
  119. /package/client-dist/{chunk-Y3RRN6DW.js.map → chunk-GC7C3V7Z.js.map} +0 -0
  120. /package/client-dist/{chunk-BB7FGQZ6.js.map → chunk-HOPBJ2PM.js.map} +0 -0
  121. /package/client-dist/{chunk-4WXLIFZO.js.map → chunk-ISSG57FN.js.map} +0 -0
  122. /package/client-dist/{chunk-NU2KNJJR.js.map → chunk-JC5YKRA2.js.map} +0 -0
  123. /package/client-dist/{chunk-UTLVTJDS.js.map → chunk-JIVE4XG6.js.map} +0 -0
  124. /package/client-dist/{chunk-7ZGELPVY.js.map → chunk-K5ULMCZN.js.map} +0 -0
  125. /package/client-dist/{chunk-3RSQSP4C.js.map → chunk-KKBOPOS7.js.map} +0 -0
  126. /package/client-dist/{chunk-ML4DFCM7.js.map → chunk-KMDWVDZN.js.map} +0 -0
  127. /package/client-dist/{chunk-H72IPZYU.js.map → chunk-KMQOD27X.js.map} +0 -0
  128. /package/client-dist/{chunk-EZVZVLJ5.js.map → chunk-KRDY4QE4.js.map} +0 -0
  129. /package/client-dist/{chunk-SXNYAZ4X.js.map → chunk-KVLIWG6J.js.map} +0 -0
  130. /package/client-dist/{chunk-HLDXMJXQ.js.map → chunk-LFUSTUZT.js.map} +0 -0
  131. /package/client-dist/{chunk-3AX4B4S2.js.map → chunk-LYGC4TVK.js.map} +0 -0
  132. /package/client-dist/{chunk-SHV4JGOU.js.map → chunk-NMWXUTFQ.js.map} +0 -0
  133. /package/client-dist/{chunk-DCWGOTWA.js.map → chunk-ODNT6WDP.js.map} +0 -0
  134. /package/client-dist/{chunk-W7SAAPHP.js.map → chunk-Q4MVYEES.js.map} +0 -0
  135. /package/client-dist/{chunk-T2GOFY7H.js.map → chunk-Q5KLVNNE.js.map} +0 -0
  136. /package/client-dist/{chunk-C7INBKQK.js.map → chunk-QMPZ46LB.js.map} +0 -0
  137. /package/client-dist/{chunk-DNRMCCHG.js.map → chunk-QUFSDVHR.js.map} +0 -0
  138. /package/client-dist/{chunk-QV3SDDFJ.js.map → chunk-RCRXEUZM.js.map} +0 -0
  139. /package/client-dist/{chunk-CXIYKPBA.js.map → chunk-RMJTPSHP.js.map} +0 -0
  140. /package/client-dist/{chunk-OXDWH3A2.js.map → chunk-RWNN5KRV.js.map} +0 -0
  141. /package/client-dist/{chunk-W2SLMCXE.js.map → chunk-SREB74HR.js.map} +0 -0
  142. /package/client-dist/{chunk-67F7P6KL.js.map → chunk-TLAPOIAO.js.map} +0 -0
  143. /package/client-dist/{chunk-FQHJM7LJ.js.map → chunk-TTI6NQVT.js.map} +0 -0
  144. /package/client-dist/{chunk-QPQEQKWT.js.map → chunk-UHRVQGRT.js.map} +0 -0
  145. /package/client-dist/{chunk-PEGIXIM2.js.map → chunk-W36ACK74.js.map} +0 -0
  146. /package/client-dist/{chunk-LDJGPMMN.js.map → chunk-W3AWLRVB.js.map} +0 -0
  147. /package/client-dist/{chunk-MAA7SWVG.js.map → chunk-WETMMHZO.js.map} +0 -0
  148. /package/client-dist/{chunk-H3DS6OH7.js.map → chunk-WF6HPH3A.js.map} +0 -0
  149. /package/client-dist/{chunk-YQD6EY4L.js.map → chunk-WIWLBRQI.js.map} +0 -0
  150. /package/client-dist/{chunk-H4ZDV4Z3.js.map → chunk-ZBEUOVWM.js.map} +0 -0
  151. /package/client-dist/{chunk-YGFCHNXR.js.map → chunk-ZYHUZVCB.js.map} +0 -0
  152. /package/client-dist/{crd.module-WGQKKE3M.js.map → crd.module-XJ435KXN.js.map} +0 -0
  153. /package/client-dist/{dashboard.module-C4WZIP4Y.js.map → dashboard.module-NUTWD5IC.js.map} +0 -0
  154. /package/client-dist/{do.module-CAPIRHU6.js.map → do.module-C2QZR75Z.js.map} +0 -0
  155. /package/client-dist/{document-library.module-IPYWYSAQ.js.map → document-library.module-OGNPLK6G.js.map} +0 -0
  156. /package/client-dist/{embedding-eval.module-3QA5HRDF.js.map → embedding-eval.module-66JRL7MA.js.map} +0 -0
  157. /package/client-dist/{embedding-registry.module-LM26SUUJ.js.map → embedding-registry.module-JHKAP6KF.js.map} +0 -0
  158. /package/client-dist/{err.module-IZTPG7LQ.js.map → err.module-TK43XPZB.js.map} +0 -0
  159. /package/client-dist/{feedback.module-MX4GLRZK.js.map → feedback.module-7R5EBLO4.js.map} +0 -0
  160. /package/client-dist/{host-runtime-mcp.module-6KK7IW7M.js.map → host-runtime-mcp.module-SUOQT2ZI.js.map} +0 -0
  161. /package/client-dist/{live-dev-pipeline.module-KHZRQJ4E.js.map → live-dev-pipeline.module-CHSRLAND.js.map} +0 -0
  162. /package/client-dist/{logs.module-GCB2VJNV.js.map → logs.module-MC4V6CB2.js.map} +0 -0
  163. /package/client-dist/{main-ZW4FR256.js.map → main-RS7R4GTV.js.map} +0 -0
  164. /package/client-dist/{master-control-remote-poc.module-GKP2IF4U.js.map → master-control-remote-poc.module-SREH7RYL.js.map} +0 -0
  165. /package/client-dist/{mobile-app.module-JOXNLUM2.js.map → mobile-app.module-2A5OJQ46.js.map} +0 -0
  166. /package/client-dist/{model-registry.module-KRFLXT23.js.map → model-registry.module-XIOF6NIA.js.map} +0 -0
  167. /package/client-dist/{oc.module-ZQV6ELSQ.js.map → oc.module-MVIAO2U2.js.map} +0 -0
  168. /package/client-dist/{orc.module-BOS7IKQO.js.map → orc.module-T4VFJF4P.js.map} +0 -0
  169. /package/client-dist/{project-management.module-54PADR43.js.map → project-management.module-LRYIMGFZ.js.map} +0 -0
  170. /package/client-dist/{project-source-routed.module-XPZTKJ4O.js.map → project-source-routed.module-FVGM4IBL.js.map} +0 -0
  171. /package/client-dist/{scheduler.module-Z2HR2ZZQ.js.map → scheduler.module-5VRTICQ7.js.map} +0 -0
  172. /package/client-dist/{session.module-HYDKLM4I.js.map → session.module-N3QOIA3B.js.map} +0 -0
  173. /package/client-dist/{set.module-MY7SOS6L.js.map → set.module-3LY5JECS.js.map} +0 -0
  174. /package/client-dist/{setup.module-JEOJCKS5.js.map → setup.module-IVQJMJMO.js.map} +0 -0
  175. /package/client-dist/{terminals.module-SFUXL6IK.js.map → terminals.module-TDVJE7TG.js.map} +0 -0
  176. /package/client-dist/{voice-notes-poc.module-T6WAIRNR.js.map → voice-notes-poc.module-KD4FX6MQ.js.map} +0 -0
  177. /package/client-dist/{wfs.module-SBGLOPUM.js.map → wfs.module-7FFTZILZ.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["src/app/_modules/consultant/_collections/con-input-storage.util.ts", "src/app/_modules/consultant/_services/consultant.api-service.ts", "src/app/_modules/consultant/_services/consultant.data-service.ts", "src/app/_modules/consultant/_collections/con-picker-model.util.ts", "src/app/_modules/consultant/_components/ccap-consultant-dashboard/con-dashboard.component.ts", "src/app/_modules/consultant/_components/ccap-consultant-dashboard/con-dashboard.component.html", "src/app/_modules/consultant/_components/ccap-consultant-shell/con-shell.component.ts", "src/app/_modules/consultant/_components/ccap-consultant-shell/con-shell.component.html", "src/app/_modules/consultant/_collections/con-msg-to-bubble-view.util.ts", "src/app/_modules/consultant/_components/ccap-consultant-detail/con-detail.component.ts", "src/app/_modules/consultant/_components/ccap-consultant-detail/con-detail.component.html", "src/app/_modules/consultant/consultant.module.ts"],
4
- "sourcesContent": ["import { Shr_LocalStoragePersistence_Util } from '../../shared/_collections/utils/storage/shr-local-storage-persistence.util';\n\n/** localStorage prefix a Consultant shell UI állapotához. */\nconst STORAGE_PREFIX: string = 'ccap-consultant';\n\n/**\n * Consultant felület panel/sidebar localStorage — SSOT a host komponensben, prefix izolálva.\n *\n * REQ-UI-MENU-STATE-001 (cycle 447): a metódusok a shared\n * `Shr_LocalStoragePersistence_Util`-ra delegálnak. LocalStorage kulcs-formátum\n * változatlan (`ccap-consultant:*` prefix) — backward-compat.\n */\nexport class Con_InputStorage_Util {\n\n /** Panel nyitott/zárt állapot mentése. */\n static savePanelOpen(panelKey: string, isOpen: boolean): void {\n Shr_LocalStoragePersistence_Util.writeBoolean(`${STORAGE_PREFIX}:panelOpen:${panelKey}`, isOpen);\n }\n\n /** Panel nyitott/zárt állapot betöltése. */\n static loadPanelOpen(panelKey: string, defaultOpen: boolean): boolean {\n return Shr_LocalStoragePersistence_Util.readBoolean(\n `${STORAGE_PREFIX}:panelOpen:${panelKey}`,\n defaultOpen,\n );\n }\n\n /** Panel szélesség mentése (px). */\n static savePanelWidth(panelKey: string, width: number): void {\n Shr_LocalStoragePersistence_Util.writeNumber(`${STORAGE_PREFIX}:panelWidth:${panelKey}`, width);\n }\n\n /** Panel szélesség betöltése (px). */\n static loadPanelWidth(panelKey: string, defaultWidth: number): number {\n return Shr_LocalStoragePersistence_Util.readNumber(\n `${STORAGE_PREFIX}:panelWidth:${panelKey}`,\n defaultWidth,\n );\n }\n}\n", "import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { firstValueFrom } from 'rxjs';\n\nimport { environment } from '../../../../environments/environment';\n\n/**\n * Consultant POC REST API.\n */\n@Injectable({ providedIn: 'root' })\nexport class Consultant_ApiService {\n\n private readonly baseUrl: string = `${environment.api.baseUrl}/consultant`;\n\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Thread lista.\n */\n listThreads(): Promise<{ threads: Record<string, unknown>[] }> {\n return firstValueFrom(\n this.http.get<{ threads: Record<string, unknown>[] }>(this.baseUrl),\n );\n }\n\n /**\n * Picker opciók: Model Registry lista + default pair szerver oldali merge-elve.\n * A response tartalmazza az effektív defaults párost is.\n */\n getPickerOptions(): Promise<{\n entries: Record<string, unknown>[];\n defaults: { providerInstanceId: string; model: string };\n }> {\n return firstValueFrom(\n this.http.get<{\n entries: Record<string, unknown>[];\n defaults: { providerInstanceId: string; model: string };\n }>(`${this.baseUrl}/picker-options`),\n );\n }\n\n /**\n * Új thread.\n */\n createThread(params: {\n label?: string;\n providerInstanceId: string;\n model: string;\n }): Promise<{ thread: Record<string, unknown> }> {\n return firstValueFrom(\n this.http.post<{ thread: Record<string, unknown> }>(this.baseUrl, params),\n );\n }\n\n /**\n * Thread részletek.\n */\n getThread(threadId: string): Promise<{ thread: Record<string, unknown> }> {\n return firstValueFrom(\n this.http.get<{ thread: Record<string, unknown> }>(\n `${this.baseUrl}/${encodeURIComponent(threadId)}`,\n ),\n );\n }\n\n /**\n * Thread meta patch.\n */\n patchThread(params: {\n threadId: string;\n label?: string;\n providerInstanceId?: string;\n model?: string;\n }): Promise<{ thread: Record<string, unknown> }> {\n const body: Record<string, unknown> = {};\n if (params.label != null) {\n body.label = params.label;\n }\n if (params.providerInstanceId != null) {\n body.providerInstanceId = params.providerInstanceId;\n }\n if (params.model != null) {\n body.model = params.model;\n }\n return firstValueFrom(\n this.http.patch<{ thread: Record<string, unknown> }>(\n `${this.baseUrl}/${encodeURIComponent(params.threadId)}`,\n body,\n ),\n );\n }\n\n /**\n * Thread törlés.\n */\n deleteThread(threadId: string): Promise<{ ok: boolean }> {\n return firstValueFrom(\n this.http.delete<{ ok: boolean }>(\n `${this.baseUrl}/${encodeURIComponent(threadId)}`,\n ),\n );\n }\n\n /**\n * Üzenet küldése.\n */\n postMessage(params: {\n threadId: string;\n text: string;\n allowWebSearch: boolean;\n attachments: Record<string, unknown>[];\n }): Promise<Record<string, unknown>> {\n return firstValueFrom(\n this.http.post<Record<string, unknown>>(\n `${this.baseUrl}/${encodeURIComponent(params.threadId)}/messages`,\n {\n text: params.text,\n allowWebSearch: params.allowWebSearch,\n attachments: params.attachments,\n },\n ),\n );\n }\n}\n", "import { inject, Injectable, signal, WritableSignal } from '@angular/core';\n\nimport { Consultant_ApiService } from './consultant.api-service';\nimport {\n CCAP_ConsultantMessage_Client_Interface,\n CCAP_ConsultantThreadDetail_Client_Interface,\n CCAP_ConsultantThreadSummary_Client_Interface,\n} from '../../../_models/interfaces/consultant/ccap-consultant-client.interface';\nimport {\n MRg_ListItem_Response,\n} from '../../ai-systems/_modules/model-registry/_services/mrg-list-item.interface';\nimport { CCAP_GlobalError_ControlService } from '../../../_services/control-services/ccap-global-error.control-service';\n\n/**\n * Consultant POC állapot (SSOT).\n */\n@Injectable({ providedIn: 'root' })\nexport class Consultant_DataService {\n\n private readonly consultant_AS: Consultant_ApiService = inject(Consultant_ApiService);\n private readonly globalError_CS: CCAP_GlobalError_ControlService =\n inject(CCAP_GlobalError_ControlService);\n\n readonly threads_$: WritableSignal<CCAP_ConsultantThreadSummary_Client_Interface[]> =\n signal<CCAP_ConsultantThreadSummary_Client_Interface[]>([]);\n\n readonly threadsLoading_$: WritableSignal<boolean> = signal<boolean>(false);\n readonly threadsError_$: WritableSignal<unknown | null> = signal<unknown | null>(null);\n\n readonly selectedThread_$: WritableSignal<CCAP_ConsultantThreadDetail_Client_Interface | null> =\n signal<CCAP_ConsultantThreadDetail_Client_Interface | null>(null);\n\n readonly selectedThreadLoading_$: WritableSignal<boolean> = signal<boolean>(false);\n readonly selectedThreadError_$: WritableSignal<unknown | null> = signal<unknown | null>(null);\n\n readonly sending_$: WritableSignal<boolean> = signal<boolean>(false);\n\n readonly activeThreadId_$: WritableSignal<string> = signal<string>('');\n\n /** Effektív default provider/model pár (szerver SSOT: SC_Effective). */\n readonly defaults_$: WritableSignal<{ providerInstanceId: string; model: string }> =\n signal<{ providerInstanceId: string; model: string }>({ providerInstanceId: '', model: '' });\n\n /** Picker opciók (registry lista + default pair szerver oldali merge). */\n readonly pickerOptions_$: WritableSignal<MRg_ListItem_Response[]> =\n signal<MRg_ListItem_Response[]>([]);\n\n readonly pickerOptionsLoading_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /**\n * Picker opciók betöltése (registry + default pair szerver oldali merge).\n * A defaults_$ signal-t is frissíti a válasz defaults mezőjéből.\n */\n async loadPickerOptions(): Promise<void> {\n this.pickerOptionsLoading_$.set(true);\n try {\n const res: {\n entries: Record<string, unknown>[];\n defaults: { providerInstanceId: string; model: string };\n } = await this.consultant_AS.getPickerOptions();\n const entries: MRg_ListItem_Response[] = Array.isArray(res.entries)\n ? res.entries.map(Consultant_DataService.parseRegistryEntry).filter(\n (e: MRg_ListItem_Response | null): e is MRg_ListItem_Response => e !== null,\n )\n : [];\n this.pickerOptions_$.set(entries);\n this.defaults_$.set({\n providerInstanceId: typeof res.defaults?.providerInstanceId === 'string'\n ? res.defaults.providerInstanceId : '',\n model: typeof res.defaults?.model === 'string' ? res.defaults.model : '',\n });\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'Consultant_DataService.loadPickerOptions');\n } finally {\n this.pickerOptionsLoading_$.set(false);\n }\n }\n\n /**\n * Thread lista betöltése.\n */\n async loadThreads(): Promise<void> {\n this.threadsLoading_$.set(true);\n this.threadsError_$.set(null);\n try {\n const res: { threads: Record<string, unknown>[] } = await this.consultant_AS.listThreads();\n const rawList: Record<string, unknown>[] = Array.isArray(res.threads) ? res.threads : [];\n const mapped: CCAP_ConsultantThreadSummary_Client_Interface[] = rawList.map(\n (row: Record<string, unknown>): CCAP_ConsultantThreadSummary_Client_Interface => ({\n threadId: typeof row.threadId === 'string' ? row.threadId : '',\n label: typeof row.label === 'string' ? row.label : '',\n providerInstanceId:\n typeof row.providerInstanceId === 'string' ? row.providerInstanceId : '',\n model: typeof row.model === 'string' ? row.model : '',\n messageCount: typeof row.messageCount === 'number' ? row.messageCount : 0,\n updatedAt: typeof row.updatedAt === 'string' ? row.updatedAt : '',\n }),\n );\n this.threads_$.set(mapped);\n } catch (err: unknown) {\n this.threadsError_$.set(err);\n this.globalError_CS.showError(err, 'Consultant_DataService.loadThreads');\n } finally {\n this.threadsLoading_$.set(false);\n }\n }\n\n /**\n * Egy thread részletei.\n */\n async loadThreadDetail(threadId: string): Promise<void> {\n this.activeThreadId_$.set(threadId);\n this.selectedThreadLoading_$.set(true);\n this.selectedThreadError_$.set(null);\n try {\n const res: { thread: Record<string, unknown> } = await this.consultant_AS.getThread(threadId);\n const detail: CCAP_ConsultantThreadDetail_Client_Interface | null =\n Consultant_DataService.parseThreadDetail(res.thread);\n this.selectedThread_$.set(detail);\n } catch (err: unknown) {\n this.selectedThreadError_$.set(err);\n this.globalError_CS.showError(err, 'Consultant_DataService.loadThreadDetail');\n } finally {\n this.selectedThreadLoading_$.set(false);\n }\n }\n\n /**\n * Üzenet küldés + lista frissítés.\n */\n async sendMessage(params: {\n threadId: string;\n text: string;\n allowWebSearch: boolean;\n attachments: Record<string, unknown>[];\n }): Promise<void> {\n this.sending_$.set(true);\n try {\n const res: Record<string, unknown> = await this.consultant_AS.postMessage(params);\n const threadRaw: unknown = res.thread;\n if (Consultant_DataService.isPlainRecord(threadRaw)) {\n const detail: CCAP_ConsultantThreadDetail_Client_Interface | null =\n Consultant_DataService.parseThreadDetail(threadRaw);\n this.selectedThread_$.set(detail);\n }\n await this.loadThreads();\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'Consultant_DataService.sendMessage');\n throw err;\n } finally {\n this.sending_$.set(false);\n }\n }\n\n /**\n * Provider/modell frissítés.\n */\n async updateThreadConfig(params: {\n threadId: string;\n providerInstanceId?: string;\n model?: string;\n label?: string;\n }): Promise<void> {\n try {\n const res: { thread: Record<string, unknown> } = await this.consultant_AS.patchThread(params);\n const detail: CCAP_ConsultantThreadDetail_Client_Interface | null =\n Consultant_DataService.parseThreadDetail(res.thread);\n this.selectedThread_$.set(detail);\n await this.loadThreads();\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'Consultant_DataService.updateThreadConfig');\n throw err;\n }\n }\n\n /**\n * Új thread létrehozása.\n */\n async createThread(params: {\n label?: string;\n providerInstanceId: string;\n model: string;\n }): Promise<string> {\n try {\n const res: { thread: Record<string, unknown> } = await this.consultant_AS.createThread(params);\n const idRaw: unknown = res.thread.threadId;\n const threadId: string = typeof idRaw === 'string' ? idRaw : '';\n await this.loadThreads();\n return threadId;\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'Consultant_DataService.createThread');\n throw err;\n }\n }\n\n /**\n * Thread törlése.\n */\n async deleteThread(threadId: string): Promise<void> {\n try {\n await this.consultant_AS.deleteThread(threadId);\n if (this.activeThreadId_$() === threadId) {\n this.selectedThread_$.set(null);\n this.activeThreadId_$.set('');\n }\n await this.loadThreads();\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'Consultant_DataService.deleteThread');\n throw err;\n }\n }\n\n /**\n * API thread objektum → részletek típus.\n */\n private static parseThreadDetail(\n raw: Record<string, unknown>,\n ): CCAP_ConsultantThreadDetail_Client_Interface | null {\n const threadId: string = typeof raw['threadId'] === 'string' ? raw['threadId'] : '';\n if (!threadId.length) {\n return null;\n }\n const messagesRaw: unknown = raw['messages'];\n const messages: CCAP_ConsultantMessage_Client_Interface[] = [];\n if (Array.isArray(messagesRaw)) {\n for (const m of messagesRaw) {\n if (!Consultant_DataService.isPlainRecord(m)) {\n continue;\n }\n const id: string = typeof m.id === 'string' ? m.id : '';\n const roleRaw: unknown = m.role;\n if (roleRaw !== 'user' && roleRaw !== 'assistant') {\n continue;\n }\n const msg: CCAP_ConsultantMessage_Client_Interface = {\n id: id,\n role: roleRaw,\n };\n if (typeof m.rawUserText === 'string') {\n msg.rawUserText = m.rawUserText;\n }\n if (typeof m.content === 'string') {\n msg.content = m.content;\n }\n const upRaw: unknown = m.userParts;\n if (Array.isArray(upRaw)) {\n const parts: CCAP_ConsultantMessage_Client_Interface['userParts'] = [];\n for (const p of upRaw) {\n if (!Consultant_DataService.isPlainRecord(p)) {\n continue;\n }\n const t: unknown = p.type;\n if (t !== 'text' && t !== 'image_url') {\n continue;\n }\n const part: {\n type: 'text' | 'image_url';\n text?: string;\n imageUrl?: string;\n } = { type: t };\n if (typeof p.text === 'string') {\n part.text = p.text;\n }\n if (typeof p.imageUrl === 'string') {\n part.imageUrl = p.imageUrl;\n }\n parts.push(part);\n }\n msg.userParts = parts;\n }\n messages.push(msg);\n }\n }\n return {\n threadId: threadId,\n label: typeof raw['label'] === 'string' ? raw['label'] : '',\n providerInstanceId:\n typeof raw['providerInstanceId'] === 'string' ? raw['providerInstanceId'] : '',\n model: typeof raw['model'] === 'string' ? raw['model'] : '',\n messages: messages,\n updatedAt: typeof raw['updatedAt'] === 'string' ? raw['updatedAt'] : '',\n };\n }\n\n private static isPlainRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n }\n\n /**\n * Registry entry JSON → típusos `MRg_ListItem_Response`.\n * Csak a picker-hez szükséges mezőket parsoljuk; null ha strukturálisan érvénytelen.\n */\n private static parseRegistryEntry(raw: unknown): MRg_ListItem_Response | null {\n if (!Consultant_DataService.isPlainRecord(raw)) {\n return null;\n }\n const provider: string = typeof raw['provider'] === 'string' ? raw['provider'] : '';\n const modelName: string = typeof raw['modelName'] === 'string' ? raw['modelName'] : '';\n if (!provider.length || !modelName.length) {\n return null;\n }\n const capsRaw: unknown = raw['capabilities'];\n const capabilities: string[] | undefined = Array.isArray(capsRaw)\n ? capsRaw.filter((c: unknown): c is string => typeof c === 'string')\n : undefined;\n return {\n id: typeof raw['id'] === 'string' ? raw['id'] : '',\n provider: provider,\n modelName: modelName,\n enabled: raw['enabled'] === true,\n capabilities: capabilities,\n };\n }\n}\n", "import { MRg_ListItem_Response } from '../../ai-systems/_modules/model-registry/_services/mrg-list-item.interface';\n\n/**\n * Consultant picker provider/model lista util (SSOT: mindenhol ugyanez a logika).\n */\nexport class Con_PickerModel_Util {\n\n /**\n * Egyedi, rendezett provider lista a picker entry-kből.\n */\n static collectSortedProviders(entries: MRg_ListItem_Response[]): string[] {\n const set: Set<string> = new Set<string>();\n for (const e of entries) {\n const prov: string = e.provider.trim();\n if (prov.length > 0) {\n set.add(prov);\n }\n }\n return [...set].sort();\n }\n\n /**\n * Adott providerhez tartozó egyedi, rendezett modellek.\n */\n static collectSortedModelsForProvider(\n entries: MRg_ListItem_Response[],\n provider: string,\n ): string[] {\n const p: string = provider.trim();\n if (!p.length) {\n return [];\n }\n const names: string[] = [];\n for (const e of entries) {\n const mn: string = e.modelName.trim();\n if (e.provider === p && mn.length > 0) {\n names.push(mn);\n }\n }\n return [...new Set(names)].sort();\n }\n}\n", "import { Component, OnInit, inject, signal, computed } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ProviderDisplayLabel_Util } from '../../../../_collections/display/provider-display-label.util';\nimport { Consultant_DataService } from '../../_services/consultant.data-service';\nimport { ModelRegistry_DataService } from '../../../ai-systems/_modules/model-registry/_services/model-registry.data-service';\nimport { MRg_SetupConfig_Type } from '../../../ai-systems/_modules/model-registry/_services/mrg-setup-config.type';\nimport { S_SessionListRowView_Interface } from '../../../shared/_models/interfaces/s-session-list-row-view.interface';\nimport { CCAP_ConsultantThreadSummary_Client_Interface } from '../../../../_models/interfaces/consultant/ccap-consultant-client.interface';\nimport { Con_PickerModel_Util } from '../../_collections/con-picker-model.util';\n\n/**\n * Consultant thread lista + új chat.\n */\n@Component({\n selector: 'app-ccap-consultant-dashboard',\n templateUrl: './con-dashboard.component.html',\n host: { class: 'flex flex-col flex-1 min-h-0 overflow-hidden' },\n})\n/** Con_Dashboard_Component class. */\nexport class Con_Dashboard_Component implements OnInit {\n\n readonly consultant_DS: Consultant_DataService = inject(Consultant_DataService);\n private readonly router: Router = inject(Router);\n private readonly modelRegistry_DS: ModelRegistry_DataService =\n inject(ModelRegistry_DataService);\n\n readonly isCreateOpen_$ = signal<boolean>(false);\n readonly newLabel_$ = signal<string>('');\n readonly newProvider_$ = signal<string>('');\n readonly newModel_$ = signal<string>('');\n readonly isCreating_$ = signal<boolean>(false);\n\n /**\n * Egyedi provider instance id-k a szerveri picker listából.\n */\n readonly providerOptions_$ = computed((): string[] => {\n return Con_PickerModel_Util.collectSortedProviders(this.consultant_DS.pickerOptions_$());\n });\n\n /**\n * Kiválasztott providerhez tartozó modellek.\n */\n readonly modelsForNewProvider_$ = computed((): string[] => {\n return Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n this.newProvider_$(),\n );\n });\n\n /**\n * Provider id → megjelenített címke (display label config-ból).\n */\n readonly providerDisplayLabelsMap_$ = computed((): Record<string, string> => {\n const config: MRg_SetupConfig_Type = this.modelRegistry_DS.setupConfigForRegistry_$();\n const providers: string[] = this.providerOptions_$();\n const m: Record<string, string> = {};\n for (const p of providers) {\n if (m[p] == null) {\n m[p] = ProviderDisplayLabel_Util.getProviderDisplayLabel(p, config);\n }\n }\n return m;\n });\n\n /**\n * Thread lista sorokhoz: ismert providerInstanceId → display label.\n */\n readonly threadProviderDisplayLabels_$ = computed((): Record<string, string> => {\n const config: MRg_SetupConfig_Type = this.modelRegistry_DS.setupConfigForRegistry_$();\n const ids: Set<string> = new Set<string>();\n for (const t of this.consultant_DS.threads_$()) {\n const id: string = t.providerInstanceId.trim();\n if (id.length > 0) {\n ids.add(id);\n }\n }\n for (const p of this.providerOptions_$()) {\n ids.add(p);\n }\n const m: Record<string, string> = {};\n for (const id of ids) {\n m[id] = ProviderDisplayLabel_Util.getProviderDisplayLabel(id, config);\n }\n return m;\n });\n\n /** Thread lista → shared list row view model mapping. */\n readonly threadRowViews_$ = computed((): S_SessionListRowView_Interface[] =>\n this.consultant_DS.threads_$().map(\n (t: CCAP_ConsultantThreadSummary_Client_Interface): S_SessionListRowView_Interface => ({\n id: t.threadId,\n label: t.label || t.threadId,\n status: '',\n statusColorClass: 'bg-neutral-600',\n isArchived: false,\n lastActivityAt: t.updatedAt,\n isRunning: false,\n }),\n ),\n );\n\n // ── Context menu state ──────────────────────────────────────\n\n /** Kontextmenü thread-je (null = zárt). */\n readonly ctxMenuThread_$ = signal<CCAP_ConsultantThreadSummary_Client_Interface | null>(null);\n\n /** Kontextmenü pozíció. */\n readonly ctxMenuPos_$ = signal<{ x: number; y: number }>({ x: 0, y: 0 });\n\n ngOnInit(): void {\n void this.consultant_DS.loadThreads();\n void this.consultant_DS.loadPickerOptions();\n void this.modelRegistry_DS.loadSetupConfigForRegistry();\n }\n\n /**\n * Navigálás a kiválasztott consultant thread-re.\n */\n handleSelectThread(threadId: string): void {\n void this.router.navigate(['/consultant', threadId]);\n }\n\n /**\n * Modál megnyitás: friss picker opciók + szerveri defaults pre-selection.\n */\n async handleOpenCreate(): Promise<void> {\n await this.consultant_DS.loadPickerOptions();\n const defaults: { providerInstanceId: string; model: string } = this.consultant_DS.defaults_$();\n const providers: string[] = this.providerOptions_$();\n if (defaults.providerInstanceId.length > 0 && providers.includes(defaults.providerInstanceId)) {\n const models: string[] = Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n defaults.providerInstanceId,\n );\n if (defaults.model.length > 0 && models.includes(defaults.model)) {\n this.newProvider_$.set(defaults.providerInstanceId);\n this.newModel_$.set(defaults.model);\n } else {\n this.newProvider_$.set(defaults.providerInstanceId);\n this.newModel_$.set(models[0] ?? '');\n }\n } else {\n const firstP: string = providers[0] ?? '';\n this.newProvider_$.set(firstP);\n const fallbackModels: string[] = Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n firstP,\n );\n this.newModel_$.set(fallbackModels[0] ?? '');\n }\n this.newLabel_$.set('');\n this.isCreateOpen_$.set(true);\n }\n\n /**\n * Új thread modál bezárása.\n */\n handleCloseCreate(): void {\n this.isCreateOpen_$.set(false);\n }\n\n /**\n * Provider váltás — modell lista első elemére állítás.\n */\n handleProviderChange(value: string): void {\n this.newProvider_$.set(value);\n const models: string[] = Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n value,\n );\n this.newModel_$.set(models[0] ?? '');\n }\n\n /**\n * Új consultant thread létrehozása a kiválasztott provider/model párossal.\n */\n async handleCreateThread(): Promise<void> {\n const provider: string = this.newProvider_$().trim();\n const model: string = this.newModel_$().trim();\n if (!provider.length || !model.length) {\n return;\n }\n this.isCreating_$.set(true);\n try {\n const label: string = this.newLabel_$().trim();\n const id: string = await this.consultant_DS.createThread({\n label: label.length > 0 ? label : undefined,\n providerInstanceId: provider,\n model: model,\n });\n this.isCreateOpen_$.set(false);\n if (id.length > 0) {\n void this.router.navigate(['/consultant', id]);\n }\n } finally {\n this.isCreating_$.set(false);\n }\n }\n\n // ── Context menu handlers ────────────────────────────────────\n\n /** Shared list row contextMenu output kezelése. */\n handleRowContextMenu(payload: { event: MouseEvent; id: string }): void {\n const thread: CCAP_ConsultantThreadSummary_Client_Interface | undefined =\n this.consultant_DS.threads_$().find(\n (t: CCAP_ConsultantThreadSummary_Client_Interface): boolean => t.threadId === payload.id,\n );\n if (!thread) {\n return;\n }\n this.ctxMenuThread_$.set(thread);\n this.ctxMenuPos_$.set({ x: payload.event.clientX, y: payload.event.clientY });\n }\n\n /** Kontextmenü bezárása. */\n handleCloseCtxMenu(): void {\n this.ctxMenuThread_$.set(null);\n }\n\n /** Delete a kontextmenüből. */\n async handleCtxDelete(): Promise<void> {\n const thread: CCAP_ConsultantThreadSummary_Client_Interface | null = this.ctxMenuThread_$();\n if (!thread) {\n return;\n }\n this.handleCloseCtxMenu();\n try {\n await this.consultant_DS.deleteThread(thread.threadId);\n void this.router.navigate(['/consultant']);\n } catch {\n // Hibát a data service kezeli\n }\n }\n}\n", "<div class=\"flex flex-col flex-1 min-h-0\">\n <div class=\"shrink-0 p-2 border-b border-neonDefault flex items-center gap-2\">\n <span class=\"text-xs font-semibold text-neutral-300 flex-1 truncate\">Consultant</span>\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border border-neonDefault text-neutral-300 hover:bg-neutral-700 rounded transition-colors\"\n (click)=\"handleOpenCreate()\">\n + New\n </button>\n </div>\n\n <div class=\"flex-1 overflow-y-auto\">\n @if (consultant_DS.threadsLoading_$()) {\n <div class=\"p-3 text-xs text-neutral-500\">Loading...</div>\n } @else if (threadRowViews_$().length) {\n @for (row of threadRowViews_$(); track row.id) {\n <app-s-session-list-row\n [view]=\"row\"\n [isActive]=\"consultant_DS.activeThreadId_$() === row.id\"\n (selected)=\"handleSelectThread($event)\"\n (contextMenu)=\"handleRowContextMenu($event)\" />\n }\n } @else {\n <div class=\"p-4 text-center text-neutral-500 text-xs\">No threads</div>\n }\n </div>\n</div>\n\n@if (isCreateOpen_$()) {\n <div class=\"fixed inset-0 z-40 flex items-center justify-center bg-black/60 p-4\" (click)=\"handleCloseCreate()\">\n <div\n class=\"w-full max-w-md rounded-lg border border-neonDefault bg-neutral-900 p-4 shadow-xl\"\n (click)=\"$event.stopPropagation()\">\n <h3 class=\"text-sm font-semibold text-neutral-200 mb-3\">New consultant thread</h3>\n <div class=\"flex flex-col gap-2 text-xs\">\n <label class=\"text-neutral-400\">Label (optional)</label>\n <input\n class=\"w-full px-2 py-1 rounded bg-neutral-800 border border-neutral-600 text-neutral-200\"\n [ngModel]=\"newLabel_$()\"\n (ngModelChange)=\"newLabel_$.set($event)\" />\n\n <label class=\"text-neutral-400\">Provider</label>\n <select\n class=\"w-full px-2 py-1 rounded bg-neutral-800 border border-neutral-600 text-neutral-200\"\n [ngModel]=\"newProvider_$()\"\n (ngModelChange)=\"handleProviderChange($event)\">\n @for (p of providerOptions_$(); track p) {\n <option [value]=\"p\">{{ providerDisplayLabelsMap_$()[p] || p }}</option>\n }\n </select>\n\n <label class=\"text-neutral-400\">Model</label>\n <select\n class=\"w-full px-2 py-1 rounded bg-neutral-800 border border-neutral-600 text-neutral-200\"\n [ngModel]=\"newModel_$()\"\n (ngModelChange)=\"newModel_$.set($event)\">\n @for (m of modelsForNewProvider_$(); track m) {\n <option [value]=\"m\">{{ m }}</option>\n }\n </select>\n </div>\n <div class=\"flex justify-end gap-2 mt-4\">\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border border-neutral-600 text-neutral-400 rounded\"\n (click)=\"handleCloseCreate()\">\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border border-neonDefault text-neutral-200 rounded disabled:opacity-40\"\n [disabled]=\"isCreating_$() || !newProvider_$().trim() || !newModel_$().trim()\"\n (click)=\"handleCreateThread()\">\n Create\n </button>\n </div>\n </div>\n </div>\n}\n\n<!-- Context menu overlay -->\n@if (ctxMenuThread_$(); as ctxThread) {\n <div class=\"fixed inset-0 z-40\" (click)=\"handleCloseCtxMenu()\"></div>\n <div class=\"fixed z-50 min-w-[140px] bg-neutral-900 border border-neutral-700 rounded-lg shadow-xl py-1 text-xs\"\n [style.left.px]=\"ctxMenuPos_$().x\"\n [style.top.px]=\"ctxMenuPos_$().y\">\n <button\n class=\"w-full text-left px-3 py-1.5 text-red-400 hover:bg-red-500/10 transition-colors\"\n (click)=\"handleCtxDelete()\">\n Delete\n </button>\n </div>\n}\n", "import { Component, OnInit, signal } from '@angular/core';\n\nimport { Con_InputStorage_Util } from '../../_collections/con-input-storage.util';\nimport {\n SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX,\n SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX,\n SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX,\n} from '../../../shared/_collections/consts/session-detail-panel-layout.const';\nimport { SHR_DocumentPointerDrag_Util } from '../../../shared/_collections/utils/shr-document-pointer-drag.util';\n\n/**\n * Consultant POC shell: resizable bal lista + router-outlet (OC/CC session minta).\n */\n@Component({\n selector: 'app-ccap-consultant-shell',\n templateUrl: './con-shell.component.html',\n host: { class: 'flex min-h-0 w-full flex-1 flex-col overflow-hidden' },\n})\n/** Con_Shell_Component class. */\nexport class Con_Shell_Component implements OnInit {\n\n /** Bal sidebar szélessége (px). */\n readonly sidebarWidth_$ = signal<number>(SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX);\n\n /** Sidebar látható. */\n readonly isSidebarOpen_$ = signal<boolean>(true);\n\n /** Resize közben select-none a root-on. */\n readonly isResizing_$ = signal<boolean>(false);\n\n ngOnInit(): void {\n const stored: number = Con_InputStorage_Util.loadPanelWidth(\n 'sidebar',\n SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX,\n );\n this.sidebarWidth_$.set(\n Math.max(\n SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX,\n Math.min(SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX, stored),\n ),\n );\n this.isSidebarOpen_$.set(Con_InputStorage_Util.loadPanelOpen('sidebar', true));\n }\n\n /**\n * Sidebar resize drag indítása.\n */\n handleSidebarResizeStart(event: PointerEvent): void {\n const startX: number = event.clientX;\n const startWidth: number = this.sidebarWidth_$();\n this.isResizing_$.set(true);\n SHR_DocumentPointerDrag_Util.attachUntilPointerUp({\n startEvent: event,\n onMove: (e: PointerEvent): void => {\n const delta: number = e.clientX - startX;\n const newWidth: number = Math.max(\n SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX,\n Math.min(SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX, startWidth + delta),\n );\n this.sidebarWidth_$.set(newWidth);\n },\n onEnd: (): void => {\n this.isResizing_$.set(false);\n Con_InputStorage_Util.savePanelWidth('sidebar', this.sidebarWidth_$());\n },\n });\n }\n\n /**\n * Sidebar ki/be — állapot mentése.\n */\n handleToggleSidebar(): void {\n this.isSidebarOpen_$.update((v: boolean): boolean => !v);\n Con_InputStorage_Util.savePanelOpen('sidebar', this.isSidebarOpen_$());\n }\n}\n", "<div class=\"flex min-h-0 w-full flex-1 flex-col overflow-hidden\" [class.select-none]=\"isResizing_$()\">\n <app-s-session-shell-toolbar>\n <div sSessionToolbarLeft class=\"flex items-center gap-1 min-w-0\">\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border border-neonDefault text-neutral-300 hover:bg-neutral-700 rounded transition-colors flex items-center gap-1 shrink-0\"\n (click)=\"handleToggleSidebar()\">\n <svg\n class=\"w-3 h-3 shrink-0 transition-transform duration-150\"\n [class.rotate-90]=\"isSidebarOpen_$()\"\n [class.-rotate-90]=\"!isSidebarOpen_$()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n Consultant\n </button>\n </div>\n <div sSessionToolbarCenter class=\"min-w-0\"></div>\n <div sSessionToolbarRight class=\"min-w-0\"></div>\n </app-s-session-shell-toolbar>\n\n <app-s-resizable-session-shell-layout\n [isSidebarOpen]=\"isSidebarOpen_$()\"\n [sidebarWidthPx]=\"sidebarWidth_$()\"\n [isResizing]=\"isResizing_$()\"\n (sidebarResizeStart)=\"handleSidebarResizeStart($event)\">\n <div sSessionShellSidebar class=\"flex flex-col overflow-hidden h-full\">\n <app-ccap-consultant-dashboard />\n </div>\n <div\n sSessionShellMain\n class=\"flex min-h-0 flex-1 flex-col overflow-hidden [&>router-outlet]:contents\">\n <router-outlet />\n </div>\n </app-s-resizable-session-shell-layout>\n</div>\n", "import { CCAP_AgentConsoleBubbleKind_Type } from '../../../_enums/shared/ccap-agent-console-bubble-kind.enum';\nimport { CCAP_AgentConsoleBubbleView_Interface } from '../../../_models/interfaces/shared/ccap-agent-console-bubble-view.interface';\nimport { CCAP_ConsultantMessage_Client_Interface } from '../../../_models/interfaces/consultant/ccap-consultant-client.interface';\n\n/**\n * Consultant üzenet → közös buborék view-model.\n */\nexport class Con_MsgToBubbleView_Util {\n\n /**\n * Consultant thread üzenet mapelése.\n */\n static fromMessage(msg: CCAP_ConsultantMessage_Client_Interface): CCAP_AgentConsoleBubbleView_Interface {\n const isUser: boolean = msg.role === 'user';\n const bodyText: string = isUser\n ? Con_MsgToBubbleView_Util.buildUserBodyText(msg)\n : (msg.content ?? '');\n return {\n listKey: msg.id,\n kind: isUser ? CCAP_AgentConsoleBubbleKind_Type.userPrompt : CCAP_AgentConsoleBubbleKind_Type.assistant,\n bodyText: bodyText,\n isUserAligned: isUser,\n flags: {\n showCopy: true,\n showRawInfo: false,\n useEditDiffForExpandable: false,\n },\n };\n }\n\n /**\n * User sor: nyers szöveg + több userPart esetén attachment jelölés (régi detail megjelenítés).\n */\n private static buildUserBodyText(msg: CCAP_ConsultantMessage_Client_Interface): string {\n const raw: string = (msg.rawUserText ?? '').trim();\n const hasParts: boolean = (msg.userParts?.length ?? 0) > 1;\n if (hasParts) {\n return raw.length > 0 ? `${raw}\\n[attachments]` : '[attachments]';\n }\n if (raw.length > 0) {\n return raw;\n }\n return msg.content ?? '';\n }\n}\n", "import {\n Component,\n computed,\n effect,\n inject,\n OnDestroy,\n signal,\n ViewChild,\n WritableSignal,\n} from '@angular/core';\nimport { ActivatedRoute, ParamMap, Router } from '@angular/router';\n\nimport { map } from 'rxjs';\n\nimport { DyNX_SubscriptionControl } from '@futdevpro/ngx-dynamo';\n\nimport { Consultant_DataService } from '../../_services/consultant.data-service';\nimport { VNP_InputUi_DataService } from '../../../dev/_modules/poc/_modules/voice-notes-poc/_services/vnp-input-ui.data-service';\nimport {\n S_SessionInput_Component,\n} from '../../../shared/_components/session-ui/s-session-input/s-session-input.component';\nimport { Con_PickerModel_Util } from '../../_collections/con-picker-model.util';\nimport {\n CCAP_PendingAttachment_Interface,\n} from '../../../../_models/interfaces/session/ccap-pending-attachment.interface';\nimport {\n CCAP_ConsultantMessage_Client_Interface,\n} from '../../../../_models/interfaces/consultant/ccap-consultant-client.interface';\nimport { CCAP_AgentConsoleBubbleView_Interface } from '../../../../_models/interfaces/shared/ccap-agent-console-bubble-view.interface';\nimport { Con_MsgToBubbleView_Util } from '../../_collections/con-msg-to-bubble-view.util';\n\n/**\n * Consultant chat részletek: üzenetek, composer, modellváltás.\n */\n@Component({\n selector: 'app-ccap-consultant-detail',\n templateUrl: './con-detail.component.html',\n host: { class: 'flex flex-col flex-1 min-h-0 overflow-hidden' },\n})\n/** Con_Detail_Component class. */\nexport class Con_Detail_Component extends DyNX_SubscriptionControl implements OnDestroy {\n\n readonly consultant_DS: Consultant_DataService = inject(Consultant_DataService);\n private readonly route: ActivatedRoute = inject(ActivatedRoute);\n private readonly router: Router = inject(Router);\n private readonly voiceInputUi_DS: VNP_InputUi_DataService =\n inject(VNP_InputUi_DataService);\n\n /** Shared session input komponens referencia (clearAttachments küldés után). */\n @ViewChild(S_SessionInput_Component) private sessionInputRef: S_SessionInput_Component | undefined;\n\n readonly composerText_$: WritableSignal<string> = signal<string>('');\n readonly allowWebSearch_$: WritableSignal<boolean> = signal<boolean>(false);\n\n readonly localLabel_$: WritableSignal<string> = signal<string>('');\n readonly localProvider_$: WritableSignal<string> = signal<string>('');\n readonly localModel_$: WritableSignal<string> = signal<string>('');\n\n /**\n * Provider opciók a szerveri picker listából (SSOT: data service).\n */\n readonly providerOptions_$ = computed((): string[] => {\n return Con_PickerModel_Util.collectSortedProviders(this.consultant_DS.pickerOptions_$());\n });\n\n /**\n * Model lista a kiválasztott providerhez (SSOT: shared util, template-ben nincs method hívás).\n */\n readonly modelsForSelectedProvider_$ = computed((): string[] => {\n return Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n this.localProvider_$(),\n );\n });\n\n /**\n * Thread üzenetek buborék view-modelje (track: listKey = message id).\n */\n readonly consultantBubbleViews_$ = computed((): CCAP_AgentConsoleBubbleView_Interface[] => {\n const t = this.consultant_DS.selectedThread_$();\n if (!t) {\n return [];\n }\n return t.messages.map(\n (m: CCAP_ConsultantMessage_Client_Interface): CCAP_AgentConsoleBubbleView_Interface =>\n Con_MsgToBubbleView_Util.fromMessage(m),\n );\n });\n\n /** Shared input komponensből érkező attachment-ek (küldéshez konvertáljuk). */\n private pendingAttachments: CCAP_PendingAttachment_Interface[] = [];\n\n constructor() {\n super();\n this.addSubscription(this.route.paramMap.pipe(\n map((pm: ParamMap): string => pm.get('threadId') ?? ''),\n ).subscribe((threadId: string): void => {\n if (threadId.length > 0) {\n void this.consultant_DS.loadThreadDetail(threadId);\n } else {\n this.consultant_DS.selectedThread_$.set(null);\n this.consultant_DS.activeThreadId_$.set('');\n }\n }));\n\n effect((): void => {\n const t = this.consultant_DS.selectedThread_$();\n if (t != null) {\n this.localLabel_$.set(t.label);\n this.localProvider_$.set(t.providerInstanceId);\n this.localModel_$.set(t.model);\n }\n }, { allowSignalWrites: true });\n\n void this.consultant_DS.loadPickerOptions();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n handleProviderChange(value: string): void {\n this.localProvider_$.set(value);\n const models: string[] = Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n value,\n );\n const cur: string = this.localModel_$();\n if (!models.includes(cur)) {\n this.localModel_$.set(models[0] ?? '');\n }\n }\n\n async handleApplyConfig(): Promise<void> {\n const threadId: string = this.consultant_DS.activeThreadId_$();\n if (!threadId.length) {\n return;\n }\n await this.consultant_DS.updateThreadConfig({\n threadId: threadId,\n label: this.localLabel_$(),\n providerInstanceId: this.localProvider_$(),\n model: this.localModel_$(),\n });\n }\n\n async handleDeleteThread(): Promise<void> {\n const threadId: string = this.consultant_DS.activeThreadId_$();\n if (!threadId.length) {\n return;\n }\n await this.consultant_DS.deleteThread(threadId);\n void this.router.navigate(['/consultant']);\n }\n\n /**\n * Shared input komponens attachment lista változás.\n */\n handleAttachmentsChanged(attachments: CCAP_PendingAttachment_Interface[]): void {\n this.pendingAttachments = attachments;\n }\n\n /**\n * Voice szegmens transcribe: akkumuláció + auto-send csak isFinal=true esetén.\n */\n handleVoiceSegment(event: { text: string; isFinal: boolean }): void {\n const t: string = event.text.trim();\n if (!t.length) {\n return;\n }\n const current: string = this.composerText_$().trim();\n this.composerText_$.set(current.length > 0 ? `${current} ${t}` : t);\n if (this.voiceInputUi_DS.autoSendAfterVoice_$() && event.isFinal) {\n void this.handleSend();\n }\n }\n\n /**\n * Üzenet küldése — pending attachment-eket consultant API formátumra konvertálja.\n */\n async handleSend(): Promise<void> {\n const threadId: string = this.consultant_DS.activeThreadId_$();\n if (!threadId.length) {\n return;\n }\n const text: string = this.composerText_$().trim();\n const currentAttachments: CCAP_PendingAttachment_Interface[] = [...this.pendingAttachments];\n if (!text.length && !currentAttachments.length) {\n return;\n }\n const attachments: Record<string, unknown>[] = currentAttachments.map(\n (a: CCAP_PendingAttachment_Interface): Record<string, unknown> => ({\n kind: a.isImage ? 'image' : 'textDocument',\n mimeType: a.mimeType,\n fileName: a.fileName,\n dataBase64: a.base64,\n }),\n );\n await this.consultant_DS.sendMessage({\n threadId: threadId,\n text: text,\n allowWebSearch: this.allowWebSearch_$(),\n attachments: attachments,\n });\n this.composerText_$.set('');\n this.pendingAttachments = [];\n this.sessionInputRef?.clearAttachments();\n }\n\n}\n", "@if (!consultant_DS.activeThreadId_$()) {\n <div class=\"flex flex-1 items-center justify-center p-4 text-xs text-neutral-500\">\n Select a thread or create a new consultant chat.\n </div>\n} @else if (consultant_DS.selectedThreadLoading_$()) {\n <div class=\"flex flex-1 items-center justify-center text-xs text-neutral-500\">Loading…</div>\n} @else {\n @if (consultant_DS.selectedThread_$()) {\n <app-s-session-chat-column-layout>\n <div\n sChatColumnHeader\n class=\"flex shrink-0 flex-col gap-2 border-b border-neonDefault bg-ccapSurface p-2\">\n <div class=\"flex flex-wrap items-end gap-2\">\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-500\">Label</span>\n <input\n class=\"w-40 rounded border border-neutral-600 bg-neutral-800 px-2 py-1 text-xs text-neutral-200\"\n [ngModel]=\"localLabel_$()\"\n (ngModelChange)=\"localLabel_$.set($event)\" />\n </div>\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-500\">Provider</span>\n <select\n class=\"w-36 rounded border border-neutral-600 bg-neutral-800 px-2 py-1 text-xs text-neutral-200\"\n [ngModel]=\"localProvider_$()\"\n (ngModelChange)=\"handleProviderChange($event)\">\n @for (p of providerOptions_$(); track p) {\n <option [value]=\"p\">{{ p }}</option>\n }\n </select>\n </div>\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-500\">Model</span>\n <select\n class=\"w-40 rounded border border-neutral-600 bg-neutral-800 px-2 py-1 text-xs text-neutral-200\"\n [ngModel]=\"localModel_$()\"\n (ngModelChange)=\"localModel_$.set($event)\">\n @for (m of modelsForSelectedProvider_$(); track m) {\n <option [value]=\"m\">{{ m }}</option>\n }\n </select>\n </div>\n <button\n type=\"button\"\n class=\"rounded border border-neonDefault px-2 py-1 text-xs text-neutral-300\"\n (click)=\"handleApplyConfig()\">\n Apply\n </button>\n <button\n type=\"button\"\n class=\"ml-auto rounded border border-red-900 px-2 py-1 text-xs text-red-300\"\n (click)=\"handleDeleteThread()\">\n Delete\n </button>\n </div>\n </div>\n\n <div sChatColumnScroll class=\"flex flex-col gap-3 p-3\">\n @for (row of consultantBubbleViews_$(); track row.listKey) {\n <div\n class=\"max-w-[85%]\"\n [class.self-end]=\"row.isUserAligned === true\"\n [class.self-start]=\"row.isUserAligned !== true\">\n <app-s-agent-console-message-bubble [view]=\"row\" />\n </div>\n }\n </div>\n\n <div sChatColumnComposer class=\"flex flex-col\">\n <label class=\"flex cursor-pointer items-center gap-2 px-2 pt-1 text-[10px] text-neutral-400\">\n <input type=\"checkbox\" [ngModel]=\"allowWebSearch_$()\" (ngModelChange)=\"allowWebSearch_$.set($event)\" />\n Allow web search (Brave)\n </label>\n <app-s-session-input\n [draftText]=\"composerText_$()\"\n (draftTextChange)=\"composerText_$.set($event)\"\n [isSending]=\"consultant_DS.sending_$()\"\n [enableAttachments]=\"true\"\n acceptedFileTypes=\"image/png,image/jpeg,image/webp,image/gif,.txt,.md,text/plain,text/markdown\"\n placeholder=\"Message…\"\n [textareaRows]=\"3\"\n (sendRequested)=\"handleSend()\"\n (attachmentsChanged)=\"handleAttachmentsChanged($event)\">\n <app-ccap-voice-record-button\n sInputTextareaAccessory\n [compactLayout]=\"true\"\n (transcriptSegmentReady)=\"handleVoiceSegment($event)\">\n </app-ccap-voice-record-button>\n </app-s-session-input>\n </div>\n </app-s-session-chat-column-layout>\n } @else {\n <div class=\"flex flex-1 items-center justify-center p-4 text-xs text-neutral-500\">\n Thread not loaded.\n </div>\n }\n}\n", "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { CCAP_ErrorDisplay_Component } from '../../_components/ccap-error-display/ccap-error-display.component';\nimport { CCAP_VoiceRecordButton_Component } from '../../_components/ccap-voice-record-button/ccap-voice-record-button.component';\nimport { Shared_Module } from '../shared/shared.module';\nimport { Con_Shell_Component } from './_components/ccap-consultant-shell/con-shell.component';\nimport { Con_Dashboard_Component } from './_components/ccap-consultant-dashboard/con-dashboard.component';\nimport { Con_Detail_Component } from './_components/ccap-consultant-detail/con-detail.component';\n\nconst consultantRoutes: Routes = [\n {\n path: '',\n component: Con_Shell_Component,\n children: [\n { path: '', component: Con_Detail_Component },\n { path: ':threadId', component: Con_Detail_Component },\n ],\n },\n];\n\n/**\n * Consultant POC modul: egyszerű chat, provider/modell, mellékletek.\n */\n@NgModule({\n declarations: [\n Con_Shell_Component,\n Con_Dashboard_Component,\n Con_Detail_Component,\n ],\n imports: [\n CommonModule,\n FormsModule,\n RouterModule.forChild(consultantRoutes),\n CCAP_ErrorDisplay_Component,\n CCAP_VoiceRecordButton_Component,\n Shared_Module,\n ],\n})\n/** Consultant_Module class. */\nexport class Consultant_Module {}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Shr_LocalStoragePersistence_Util } from '../../shared/_collections/utils/storage/shr-local-storage-persistence.util';\n\n/** localStorage prefix a Consultant shell UI állapotához. */\nconst STORAGE_PREFIX: string = 'ccap-consultant';\n\n/**\n * Consultant felület panel/sidebar localStorage — SSOT a host komponensben, prefix izolálva.\n *\n * REQ-UI-MENU-STATE-001 (cycle 447): a metódusok a shared\n * `Shr_LocalStoragePersistence_Util`-ra delegálnak. LocalStorage kulcs-formátum\n * változatlan (`ccap-consultant:*` prefix) — backward-compat.\n */\nexport class Con_InputStorage_Util {\n\n /** Panel nyitott/zárt állapot mentése. */\n static savePanelOpen(panelKey: string, isOpen: boolean): void {\n Shr_LocalStoragePersistence_Util.writeBoolean(`${STORAGE_PREFIX}:panelOpen:${panelKey}`, isOpen);\n }\n\n /** Panel nyitott/zárt állapot betöltése. */\n static loadPanelOpen(panelKey: string, defaultOpen: boolean): boolean {\n return Shr_LocalStoragePersistence_Util.readBoolean(\n `${STORAGE_PREFIX}:panelOpen:${panelKey}`,\n defaultOpen,\n );\n }\n\n /** Panel szélesség mentése (px). */\n static savePanelWidth(panelKey: string, width: number): void {\n Shr_LocalStoragePersistence_Util.writeNumber(`${STORAGE_PREFIX}:panelWidth:${panelKey}`, width);\n }\n\n /** Panel szélesség betöltése (px). */\n static loadPanelWidth(panelKey: string, defaultWidth: number): number {\n return Shr_LocalStoragePersistence_Util.readNumber(\n `${STORAGE_PREFIX}:panelWidth:${panelKey}`,\n defaultWidth,\n );\n }\n}\n", "import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { firstValueFrom } from 'rxjs';\n\nimport { environment } from '../../../../environments/environment';\n\n/**\n * Consultant POC REST API.\n */\n@Injectable({ providedIn: 'root' })\nexport class Consultant_ApiService {\n\n private readonly baseUrl: string = `${environment.api.baseUrl}/consultant`;\n\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Thread lista.\n */\n listThreads(): Promise<{ threads: Record<string, unknown>[] }> {\n return firstValueFrom(\n this.http.get<{ threads: Record<string, unknown>[] }>(this.baseUrl),\n );\n }\n\n /**\n * Picker opciók: Model Registry lista + default pair szerver oldali merge-elve.\n * A response tartalmazza az effektív defaults párost is.\n */\n getPickerOptions(): Promise<{\n entries: Record<string, unknown>[];\n defaults: { providerInstanceId: string; model: string };\n }> {\n return firstValueFrom(\n this.http.get<{\n entries: Record<string, unknown>[];\n defaults: { providerInstanceId: string; model: string };\n }>(`${this.baseUrl}/picker-options`),\n );\n }\n\n /**\n * Új thread.\n */\n createThread(params: {\n label?: string;\n providerInstanceId: string;\n model: string;\n }): Promise<{ thread: Record<string, unknown> }> {\n return firstValueFrom(\n this.http.post<{ thread: Record<string, unknown> }>(this.baseUrl, params),\n );\n }\n\n /**\n * Thread részletek.\n */\n getThread(threadId: string): Promise<{ thread: Record<string, unknown> }> {\n return firstValueFrom(\n this.http.get<{ thread: Record<string, unknown> }>(\n `${this.baseUrl}/${encodeURIComponent(threadId)}`,\n ),\n );\n }\n\n /**\n * Thread meta patch.\n */\n patchThread(params: {\n threadId: string;\n label?: string;\n providerInstanceId?: string;\n model?: string;\n }): Promise<{ thread: Record<string, unknown> }> {\n const body: Record<string, unknown> = {};\n if (params.label != null) {\n body.label = params.label;\n }\n if (params.providerInstanceId != null) {\n body.providerInstanceId = params.providerInstanceId;\n }\n if (params.model != null) {\n body.model = params.model;\n }\n return firstValueFrom(\n this.http.patch<{ thread: Record<string, unknown> }>(\n `${this.baseUrl}/${encodeURIComponent(params.threadId)}`,\n body,\n ),\n );\n }\n\n /**\n * Thread törlés.\n */\n deleteThread(threadId: string): Promise<{ ok: boolean }> {\n return firstValueFrom(\n this.http.delete<{ ok: boolean }>(\n `${this.baseUrl}/${encodeURIComponent(threadId)}`,\n ),\n );\n }\n\n /**\n * Üzenet küldése.\n */\n postMessage(params: {\n threadId: string;\n text: string;\n allowWebSearch: boolean;\n attachments: Record<string, unknown>[];\n }): Promise<Record<string, unknown>> {\n return firstValueFrom(\n this.http.post<Record<string, unknown>>(\n `${this.baseUrl}/${encodeURIComponent(params.threadId)}/messages`,\n {\n text: params.text,\n allowWebSearch: params.allowWebSearch,\n attachments: params.attachments,\n },\n ),\n );\n }\n}\n", "import { inject, Injectable, signal, WritableSignal } from '@angular/core';\n\nimport { Consultant_ApiService } from './consultant.api-service';\nimport {\n CCAP_ConsultantMessage_Client_Interface,\n CCAP_ConsultantThreadDetail_Client_Interface,\n CCAP_ConsultantThreadSummary_Client_Interface,\n} from '../../../_models/interfaces/consultant/ccap-consultant-client.interface';\nimport {\n MRg_ListItem_Response,\n} from '../../ai-systems/_modules/model-registry/_services/mrg-list-item.interface';\nimport { CCAP_GlobalError_ControlService } from '../../../_services/control-services/ccap-global-error.control-service';\n\n/**\n * Consultant POC állapot (SSOT).\n */\n@Injectable({ providedIn: 'root' })\nexport class Consultant_DataService {\n\n private readonly consultant_AS: Consultant_ApiService = inject(Consultant_ApiService);\n private readonly globalError_CS: CCAP_GlobalError_ControlService =\n inject(CCAP_GlobalError_ControlService);\n\n readonly threads_$: WritableSignal<CCAP_ConsultantThreadSummary_Client_Interface[]> =\n signal<CCAP_ConsultantThreadSummary_Client_Interface[]>([]);\n\n readonly threadsLoading_$: WritableSignal<boolean> = signal<boolean>(false);\n readonly threadsError_$: WritableSignal<unknown | null> = signal<unknown | null>(null);\n\n readonly selectedThread_$: WritableSignal<CCAP_ConsultantThreadDetail_Client_Interface | null> =\n signal<CCAP_ConsultantThreadDetail_Client_Interface | null>(null);\n\n readonly selectedThreadLoading_$: WritableSignal<boolean> = signal<boolean>(false);\n readonly selectedThreadError_$: WritableSignal<unknown | null> = signal<unknown | null>(null);\n\n readonly sending_$: WritableSignal<boolean> = signal<boolean>(false);\n\n readonly activeThreadId_$: WritableSignal<string> = signal<string>('');\n\n /** Effektív default provider/model pár (szerver SSOT: SC_Effective). */\n readonly defaults_$: WritableSignal<{ providerInstanceId: string; model: string }> =\n signal<{ providerInstanceId: string; model: string }>({ providerInstanceId: '', model: '' });\n\n /** Picker opciók (registry lista + default pair szerver oldali merge). */\n readonly pickerOptions_$: WritableSignal<MRg_ListItem_Response[]> =\n signal<MRg_ListItem_Response[]>([]);\n\n readonly pickerOptionsLoading_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /**\n * Picker opciók betöltése (registry + default pair szerver oldali merge).\n * A defaults_$ signal-t is frissíti a válasz defaults mezőjéből.\n */\n async loadPickerOptions(): Promise<void> {\n this.pickerOptionsLoading_$.set(true);\n try {\n const res: {\n entries: Record<string, unknown>[];\n defaults: { providerInstanceId: string; model: string };\n } = await this.consultant_AS.getPickerOptions();\n const entries: MRg_ListItem_Response[] = Array.isArray(res.entries)\n ? res.entries.map(Consultant_DataService.parseRegistryEntry).filter(\n (e: MRg_ListItem_Response | null): e is MRg_ListItem_Response => e !== null,\n )\n : [];\n this.pickerOptions_$.set(entries);\n this.defaults_$.set({\n providerInstanceId: typeof res.defaults?.providerInstanceId === 'string'\n ? res.defaults.providerInstanceId : '',\n model: typeof res.defaults?.model === 'string' ? res.defaults.model : '',\n });\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'Consultant_DataService.loadPickerOptions');\n } finally {\n this.pickerOptionsLoading_$.set(false);\n }\n }\n\n /**\n * Thread lista betöltése.\n */\n async loadThreads(): Promise<void> {\n this.threadsLoading_$.set(true);\n this.threadsError_$.set(null);\n try {\n const res: { threads: Record<string, unknown>[] } = await this.consultant_AS.listThreads();\n const rawList: Record<string, unknown>[] = Array.isArray(res.threads) ? res.threads : [];\n const mapped: CCAP_ConsultantThreadSummary_Client_Interface[] = rawList.map(\n (row: Record<string, unknown>): CCAP_ConsultantThreadSummary_Client_Interface => ({\n threadId: typeof row.threadId === 'string' ? row.threadId : '',\n label: typeof row.label === 'string' ? row.label : '',\n providerInstanceId:\n typeof row.providerInstanceId === 'string' ? row.providerInstanceId : '',\n model: typeof row.model === 'string' ? row.model : '',\n messageCount: typeof row.messageCount === 'number' ? row.messageCount : 0,\n updatedAt: typeof row.updatedAt === 'string' ? row.updatedAt : '',\n }),\n );\n this.threads_$.set(mapped);\n } catch (err: unknown) {\n this.threadsError_$.set(err);\n this.globalError_CS.showError(err, 'Consultant_DataService.loadThreads');\n } finally {\n this.threadsLoading_$.set(false);\n }\n }\n\n /**\n * Egy thread részletei.\n */\n async loadThreadDetail(threadId: string): Promise<void> {\n this.activeThreadId_$.set(threadId);\n this.selectedThreadLoading_$.set(true);\n this.selectedThreadError_$.set(null);\n try {\n const res: { thread: Record<string, unknown> } = await this.consultant_AS.getThread(threadId);\n const detail: CCAP_ConsultantThreadDetail_Client_Interface | null =\n Consultant_DataService.parseThreadDetail(res.thread);\n this.selectedThread_$.set(detail);\n } catch (err: unknown) {\n this.selectedThreadError_$.set(err);\n this.globalError_CS.showError(err, 'Consultant_DataService.loadThreadDetail');\n } finally {\n this.selectedThreadLoading_$.set(false);\n }\n }\n\n /**\n * Üzenet küldés + lista frissítés.\n */\n async sendMessage(params: {\n threadId: string;\n text: string;\n allowWebSearch: boolean;\n attachments: Record<string, unknown>[];\n }): Promise<void> {\n this.sending_$.set(true);\n try {\n const res: Record<string, unknown> = await this.consultant_AS.postMessage(params);\n const threadRaw: unknown = res.thread;\n if (Consultant_DataService.isPlainRecord(threadRaw)) {\n const detail: CCAP_ConsultantThreadDetail_Client_Interface | null =\n Consultant_DataService.parseThreadDetail(threadRaw);\n this.selectedThread_$.set(detail);\n }\n await this.loadThreads();\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'Consultant_DataService.sendMessage');\n throw err;\n } finally {\n this.sending_$.set(false);\n }\n }\n\n /**\n * Provider/modell frissítés.\n */\n async updateThreadConfig(params: {\n threadId: string;\n providerInstanceId?: string;\n model?: string;\n label?: string;\n }): Promise<void> {\n try {\n const res: { thread: Record<string, unknown> } = await this.consultant_AS.patchThread(params);\n const detail: CCAP_ConsultantThreadDetail_Client_Interface | null =\n Consultant_DataService.parseThreadDetail(res.thread);\n this.selectedThread_$.set(detail);\n await this.loadThreads();\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'Consultant_DataService.updateThreadConfig');\n throw err;\n }\n }\n\n /**\n * Új thread létrehozása.\n */\n async createThread(params: {\n label?: string;\n providerInstanceId: string;\n model: string;\n }): Promise<string> {\n try {\n const res: { thread: Record<string, unknown> } = await this.consultant_AS.createThread(params);\n const idRaw: unknown = res.thread.threadId;\n const threadId: string = typeof idRaw === 'string' ? idRaw : '';\n await this.loadThreads();\n return threadId;\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'Consultant_DataService.createThread');\n throw err;\n }\n }\n\n /**\n * Thread törlése.\n */\n async deleteThread(threadId: string): Promise<void> {\n try {\n await this.consultant_AS.deleteThread(threadId);\n if (this.activeThreadId_$() === threadId) {\n this.selectedThread_$.set(null);\n this.activeThreadId_$.set('');\n }\n await this.loadThreads();\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'Consultant_DataService.deleteThread');\n throw err;\n }\n }\n\n /**\n * API thread objektum → részletek típus.\n */\n private static parseThreadDetail(\n raw: Record<string, unknown>,\n ): CCAP_ConsultantThreadDetail_Client_Interface | null {\n const threadId: string = typeof raw['threadId'] === 'string' ? raw['threadId'] : '';\n if (!threadId.length) {\n return null;\n }\n const messagesRaw: unknown = raw['messages'];\n const messages: CCAP_ConsultantMessage_Client_Interface[] = [];\n if (Array.isArray(messagesRaw)) {\n for (const m of messagesRaw) {\n if (!Consultant_DataService.isPlainRecord(m)) {\n continue;\n }\n const id: string = typeof m.id === 'string' ? m.id : '';\n const roleRaw: unknown = m.role;\n if (roleRaw !== 'user' && roleRaw !== 'assistant') {\n continue;\n }\n const msg: CCAP_ConsultantMessage_Client_Interface = {\n id: id,\n role: roleRaw,\n };\n if (typeof m.rawUserText === 'string') {\n msg.rawUserText = m.rawUserText;\n }\n if (typeof m.content === 'string') {\n msg.content = m.content;\n }\n const upRaw: unknown = m.userParts;\n if (Array.isArray(upRaw)) {\n const parts: CCAP_ConsultantMessage_Client_Interface['userParts'] = [];\n for (const p of upRaw) {\n if (!Consultant_DataService.isPlainRecord(p)) {\n continue;\n }\n const t: unknown = p.type;\n if (t !== 'text' && t !== 'image_url') {\n continue;\n }\n const part: {\n type: 'text' | 'image_url';\n text?: string;\n imageUrl?: string;\n } = { type: t };\n if (typeof p.text === 'string') {\n part.text = p.text;\n }\n if (typeof p.imageUrl === 'string') {\n part.imageUrl = p.imageUrl;\n }\n parts.push(part);\n }\n msg.userParts = parts;\n }\n messages.push(msg);\n }\n }\n return {\n threadId: threadId,\n label: typeof raw['label'] === 'string' ? raw['label'] : '',\n providerInstanceId:\n typeof raw['providerInstanceId'] === 'string' ? raw['providerInstanceId'] : '',\n model: typeof raw['model'] === 'string' ? raw['model'] : '',\n messages: messages,\n updatedAt: typeof raw['updatedAt'] === 'string' ? raw['updatedAt'] : '',\n };\n }\n\n private static isPlainRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n }\n\n /**\n * Registry entry JSON → típusos `MRg_ListItem_Response`.\n * Csak a picker-hez szükséges mezőket parsoljuk; null ha strukturálisan érvénytelen.\n */\n private static parseRegistryEntry(raw: unknown): MRg_ListItem_Response | null {\n if (!Consultant_DataService.isPlainRecord(raw)) {\n return null;\n }\n const provider: string = typeof raw['provider'] === 'string' ? raw['provider'] : '';\n const modelName: string = typeof raw['modelName'] === 'string' ? raw['modelName'] : '';\n if (!provider.length || !modelName.length) {\n return null;\n }\n const capsRaw: unknown = raw['capabilities'];\n const capabilities: string[] | undefined = Array.isArray(capsRaw)\n ? capsRaw.filter((c: unknown): c is string => typeof c === 'string')\n : undefined;\n return {\n id: typeof raw['id'] === 'string' ? raw['id'] : '',\n provider: provider,\n modelName: modelName,\n enabled: raw['enabled'] === true,\n capabilities: capabilities,\n };\n }\n}\n", "import { MRg_ListItem_Response } from '../../ai-systems/_modules/model-registry/_services/mrg-list-item.interface';\n\n/**\n * Consultant picker provider/model lista util (SSOT: mindenhol ugyanez a logika).\n */\nexport class Con_PickerModel_Util {\n\n /**\n * Egyedi, rendezett provider lista a picker entry-kből.\n */\n static collectSortedProviders(entries: MRg_ListItem_Response[]): string[] {\n const set: Set<string> = new Set<string>();\n for (const e of entries) {\n const prov: string = e.provider.trim();\n if (prov.length > 0) {\n set.add(prov);\n }\n }\n return [...set].sort();\n }\n\n /**\n * Adott providerhez tartozó egyedi, rendezett modellek.\n */\n static collectSortedModelsForProvider(\n entries: MRg_ListItem_Response[],\n provider: string,\n ): string[] {\n const p: string = provider.trim();\n if (!p.length) {\n return [];\n }\n const names: string[] = [];\n for (const e of entries) {\n const mn: string = e.modelName.trim();\n if (e.provider === p && mn.length > 0) {\n names.push(mn);\n }\n }\n return [...new Set(names)].sort();\n }\n}\n", "import { Component, OnInit, inject, signal, computed } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ProviderDisplayLabel_Util } from '../../../../_collections/display/provider-display-label.util';\nimport { Consultant_DataService } from '../../_services/consultant.data-service';\nimport { ModelRegistry_DataService } from '../../../ai-systems/_modules/model-registry/_services/model-registry.data-service';\nimport { MRg_SetupConfig_Type } from '../../../ai-systems/_modules/model-registry/_services/mrg-setup-config.type';\nimport { S_SessionListRowView_Interface } from '../../../shared/_models/interfaces/s-session-list-row-view.interface';\nimport { CCAP_ConsultantThreadSummary_Client_Interface } from '../../../../_models/interfaces/consultant/ccap-consultant-client.interface';\nimport { Con_PickerModel_Util } from '../../_collections/con-picker-model.util';\n\n/**\n * Consultant thread lista + új chat.\n */\n@Component({\n selector: 'app-ccap-consultant-dashboard',\n templateUrl: './con-dashboard.component.html',\n host: { class: 'flex flex-col flex-1 min-h-0 overflow-hidden' },\n})\n/** Con_Dashboard_Component class. */\nexport class Con_Dashboard_Component implements OnInit {\n\n readonly consultant_DS: Consultant_DataService = inject(Consultant_DataService);\n private readonly router: Router = inject(Router);\n private readonly modelRegistry_DS: ModelRegistry_DataService =\n inject(ModelRegistry_DataService);\n\n readonly isCreateOpen_$ = signal<boolean>(false);\n readonly newLabel_$ = signal<string>('');\n readonly newProvider_$ = signal<string>('');\n readonly newModel_$ = signal<string>('');\n readonly isCreating_$ = signal<boolean>(false);\n\n /**\n * Egyedi provider instance id-k a szerveri picker listából.\n */\n readonly providerOptions_$ = computed((): string[] => {\n return Con_PickerModel_Util.collectSortedProviders(this.consultant_DS.pickerOptions_$());\n });\n\n /**\n * Kiválasztott providerhez tartozó modellek.\n */\n readonly modelsForNewProvider_$ = computed((): string[] => {\n return Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n this.newProvider_$(),\n );\n });\n\n /**\n * Provider id → megjelenített címke (display label config-ból).\n */\n readonly providerDisplayLabelsMap_$ = computed((): Record<string, string> => {\n const config: MRg_SetupConfig_Type = this.modelRegistry_DS.setupConfigForRegistry_$();\n const providers: string[] = this.providerOptions_$();\n const m: Record<string, string> = {};\n for (const p of providers) {\n if (m[p] == null) {\n m[p] = ProviderDisplayLabel_Util.getProviderDisplayLabel(p, config);\n }\n }\n return m;\n });\n\n /**\n * Thread lista sorokhoz: ismert providerInstanceId → display label.\n */\n readonly threadProviderDisplayLabels_$ = computed((): Record<string, string> => {\n const config: MRg_SetupConfig_Type = this.modelRegistry_DS.setupConfigForRegistry_$();\n const ids: Set<string> = new Set<string>();\n for (const t of this.consultant_DS.threads_$()) {\n const id: string = t.providerInstanceId.trim();\n if (id.length > 0) {\n ids.add(id);\n }\n }\n for (const p of this.providerOptions_$()) {\n ids.add(p);\n }\n const m: Record<string, string> = {};\n for (const id of ids) {\n m[id] = ProviderDisplayLabel_Util.getProviderDisplayLabel(id, config);\n }\n return m;\n });\n\n /** Thread lista → shared list row view model mapping. */\n readonly threadRowViews_$ = computed((): S_SessionListRowView_Interface[] =>\n this.consultant_DS.threads_$().map(\n (t: CCAP_ConsultantThreadSummary_Client_Interface): S_SessionListRowView_Interface => ({\n id: t.threadId,\n label: t.label || t.threadId,\n status: '',\n statusColorClass: 'bg-neutral-600',\n isArchived: false,\n lastActivityAt: t.updatedAt,\n isRunning: false,\n }),\n ),\n );\n\n // ── Context menu state ──────────────────────────────────────\n\n /** Kontextmenü thread-je (null = zárt). */\n readonly ctxMenuThread_$ = signal<CCAP_ConsultantThreadSummary_Client_Interface | null>(null);\n\n /** Kontextmenü pozíció. */\n readonly ctxMenuPos_$ = signal<{ x: number; y: number }>({ x: 0, y: 0 });\n\n ngOnInit(): void {\n void this.consultant_DS.loadThreads();\n void this.consultant_DS.loadPickerOptions();\n void this.modelRegistry_DS.loadSetupConfigForRegistry();\n }\n\n /**\n * Navigálás a kiválasztott consultant thread-re.\n */\n handleSelectThread(threadId: string): void {\n void this.router.navigate(['/consultant', threadId]);\n }\n\n /**\n * Modál megnyitás: friss picker opciók + szerveri defaults pre-selection.\n */\n async handleOpenCreate(): Promise<void> {\n await this.consultant_DS.loadPickerOptions();\n const defaults: { providerInstanceId: string; model: string } = this.consultant_DS.defaults_$();\n const providers: string[] = this.providerOptions_$();\n if (defaults.providerInstanceId.length > 0 && providers.includes(defaults.providerInstanceId)) {\n const models: string[] = Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n defaults.providerInstanceId,\n );\n if (defaults.model.length > 0 && models.includes(defaults.model)) {\n this.newProvider_$.set(defaults.providerInstanceId);\n this.newModel_$.set(defaults.model);\n } else {\n this.newProvider_$.set(defaults.providerInstanceId);\n this.newModel_$.set(models[0] ?? '');\n }\n } else {\n const firstP: string = providers[0] ?? '';\n this.newProvider_$.set(firstP);\n const fallbackModels: string[] = Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n firstP,\n );\n this.newModel_$.set(fallbackModels[0] ?? '');\n }\n this.newLabel_$.set('');\n this.isCreateOpen_$.set(true);\n }\n\n /**\n * Új thread modál bezárása.\n */\n handleCloseCreate(): void {\n this.isCreateOpen_$.set(false);\n }\n\n /**\n * Provider váltás — modell lista első elemére állítás.\n */\n handleProviderChange(value: string): void {\n this.newProvider_$.set(value);\n const models: string[] = Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n value,\n );\n this.newModel_$.set(models[0] ?? '');\n }\n\n /**\n * Új consultant thread létrehozása a kiválasztott provider/model párossal.\n */\n async handleCreateThread(): Promise<void> {\n const provider: string = this.newProvider_$().trim();\n const model: string = this.newModel_$().trim();\n if (!provider.length || !model.length) {\n return;\n }\n this.isCreating_$.set(true);\n try {\n const label: string = this.newLabel_$().trim();\n const id: string = await this.consultant_DS.createThread({\n label: label.length > 0 ? label : undefined,\n providerInstanceId: provider,\n model: model,\n });\n this.isCreateOpen_$.set(false);\n if (id.length > 0) {\n void this.router.navigate(['/consultant', id]);\n }\n } finally {\n this.isCreating_$.set(false);\n }\n }\n\n // ── Context menu handlers ────────────────────────────────────\n\n /** Shared list row contextMenu output kezelése. */\n handleRowContextMenu(payload: { event: MouseEvent; id: string }): void {\n const thread: CCAP_ConsultantThreadSummary_Client_Interface | undefined =\n this.consultant_DS.threads_$().find(\n (t: CCAP_ConsultantThreadSummary_Client_Interface): boolean => t.threadId === payload.id,\n );\n if (!thread) {\n return;\n }\n this.ctxMenuThread_$.set(thread);\n this.ctxMenuPos_$.set({ x: payload.event.clientX, y: payload.event.clientY });\n }\n\n /** Kontextmenü bezárása. */\n handleCloseCtxMenu(): void {\n this.ctxMenuThread_$.set(null);\n }\n\n /** Delete a kontextmenüből. */\n async handleCtxDelete(): Promise<void> {\n const thread: CCAP_ConsultantThreadSummary_Client_Interface | null = this.ctxMenuThread_$();\n if (!thread) {\n return;\n }\n this.handleCloseCtxMenu();\n try {\n await this.consultant_DS.deleteThread(thread.threadId);\n void this.router.navigate(['/consultant']);\n } catch {\n // Hibát a data service kezeli\n }\n }\n}\n", "<div class=\"flex flex-col flex-1 min-h-0\">\n <div class=\"shrink-0 p-2 border-b border-neonDefault flex items-center gap-2\">\n <span class=\"text-xs font-semibold text-neutral-300 flex-1 truncate\">Consultant</span>\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border border-neonDefault text-neutral-300 hover:bg-neutral-700 rounded transition-colors\"\n (click)=\"handleOpenCreate()\">\n + New\n </button>\n </div>\n\n <div class=\"flex-1 overflow-y-auto\">\n @if (consultant_DS.threadsLoading_$()) {\n <div class=\"p-3 text-xs text-neutral-500\">Loading...</div>\n } @else if (threadRowViews_$().length) {\n @for (row of threadRowViews_$(); track row.id) {\n <app-s-session-info-card\n [view]=\"row\"\n [isActive]=\"consultant_DS.activeThreadId_$() === row.id\"\n (selected)=\"handleSelectThread($event)\"\n (contextMenu)=\"handleRowContextMenu($event)\" />\n }\n } @else {\n <div class=\"p-4 text-center text-neutral-500 text-xs\">No threads</div>\n }\n </div>\n</div>\n\n@if (isCreateOpen_$()) {\n <div class=\"fixed inset-0 z-40 flex items-center justify-center bg-black/60 p-4\" (click)=\"handleCloseCreate()\">\n <div\n class=\"w-full max-w-md rounded-lg border border-neonDefault bg-neutral-900 p-4 shadow-xl\"\n (click)=\"$event.stopPropagation()\">\n <h3 class=\"text-sm font-semibold text-neutral-200 mb-3\">New consultant thread</h3>\n <div class=\"flex flex-col gap-2 text-xs\">\n <label class=\"text-neutral-400\">Label (optional)</label>\n <input\n class=\"w-full px-2 py-1 rounded bg-neutral-800 border border-neutral-600 text-neutral-200\"\n [ngModel]=\"newLabel_$()\"\n (ngModelChange)=\"newLabel_$.set($event)\" />\n\n <label class=\"text-neutral-400\">Provider</label>\n <select\n class=\"w-full px-2 py-1 rounded bg-neutral-800 border border-neutral-600 text-neutral-200\"\n [ngModel]=\"newProvider_$()\"\n (ngModelChange)=\"handleProviderChange($event)\">\n @for (p of providerOptions_$(); track p) {\n <option [value]=\"p\">{{ providerDisplayLabelsMap_$()[p] || p }}</option>\n }\n </select>\n\n <label class=\"text-neutral-400\">Model</label>\n <select\n class=\"w-full px-2 py-1 rounded bg-neutral-800 border border-neutral-600 text-neutral-200\"\n [ngModel]=\"newModel_$()\"\n (ngModelChange)=\"newModel_$.set($event)\">\n @for (m of modelsForNewProvider_$(); track m) {\n <option [value]=\"m\">{{ m }}</option>\n }\n </select>\n </div>\n <div class=\"flex justify-end gap-2 mt-4\">\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border border-neutral-600 text-neutral-400 rounded\"\n (click)=\"handleCloseCreate()\">\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border border-neonDefault text-neutral-200 rounded disabled:opacity-40\"\n [disabled]=\"isCreating_$() || !newProvider_$().trim() || !newModel_$().trim()\"\n (click)=\"handleCreateThread()\">\n Create\n </button>\n </div>\n </div>\n </div>\n}\n\n<!-- Context menu overlay -->\n@if (ctxMenuThread_$(); as ctxThread) {\n <div class=\"fixed inset-0 z-40\" (click)=\"handleCloseCtxMenu()\"></div>\n <div class=\"fixed z-50 min-w-[140px] bg-neutral-900 border border-neutral-700 rounded-lg shadow-xl py-1 text-xs\"\n [style.left.px]=\"ctxMenuPos_$().x\"\n [style.top.px]=\"ctxMenuPos_$().y\">\n <button\n class=\"w-full text-left px-3 py-1.5 text-red-400 hover:bg-red-500/10 transition-colors\"\n (click)=\"handleCtxDelete()\">\n Delete\n </button>\n </div>\n}\n", "import { Component, OnInit, signal } from '@angular/core';\n\nimport { Con_InputStorage_Util } from '../../_collections/con-input-storage.util';\nimport {\n SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX,\n SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX,\n SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX,\n} from '../../../shared/_collections/consts/session-detail-panel-layout.const';\nimport { SHR_DocumentPointerDrag_Util } from '../../../shared/_collections/utils/shr-document-pointer-drag.util';\n\n/**\n * Consultant POC shell: resizable bal lista + router-outlet (OC/CC session minta).\n */\n@Component({\n selector: 'app-ccap-consultant-shell',\n templateUrl: './con-shell.component.html',\n host: { class: 'flex min-h-0 w-full flex-1 flex-col overflow-hidden' },\n})\n/** Con_Shell_Component class. */\nexport class Con_Shell_Component implements OnInit {\n\n /** Bal sidebar szélessége (px). */\n readonly sidebarWidth_$ = signal<number>(SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX);\n\n /** Sidebar látható. */\n readonly isSidebarOpen_$ = signal<boolean>(true);\n\n /** Resize közben select-none a root-on. */\n readonly isResizing_$ = signal<boolean>(false);\n\n ngOnInit(): void {\n const stored: number = Con_InputStorage_Util.loadPanelWidth(\n 'sidebar',\n SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX,\n );\n this.sidebarWidth_$.set(\n Math.max(\n SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX,\n Math.min(SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX, stored),\n ),\n );\n this.isSidebarOpen_$.set(Con_InputStorage_Util.loadPanelOpen('sidebar', true));\n }\n\n /**\n * Sidebar resize drag indítása.\n */\n handleSidebarResizeStart(event: PointerEvent): void {\n const startX: number = event.clientX;\n const startWidth: number = this.sidebarWidth_$();\n this.isResizing_$.set(true);\n SHR_DocumentPointerDrag_Util.attachUntilPointerUp({\n startEvent: event,\n onMove: (e: PointerEvent): void => {\n const delta: number = e.clientX - startX;\n const newWidth: number = Math.max(\n SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX,\n Math.min(SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX, startWidth + delta),\n );\n this.sidebarWidth_$.set(newWidth);\n },\n onEnd: (): void => {\n this.isResizing_$.set(false);\n Con_InputStorage_Util.savePanelWidth('sidebar', this.sidebarWidth_$());\n },\n });\n }\n\n /**\n * Sidebar ki/be — állapot mentése.\n */\n handleToggleSidebar(): void {\n this.isSidebarOpen_$.update((v: boolean): boolean => !v);\n Con_InputStorage_Util.savePanelOpen('sidebar', this.isSidebarOpen_$());\n }\n}\n", "<div class=\"flex min-h-0 w-full flex-1 flex-col overflow-hidden\" [class.select-none]=\"isResizing_$()\">\n <app-s-session-shell-toolbar>\n <div sSessionToolbarLeft class=\"flex items-center gap-1 min-w-0\">\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border border-neonDefault text-neutral-300 hover:bg-neutral-700 rounded transition-colors flex items-center gap-1 shrink-0\"\n (click)=\"handleToggleSidebar()\">\n <svg\n class=\"w-3 h-3 shrink-0 transition-transform duration-150\"\n [class.rotate-90]=\"isSidebarOpen_$()\"\n [class.-rotate-90]=\"!isSidebarOpen_$()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n Consultant\n </button>\n </div>\n <div sSessionToolbarCenter class=\"min-w-0\"></div>\n <div sSessionToolbarRight class=\"min-w-0\"></div>\n </app-s-session-shell-toolbar>\n\n <app-s-resizable-session-shell-layout\n [isSidebarOpen]=\"isSidebarOpen_$()\"\n [sidebarWidthPx]=\"sidebarWidth_$()\"\n [isResizing]=\"isResizing_$()\"\n (sidebarResizeStart)=\"handleSidebarResizeStart($event)\">\n <div sSessionShellSidebar class=\"flex flex-col overflow-hidden h-full\">\n <app-ccap-consultant-dashboard />\n </div>\n <div\n sSessionShellMain\n class=\"flex min-h-0 flex-1 flex-col overflow-hidden [&>router-outlet]:contents\">\n <router-outlet />\n </div>\n </app-s-resizable-session-shell-layout>\n</div>\n", "import { CCAP_AgentConsoleBubbleKind_Type } from '../../../_enums/shared/ccap-agent-console-bubble-kind.enum';\nimport { CCAP_AgentConsoleBubbleView_Interface } from '../../../_models/interfaces/shared/ccap-agent-console-bubble-view.interface';\nimport { CCAP_ConsultantMessage_Client_Interface } from '../../../_models/interfaces/consultant/ccap-consultant-client.interface';\n\n/**\n * Consultant üzenet → közös buborék view-model.\n */\nexport class Con_MsgToBubbleView_Util {\n\n /**\n * Consultant thread üzenet mapelése.\n */\n static fromMessage(msg: CCAP_ConsultantMessage_Client_Interface): CCAP_AgentConsoleBubbleView_Interface {\n const isUser: boolean = msg.role === 'user';\n const bodyText: string = isUser\n ? Con_MsgToBubbleView_Util.buildUserBodyText(msg)\n : (msg.content ?? '');\n return {\n listKey: msg.id,\n kind: isUser ? CCAP_AgentConsoleBubbleKind_Type.userPrompt : CCAP_AgentConsoleBubbleKind_Type.assistant,\n bodyText: bodyText,\n isUserAligned: isUser,\n flags: {\n showCopy: true,\n showRawInfo: false,\n useEditDiffForExpandable: false,\n },\n };\n }\n\n /**\n * User sor: nyers szöveg + több userPart esetén attachment jelölés (régi detail megjelenítés).\n */\n private static buildUserBodyText(msg: CCAP_ConsultantMessage_Client_Interface): string {\n const raw: string = (msg.rawUserText ?? '').trim();\n const hasParts: boolean = (msg.userParts?.length ?? 0) > 1;\n if (hasParts) {\n return raw.length > 0 ? `${raw}\\n[attachments]` : '[attachments]';\n }\n if (raw.length > 0) {\n return raw;\n }\n return msg.content ?? '';\n }\n}\n", "import {\n Component,\n computed,\n effect,\n inject,\n OnDestroy,\n signal,\n ViewChild,\n WritableSignal,\n} from '@angular/core';\nimport { ActivatedRoute, ParamMap, Router } from '@angular/router';\n\nimport { map } from 'rxjs';\n\nimport { DyNX_SubscriptionControl } from '@futdevpro/ngx-dynamo';\n\nimport { Consultant_DataService } from '../../_services/consultant.data-service';\nimport { VNP_InputUi_DataService } from '../../../dev/_modules/poc/_modules/voice-notes-poc/_services/vnp-input-ui.data-service';\nimport {\n S_SessionInput_Component,\n} from '../../../shared/_components/session-ui/s-session-input/s-session-input.component';\nimport { Con_PickerModel_Util } from '../../_collections/con-picker-model.util';\nimport {\n CCAP_PendingAttachment_Interface,\n} from '../../../../_models/interfaces/session/ccap-pending-attachment.interface';\nimport {\n CCAP_ConsultantMessage_Client_Interface,\n} from '../../../../_models/interfaces/consultant/ccap-consultant-client.interface';\nimport { CCAP_AgentConsoleBubbleView_Interface } from '../../../../_models/interfaces/shared/ccap-agent-console-bubble-view.interface';\nimport { Con_MsgToBubbleView_Util } from '../../_collections/con-msg-to-bubble-view.util';\n\n/**\n * Consultant chat részletek: üzenetek, composer, modellváltás.\n */\n@Component({\n selector: 'app-ccap-consultant-detail',\n templateUrl: './con-detail.component.html',\n host: { class: 'flex flex-col flex-1 min-h-0 overflow-hidden' },\n})\n/** Con_Detail_Component class. */\nexport class Con_Detail_Component extends DyNX_SubscriptionControl implements OnDestroy {\n\n readonly consultant_DS: Consultant_DataService = inject(Consultant_DataService);\n private readonly route: ActivatedRoute = inject(ActivatedRoute);\n private readonly router: Router = inject(Router);\n private readonly voiceInputUi_DS: VNP_InputUi_DataService =\n inject(VNP_InputUi_DataService);\n\n /** Shared session input komponens referencia (clearAttachments küldés után). */\n @ViewChild(S_SessionInput_Component) private sessionInputRef: S_SessionInput_Component | undefined;\n\n readonly composerText_$: WritableSignal<string> = signal<string>('');\n readonly allowWebSearch_$: WritableSignal<boolean> = signal<boolean>(false);\n\n readonly localLabel_$: WritableSignal<string> = signal<string>('');\n readonly localProvider_$: WritableSignal<string> = signal<string>('');\n readonly localModel_$: WritableSignal<string> = signal<string>('');\n\n /**\n * Provider opciók a szerveri picker listából (SSOT: data service).\n */\n readonly providerOptions_$ = computed((): string[] => {\n return Con_PickerModel_Util.collectSortedProviders(this.consultant_DS.pickerOptions_$());\n });\n\n /**\n * Model lista a kiválasztott providerhez (SSOT: shared util, template-ben nincs method hívás).\n */\n readonly modelsForSelectedProvider_$ = computed((): string[] => {\n return Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n this.localProvider_$(),\n );\n });\n\n /**\n * Thread üzenetek buborék view-modelje (track: listKey = message id).\n */\n readonly consultantBubbleViews_$ = computed((): CCAP_AgentConsoleBubbleView_Interface[] => {\n const t = this.consultant_DS.selectedThread_$();\n if (!t) {\n return [];\n }\n return t.messages.map(\n (m: CCAP_ConsultantMessage_Client_Interface): CCAP_AgentConsoleBubbleView_Interface =>\n Con_MsgToBubbleView_Util.fromMessage(m),\n );\n });\n\n /** Shared input komponensből érkező attachment-ek (küldéshez konvertáljuk). */\n private pendingAttachments: CCAP_PendingAttachment_Interface[] = [];\n\n constructor() {\n super();\n this.addSubscription(this.route.paramMap.pipe(\n map((pm: ParamMap): string => pm.get('threadId') ?? ''),\n ).subscribe((threadId: string): void => {\n if (threadId.length > 0) {\n void this.consultant_DS.loadThreadDetail(threadId);\n } else {\n this.consultant_DS.selectedThread_$.set(null);\n this.consultant_DS.activeThreadId_$.set('');\n }\n }));\n\n effect((): void => {\n const t = this.consultant_DS.selectedThread_$();\n if (t != null) {\n this.localLabel_$.set(t.label);\n this.localProvider_$.set(t.providerInstanceId);\n this.localModel_$.set(t.model);\n }\n }, { allowSignalWrites: true });\n\n void this.consultant_DS.loadPickerOptions();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n handleProviderChange(value: string): void {\n this.localProvider_$.set(value);\n const models: string[] = Con_PickerModel_Util.collectSortedModelsForProvider(\n this.consultant_DS.pickerOptions_$(),\n value,\n );\n const cur: string = this.localModel_$();\n if (!models.includes(cur)) {\n this.localModel_$.set(models[0] ?? '');\n }\n }\n\n async handleApplyConfig(): Promise<void> {\n const threadId: string = this.consultant_DS.activeThreadId_$();\n if (!threadId.length) {\n return;\n }\n await this.consultant_DS.updateThreadConfig({\n threadId: threadId,\n label: this.localLabel_$(),\n providerInstanceId: this.localProvider_$(),\n model: this.localModel_$(),\n });\n }\n\n async handleDeleteThread(): Promise<void> {\n const threadId: string = this.consultant_DS.activeThreadId_$();\n if (!threadId.length) {\n return;\n }\n await this.consultant_DS.deleteThread(threadId);\n void this.router.navigate(['/consultant']);\n }\n\n /**\n * Shared input komponens attachment lista változás.\n */\n handleAttachmentsChanged(attachments: CCAP_PendingAttachment_Interface[]): void {\n this.pendingAttachments = attachments;\n }\n\n /**\n * Voice szegmens transcribe: akkumuláció + auto-send csak isFinal=true esetén.\n */\n handleVoiceSegment(event: { text: string; isFinal: boolean }): void {\n const t: string = event.text.trim();\n if (!t.length) {\n return;\n }\n const current: string = this.composerText_$().trim();\n this.composerText_$.set(current.length > 0 ? `${current} ${t}` : t);\n if (this.voiceInputUi_DS.autoSendAfterVoice_$() && event.isFinal) {\n void this.handleSend();\n }\n }\n\n /**\n * Üzenet küldése — pending attachment-eket consultant API formátumra konvertálja.\n */\n async handleSend(): Promise<void> {\n const threadId: string = this.consultant_DS.activeThreadId_$();\n if (!threadId.length) {\n return;\n }\n const text: string = this.composerText_$().trim();\n const currentAttachments: CCAP_PendingAttachment_Interface[] = [...this.pendingAttachments];\n if (!text.length && !currentAttachments.length) {\n return;\n }\n const attachments: Record<string, unknown>[] = currentAttachments.map(\n (a: CCAP_PendingAttachment_Interface): Record<string, unknown> => ({\n kind: a.isImage ? 'image' : 'textDocument',\n mimeType: a.mimeType,\n fileName: a.fileName,\n dataBase64: a.base64,\n }),\n );\n await this.consultant_DS.sendMessage({\n threadId: threadId,\n text: text,\n allowWebSearch: this.allowWebSearch_$(),\n attachments: attachments,\n });\n this.composerText_$.set('');\n this.pendingAttachments = [];\n this.sessionInputRef?.clearAttachments();\n }\n\n}\n", "@if (!consultant_DS.activeThreadId_$()) {\n <div class=\"flex flex-1 items-center justify-center p-4 text-xs text-neutral-500\">\n Select a thread or create a new consultant chat.\n </div>\n} @else if (consultant_DS.selectedThreadLoading_$()) {\n <div class=\"flex flex-1 items-center justify-center text-xs text-neutral-500\">Loading…</div>\n} @else {\n @if (consultant_DS.selectedThread_$()) {\n <app-s-session-chat-column-layout>\n <div\n sChatColumnHeader\n class=\"flex shrink-0 flex-col gap-2 border-b border-neonDefault bg-ccapSurface p-2\">\n <div class=\"flex flex-wrap items-end gap-2\">\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-500\">Label</span>\n <input\n class=\"w-40 rounded border border-neutral-600 bg-neutral-800 px-2 py-1 text-xs text-neutral-200\"\n [ngModel]=\"localLabel_$()\"\n (ngModelChange)=\"localLabel_$.set($event)\" />\n </div>\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-500\">Provider</span>\n <select\n class=\"w-36 rounded border border-neutral-600 bg-neutral-800 px-2 py-1 text-xs text-neutral-200\"\n [ngModel]=\"localProvider_$()\"\n (ngModelChange)=\"handleProviderChange($event)\">\n @for (p of providerOptions_$(); track p) {\n <option [value]=\"p\">{{ p }}</option>\n }\n </select>\n </div>\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-500\">Model</span>\n <select\n class=\"w-40 rounded border border-neutral-600 bg-neutral-800 px-2 py-1 text-xs text-neutral-200\"\n [ngModel]=\"localModel_$()\"\n (ngModelChange)=\"localModel_$.set($event)\">\n @for (m of modelsForSelectedProvider_$(); track m) {\n <option [value]=\"m\">{{ m }}</option>\n }\n </select>\n </div>\n <button\n type=\"button\"\n class=\"rounded border border-neonDefault px-2 py-1 text-xs text-neutral-300\"\n (click)=\"handleApplyConfig()\">\n Apply\n </button>\n <button\n type=\"button\"\n class=\"ml-auto rounded border border-red-900 px-2 py-1 text-xs text-red-300\"\n (click)=\"handleDeleteThread()\">\n Delete\n </button>\n </div>\n </div>\n\n <div sChatColumnScroll class=\"flex flex-col gap-3 p-3\">\n @for (row of consultantBubbleViews_$(); track row.listKey) {\n <div\n class=\"max-w-[85%]\"\n [class.self-end]=\"row.isUserAligned === true\"\n [class.self-start]=\"row.isUserAligned !== true\">\n <app-s-agent-console-message-bubble [view]=\"row\" />\n </div>\n }\n </div>\n\n <div sChatColumnComposer class=\"flex flex-col\">\n <label class=\"flex cursor-pointer items-center gap-2 px-2 pt-1 text-[10px] text-neutral-400\">\n <input type=\"checkbox\" [ngModel]=\"allowWebSearch_$()\" (ngModelChange)=\"allowWebSearch_$.set($event)\" />\n Allow web search (Brave)\n </label>\n <app-s-session-input\n [draftText]=\"composerText_$()\"\n (draftTextChange)=\"composerText_$.set($event)\"\n [isSending]=\"consultant_DS.sending_$()\"\n [enableAttachments]=\"true\"\n acceptedFileTypes=\"image/png,image/jpeg,image/webp,image/gif,.txt,.md,text/plain,text/markdown\"\n placeholder=\"Message…\"\n [textareaRows]=\"3\"\n (sendRequested)=\"handleSend()\"\n (attachmentsChanged)=\"handleAttachmentsChanged($event)\">\n <app-ccap-voice-record-button\n sInputTextareaAccessory\n [compactLayout]=\"true\"\n (transcriptSegmentReady)=\"handleVoiceSegment($event)\">\n </app-ccap-voice-record-button>\n </app-s-session-input>\n </div>\n </app-s-session-chat-column-layout>\n } @else {\n <div class=\"flex flex-1 items-center justify-center p-4 text-xs text-neutral-500\">\n Thread not loaded.\n </div>\n }\n}\n", "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { CCAP_ErrorDisplay_Component } from '../../_components/ccap-error-display/ccap-error-display.component';\nimport { CCAP_VoiceRecordButton_Component } from '../../_components/ccap-voice-record-button/ccap-voice-record-button.component';\nimport { Shared_Module } from '../shared/shared.module';\nimport { Con_Shell_Component } from './_components/ccap-consultant-shell/con-shell.component';\nimport { Con_Dashboard_Component } from './_components/ccap-consultant-dashboard/con-dashboard.component';\nimport { Con_Detail_Component } from './_components/ccap-consultant-detail/con-detail.component';\n\nconst consultantRoutes: Routes = [\n {\n path: '',\n component: Con_Shell_Component,\n children: [\n { path: '', component: Con_Detail_Component },\n { path: ':threadId', component: Con_Detail_Component },\n ],\n },\n];\n\n/**\n * Consultant POC modul: egyszerű chat, provider/modell, mellékletek.\n */\n@NgModule({\n declarations: [\n Con_Shell_Component,\n Con_Dashboard_Component,\n Con_Detail_Component,\n ],\n imports: [\n CommonModule,\n FormsModule,\n RouterModule.forChild(consultantRoutes),\n CCAP_ErrorDisplay_Component,\n CCAP_VoiceRecordButton_Component,\n Shared_Module,\n ],\n})\n/** Consultant_Module class. */\nexport class Consultant_Module {}\n"],
5
+ "mappings": "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",
6
6
  "names": ["STORAGE_PREFIX", "Con_InputStorage_Util", "savePanelOpen", "panelKey", "isOpen", "Shr_LocalStoragePersistence_Util", "writeBoolean", "loadPanelOpen", "defaultOpen", "readBoolean", "savePanelWidth", "width", "writeNumber", "loadPanelWidth", "defaultWidth", "readNumber", "Consultant_ApiService", "baseUrl", "environment", "api", "http", "inject", "HttpClient", "listThreads", "firstValueFrom", "get", "getPickerOptions", "createThread", "params", "post", "getThread", "threadId", "encodeURIComponent", "patchThread", "body", "label", "providerInstanceId", "model", "patch", "deleteThread", "delete", "postMessage", "text", "allowWebSearch", "attachments", "factory", "\u0275fac", "providedIn", "Consultant_DataService", "consultant_AS", "inject", "Consultant_ApiService", "globalError_CS", "CCAP_GlobalError_ControlService", "threads_$", "signal", "threadsLoading_$", "threadsError_$", "selectedThread_$", "selectedThreadLoading_$", "selectedThreadError_$", "sending_$", "activeThreadId_$", "defaults_$", "providerInstanceId", "model", "pickerOptions_$", "pickerOptionsLoading_$", "loadPickerOptions", "__async", "set", "res", "getPickerOptions", "entries", "Array", "isArray", "map", "parseRegistryEntry", "filter", "e", "defaults", "err", "showError", "loadThreads", "listThreads", "mapped", "threads", "row", "threadId", "label", "messageCount", "updatedAt", "loadThreadDetail", "getThread", "detail", "parseThreadDetail", "thread", "sendMessage", "params", "threadRaw", "postMessage", "isPlainRecord", "updateThreadConfig", "patchThread", "createThread", "idRaw", "deleteThread", "raw", "length", "messagesRaw", "messages", "m", "id", "roleRaw", "role", "msg", "rawUserText", "content", "upRaw", "userParts", "parts", "p", "t", "type", "part", "text", "imageUrl", "push", "value", "provider", "modelName", "capsRaw", "capabilities", "c", "undefined", "enabled", "factory", "\u0275fac", "providedIn", "Con_PickerModel_Util", "collectSortedProviders", "entries", "set", "Set", "e", "prov", "provider", "trim", "length", "add", "sort", "collectSortedModelsForProvider", "p", "names", "mn", "modelName", "push", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleSelectThread", "handleRowContextMenu", "\u0275\u0275property", "row_r3", "consultant_DS", "activeThreadId_$", "id", "\u0275\u0275repeaterCreate", "Con_Dashboard_Component_Conditional_8_For_1_Template", "_forTrack0", "\u0275\u0275repeater", "threadRowViews_$", "p_r5", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "providerDisplayLabelsMap_$", "m_r6", "_r4", "handleCloseCreate", "i0", "stopPropagation", "newLabel_$", "set", "handleProviderChange", "Con_Dashboard_Component_Conditional_10_For_12_Template", "\u0275\u0275repeaterTrackByIdentity", "newModel_$", "Con_Dashboard_Component_Conditional_10_For_17_Template", "handleCreateThread", "newProvider_$", "providerOptions_$", "modelsForNewProvider_$", "isCreating_$", "trim", "_r7", "handleCloseCtxMenu", "handleCtxDelete", "\u0275\u0275styleProp", "ctxMenuPos_$", "x", "y", "Con_Dashboard_Component", "inject", "Consultant_DataService", "router", "Router", "modelRegistry_DS", "ModelRegistry_DataService", "isCreateOpen_$", "signal", "computed", "Con_PickerModel_Util", "collectSortedProviders", "pickerOptions_$", "collectSortedModelsForProvider", "config", "setupConfigForRegistry_$", "providers", "m", "p", "ProviderDisplayLabel_Util", "getProviderDisplayLabel", "threadProviderDisplayLabels_$", "ids", "Set", "t", "threads_$", "providerInstanceId", "length", "add", "map", "threadId", "label", "status", "statusColorClass", "isArchived", "lastActivityAt", "updatedAt", "isRunning", "ctxMenuThread_$", "ngOnInit", "loadThreads", "loadPickerOptions", "loadSetupConfigForRegistry", "navigate", "handleOpenCreate", "__async", "defaults", "defaults_$", "includes", "models", "model", "firstP", "fallbackModels", "value", "provider", "createThread", "undefined", "payload", "thread", "find", "event", "clientX", "clientY", "deleteThread", "selectors", "hostAttrs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "Con_Dashboard_Component_Conditional_7_Template", "Con_Dashboard_Component_Conditional_8_Template", "Con_Dashboard_Component_Conditional_9_Template", "Con_Dashboard_Component_Conditional_10_Template", "Con_Dashboard_Component_Conditional_11_Template", "\u0275\u0275conditional", "threadsLoading_$", "tmp_2_0", "Con_Shell_Component", "sidebarWidth_$", "signal", "SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX", "isSidebarOpen_$", "isResizing_$", "ngOnInit", "stored", "Con_InputStorage_Util", "loadPanelWidth", "set", "Math", "max", "SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX", "min", "SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX", "loadPanelOpen", "handleSidebarResizeStart", "event", "startX", "clientX", "startWidth", "SHR_DocumentPointerDrag_Util", "attachUntilPointerUp", "startEvent", "onMove", "e", "delta", "newWidth", "onEnd", "savePanelWidth", "handleToggleSidebar", "update", "v", "savePanelOpen", "selectors", "hostAttrs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275element", "\u0275\u0275elementEnd", "\u0275\u0275text", "$event", "\u0275\u0275classProp", "\u0275\u0275advance", "\u0275\u0275property", "Con_MsgToBubbleView_Util", "fromMessage", "msg", "isUser", "role", "bodyText", "buildUserBodyText", "content", "listKey", "id", "kind", "CCAP_AgentConsoleBubbleKind_Type", "userPrompt", "assistant", "isUserAligned", "flags", "showCopy", "showRawInfo", "useEditDiffForExpandable", "raw", "rawUserText", "trim", "userParts", "length", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "p_r3", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "m_r4", "\u0275\u0275element", "\u0275\u0275classProp", "row_r5", "isUserAligned", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "localLabel_$", "set", "handleProviderChange", "\u0275\u0275repeaterCreate", "Con_Detail_Component_Conditional_2_Conditional_0_For_12_Template", "\u0275\u0275repeaterTrackByIdentity", "localModel_$", "Con_Detail_Component_Conditional_2_Conditional_0_For_18_Template", "handleApplyConfig", "handleDeleteThread", "Con_Detail_Component_Conditional_2_Conditional_0_For_25_Template", "_forTrack0", "allowWebSearch_$", "composerText_$", "handleSend", "handleAttachmentsChanged", "handleVoiceSegment", "localProvider_$", "\u0275\u0275repeater", "providerOptions_$", "modelsForSelectedProvider_$", "consultantBubbleViews_$", "consultant_DS", "sending_$", "\u0275\u0275template", "Con_Detail_Component_Conditional_2_Conditional_0_Template", "Con_Detail_Component_Conditional_2_Conditional_1_Template", "\u0275\u0275conditional", "selectedThread_$", "Con_Detail_Component", "DyNX_SubscriptionControl", "inject", "Consultant_DataService", "route", "ActivatedRoute", "router", "Router", "voiceInputUi_DS", "VNP_InputUi_DataService", "sessionInputRef", "signal", "computed", "Con_PickerModel_Util", "collectSortedProviders", "pickerOptions_$", "collectSortedModelsForProvider", "t", "messages", "map", "m", "Con_MsgToBubbleView_Util", "fromMessage", "pendingAttachments", "constructor", "addSubscription", "paramMap", "pipe", "pm", "get", "subscribe", "threadId", "length", "loadThreadDetail", "activeThreadId_$", "effect", "label", "providerInstanceId", "model", "allowSignalWrites", "loadPickerOptions", "ngOnDestroy", "value", "models", "cur", "includes", "__async", "updateThreadConfig", "deleteThread", "navigate", "attachments", "event", "text", "trim", "current", "autoSendAfterVoice_$", "isFinal", "currentAttachments", "a", "kind", "isImage", "mimeType", "fileName", "dataBase64", "base64", "sendMessage", "allowWebSearch", "clearAttachments", "selectors", "viewQuery", "rf", "ctx", "S_SessionInput_Component", "Con_Detail_Component_Conditional_0_Template", "Con_Detail_Component_Conditional_1_Template", "Con_Detail_Component_Conditional_2_Template", "selectedThreadLoading_$", "consultantRoutes", "path", "component", "Con_Shell_Component", "children", "Con_Detail_Component", "Consultant_Module", "CommonModule", "FormsModule", "RouterModule", "forChild", "CCAP_ErrorDisplay_Component", "CCAP_VoiceRecordButton_Component", "Shared_Module"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{a as B}from"./chunk-EHUUQ4OK.js";import"./chunk-QPQEQKWT.js";import"./chunk-BB7FGQZ6.js";import"./chunk-JUK4XI7S.js";import{$a as A,C as v,D as b,E as S,Fa as i,G as E,Ha as c,Ia as w,Kb as D,Ta as $,Z as r,aa as h,ab as I,da as p,ga as _,hb as T,k as f,la as s,mb as k,oa as y,pa as F,qa as o,ra as n,ub as u,va as x,wa as m,z as g}from"./chunk-TBMJSIBB.js";var R={respond:"bg-green-500/20 text-green-400","status-update":"bg-blue-500/20 text-blue-400",stop:"bg-neutral-500/20 text-neutral-400","request-user-interaction":"bg-yellow-500/20 text-yellow-400"},M="bg-neutral-700/20 text-neutral-500",P=(()=>{class e{transform(t){return t?R[t]??M:M}static \u0275fac=function(a){return new(a||e)};static \u0275pipe=E({name:"ccapCoordinatorActionBadge",type:e,pure:!0,standalone:!0})}return e})();var K=(e,l)=>l._id;function O(e,l){e&1&&(o(0,"div",13),i(1," Loading coordinators... "),n())}function z(e,l){e&1&&(o(0,"div",14),i(1," Nincs koordin\xE1tor session. "),n())}function G(e,l){if(e&1&&i(0),e&2){let t=m(2).$implicit;c(" \xB7 WF: ",t.workflowId," ")}}function q(e,l){if(e&1&&(o(0,"div",22),i(1),p(2,G,1,1),n()),e&2){let t=m().$implicit;r(),w(" ",t.providerName,":",t.model," "),r(),s(t.workflowId?2:-1)}}function V(e,l){if(e&1&&(o(0,"span",24),A(1,"ccapCoordinatorActionBadge"),i(2),n()),e&2){let t=m().$implicit;_("ngClass",I(1,2,t.decisions[t.decisions.length-1].action)),r(2),c(" ",t.decisions[t.decisions.length-1].action," ")}}function W(e,l){if(e&1&&(o(0,"div",25),i(1),n()),e&2){let t=m().$implicit;r(),c(" ",t.decisions[t.decisions.length-1].reasoning," ")}}function H(e,l){if(e&1&&(o(0,"div",26),i(1),n()),e&2){let t=m().$implicit;r(),c(" Pause reason: ",t.pauseReason," ")}}function J(e,l){if(e&1&&(o(0,"div",16)(1,"div",17)(2,"div",18)(3,"span",19),i(4),n(),o(5,"div",20)(6,"div",21),i(7),n(),p(8,q,3,3,"div",22),n()(),o(9,"div",23)(10,"span",6),i(11),n(),p(12,V,3,4,"span",24),n()(),p(13,W,2,1,"div",25)(14,H,2,1,"div",26),n()),e&2){let t=l.$implicit,a=m(2);r(3),_("ngClass",a.getStatusBadgeClass(t.status)),r(),c(" ",t.status," "),r(3),c(" Session: ",t.sessionId," "),r(),s(t.providerName||t.model?8:-1),r(3),c(" ",t.totalStepCount," steps "),r(),s(t.decisions&&t.decisions.length>0?12:-1),r(),s(t.decisions&&t.decisions.length>0?13:-1),r(),s(t.pauseReason?14:-1)}}function Q(e,l){if(e&1&&(o(0,"div",15),y(1,J,15,8,"div",16,K),n()),e&2){let t=m();r(),F(t.filteredCoordinators_$())}}var C=(()=>{class e{coordinator_DS=v(B);statusFilter_$=h("");filteredCoordinators_$=T(()=>{let t=this.statusFilter_$(),a=this.coordinator_DS.globalCoordinatorsList_$();return t?a.filter(d=>d.status===t):a});ngOnInit(){this.loadCoordinators()}loadCoordinators(){return f(this,null,function*(){yield this.coordinator_DS.loadAllCoordinatorsForManagementPage()})}handleFilterChange(t){let a=t.target;!a||!("value"in a)||this.statusFilter_$.set(String(a.value))}getStatusBadgeClass(t){switch(t){case"active":return"bg-green-500/20 text-green-400";case"paused":return"bg-yellow-500/20 text-yellow-400";case"completed":return"bg-neutral-500/20 text-neutral-400";case"failed":return"bg-red-500/20 text-red-400";default:return"bg-neutral-700/20 text-neutral-500"}}static \u0275fac=function(a){return new(a||e)};static \u0275cmp=b({type:e,selectors:[["app-ccap-coordinator"]],standalone:!0,features:[$],decls:28,vars:4,consts:[[1,"max-w-5xl","mx-auto","p-4","gt-xs:p-6","text-neutral-100"],[1,"flex","items-center","justify-between","mb-6"],[1,"text-2xl","font-bold"],[1,"text-neutral-400","text-sm","mt-1"],[1,"px-3","py-1.5","text-xs","border","border-neutral-600","text-neutral-300","rounded","hover:bg-neutral-800","transition-colors",3,"click"],[1,"flex","items-center","gap-3","mb-4"],[1,"text-xs","text-neutral-500"],[1,"bg-neutral-800","border","border-neutral-600","rounded","px-2","py-1","text-xs","text-neutral-200","outline-none","focus:border-neonDefault",3,"change"],["value",""],["value","active"],["value","paused"],["value","completed"],["value","failed"],[1,"text-center","py-8","text-neutral-500","text-sm"],[1,"rounded-lg","border","border-neutral-700","bg-ccapSurface/50","p-8","text-center","text-neutral-500","text-sm"],[1,"space-y-2"],[1,"rounded-lg","border","border-neutral-700","bg-ccapSurface/50","p-4","hover:border-neutral-600","transition-colors"],[1,"flex","items-center","justify-between","gap-4"],[1,"flex","items-center","gap-3","min-w-0"],[1,"text-xs","px-2","py-0.5","rounded","shrink-0",3,"ngClass"],[1,"min-w-0"],[1,"text-sm","text-neutral-200","truncate"],[1,"text-xs","text-neutral-500","mt-0.5"],[1,"flex","items-center","gap-3","shrink-0"],[1,"text-xs","px-1.5","py-0.5","rounded",3,"ngClass"],[1,"text-xs","text-neutral-400","mt-2","truncate"],[1,"text-xs","text-yellow-400/80","mt-1"]],template:function(a,d){a&1&&(o(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),i(4,"Koordin\xE1tor"),n(),o(5,"p",3),i(6," Koordin\xE1tor session-\xF6k kezel\xE9se \u2014 workflow-alap\xFA agent vez\xE9rl\xE9s. "),n()(),o(7,"button",4),x("click",function(){return d.loadCoordinators()}),i(8," Refresh "),n()(),o(9,"div",5)(10,"span",6),i(11,"Filter:"),n(),o(12,"select",7),x("change",function(j){return d.handleFilterChange(j)}),o(13,"option",8),i(14,"All"),n(),o(15,"option",9),i(16,"Active"),n(),o(17,"option",10),i(18,"Paused"),n(),o(19,"option",11),i(20,"Completed"),n(),o(21,"option",12),i(22,"Failed"),n()(),o(23,"span",6),i(24),n()(),p(25,O,2,0,"div",13)(26,z,2,0,"div",14)(27,Q,3,0,"div",15),n()),a&2&&(r(24),c(" ",d.filteredCoordinators_$().length," coordinator(s) "),r(),s(d.coordinator_DS.globalCoordinatorsListLoading_$()?25:-1),r(),s(!d.coordinator_DS.globalCoordinatorsListLoading_$()&&d.filteredCoordinators_$().length===0?26:-1),r(),s(!d.coordinator_DS.globalCoordinatorsListLoading_$()&&d.filteredCoordinators_$().length>0?27:-1))},dependencies:[u,k,P],encapsulation:2})}return e})();var U=[{path:"",pathMatch:"full",component:C}],st=(()=>{class e{static \u0275fac=function(a){return new(a||e)};static \u0275mod=S({type:e});static \u0275inj=g({imports:[u,D.forChild(U),C]})}return e})();export{st as Coordinator_Module};
2
- //# sourceMappingURL=crd.module-WGQKKE3M.js.map
1
+ import{a as B}from"./chunk-2QKSYFBS.js";import"./chunk-UHRVQGRT.js";import"./chunk-HOPBJ2PM.js";import"./chunk-RZY5FFKY.js";import{$a as A,C as v,D as b,E as S,Fa as i,G as E,Ha as c,Ia as w,Kb as D,Ta as $,Z as r,aa as h,ab as I,da as p,ga as _,hb as T,k as f,la as s,mb as k,oa as y,pa as F,qa as o,ra as n,ub as u,va as x,wa as m,z as g}from"./chunk-TBMJSIBB.js";var R={respond:"bg-green-500/20 text-green-400","status-update":"bg-blue-500/20 text-blue-400",stop:"bg-neutral-500/20 text-neutral-400","request-user-interaction":"bg-yellow-500/20 text-yellow-400"},M="bg-neutral-700/20 text-neutral-500",P=(()=>{class e{transform(t){return t?R[t]??M:M}static \u0275fac=function(a){return new(a||e)};static \u0275pipe=E({name:"ccapCoordinatorActionBadge",type:e,pure:!0,standalone:!0})}return e})();var K=(e,l)=>l._id;function O(e,l){e&1&&(o(0,"div",13),i(1," Loading coordinators... "),n())}function z(e,l){e&1&&(o(0,"div",14),i(1," Nincs koordin\xE1tor session. "),n())}function G(e,l){if(e&1&&i(0),e&2){let t=m(2).$implicit;c(" \xB7 WF: ",t.workflowId," ")}}function q(e,l){if(e&1&&(o(0,"div",22),i(1),p(2,G,1,1),n()),e&2){let t=m().$implicit;r(),w(" ",t.providerName,":",t.model," "),r(),s(t.workflowId?2:-1)}}function V(e,l){if(e&1&&(o(0,"span",24),A(1,"ccapCoordinatorActionBadge"),i(2),n()),e&2){let t=m().$implicit;_("ngClass",I(1,2,t.decisions[t.decisions.length-1].action)),r(2),c(" ",t.decisions[t.decisions.length-1].action," ")}}function W(e,l){if(e&1&&(o(0,"div",25),i(1),n()),e&2){let t=m().$implicit;r(),c(" ",t.decisions[t.decisions.length-1].reasoning," ")}}function H(e,l){if(e&1&&(o(0,"div",26),i(1),n()),e&2){let t=m().$implicit;r(),c(" Pause reason: ",t.pauseReason," ")}}function J(e,l){if(e&1&&(o(0,"div",16)(1,"div",17)(2,"div",18)(3,"span",19),i(4),n(),o(5,"div",20)(6,"div",21),i(7),n(),p(8,q,3,3,"div",22),n()(),o(9,"div",23)(10,"span",6),i(11),n(),p(12,V,3,4,"span",24),n()(),p(13,W,2,1,"div",25)(14,H,2,1,"div",26),n()),e&2){let t=l.$implicit,a=m(2);r(3),_("ngClass",a.getStatusBadgeClass(t.status)),r(),c(" ",t.status," "),r(3),c(" Session: ",t.sessionId," "),r(),s(t.providerName||t.model?8:-1),r(3),c(" ",t.totalStepCount," steps "),r(),s(t.decisions&&t.decisions.length>0?12:-1),r(),s(t.decisions&&t.decisions.length>0?13:-1),r(),s(t.pauseReason?14:-1)}}function Q(e,l){if(e&1&&(o(0,"div",15),y(1,J,15,8,"div",16,K),n()),e&2){let t=m();r(),F(t.filteredCoordinators_$())}}var C=(()=>{class e{coordinator_DS=v(B);statusFilter_$=h("");filteredCoordinators_$=T(()=>{let t=this.statusFilter_$(),a=this.coordinator_DS.globalCoordinatorsList_$();return t?a.filter(d=>d.status===t):a});ngOnInit(){this.loadCoordinators()}loadCoordinators(){return f(this,null,function*(){yield this.coordinator_DS.loadAllCoordinatorsForManagementPage()})}handleFilterChange(t){let a=t.target;!a||!("value"in a)||this.statusFilter_$.set(String(a.value))}getStatusBadgeClass(t){switch(t){case"active":return"bg-green-500/20 text-green-400";case"paused":return"bg-yellow-500/20 text-yellow-400";case"completed":return"bg-neutral-500/20 text-neutral-400";case"failed":return"bg-red-500/20 text-red-400";default:return"bg-neutral-700/20 text-neutral-500"}}static \u0275fac=function(a){return new(a||e)};static \u0275cmp=b({type:e,selectors:[["app-ccap-coordinator"]],standalone:!0,features:[$],decls:28,vars:4,consts:[[1,"max-w-5xl","mx-auto","p-4","gt-xs:p-6","text-neutral-100"],[1,"flex","items-center","justify-between","mb-6"],[1,"text-2xl","font-bold"],[1,"text-neutral-400","text-sm","mt-1"],[1,"px-3","py-1.5","text-xs","border","border-neutral-600","text-neutral-300","rounded","hover:bg-neutral-800","transition-colors",3,"click"],[1,"flex","items-center","gap-3","mb-4"],[1,"text-xs","text-neutral-500"],[1,"bg-neutral-800","border","border-neutral-600","rounded","px-2","py-1","text-xs","text-neutral-200","outline-none","focus:border-neonDefault",3,"change"],["value",""],["value","active"],["value","paused"],["value","completed"],["value","failed"],[1,"text-center","py-8","text-neutral-500","text-sm"],[1,"rounded-lg","border","border-neutral-700","bg-ccapSurface/50","p-8","text-center","text-neutral-500","text-sm"],[1,"space-y-2"],[1,"rounded-lg","border","border-neutral-700","bg-ccapSurface/50","p-4","hover:border-neutral-600","transition-colors"],[1,"flex","items-center","justify-between","gap-4"],[1,"flex","items-center","gap-3","min-w-0"],[1,"text-xs","px-2","py-0.5","rounded","shrink-0",3,"ngClass"],[1,"min-w-0"],[1,"text-sm","text-neutral-200","truncate"],[1,"text-xs","text-neutral-500","mt-0.5"],[1,"flex","items-center","gap-3","shrink-0"],[1,"text-xs","px-1.5","py-0.5","rounded",3,"ngClass"],[1,"text-xs","text-neutral-400","mt-2","truncate"],[1,"text-xs","text-yellow-400/80","mt-1"]],template:function(a,d){a&1&&(o(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),i(4,"Koordin\xE1tor"),n(),o(5,"p",3),i(6," Koordin\xE1tor session-\xF6k kezel\xE9se \u2014 workflow-alap\xFA agent vez\xE9rl\xE9s. "),n()(),o(7,"button",4),x("click",function(){return d.loadCoordinators()}),i(8," Refresh "),n()(),o(9,"div",5)(10,"span",6),i(11,"Filter:"),n(),o(12,"select",7),x("change",function(j){return d.handleFilterChange(j)}),o(13,"option",8),i(14,"All"),n(),o(15,"option",9),i(16,"Active"),n(),o(17,"option",10),i(18,"Paused"),n(),o(19,"option",11),i(20,"Completed"),n(),o(21,"option",12),i(22,"Failed"),n()(),o(23,"span",6),i(24),n()(),p(25,O,2,0,"div",13)(26,z,2,0,"div",14)(27,Q,3,0,"div",15),n()),a&2&&(r(24),c(" ",d.filteredCoordinators_$().length," coordinator(s) "),r(),s(d.coordinator_DS.globalCoordinatorsListLoading_$()?25:-1),r(),s(!d.coordinator_DS.globalCoordinatorsListLoading_$()&&d.filteredCoordinators_$().length===0?26:-1),r(),s(!d.coordinator_DS.globalCoordinatorsListLoading_$()&&d.filteredCoordinators_$().length>0?27:-1))},dependencies:[u,k,P],encapsulation:2})}return e})();var U=[{path:"",pathMatch:"full",component:C}],st=(()=>{class e{static \u0275fac=function(a){return new(a||e)};static \u0275mod=S({type:e});static \u0275inj=g({imports:[u,D.forChild(U),C]})}return e})();export{st as Coordinator_Module};
2
+ //# sourceMappingURL=crd.module-XJ435KXN.js.map
@@ -1,2 +1,2 @@
1
- import{a as V}from"./chunk-6NBGNC3H.js";import{a as x,b as f}from"./chunk-6Y7O2W4H.js";import{d as W}from"./chunk-W2SLMCXE.js";import"./chunk-QV3SDDFJ.js";import{a as O}from"./chunk-Q2NVIOCY.js";import{a as U}from"./chunk-J32YRK3S.js";import"./chunk-V3VQWJQL.js";import{k as b}from"./chunk-67F7P6KL.js";import"./chunk-5UPNU54P.js";import"./chunk-BB7FGQZ6.js";import{p as tt}from"./chunk-JUK4XI7S.js";import{C as S,D as N,E as R,Fa as o,Ga as c,Ha as p,Hb as B,J as D,K as y,Kb as G,Z as l,aa as h,da as d,ga as g,h as Z,hb as k,ia as I,k as F,la as s,na as z,oa as v,pa as E,qa as i,ra as n,sa as u,ua as T,ub as j,va as $,wa as _,y as P,z as M}from"./chunk-TBMJSIBB.js";var J=Z(tt());var K=(()=>{class t{status_$=h(null);statusLoading_$=h(!1);statusLoadError_$=h(null);serverStatus_AS=S(V);loadStatus(){return F(this,null,function*(){this.statusLoading_$.set(!0),this.statusLoadError_$.set(null);try{let e=yield this.serverStatus_AS.getStatus();return this.status_$.set(e),e}catch(e){return J.DyFM_Error.logSimple("CCAP_ServerStatusDS | Failed to load status",e),this.statusLoadError_$.set(e),null}finally{this.statusLoading_$.set(!1)}})}getCachedStatus(){return this.status_$()}static \u0275fac=function(r){return new(r||t)};static \u0275prov=P({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var et=(t,a)=>a.name,nt=(t,a)=>a._id,it=(t,a)=>a.sessionId;function ot(t,a){if(t&1){let e=T();i(0,"button",6),$("click",function(){D(e);let m=_();return y(m.loadStatus())}),o(1," Friss\xEDt\xE9s "),n()}}function at(t,a){t&1&&(i(0,"div",5)(1,"p",7),o(2,"Bet\xF6lt\xE9s\u2026"),n()())}function lt(t,a){if(t&1){let e=T();i(0,"div",8),u(1,"app-ccap-error-display",9),i(2,"div",10)(3,"button",11),$("click",function(){D(e);let m=_(2);return y(m.loadStatus())}),o(4," \xDAjrapr\xF3b\xE1l\xE1s "),n()()()}if(t&2){let e=_(2);l(),g("error",e.serverStatus_DS.statusLoadError_$())}}function rt(t,a){t&1&&(i(0,"p",15),o(1,"Nincs enged\xE9lyezett messaging provider (Setup \u2192 enged\xE9lyez\xE9s)."),n())}function _t(t,a){t&1&&(i(0,"span",29),o(1," working "),n())}function st(t,a){if(t&1&&(i(0,"span",31),o(1),n()),t&2){let e=_(2).$implicit;g("title",e.error),l(),c(e.error)}}function dt(t,a){if(t&1&&(i(0,"span",30),o(1," disconnected "),n(),d(2,st,2,2,"span",31)),t&2){let e=_().$implicit;l(2),s(e.error?2:-1)}}function mt(t,a){if(t&1&&(i(0,"li",27)(1,"span",28),o(2),n(),d(3,_t,2,0,"span",29)(4,dt,3,1),n()),t&2){let e=a.$implicit,r=_(5);l(2),c(r.MESSAGING_PROVIDER_NAMES[e.name]),l(),s(e.connected?3:4)}}function ct(t,a){if(t&1&&(i(0,"ul",16),v(1,mt,5,2,"li",27,et),n()),t&2){let e=_();l(),E(e.messagingProviders)}}function ut(t,a){t&1&&(i(0,"p",15),o(1,"Nincs enged\xE9lyezett LLM provider (Setup \u2192 enged\xE9lyez\xE9s)."),n())}function pt(t,a){if(t&1&&(i(0,"li",27)(1,"span",28),o(2),n(),i(3,"span",29),o(4," enged\xE9lyezve "),n()()),t&2){let e=a.$implicit,r=_(5);l(2),c(r.llmProviderDisplayLabelsMap_$()[e])}}function Ct(t,a){if(t&1&&(i(0,"ul",16),v(1,pt,5,1,"li",27,z),n()),t&2){let e=_();l(),E(e.llmProviders)}}function xt(t,a){if(t&1&&(i(0,"p",21)(1,"span",32),o(2),n(),o(3," akt\xEDv az elm\xFAlt 24 \xF3r\xE1ban "),n()),t&2){let e=_();l(2),c(e.sessionSummary.recentActivityCount)}}function ft(t,a){if(t&1&&(i(0,"p",22),u(1,"span",33),i(2,"span",34),o(3),n(),i(4,"span",7),o(5," r\xF6gz\xEDtett hiba a legut\xF3bbi 24 \xF3r\xE1ban "),n()()),t&2){let e=_();l(),I("bg-red-500",e.lastErrorCount>0)("bg-green-500",e.lastErrorCount===0),l(),I("text-red-300",e.lastErrorCount>0)("text-green-300",e.lastErrorCount===0),l(),p(" ",e.lastErrorCount," ")}}function St(t,a){t&1&&(i(0,"p",15),o(1,"Bet\xF6lt\xE9s\u2026"),n())}function vt(t,a){t&1&&(i(0,"p",15),o(1,"Nem siker\xFClt bet\xF6lteni az instance adatokat."),n())}function Et(t,a){if(t&1&&(i(0,"div",36),u(1,"span",45),i(2,"span",38),o(3),n(),i(4,"span",15),o(5,"inactive"),n()()),t&2){let e=_(5);l(3),c(e.instanceSummary_$().inactiveCount)}}function ht(t,a){if(t&1&&(i(0,"div",36),u(1,"span",46),i(2,"span",38),o(3),n(),i(4,"span",15),o(5,"maintenance"),n()()),t&2){let e=_(5);l(3),c(e.instanceSummary_$().maintenanceCount)}}function gt(t,a){if(t&1&&(i(0,"span",40),o(1),n()),t&2){let e=_(5);l(),p("",e.instanceSummary_$().workingSessionCount," working")}}function bt(t,a){if(t&1&&(i(0,"span",41),o(1),n()),t&2){let e=_(5);l(),p("",e.instanceSummary_$().idleSessionCount," idle")}}function Dt(t,a){if(t&1&&(i(0,"span",42),o(1),n()),t&2){let e=_(5);l(),p("",e.instanceSummary_$().offlineSessionCount," offline")}}function yt(t,a){t&1&&(i(0,"span",43),o(1,"nincs session adat"),n())}function It(t,a){t&1&&(i(0,"p",15),o(1,"Nincs regisztr\xE1lt instance."),n())}function Tt(t,a){t&1&&(i(0,"span",29),o(1,"Active"),n())}function $t(t,a){t&1&&(i(0,"span",50),o(1,"Inactive"),n())}function kt(t,a){t&1&&(i(0,"span",30),o(1,"Maintenance"),n())}function wt(t,a){t&1&&u(0,"span",55)}function Ht(t,a){t&1&&u(0,"span",56)}function Lt(t,a){t&1&&u(0,"span",57)}function At(t,a){if(t&1&&(i(0,"p",60),o(1),n()),t&2){let e=_().$implicit;l(),c(e.activitySummary)}}function Ft(t,a){if(t&1&&(i(0,"div",54),d(1,wt,1,0,"span",55)(2,Ht,1,0,"span",56)(3,Lt,1,0,"span",57),i(4,"span",58),o(5),n(),i(6,"span",59),o(7),n()(),d(8,At,2,1,"p",60)),t&2){let e,r=a.$implicit,m=_(8);l(),s((e=r.presence)==="working"?1:e==="idle"?2:3),l(4),p(" ",r.sessionName||r.sessionId," "),l(2),c(m.PRESENCE_LABELS[r.presence]),l(),s(r.activitySummary?8:-1)}}function Pt(t,a){if(t&1&&(i(0,"div",52),v(1,Ft,9,4,null,null,it),n()),t&2){let e=_().$implicit;l(),E(e.sessionStatuses)}}function Mt(t,a){t&1&&(i(0,"p",53),o(1,"Nincs session adat"),n())}function Nt(t,a){if(t&1&&(i(0,"div",47)(1,"div",48)(2,"span",49),o(3),n(),d(4,Tt,2,0,"span",29)(5,$t,2,0,"span",50)(6,kt,2,0,"span",30),n(),i(7,"span",51),o(8),n(),d(9,Pt,3,0,"div",52)(10,Mt,2,0,"p",53),n()),t&2){let e,r=a.$implicit;l(3),p(" ",r.name||r.ccapId," "),l(),s((e=r.status)==="active"?4:e==="inactive"?5:e==="maintenance"?6:-1),l(3),g("title",r.ccapId),l(),p(" ",r.ccapId," "),l(),s(r.sessionStatuses&&r.sessionStatuses.length>0?9:10)}}function Rt(t,a){if(t&1&&(i(0,"div",44),v(1,Nt,11,5,"div",47,nt),n()),t&2){let e=_(5);l(),E(e.runtimeInstances_DS.ccapInstanceList_$())}}function zt(t,a){if(t&1&&(i(0,"div",35)(1,"div",36)(2,"span",19),o(3),n(),i(4,"span",21),o(5,"instance"),n()(),i(6,"div",36),u(7,"span",37),i(8,"span",38),o(9),n(),i(10,"span",15),o(11,"active"),n()(),d(12,Et,6,1,"div",36)(13,ht,6,1,"div",36),i(14,"div",39)(15,"span",21),o(16,"Sessions:"),n(),d(17,gt,2,1,"span",40)(18,bt,2,1,"span",41)(19,Dt,2,1,"span",42)(20,yt,2,0,"span",43),n()(),d(21,It,2,0,"p",15)(22,Rt,3,0,"div",44)),t&2){let e=_(4);l(3),c(e.instanceSummary_$().totalCount),l(6),c(e.instanceSummary_$().activeCount),l(3),s(e.instanceSummary_$().inactiveCount?12:-1),l(),s(e.instanceSummary_$().maintenanceCount?13:-1),l(4),s(e.instanceSummary_$().workingSessionCount?17:-1),l(),s(e.instanceSummary_$().idleSessionCount?18:-1),l(),s(e.instanceSummary_$().offlineSessionCount?19:-1),l(),s(!e.instanceSummary_$().workingSessionCount&&!e.instanceSummary_$().idleSessionCount&&!e.instanceSummary_$().offlineSessionCount?20:-1),l(),s(e.runtimeInstances_DS.ccapInstanceList_$().length===0?21:22)}}function jt(t,a){if(t&1&&(i(0,"div",12)(1,"section",13)(2,"h2",14),o(3,"Messaging provider-ek"),n(),d(4,rt,2,0,"p",15)(5,ct,3,0,"ul",16),n(),i(6,"section",13)(7,"h2",14),o(8,"LLM provider-ek"),n(),d(9,ut,2,0,"p",15)(10,Ct,3,0,"ul",16),n(),i(11,"section",13)(12,"h2",14),o(13,"Session \xF6sszes\xEDt\u0151"),n(),i(14,"div",17)(15,"p",18)(16,"span",19),o(17),n(),i(18,"span",20),o(19,"session"),n()(),d(20,xt,4,1,"p",21)(21,ft,6,9,"p",22),n()(),i(22,"section",23)(23,"h2",14),o(24,"Instance \xE1ttekint\u0151"),n(),d(25,St,2,0,"p",15)(26,vt,2,0,"p",15)(27,zt,23,9),n(),i(28,"section",13)(29,"h2",14),o(30,"Gyors linkek"),n(),i(31,"div",24)(32,"a",25),o(33," Open Sessions "),n(),i(34,"a",26),o(35," Be\xE1ll\xEDt\xE1sok "),n()()()()),t&2){let e=a,r=_(3);l(4),s(e.messagingProviders.length===0?4:5),l(5),s(e.llmProviders.length===0?9:10),l(8),c(e.sessionSummary.totalCount),l(3),s(e.sessionSummary.recentActivityCount!==void 0?20:-1),l(),s(e.lastErrorCount!==void 0&&e.lastErrorCount!==null?21:-1),l(4),s(r.runtimeInstances_DS.ccapInstanceListLoading_$()?25:r.runtimeInstances_DS.ccapInstanceListError_$()?26:27)}}function Bt(t,a){if(t&1&&d(0,jt,36,6,"div",12),t&2){let e,r=_(2);s((e=r.serverStatus_DS.status_$())?0:-1,e)}}function Gt(t,a){if(t&1&&d(0,lt,5,1,"div",8)(1,Bt,1,1),t&2){let e=_();s(e.serverStatus_DS.statusLoadError_$()?0:1)}}var Vt={"ccap-client":"CCAP Client","ccap-cli":"CCAP CLI",discord:"Discord"},Ot={[x.active]:"Active",[x.inactive]:"Inactive",[x.maintenance]:"Maintenance"},Ut={[f.working]:"Working",[f.idle]:"Idle",[f.offline]:"Offline"},Q=(()=>{class t{title="CCAP Revisioned";serverStatus_DS=S(K);runtimeInstances_DS=S(W);MESSAGING_PROVIDER_NAMES=Vt;INSTANCE_STATUS_LABELS=Ot;PRESENCE_LABELS=Ut;instanceSummary_$=k(()=>{let e=this.runtimeInstances_DS.ccapInstanceList_$(),r=e.length,m=e.filter(C=>C.status===x.active).length,X=e.filter(C=>C.status===x.inactive).length,Y=e.filter(C=>C.status===x.maintenance).length,w=0,H=0,L=0;for(let C of e)for(let A of C.sessionStatuses??[])A.presence===f.working?w++:A.presence===f.idle?H++:L++;return{totalCount:r,activeCount:m,inactiveCount:X,maintenanceCount:Y,workingSessionCount:w,idleSessionCount:H,offlineSessionCount:L}});llmProviderDisplayLabelsMap_$=k(()=>{let e=this.serverStatus_DS.status_$();if(!e)return{};let r={};for(let m of e.llmProviders)r[m]=U.getProviderDisplayLabel(m,null);return r});ngOnInit(){this.serverStatus_DS.loadStatus(),this.runtimeInstances_DS.loadCcapInstanceList()}loadStatus(){this.serverStatus_DS.loadStatus(),this.runtimeInstances_DS.loadCcapInstanceList()}static \u0275fac=function(r){return new(r||t)};static \u0275cmp=N({type:t,selectors:[["app-ccap-home"]],decls:10,vars:3,consts:[[1,"flex","flex-col","min-h-full","text-neutral-100","p-4","gt-xs:p-6"],[1,"flex","flex-col","xs:flex-row","xs:items-center","xs:justify-between","gap-4","mb-6"],[1,"text-2xl","gt-xs:text-3xl","font-bold","text-neutral-100"],[1,"text-neutral-400","text-sm","gt-xs:text-base","mt-1"],["type","button",1,"shrink-0","px-4","py-2","border","border-neonCyan","rounded-lg","text-neutral-400","text-sm","font-medium","hover:bg-neutral-800","hover:text-neutral-200","hover:shadow-neon-glow-cyan","transition-colors"],[1,"flex","items-center","justify-center","py-16"],["type","button",1,"shrink-0","px-4","py-2","border","border-neonCyan","rounded-lg","text-neutral-400","text-sm","font-medium","hover:bg-neutral-800","hover:text-neutral-200","hover:shadow-neon-glow-cyan","transition-colors",3,"click"],[1,"text-neutral-400"],[1,"rounded-lg","bg-neutral-800/60","border","border-red-500/50","p-6","max-w-2xl"],["sourceLabelOverride","St\xE1tusz bet\xF6lt\xE9s",1,"mb-4","block",3,"error"],[1,"text-center"],["type","button",1,"px-4","py-2","border","border-neonCyan","rounded-lg","text-neutral-300","text-sm","font-medium","hover:bg-neutral-700","hover:shadow-neon-glow-cyan","transition-colors",3,"click"],[1,"grid","grid-cols-1","md:grid-cols-2","lg:grid-cols-3","gap-4","mb-8"],[1,"flex","flex-col","rounded-lg","bg-neutral-800/60","border","border-neonDefault","p-4","min-h-0"],[1,"text-lg","font-semibold","text-neutral-200","mb-3","shrink-0"],[1,"text-neutral-500","text-sm"],[1,"space-y-2","min-h-0"],[1,"flex","flex-col","gap-1","min-h-0"],[1,"text-neutral-300"],[1,"text-2xl","font-bold","text-neutral-100"],[1,"ml-1"],[1,"text-neutral-400","text-sm"],[1,"text-sm","mt-1","flex","items-center","gap-1.5"],[1,"flex","flex-col","rounded-lg","bg-neutral-800/60","border","border-neonDefault","p-4","min-h-0","md:col-span-2","lg:col-span-3"],[1,"flex","flex-wrap","gap-3"],["routerLink","/session",1,"inline-flex","items-center","px-5","py-2.5","border","border-ccapAccent","rounded-lg","text-ccapAccent","text-sm","font-semibold","transition-colors","duration-200","hover:bg-ccapAccent","hover:text-white","hover:shadow-neon-glow-accent"],["routerLink","/settings",1,"inline-flex","items-center","px-5","py-2.5","border","border-neonCyan","rounded-lg","text-neutral-300","text-sm","font-semibold","transition-colors","duration-200","hover:bg-neutral-700","hover:text-white","hover:shadow-neon-glow-cyan"],[1,"flex","items-center","gap-3","flex-wrap"],[1,"text-neutral-200","font-medium"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-green-900/50","text-green-300","border","border-neonGreen","shrink-0"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-amber-900/50","text-amber-300","border","border-neonAmber","shrink-0"],[1,"text-neutral-500","text-xs","truncate","max-w-full",3,"title"],[1,"font-medium","text-neutral-300"],["aria-hidden","true",1,"inline-block","w-2","h-2","rounded-full","shrink-0"],[1,"font-medium"],[1,"flex","flex-wrap","gap-4","mb-4"],[1,"flex","items-center","gap-2"],[1,"w-2","h-2","rounded-full","bg-green-500","shrink-0"],[1,"text-neutral-300","text-sm","font-medium"],[1,"border-l","border-neutral-700","pl-4","flex","items-center","gap-2"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-green-900/50","text-green-300","border","border-neonGreen"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-amber-900/50","text-amber-300","border","border-neonAmber"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-neutral-700/50","text-neutral-400","border","border-neutral-600"],[1,"text-neutral-500","text-xs"],[1,"grid","grid-cols-1","md:grid-cols-2","lg:grid-cols-3","gap-3"],[1,"w-2","h-2","rounded-full","bg-neutral-500","shrink-0"],[1,"w-2","h-2","rounded-full","bg-amber-500","shrink-0"],[1,"rounded-md","border","border-neutral-700","bg-neutral-800/40","p-3","flex","flex-col","gap-2"],[1,"flex","items-center","justify-between","gap-2"],[1,"text-neutral-100","font-medium","text-sm","truncate"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-neutral-700/50","text-neutral-400","border","border-neutral-600","shrink-0"],[1,"text-neutral-500","text-xs","font-mono","truncate",3,"title"],[1,"flex","flex-col","gap-1.5","mt-1","pt-2","border-t","border-neutral-700/50"],[1,"text-neutral-600","text-xs","mt-1"],[1,"flex","items-center","gap-2","text-xs"],[1,"w-1.5","h-1.5","rounded-full","bg-green-500","shrink-0"],[1,"w-1.5","h-1.5","rounded-full","bg-amber-500","shrink-0"],[1,"w-1.5","h-1.5","rounded-full","bg-neutral-500","shrink-0"],[1,"text-neutral-300","truncate"],[1,"text-neutral-500","shrink-0"],[1,"text-neutral-500","text-xs","pl-3.5","-mt-1","truncate"]],template:function(r,m){r&1&&(i(0,"div",0)(1,"header",1)(2,"div")(3,"h1",2),o(4),n(),i(5,"p",3),o(6,"Agentic AI System"),n()(),d(7,ot,2,0,"button",4),n(),d(8,at,3,0,"div",5)(9,Gt,2,1),n()),r&2&&(l(4),c(m.title),l(3),s(!m.serverStatus_DS.statusLoading_$()&&!m.serverStatus_DS.statusLoadError_$()&&m.serverStatus_DS.status_$()?7:-1),l(),s(m.serverStatus_DS.statusLoading_$()?8:9))},dependencies:[B,b],encapsulation:2})}return t})();var Wt=[{path:"",pathMatch:"full",component:Q}],ue=(()=>{class t{static \u0275fac=function(r){return new(r||t)};static \u0275mod=R({type:t});static \u0275inj=M({imports:[j,G.forChild(Wt),b,O]})}return t})();export{ue as Dashboard_Module};
2
- //# sourceMappingURL=dashboard.module-C4WZIP4Y.js.map
1
+ import{a as V}from"./chunk-3CSKYOXL.js";import{a as x,b as f}from"./chunk-6Y7O2W4H.js";import{d as W}from"./chunk-SREB74HR.js";import"./chunk-RCRXEUZM.js";import{a as O}from"./chunk-Q2NVIOCY.js";import{a as U}from"./chunk-J32YRK3S.js";import"./chunk-V3VQWJQL.js";import{k as b}from"./chunk-TLAPOIAO.js";import"./chunk-5UPNU54P.js";import"./chunk-HOPBJ2PM.js";import{p as tt}from"./chunk-RZY5FFKY.js";import{C as S,D as N,E as R,Fa as o,Ga as c,Ha as p,Hb as B,J as D,K as y,Kb as G,Z as l,aa as h,da as d,ga as g,h as Z,hb as k,ia as I,k as F,la as s,na as z,oa as v,pa as E,qa as i,ra as n,sa as u,ua as T,ub as j,va as $,wa as _,y as P,z as M}from"./chunk-TBMJSIBB.js";var J=Z(tt());var K=(()=>{class t{status_$=h(null);statusLoading_$=h(!1);statusLoadError_$=h(null);serverStatus_AS=S(V);loadStatus(){return F(this,null,function*(){this.statusLoading_$.set(!0),this.statusLoadError_$.set(null);try{let e=yield this.serverStatus_AS.getStatus();return this.status_$.set(e),e}catch(e){return J.DyFM_Error.logSimple("CCAP_ServerStatusDS | Failed to load status",e),this.statusLoadError_$.set(e),null}finally{this.statusLoading_$.set(!1)}})}getCachedStatus(){return this.status_$()}static \u0275fac=function(r){return new(r||t)};static \u0275prov=P({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var et=(t,a)=>a.name,nt=(t,a)=>a._id,it=(t,a)=>a.sessionId;function ot(t,a){if(t&1){let e=T();i(0,"button",6),$("click",function(){D(e);let m=_();return y(m.loadStatus())}),o(1," Friss\xEDt\xE9s "),n()}}function at(t,a){t&1&&(i(0,"div",5)(1,"p",7),o(2,"Bet\xF6lt\xE9s\u2026"),n()())}function lt(t,a){if(t&1){let e=T();i(0,"div",8),u(1,"app-ccap-error-display",9),i(2,"div",10)(3,"button",11),$("click",function(){D(e);let m=_(2);return y(m.loadStatus())}),o(4," \xDAjrapr\xF3b\xE1l\xE1s "),n()()()}if(t&2){let e=_(2);l(),g("error",e.serverStatus_DS.statusLoadError_$())}}function rt(t,a){t&1&&(i(0,"p",15),o(1,"Nincs enged\xE9lyezett messaging provider (Setup \u2192 enged\xE9lyez\xE9s)."),n())}function _t(t,a){t&1&&(i(0,"span",29),o(1," working "),n())}function st(t,a){if(t&1&&(i(0,"span",31),o(1),n()),t&2){let e=_(2).$implicit;g("title",e.error),l(),c(e.error)}}function dt(t,a){if(t&1&&(i(0,"span",30),o(1," disconnected "),n(),d(2,st,2,2,"span",31)),t&2){let e=_().$implicit;l(2),s(e.error?2:-1)}}function mt(t,a){if(t&1&&(i(0,"li",27)(1,"span",28),o(2),n(),d(3,_t,2,0,"span",29)(4,dt,3,1),n()),t&2){let e=a.$implicit,r=_(5);l(2),c(r.MESSAGING_PROVIDER_NAMES[e.name]),l(),s(e.connected?3:4)}}function ct(t,a){if(t&1&&(i(0,"ul",16),v(1,mt,5,2,"li",27,et),n()),t&2){let e=_();l(),E(e.messagingProviders)}}function ut(t,a){t&1&&(i(0,"p",15),o(1,"Nincs enged\xE9lyezett LLM provider (Setup \u2192 enged\xE9lyez\xE9s)."),n())}function pt(t,a){if(t&1&&(i(0,"li",27)(1,"span",28),o(2),n(),i(3,"span",29),o(4," enged\xE9lyezve "),n()()),t&2){let e=a.$implicit,r=_(5);l(2),c(r.llmProviderDisplayLabelsMap_$()[e])}}function Ct(t,a){if(t&1&&(i(0,"ul",16),v(1,pt,5,1,"li",27,z),n()),t&2){let e=_();l(),E(e.llmProviders)}}function xt(t,a){if(t&1&&(i(0,"p",21)(1,"span",32),o(2),n(),o(3," akt\xEDv az elm\xFAlt 24 \xF3r\xE1ban "),n()),t&2){let e=_();l(2),c(e.sessionSummary.recentActivityCount)}}function ft(t,a){if(t&1&&(i(0,"p",22),u(1,"span",33),i(2,"span",34),o(3),n(),i(4,"span",7),o(5," r\xF6gz\xEDtett hiba a legut\xF3bbi 24 \xF3r\xE1ban "),n()()),t&2){let e=_();l(),I("bg-red-500",e.lastErrorCount>0)("bg-green-500",e.lastErrorCount===0),l(),I("text-red-300",e.lastErrorCount>0)("text-green-300",e.lastErrorCount===0),l(),p(" ",e.lastErrorCount," ")}}function St(t,a){t&1&&(i(0,"p",15),o(1,"Bet\xF6lt\xE9s\u2026"),n())}function vt(t,a){t&1&&(i(0,"p",15),o(1,"Nem siker\xFClt bet\xF6lteni az instance adatokat."),n())}function Et(t,a){if(t&1&&(i(0,"div",36),u(1,"span",45),i(2,"span",38),o(3),n(),i(4,"span",15),o(5,"inactive"),n()()),t&2){let e=_(5);l(3),c(e.instanceSummary_$().inactiveCount)}}function ht(t,a){if(t&1&&(i(0,"div",36),u(1,"span",46),i(2,"span",38),o(3),n(),i(4,"span",15),o(5,"maintenance"),n()()),t&2){let e=_(5);l(3),c(e.instanceSummary_$().maintenanceCount)}}function gt(t,a){if(t&1&&(i(0,"span",40),o(1),n()),t&2){let e=_(5);l(),p("",e.instanceSummary_$().workingSessionCount," working")}}function bt(t,a){if(t&1&&(i(0,"span",41),o(1),n()),t&2){let e=_(5);l(),p("",e.instanceSummary_$().idleSessionCount," idle")}}function Dt(t,a){if(t&1&&(i(0,"span",42),o(1),n()),t&2){let e=_(5);l(),p("",e.instanceSummary_$().offlineSessionCount," offline")}}function yt(t,a){t&1&&(i(0,"span",43),o(1,"nincs session adat"),n())}function It(t,a){t&1&&(i(0,"p",15),o(1,"Nincs regisztr\xE1lt instance."),n())}function Tt(t,a){t&1&&(i(0,"span",29),o(1,"Active"),n())}function $t(t,a){t&1&&(i(0,"span",50),o(1,"Inactive"),n())}function kt(t,a){t&1&&(i(0,"span",30),o(1,"Maintenance"),n())}function wt(t,a){t&1&&u(0,"span",55)}function Ht(t,a){t&1&&u(0,"span",56)}function Lt(t,a){t&1&&u(0,"span",57)}function At(t,a){if(t&1&&(i(0,"p",60),o(1),n()),t&2){let e=_().$implicit;l(),c(e.activitySummary)}}function Ft(t,a){if(t&1&&(i(0,"div",54),d(1,wt,1,0,"span",55)(2,Ht,1,0,"span",56)(3,Lt,1,0,"span",57),i(4,"span",58),o(5),n(),i(6,"span",59),o(7),n()(),d(8,At,2,1,"p",60)),t&2){let e,r=a.$implicit,m=_(8);l(),s((e=r.presence)==="working"?1:e==="idle"?2:3),l(4),p(" ",r.sessionName||r.sessionId," "),l(2),c(m.PRESENCE_LABELS[r.presence]),l(),s(r.activitySummary?8:-1)}}function Pt(t,a){if(t&1&&(i(0,"div",52),v(1,Ft,9,4,null,null,it),n()),t&2){let e=_().$implicit;l(),E(e.sessionStatuses)}}function Mt(t,a){t&1&&(i(0,"p",53),o(1,"Nincs session adat"),n())}function Nt(t,a){if(t&1&&(i(0,"div",47)(1,"div",48)(2,"span",49),o(3),n(),d(4,Tt,2,0,"span",29)(5,$t,2,0,"span",50)(6,kt,2,0,"span",30),n(),i(7,"span",51),o(8),n(),d(9,Pt,3,0,"div",52)(10,Mt,2,0,"p",53),n()),t&2){let e,r=a.$implicit;l(3),p(" ",r.name||r.ccapId," "),l(),s((e=r.status)==="active"?4:e==="inactive"?5:e==="maintenance"?6:-1),l(3),g("title",r.ccapId),l(),p(" ",r.ccapId," "),l(),s(r.sessionStatuses&&r.sessionStatuses.length>0?9:10)}}function Rt(t,a){if(t&1&&(i(0,"div",44),v(1,Nt,11,5,"div",47,nt),n()),t&2){let e=_(5);l(),E(e.runtimeInstances_DS.ccapInstanceList_$())}}function zt(t,a){if(t&1&&(i(0,"div",35)(1,"div",36)(2,"span",19),o(3),n(),i(4,"span",21),o(5,"instance"),n()(),i(6,"div",36),u(7,"span",37),i(8,"span",38),o(9),n(),i(10,"span",15),o(11,"active"),n()(),d(12,Et,6,1,"div",36)(13,ht,6,1,"div",36),i(14,"div",39)(15,"span",21),o(16,"Sessions:"),n(),d(17,gt,2,1,"span",40)(18,bt,2,1,"span",41)(19,Dt,2,1,"span",42)(20,yt,2,0,"span",43),n()(),d(21,It,2,0,"p",15)(22,Rt,3,0,"div",44)),t&2){let e=_(4);l(3),c(e.instanceSummary_$().totalCount),l(6),c(e.instanceSummary_$().activeCount),l(3),s(e.instanceSummary_$().inactiveCount?12:-1),l(),s(e.instanceSummary_$().maintenanceCount?13:-1),l(4),s(e.instanceSummary_$().workingSessionCount?17:-1),l(),s(e.instanceSummary_$().idleSessionCount?18:-1),l(),s(e.instanceSummary_$().offlineSessionCount?19:-1),l(),s(!e.instanceSummary_$().workingSessionCount&&!e.instanceSummary_$().idleSessionCount&&!e.instanceSummary_$().offlineSessionCount?20:-1),l(),s(e.runtimeInstances_DS.ccapInstanceList_$().length===0?21:22)}}function jt(t,a){if(t&1&&(i(0,"div",12)(1,"section",13)(2,"h2",14),o(3,"Messaging provider-ek"),n(),d(4,rt,2,0,"p",15)(5,ct,3,0,"ul",16),n(),i(6,"section",13)(7,"h2",14),o(8,"LLM provider-ek"),n(),d(9,ut,2,0,"p",15)(10,Ct,3,0,"ul",16),n(),i(11,"section",13)(12,"h2",14),o(13,"Session \xF6sszes\xEDt\u0151"),n(),i(14,"div",17)(15,"p",18)(16,"span",19),o(17),n(),i(18,"span",20),o(19,"session"),n()(),d(20,xt,4,1,"p",21)(21,ft,6,9,"p",22),n()(),i(22,"section",23)(23,"h2",14),o(24,"Instance \xE1ttekint\u0151"),n(),d(25,St,2,0,"p",15)(26,vt,2,0,"p",15)(27,zt,23,9),n(),i(28,"section",13)(29,"h2",14),o(30,"Gyors linkek"),n(),i(31,"div",24)(32,"a",25),o(33," Open Sessions "),n(),i(34,"a",26),o(35," Be\xE1ll\xEDt\xE1sok "),n()()()()),t&2){let e=a,r=_(3);l(4),s(e.messagingProviders.length===0?4:5),l(5),s(e.llmProviders.length===0?9:10),l(8),c(e.sessionSummary.totalCount),l(3),s(e.sessionSummary.recentActivityCount!==void 0?20:-1),l(),s(e.lastErrorCount!==void 0&&e.lastErrorCount!==null?21:-1),l(4),s(r.runtimeInstances_DS.ccapInstanceListLoading_$()?25:r.runtimeInstances_DS.ccapInstanceListError_$()?26:27)}}function Bt(t,a){if(t&1&&d(0,jt,36,6,"div",12),t&2){let e,r=_(2);s((e=r.serverStatus_DS.status_$())?0:-1,e)}}function Gt(t,a){if(t&1&&d(0,lt,5,1,"div",8)(1,Bt,1,1),t&2){let e=_();s(e.serverStatus_DS.statusLoadError_$()?0:1)}}var Vt={"ccap-client":"CCAP Client","ccap-cli":"CCAP CLI",discord:"Discord"},Ot={[x.active]:"Active",[x.inactive]:"Inactive",[x.maintenance]:"Maintenance"},Ut={[f.working]:"Working",[f.idle]:"Idle",[f.offline]:"Offline"},Q=(()=>{class t{title="CCAP Revisioned";serverStatus_DS=S(K);runtimeInstances_DS=S(W);MESSAGING_PROVIDER_NAMES=Vt;INSTANCE_STATUS_LABELS=Ot;PRESENCE_LABELS=Ut;instanceSummary_$=k(()=>{let e=this.runtimeInstances_DS.ccapInstanceList_$(),r=e.length,m=e.filter(C=>C.status===x.active).length,X=e.filter(C=>C.status===x.inactive).length,Y=e.filter(C=>C.status===x.maintenance).length,w=0,H=0,L=0;for(let C of e)for(let A of C.sessionStatuses??[])A.presence===f.working?w++:A.presence===f.idle?H++:L++;return{totalCount:r,activeCount:m,inactiveCount:X,maintenanceCount:Y,workingSessionCount:w,idleSessionCount:H,offlineSessionCount:L}});llmProviderDisplayLabelsMap_$=k(()=>{let e=this.serverStatus_DS.status_$();if(!e)return{};let r={};for(let m of e.llmProviders)r[m]=U.getProviderDisplayLabel(m,null);return r});ngOnInit(){this.serverStatus_DS.loadStatus(),this.runtimeInstances_DS.loadCcapInstanceList()}loadStatus(){this.serverStatus_DS.loadStatus(),this.runtimeInstances_DS.loadCcapInstanceList()}static \u0275fac=function(r){return new(r||t)};static \u0275cmp=N({type:t,selectors:[["app-ccap-home"]],decls:10,vars:3,consts:[[1,"flex","flex-col","min-h-full","text-neutral-100","p-4","gt-xs:p-6"],[1,"flex","flex-col","xs:flex-row","xs:items-center","xs:justify-between","gap-4","mb-6"],[1,"text-2xl","gt-xs:text-3xl","font-bold","text-neutral-100"],[1,"text-neutral-400","text-sm","gt-xs:text-base","mt-1"],["type","button",1,"shrink-0","px-4","py-2","border","border-neonCyan","rounded-lg","text-neutral-400","text-sm","font-medium","hover:bg-neutral-800","hover:text-neutral-200","hover:shadow-neon-glow-cyan","transition-colors"],[1,"flex","items-center","justify-center","py-16"],["type","button",1,"shrink-0","px-4","py-2","border","border-neonCyan","rounded-lg","text-neutral-400","text-sm","font-medium","hover:bg-neutral-800","hover:text-neutral-200","hover:shadow-neon-glow-cyan","transition-colors",3,"click"],[1,"text-neutral-400"],[1,"rounded-lg","bg-neutral-800/60","border","border-red-500/50","p-6","max-w-2xl"],["sourceLabelOverride","St\xE1tusz bet\xF6lt\xE9s",1,"mb-4","block",3,"error"],[1,"text-center"],["type","button",1,"px-4","py-2","border","border-neonCyan","rounded-lg","text-neutral-300","text-sm","font-medium","hover:bg-neutral-700","hover:shadow-neon-glow-cyan","transition-colors",3,"click"],[1,"grid","grid-cols-1","md:grid-cols-2","lg:grid-cols-3","gap-4","mb-8"],[1,"flex","flex-col","rounded-lg","bg-neutral-800/60","border","border-neonDefault","p-4","min-h-0"],[1,"text-lg","font-semibold","text-neutral-200","mb-3","shrink-0"],[1,"text-neutral-500","text-sm"],[1,"space-y-2","min-h-0"],[1,"flex","flex-col","gap-1","min-h-0"],[1,"text-neutral-300"],[1,"text-2xl","font-bold","text-neutral-100"],[1,"ml-1"],[1,"text-neutral-400","text-sm"],[1,"text-sm","mt-1","flex","items-center","gap-1.5"],[1,"flex","flex-col","rounded-lg","bg-neutral-800/60","border","border-neonDefault","p-4","min-h-0","md:col-span-2","lg:col-span-3"],[1,"flex","flex-wrap","gap-3"],["routerLink","/session",1,"inline-flex","items-center","px-5","py-2.5","border","border-ccapAccent","rounded-lg","text-ccapAccent","text-sm","font-semibold","transition-colors","duration-200","hover:bg-ccapAccent","hover:text-white","hover:shadow-neon-glow-accent"],["routerLink","/settings",1,"inline-flex","items-center","px-5","py-2.5","border","border-neonCyan","rounded-lg","text-neutral-300","text-sm","font-semibold","transition-colors","duration-200","hover:bg-neutral-700","hover:text-white","hover:shadow-neon-glow-cyan"],[1,"flex","items-center","gap-3","flex-wrap"],[1,"text-neutral-200","font-medium"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-green-900/50","text-green-300","border","border-neonGreen","shrink-0"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-amber-900/50","text-amber-300","border","border-neonAmber","shrink-0"],[1,"text-neutral-500","text-xs","truncate","max-w-full",3,"title"],[1,"font-medium","text-neutral-300"],["aria-hidden","true",1,"inline-block","w-2","h-2","rounded-full","shrink-0"],[1,"font-medium"],[1,"flex","flex-wrap","gap-4","mb-4"],[1,"flex","items-center","gap-2"],[1,"w-2","h-2","rounded-full","bg-green-500","shrink-0"],[1,"text-neutral-300","text-sm","font-medium"],[1,"border-l","border-neutral-700","pl-4","flex","items-center","gap-2"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-green-900/50","text-green-300","border","border-neonGreen"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-amber-900/50","text-amber-300","border","border-neonAmber"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-neutral-700/50","text-neutral-400","border","border-neutral-600"],[1,"text-neutral-500","text-xs"],[1,"grid","grid-cols-1","md:grid-cols-2","lg:grid-cols-3","gap-3"],[1,"w-2","h-2","rounded-full","bg-neutral-500","shrink-0"],[1,"w-2","h-2","rounded-full","bg-amber-500","shrink-0"],[1,"rounded-md","border","border-neutral-700","bg-neutral-800/40","p-3","flex","flex-col","gap-2"],[1,"flex","items-center","justify-between","gap-2"],[1,"text-neutral-100","font-medium","text-sm","truncate"],[1,"px-2","py-0.5","text-xs","font-medium","rounded","bg-neutral-700/50","text-neutral-400","border","border-neutral-600","shrink-0"],[1,"text-neutral-500","text-xs","font-mono","truncate",3,"title"],[1,"flex","flex-col","gap-1.5","mt-1","pt-2","border-t","border-neutral-700/50"],[1,"text-neutral-600","text-xs","mt-1"],[1,"flex","items-center","gap-2","text-xs"],[1,"w-1.5","h-1.5","rounded-full","bg-green-500","shrink-0"],[1,"w-1.5","h-1.5","rounded-full","bg-amber-500","shrink-0"],[1,"w-1.5","h-1.5","rounded-full","bg-neutral-500","shrink-0"],[1,"text-neutral-300","truncate"],[1,"text-neutral-500","shrink-0"],[1,"text-neutral-500","text-xs","pl-3.5","-mt-1","truncate"]],template:function(r,m){r&1&&(i(0,"div",0)(1,"header",1)(2,"div")(3,"h1",2),o(4),n(),i(5,"p",3),o(6,"Agentic AI System"),n()(),d(7,ot,2,0,"button",4),n(),d(8,at,3,0,"div",5)(9,Gt,2,1),n()),r&2&&(l(4),c(m.title),l(3),s(!m.serverStatus_DS.statusLoading_$()&&!m.serverStatus_DS.statusLoadError_$()&&m.serverStatus_DS.status_$()?7:-1),l(),s(m.serverStatus_DS.statusLoading_$()?8:9))},dependencies:[B,b],encapsulation:2})}return t})();var Wt=[{path:"",pathMatch:"full",component:Q}],ue=(()=>{class t{static \u0275fac=function(r){return new(r||t)};static \u0275mod=R({type:t});static \u0275inj=M({imports:[j,G.forChild(Wt),b,O]})}return t})();export{ue as Dashboard_Module};
2
+ //# sourceMappingURL=dashboard.module-NUTWD5IC.js.map