@futdevpro/ccap 1.1.2960 → 1.1.2968
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.
- package/client-dist/{agent-instances.module-2URQPTNT.js → agent-instances.module-LFM3J2LA.js} +2 -2
- package/client-dist/ca.module-6IKKBFCV.js +5 -0
- package/client-dist/ca.module-6IKKBFCV.js.map +7 -0
- package/client-dist/{cc-usage-dashboard.component-UEDH2XKN.js → cc-usage-dashboard.component-MAJTREX5.js} +2 -2
- package/client-dist/cc.module-WIBOFFFC.js +4 -0
- package/client-dist/cc.module-WIBOFFFC.js.map +7 -0
- package/client-dist/{chunk-M2VDKALL.js → chunk-2XU2LIK5.js} +2 -2
- package/client-dist/{chunk-UEFUKRAM.js → chunk-334PU4V5.js} +2 -2
- package/client-dist/{chunk-VH4GKMD3.js → chunk-375SGREC.js} +2 -2
- package/client-dist/chunk-3XP3ALCH.js +73 -0
- package/client-dist/chunk-3XP3ALCH.js.map +1 -0
- package/client-dist/{chunk-DE3BOHO5.js → chunk-4O5PJT2Q.js} +2 -2
- package/client-dist/{chunk-6JO7UKOI.js → chunk-536ONGRA.js} +2 -2
- package/client-dist/{chunk-7Y6EDEKN.js → chunk-5JBJMD26.js} +2 -2
- package/client-dist/{chunk-BV6QDXRW.js → chunk-5L255H5C.js} +2 -2
- package/client-dist/{chunk-BV6QDXRW.js.map → chunk-5L255H5C.js.map} +1 -1
- package/client-dist/{chunk-OCYK4I37.js → chunk-5SYCIFC7.js} +2 -2
- package/client-dist/{chunk-HRA33EDX.js → chunk-62O4YXH2.js} +2 -2
- package/client-dist/{chunk-NVDOMHCP.js → chunk-7DXWR6DX.js} +2 -2
- package/client-dist/{chunk-5BZODWW7.js → chunk-7QXWTKTQ.js} +2 -2
- package/client-dist/{chunk-FKOWRSW7.js → chunk-AFNG5IFQ.js} +2 -2
- package/client-dist/{chunk-6V3AY4GG.js → chunk-AOZH5KZ5.js} +2 -2
- package/client-dist/{chunk-JOEQVHLP.js → chunk-B5C3VRNW.js} +2 -2
- package/client-dist/{chunk-GWYU4AVI.js → chunk-BBQR7THP.js} +2 -2
- package/client-dist/{chunk-4LPEUFAW.js → chunk-BNZAUTHL.js} +2 -2
- package/client-dist/{chunk-3W3OBILQ.js → chunk-BP6PERGA.js} +2 -2
- package/client-dist/{chunk-ALZ7U76J.js → chunk-C6BPLTAT.js} +2 -2
- package/client-dist/{chunk-PRF3OUI7.js → chunk-CSJOCUB5.js} +2 -2
- package/client-dist/{chunk-ZDABQIBP.js → chunk-DZ4365RI.js} +2 -2
- package/client-dist/{chunk-DODMVPWS.js → chunk-EIJM7YZZ.js} +2 -2
- package/client-dist/{chunk-TNTQYNFQ.js → chunk-F5OKFSMW.js} +2 -2
- package/client-dist/{chunk-KHMRNG5E.js → chunk-GLISSBW6.js} +2 -2
- package/client-dist/{chunk-AINXWTEN.js → chunk-GOHAZ3UP.js} +2 -2
- package/client-dist/{chunk-744OTLPJ.js → chunk-GXVFIYGG.js} +2 -2
- package/client-dist/{chunk-WAVRMTHA.js → chunk-GZJSMF4W.js} +2 -2
- package/client-dist/{chunk-DJCLH4DQ.js → chunk-GZNAXQSR.js} +2 -2
- package/client-dist/{chunk-CKHGJZOB.js → chunk-HIUVSLF2.js} +2 -2
- package/client-dist/{chunk-PKVKXWSS.js → chunk-K2BXFMAZ.js} +2 -2
- package/client-dist/{chunk-MYK7GACV.js → chunk-KS3E56FC.js} +2 -2
- package/client-dist/{chunk-FXDLW3RE.js → chunk-KYXVXZA4.js} +2 -2
- package/client-dist/{chunk-4LELMYV2.js → chunk-M6XVA3F3.js} +2 -2
- package/client-dist/{chunk-J7XG5WST.js → chunk-MDOELCBX.js} +2 -2
- package/client-dist/{chunk-U4RZ7GFY.js → chunk-OAYVBZZD.js} +2 -2
- package/client-dist/{chunk-OV776GY4.js → chunk-OAZA6CLB.js} +2 -2
- package/client-dist/{chunk-ZKC5Z3IN.js → chunk-OHXBMPQN.js} +2 -2
- package/client-dist/{chunk-WLVM35I4.js → chunk-OUBAPK5Q.js} +2 -2
- package/client-dist/{chunk-5YO3LDJM.js → chunk-P4E77IA5.js} +2 -2
- package/client-dist/{chunk-IQYJH4J7.js → chunk-PIN4VFXO.js} +2 -2
- package/client-dist/{chunk-OLTVSW6P.js → chunk-PZ3A7XIC.js} +2 -2
- package/client-dist/{chunk-W6RXT6D7.js → chunk-SBTVSUCF.js} +2 -2
- package/client-dist/{chunk-REWBQNDV.js → chunk-SLYF4BZT.js} +2 -2
- package/client-dist/{chunk-JLUYCPX3.js → chunk-SOA6UZHW.js} +2 -2
- package/client-dist/{chunk-6T3T47WR.js → chunk-TKJC6WIX.js} +2 -2
- package/client-dist/{chunk-BKYQ746Q.js → chunk-UZWYHQU5.js} +2 -2
- package/client-dist/{chunk-UEQKXLYY.js → chunk-VER7DLPS.js} +2 -2
- package/client-dist/{chunk-A4J42SWO.js → chunk-WSRT2AXO.js} +2 -2
- package/client-dist/{chunk-PEIQDAXN.js → chunk-XC6OGCBT.js} +2 -2
- package/client-dist/{chunk-3CCTA7PZ.js → chunk-XS5NRBFX.js} +2 -2
- package/client-dist/{chunk-KIRC3TOF.js → chunk-Y4WOX5ZT.js} +2 -2
- package/client-dist/{chunk-ZVAWABJH.js → chunk-YFGRQVYN.js} +2 -2
- package/client-dist/{chunk-PGEEVNYW.js → chunk-YV7GEWMV.js} +2 -2
- package/client-dist/{chunk-3MRPZKCQ.js → chunk-ZO42CPIZ.js} +2 -2
- package/client-dist/{chunk-GTS3HVE3.js → chunk-ZRLRJNW4.js} +2 -2
- package/client-dist/{chunk-4LUVD2AP.js → chunk-ZTO2WC4L.js} +2 -2
- package/client-dist/{consultant.module-N64GJRK3.js → consultant.module-XYGMFIBX.js} +2 -2
- package/client-dist/{crd.module-2TLXBWL3.js → crd.module-2TUYARHJ.js} +2 -2
- package/client-dist/{dashboard.module-A5AQ4MXU.js → dashboard.module-G47SY7RR.js} +2 -2
- package/client-dist/{do.module-7A4O3RFF.js → do.module-WWLJVEM2.js} +2 -2
- package/client-dist/{document-library.module-N5KBWUB6.js → document-library.module-EKVYKBGO.js} +2 -2
- package/client-dist/{embedding-eval.module-O6SZBU7X.js → embedding-eval.module-ZXMLZHML.js} +2 -2
- package/client-dist/{embedding-registry.module-OA77P44J.js → embedding-registry.module-EE5OFQVA.js} +2 -2
- package/client-dist/{err.module-RWJUO7EF.js → err.module-AQ7S3MIX.js} +2 -2
- package/client-dist/{feedback.module-GUBGJMFD.js → feedback.module-PS2TJILH.js} +2 -2
- package/client-dist/{host-runtime-mcp.module-P3PVLVPH.js → host-runtime-mcp.module-XHWB3K2U.js} +2 -2
- package/client-dist/index.html +2 -2
- package/client-dist/{live-dev-pipeline.module-HUI2EWPA.js → live-dev-pipeline.module-HVIUS654.js} +2 -2
- package/client-dist/{logs.module-KCU67S7S.js → logs.module-RZOFXUFO.js} +2 -2
- package/client-dist/{main-SB4UO4OC.js → main-N4T3LPFJ.js} +3 -3
- package/client-dist/{master-control-remote-poc.module-3UBJZBTK.js → master-control-remote-poc.module-Z44FHFP3.js} +2 -2
- package/client-dist/{mobile-app.module-X6U46WW7.js → mobile-app.module-7EN7TBHL.js} +2 -2
- package/client-dist/{model-registry.module-3PG3PJ3J.js → model-registry.module-3GLXXUHT.js} +2 -2
- package/client-dist/oc.module-XJXWDHRE.js +3 -0
- package/client-dist/oc.module-XJXWDHRE.js.map +7 -0
- package/client-dist/{orc.module-KR5CVMQM.js → orc.module-TGXVMQLI.js} +2 -2
- package/client-dist/{project-management.module-IHLVVJ2G.js → project-management.module-24CUEUF5.js} +2 -2
- package/client-dist/project-source-routed.module-DNGOB2JX.js +2 -0
- package/client-dist/s-agent-console-message-bubble.component-QJSDQEWX.css.map +7 -0
- package/client-dist/s-agent-tool-plan-view.component-E4T5UMZT.css.map +7 -0
- package/client-dist/{scheduler.module-U2LB4R6N.js → scheduler.module-I4VI7QU7.js} +2 -2
- package/client-dist/{session.module-HOSGEEDR.js → session.module-MQKLXSPJ.js} +9 -9
- package/client-dist/session.module-MQKLXSPJ.js.map +7 -0
- package/client-dist/{set.module-BXGLV3NK.js → set.module-EBOPU2SQ.js} +2 -2
- package/client-dist/{setup.module-47WXGX3F.js → setup.module-LOYXPT7O.js} +2 -2
- package/client-dist/{styles-MUU7N64U.css → styles-YBSH3JQY.css} +2 -2
- package/client-dist/{styles-MUU7N64U.css.map → styles-YBSH3JQY.css.map} +3 -3
- package/client-dist/{terminals.module-KPNW6NBJ.js → terminals.module-45PXK7MW.js} +2 -2
- package/client-dist/{voice-notes-poc.module-KUQCUNUK.js → voice-notes-poc.module-UIV4RQN3.js} +2 -2
- package/client-dist/{wfs.module-KFTICN4O.js → wfs.module-BNMGWII3.js} +2 -2
- package/package.json +1 -1
- package/client-dist/ca.module-JUKBF44B.js +0 -5
- package/client-dist/ca.module-JUKBF44B.js.map +0 -7
- package/client-dist/cc.module-S5PA32TN.js +0 -4
- package/client-dist/cc.module-S5PA32TN.js.map +0 -7
- package/client-dist/chunk-VPWEWXFD.js +0 -73
- package/client-dist/chunk-VPWEWXFD.js.map +0 -1
- package/client-dist/oc.module-C52TEII4.js +0 -3
- package/client-dist/oc.module-C52TEII4.js.map +0 -7
- package/client-dist/project-source-routed.module-GBWQ63AE.js +0 -2
- package/client-dist/s-agent-console-message-bubble.component-KS3KL36G.css.map +0 -7
- package/client-dist/s-agent-tool-plan-view.component-PVG3EXHY.css.map +0 -7
- package/client-dist/session.module-HOSGEEDR.js.map +0 -7
- /package/client-dist/{agent-instances.module-2URQPTNT.js.map → agent-instances.module-LFM3J2LA.js.map} +0 -0
- /package/client-dist/{cc-usage-dashboard.component-UEDH2XKN.js.map → cc-usage-dashboard.component-MAJTREX5.js.map} +0 -0
- /package/client-dist/{chunk-M2VDKALL.js.map → chunk-2XU2LIK5.js.map} +0 -0
- /package/client-dist/{chunk-UEFUKRAM.js.map → chunk-334PU4V5.js.map} +0 -0
- /package/client-dist/{chunk-VH4GKMD3.js.map → chunk-375SGREC.js.map} +0 -0
- /package/client-dist/{chunk-DE3BOHO5.js.map → chunk-4O5PJT2Q.js.map} +0 -0
- /package/client-dist/{chunk-6JO7UKOI.js.map → chunk-536ONGRA.js.map} +0 -0
- /package/client-dist/{chunk-7Y6EDEKN.js.map → chunk-5JBJMD26.js.map} +0 -0
- /package/client-dist/{chunk-OCYK4I37.js.map → chunk-5SYCIFC7.js.map} +0 -0
- /package/client-dist/{chunk-HRA33EDX.js.map → chunk-62O4YXH2.js.map} +0 -0
- /package/client-dist/{chunk-NVDOMHCP.js.map → chunk-7DXWR6DX.js.map} +0 -0
- /package/client-dist/{chunk-5BZODWW7.js.map → chunk-7QXWTKTQ.js.map} +0 -0
- /package/client-dist/{chunk-FKOWRSW7.js.map → chunk-AFNG5IFQ.js.map} +0 -0
- /package/client-dist/{chunk-6V3AY4GG.js.map → chunk-AOZH5KZ5.js.map} +0 -0
- /package/client-dist/{chunk-JOEQVHLP.js.map → chunk-B5C3VRNW.js.map} +0 -0
- /package/client-dist/{chunk-GWYU4AVI.js.map → chunk-BBQR7THP.js.map} +0 -0
- /package/client-dist/{chunk-4LPEUFAW.js.map → chunk-BNZAUTHL.js.map} +0 -0
- /package/client-dist/{chunk-3W3OBILQ.js.map → chunk-BP6PERGA.js.map} +0 -0
- /package/client-dist/{chunk-ALZ7U76J.js.map → chunk-C6BPLTAT.js.map} +0 -0
- /package/client-dist/{chunk-PRF3OUI7.js.map → chunk-CSJOCUB5.js.map} +0 -0
- /package/client-dist/{chunk-ZDABQIBP.js.map → chunk-DZ4365RI.js.map} +0 -0
- /package/client-dist/{chunk-DODMVPWS.js.map → chunk-EIJM7YZZ.js.map} +0 -0
- /package/client-dist/{chunk-TNTQYNFQ.js.map → chunk-F5OKFSMW.js.map} +0 -0
- /package/client-dist/{chunk-KHMRNG5E.js.map → chunk-GLISSBW6.js.map} +0 -0
- /package/client-dist/{chunk-AINXWTEN.js.map → chunk-GOHAZ3UP.js.map} +0 -0
- /package/client-dist/{chunk-744OTLPJ.js.map → chunk-GXVFIYGG.js.map} +0 -0
- /package/client-dist/{chunk-WAVRMTHA.js.map → chunk-GZJSMF4W.js.map} +0 -0
- /package/client-dist/{chunk-DJCLH4DQ.js.map → chunk-GZNAXQSR.js.map} +0 -0
- /package/client-dist/{chunk-CKHGJZOB.js.map → chunk-HIUVSLF2.js.map} +0 -0
- /package/client-dist/{chunk-PKVKXWSS.js.map → chunk-K2BXFMAZ.js.map} +0 -0
- /package/client-dist/{chunk-MYK7GACV.js.map → chunk-KS3E56FC.js.map} +0 -0
- /package/client-dist/{chunk-FXDLW3RE.js.map → chunk-KYXVXZA4.js.map} +0 -0
- /package/client-dist/{chunk-4LELMYV2.js.map → chunk-M6XVA3F3.js.map} +0 -0
- /package/client-dist/{chunk-J7XG5WST.js.map → chunk-MDOELCBX.js.map} +0 -0
- /package/client-dist/{chunk-U4RZ7GFY.js.map → chunk-OAYVBZZD.js.map} +0 -0
- /package/client-dist/{chunk-OV776GY4.js.map → chunk-OAZA6CLB.js.map} +0 -0
- /package/client-dist/{chunk-ZKC5Z3IN.js.map → chunk-OHXBMPQN.js.map} +0 -0
- /package/client-dist/{chunk-WLVM35I4.js.map → chunk-OUBAPK5Q.js.map} +0 -0
- /package/client-dist/{chunk-5YO3LDJM.js.map → chunk-P4E77IA5.js.map} +0 -0
- /package/client-dist/{chunk-IQYJH4J7.js.map → chunk-PIN4VFXO.js.map} +0 -0
- /package/client-dist/{chunk-OLTVSW6P.js.map → chunk-PZ3A7XIC.js.map} +0 -0
- /package/client-dist/{chunk-W6RXT6D7.js.map → chunk-SBTVSUCF.js.map} +0 -0
- /package/client-dist/{chunk-REWBQNDV.js.map → chunk-SLYF4BZT.js.map} +0 -0
- /package/client-dist/{chunk-JLUYCPX3.js.map → chunk-SOA6UZHW.js.map} +0 -0
- /package/client-dist/{chunk-6T3T47WR.js.map → chunk-TKJC6WIX.js.map} +0 -0
- /package/client-dist/{chunk-BKYQ746Q.js.map → chunk-UZWYHQU5.js.map} +0 -0
- /package/client-dist/{chunk-UEQKXLYY.js.map → chunk-VER7DLPS.js.map} +0 -0
- /package/client-dist/{chunk-A4J42SWO.js.map → chunk-WSRT2AXO.js.map} +0 -0
- /package/client-dist/{chunk-PEIQDAXN.js.map → chunk-XC6OGCBT.js.map} +0 -0
- /package/client-dist/{chunk-3CCTA7PZ.js.map → chunk-XS5NRBFX.js.map} +0 -0
- /package/client-dist/{chunk-KIRC3TOF.js.map → chunk-Y4WOX5ZT.js.map} +0 -0
- /package/client-dist/{chunk-ZVAWABJH.js.map → chunk-YFGRQVYN.js.map} +0 -0
- /package/client-dist/{chunk-PGEEVNYW.js.map → chunk-YV7GEWMV.js.map} +0 -0
- /package/client-dist/{chunk-3MRPZKCQ.js.map → chunk-ZO42CPIZ.js.map} +0 -0
- /package/client-dist/{chunk-GTS3HVE3.js.map → chunk-ZRLRJNW4.js.map} +0 -0
- /package/client-dist/{chunk-4LUVD2AP.js.map → chunk-ZTO2WC4L.js.map} +0 -0
- /package/client-dist/{consultant.module-N64GJRK3.js.map → consultant.module-XYGMFIBX.js.map} +0 -0
- /package/client-dist/{crd.module-2TLXBWL3.js.map → crd.module-2TUYARHJ.js.map} +0 -0
- /package/client-dist/{dashboard.module-A5AQ4MXU.js.map → dashboard.module-G47SY7RR.js.map} +0 -0
- /package/client-dist/{do.module-7A4O3RFF.js.map → do.module-WWLJVEM2.js.map} +0 -0
- /package/client-dist/{document-library.module-N5KBWUB6.js.map → document-library.module-EKVYKBGO.js.map} +0 -0
- /package/client-dist/{embedding-eval.module-O6SZBU7X.js.map → embedding-eval.module-ZXMLZHML.js.map} +0 -0
- /package/client-dist/{embedding-registry.module-OA77P44J.js.map → embedding-registry.module-EE5OFQVA.js.map} +0 -0
- /package/client-dist/{err.module-RWJUO7EF.js.map → err.module-AQ7S3MIX.js.map} +0 -0
- /package/client-dist/{feedback.module-GUBGJMFD.js.map → feedback.module-PS2TJILH.js.map} +0 -0
- /package/client-dist/{host-runtime-mcp.module-P3PVLVPH.js.map → host-runtime-mcp.module-XHWB3K2U.js.map} +0 -0
- /package/client-dist/{live-dev-pipeline.module-HUI2EWPA.js.map → live-dev-pipeline.module-HVIUS654.js.map} +0 -0
- /package/client-dist/{logs.module-KCU67S7S.js.map → logs.module-RZOFXUFO.js.map} +0 -0
- /package/client-dist/{main-SB4UO4OC.js.map → main-N4T3LPFJ.js.map} +0 -0
- /package/client-dist/{master-control-remote-poc.module-3UBJZBTK.js.map → master-control-remote-poc.module-Z44FHFP3.js.map} +0 -0
- /package/client-dist/{mobile-app.module-X6U46WW7.js.map → mobile-app.module-7EN7TBHL.js.map} +0 -0
- /package/client-dist/{model-registry.module-3PG3PJ3J.js.map → model-registry.module-3GLXXUHT.js.map} +0 -0
- /package/client-dist/{orc.module-KR5CVMQM.js.map → orc.module-TGXVMQLI.js.map} +0 -0
- /package/client-dist/{project-management.module-IHLVVJ2G.js.map → project-management.module-24CUEUF5.js.map} +0 -0
- /package/client-dist/{project-source-routed.module-GBWQ63AE.js.map → project-source-routed.module-DNGOB2JX.js.map} +0 -0
- /package/client-dist/{scheduler.module-U2LB4R6N.js.map → scheduler.module-I4VI7QU7.js.map} +0 -0
- /package/client-dist/{set.module-BXGLV3NK.js.map → set.module-EBOPU2SQ.js.map} +0 -0
- /package/client-dist/{setup.module-47WXGX3F.js.map → setup.module-LOYXPT7O.js.map} +0 -0
- /package/client-dist/{terminals.module-KPNW6NBJ.js.map → terminals.module-45PXK7MW.js.map} +0 -0
- /package/client-dist/{voice-notes-poc.module-KUQCUNUK.js.map → voice-notes-poc.module-UIV4RQN3.js.map} +0 -0
- /package/client-dist/{wfs.module-KFTICN4O.js.map → wfs.module-BNMGWII3.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["src/app/_modules/session/_components/ccap-session-list/ses-list.component.ts", "src/app/_modules/session/_components/ccap-session-list/ses-list.component.html", "src/app/_collections/run-execution/ccap-run-execution-ui-labels.util.ts", "src/app/_modules/session/_services/data-services/ses-monitoring.data-service.ts", "src/app/_modules/session/_collections/ses-message-to-bubble-view.util.ts", "src/app/_modules/session/_collections/ses-input-storage.util.ts", "src/app/_modules/session/_components/ccap-trace-detail/ses-trace-detail.component.ts", "src/app/_modules/session/_components/ccap-trace-detail/ses-trace-detail.component.html", "src/app/_modules/session/_components/ccap-event-list-item/ses-event-list-item.component.ts", "src/app/_modules/session/_components/ccap-event-list-item/ses-event-list-item.component.html", "src/app/_modules/session/_components/ccap-run-flow-viz/ses-run-flow-viz.component.ts", "src/app/_modules/session/_components/ccap-run-flow-viz/ses-run-flow-viz.component.html", "src/app/_modules/session/_components/ccap-run-trace-block/ses-run-trace-block.component.ts", "src/app/_modules/session/_components/ccap-run-trace-block/ses-run-trace-block.component.html", "src/app/_modules/session/_components/ccap-user-interaction-card/ses-user-interaction-card.component.ts", "src/app/_modules/session/_components/ccap-user-interaction-card/ses-user-interaction-card.component.html", "src/app/_modules/session/_components/ccap-chat/ses-chat.component.ts", "src/app/_modules/session/_components/ccap-chat/ses-chat.component.html", "src/app/_modules/session/_components/ccap-run-summary/ses-run-summary.component.ts", "src/app/_modules/session/_components/ccap-run-summary/ses-run-summary.component.html", "src/app/_modules/session/_components/ccap-session-detail/ses-detail.component.ts", "src/app/_modules/session/_components/ccap-session-detail/ses-detail.component.html", "src/app/_modules/session/_services/data-services/ses-context.data-service.ts", "src/app/_modules/session/_services/api-services/ses-context.api-service.ts", "src/app/_modules/session/_components/ccap-context-key-item/ses-context-key-item.component.ts", "src/app/_modules/session/_components/ccap-context-key-item/ses-context-key-item.component.html", "src/app/_modules/session/_components/ccap-context-panel/ses-context-panel.component.ts", "src/app/_modules/session/_components/ccap-context-panel/ses-context-panel.component.html", "src/app/_pipes/ccap-truncate.pipe.ts", "src/app/_modules/session/_components/ccap-info-panel/ses-info-panel.component.ts", "src/app/_modules/session/_components/ccap-info-panel/ses-info-panel.component.html", "src/app/_modules/session/_components/ccap-graph/ccap-graph-modal/ses-graph-modal.component.ts", "src/app/_modules/session/_components/ccap-graph/ccap-graph-modal/ses-graph-modal.component.html", "src/app/_modules/session/_components/ccap-session-shell/ses-shell.component.ts", "src/app/_modules/session/_components/ccap-session-shell/ses-shell.component.html", "src/app/_modules/session/_components/ccap-session-placeholder/ses-placeholder.component.ts", "src/app/_modules/session/_components/ccap-session-placeholder/ses-placeholder.component.html", "src/app/_modules/session/session.module.ts"],
|
|
4
|
+
"sourcesContent": ["import { Component, computed, effect, inject, Input, OnInit, signal, untracked } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { CCAP_TextSearch_Util } from '../../../../_collections/utils/ccap-text-search.util';\nimport {\n CCAP_SessionListItem_Response,\n} from '../../../../_models/interfaces/session/ccap-session-list-item.interface';\nimport { CCAP_GlobalError_ControlService } from '../../../../_services/control-services/ccap-global-error.control-service';\nimport {\n Session_DataService,\n} from '../../_services/data-services/session.data-service';\nimport { ExS_InstanceContext_DataService } from '../../../external-sessions/_services/exs-instance-context.data-service';\nimport { S_SessionStatusColor_Util } from '../../../shared/_collections/utils/s-session-status-color.util';\nimport { S_SessionListRowView_Interface } from '../../../shared/_models/interfaces/s-session-list-row-view.interface';\nimport { SCH_ScheduledJobs_DataService } from '../../../scheduler/_services/data-services/sch-scheduled-jobs.data-service';\nimport { Coordinator_DataService } from '../../../coordinator/_services/coordinator.data-service';\n\n/**\n * Session lista komponens.\n * Session-ök listázása, új session indítás, meglévő session folytatás.\n * Adat és műveletek a Session Data Service-en keresztül.\n * Az utolsó session megnyitása session gyökérön a shell-ben történik (panel állapotától függetlenül).\n */\n@Component({\n selector: 'app-ccap-session-list',\n templateUrl: './ses-list.component.html',\n})\n/** Ses_List_Component class. */\nexport class Ses_List_Component implements OnInit {\n\n /** Aktuálisan kiválasztott session ID (a shell route param alapján); a lista kiemeléséhez. */\n @Input() activeSessionId: string = '';\n\n /** Archivált szekció látható (true ha már betöltöttük az archiváltakat). */\n showArchived: boolean = false;\n\n /** Új session létrehozás folyamatban (gomb disable). */\n creating: boolean = false;\n\n /** Archiválás folyamatban (gomb disable). */\n archiving: boolean = false;\n\n /** De-archiválás folyamatban (archivált lista gomb disable). */\n deArchiving: boolean = false;\n\n /** Másolás folyamatban (kontextmenü gomb disable). */\n copying: boolean = false;\n\n readonly session_DS: Session_DataService = inject(Session_DataService);\n readonly peiContext_DS: ExS_InstanceContext_DataService = inject(ExS_InstanceContext_DataService);\n /** REQ-SES-CTX-COPY-LINK-001: Copy link feedback (clipboard write a globalError-CS-en keresztül). */\n private readonly globalError_CS: CCAP_GlobalError_ControlService = inject(CCAP_GlobalError_ControlService);\n /** REQ-SES-SCH-IND-001: schedule-indicator a session row-on (calendar ikon). */\n readonly scheduledJobs_DS: SCH_ScheduledJobs_DataService =\n inject(SCH_ScheduledJobs_DataService);\n /** REQ-SES-CRD-IND-001 (cycle 190): coordinator-indicator a session row-on (compass ikon). */\n readonly coordinator_DS: Coordinator_DataService =\n inject(Coordinator_DataService);\n private readonly router: Router = inject(Router);\n\n /**\n * Instance-szelektor változásra automatikus session lista újratöltés (REQ-PEI-016).\n */\n private readonly instanceChangeEffect = effect((): void => {\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n if (ccapId) {\n // untracked: loadSessions belsőleg signal-okat ír (.set), ami effect-ben NG0600-at okozna\n untracked((): void => {\n void this.session_DS.loadSessions();\n });\n }\n });\n\n // ── Search (REQ-SES-LIST-001) ────────────────────────────────\n\n /** REQ-SES-LIST-001: kliens-oldali session lista kereső query (név, goal, intent mezőkre). */\n readonly searchQuery_$ = signal<string>('');\n\n /** Szűrt aktív sessions — ékezet/kisbetű-érzéketlen match (REQ-SE-001 util). */\n private readonly filteredActiveSessions_$ = computed(\n (): CCAP_SessionListItem_Response[] => {\n const query: string = this.searchQuery_$();\n const all: CCAP_SessionListItem_Response[] = this.session_DS.sessions_$();\n if (!query.trim()) {\n return all;\n }\n return all.filter(\n (s: CCAP_SessionListItem_Response): boolean =>\n CCAP_TextSearch_Util.includesText(s.name, query)\n || CCAP_TextSearch_Util.includesText(s.sessionGoal, query)\n || CCAP_TextSearch_Util.includesText(s.sessionIntent, query),\n );\n },\n );\n\n /** Szűrt archivált sessions — ugyanaz a query, mint az aktívra (együtt szűrünk). */\n private readonly filteredArchivedSessions_$ = computed(\n (): CCAP_SessionListItem_Response[] => {\n const query: string = this.searchQuery_$();\n const all: CCAP_SessionListItem_Response[] = this.session_DS.archivedSessions_$();\n if (!query.trim()) {\n return all;\n }\n return all.filter(\n (s: CCAP_SessionListItem_Response): boolean =>\n CCAP_TextSearch_Util.includesText(s.name, query)\n || CCAP_TextSearch_Util.includesText(s.sessionGoal, query)\n || CCAP_TextSearch_Util.includesText(s.sessionIntent, query),\n );\n },\n );\n\n // ── Shared row view model mapping ────────────────────────────\n\n /** Aktív session lista → shared list row view model mapping (szűrve a keresőre).\n REQ-SES-SCH-IND-001: hasSchedule flag a `scheduledJobs_DS.scheduledSessionIds_$`-ből.\n REQ-SES-CRD-IND-001: hasCoordinator flag a `coordinator_DS.coordinatedSessionIds_$`-ből. */\n readonly activeSessionRowViews_$ = computed(\n (): S_SessionListRowView_Interface[] => {\n const scheduledIds: Set<string> = this.scheduledJobs_DS.scheduledSessionIds_$();\n const coordinatedIds: Set<string> = this.coordinator_DS.coordinatedSessionIds_$();\n return this.filteredActiveSessions_$().map(\n (s: CCAP_SessionListItem_Response): S_SessionListRowView_Interface =>\n Ses_List_Component.mapSessionToRowView(s, scheduledIds, coordinatedIds),\n );\n },\n );\n\n /** Archivált session lista → shared list row view model mapping (szűrve; szürke dot, nincs spinner). */\n readonly archivedSessionRowViews_$ = computed(\n (): S_SessionListRowView_Interface[] => {\n const scheduledIds: Set<string> = this.scheduledJobs_DS.scheduledSessionIds_$();\n const coordinatedIds: Set<string> = this.coordinator_DS.coordinatedSessionIds_$();\n return this.filteredArchivedSessions_$().map(\n (s: CCAP_SessionListItem_Response): S_SessionListRowView_Interface => ({\n ...Ses_List_Component.mapSessionToRowView(s, scheduledIds, coordinatedIds),\n statusColorClass: 'bg-neutral-500',\n isRunning: false,\n }),\n );\n },\n );\n\n // ── Context menu state ──────────────────────────────────────\n\n /** Kontextmenü session-je (null = zárt). */\n readonly ctxMenuSession_$ = signal<CCAP_SessionListItem_Response | null>(null);\n\n /** Kontextmenü pozíció. */\n readonly ctxMenuPos_$ = signal<{ x: number; y: number }>({ x: 0, y: 0 });\n\n /** Rename mód aktív (true = inline input megjelenítése a kontextmenüben). */\n readonly isRenaming_$ = signal<boolean>(false);\n\n /** Rename input aktuális értéke. */\n readonly renameValue_$ = signal<string>('');\n\n /**\n * REQ-SES-CTX-COPY-LINK-001: Copy link gomb feedback állapot —\n * `idle` → `copied` | `failed` → vissza `idle`-re a menü zárása után.\n */\n readonly linkCopyState_$ = signal<'idle' | 'copied' | 'failed'>('idle');\n\n /**\n * REQ-SCH-IND-CLICK-001 (cycle 201): a Schedule popup-on megjelenített sessionId.\n * `null` esetén a popup zárva.\n */\n readonly schedulePopupSessionId_$ = signal<string | null>(null);\n\n /** Schedule indicator click — popup megnyitása. */\n handleScheduleIndicatorClick(sessionId: string): void {\n this.schedulePopupSessionId_$.set(sessionId);\n }\n\n /** Schedule popup bezárása. */\n handleCloseSchedulePopup(): void {\n this.schedulePopupSessionId_$.set(null);\n }\n\n /**\n * REQ-SES-CRD-IND-001 Slice 3 (cycle 202): a Coordinator popup-on megjelenített sessionId.\n * `null` esetén a popup zárva.\n */\n readonly coordinatorPopupSessionId_$ = signal<string | null>(null);\n\n /** Coordinator indicator click — popup megnyitása. */\n handleCoordinatorIndicatorClick(sessionId: string): void {\n this.coordinatorPopupSessionId_$.set(sessionId);\n }\n\n /** Coordinator popup bezárása. */\n handleCloseCoordinatorPopup(): void {\n this.coordinatorPopupSessionId_$.set(null);\n }\n\n ngOnInit(): void {\n void this.peiContext_DS.initialize();\n void this.session_DS.loadSessions();\n // REQ-SES-SCH-IND-001: schedule-job-lista lekérése a session-row calendar-ikonjához.\n void this.scheduledJobs_DS.loadAll();\n // REQ-SES-CRD-IND-001: koordinátor-lista lekérése a session-row compass-ikonjához.\n void this.coordinator_DS.loadAllCoordinatorsForManagementPage();\n }\n\n /**\n * Session kiválasztás → navigáció a detail nézetbe.\n * Cycle 785b (REQ-INST-SES-URL-001): instance kontextus a route-ban.\n */\n selectSession(sessionId: string): void {\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const target: string[] = ccapId\n ? ['/session', ccapId, sessionId]\n : ['/session', sessionId];\n this.router.navigate(target);\n }\n\n /**\n * Session lista frissítése.\n */\n refreshSessions(): void {\n void this.session_DS.loadSessions();\n }\n\n /**\n * Session archiválása; a Session DS updateSession (lista frissül a DS-ben).\n */\n async archiveSession(sessionId: string): Promise<void> {\n if (this.archiving) {\n return;\n }\n\n this.archiving = true;\n\n try {\n await this.session_DS.updateSession({\n sessionId: sessionId,\n updates: { archived: true },\n });\n } finally {\n this.archiving = false;\n }\n }\n\n /**\n * Session visszahozása az archívumból; a Session DS updateSession (listák frissülnek).\n */\n async deArchiveSession(sessionId: string): Promise<void> {\n if (this.deArchiving) {\n return;\n }\n\n this.deArchiving = true;\n\n try {\n await this.session_DS.updateSession({\n sessionId: sessionId,\n updates: { archived: false },\n });\n } finally {\n this.deArchiving = false;\n }\n }\n\n /**\n * Archivált session-ek betöltése és megjelenítése.\n * Nem várja meg a betöltést; a loading a session_DS.archivedSessionsLoading_$() alapján jelezhető.\n */\n loadArchivedSessions(): void {\n void this.session_DS.loadArchivedSessions().then((): void => {\n this.showArchived = true;\n });\n }\n\n /**\n * Archivált szekció elrejtése.\n */\n hideArchived(): void {\n this.showArchived = false;\n }\n\n /**\n * Új session létrehozása és navigáció a session detail-re.\n * REQ-UI-SES-MOB-AUTOCLOSE-001: a navigálás után explicit bump-szignál a\n * `requestSidebarCloseOnMobileBump_$`-on, hogy a shell-component a mobil\n * sidebar-t akkor is bezárja, ha a route-snapshot lag a NavigationEnd-alapú\n * auto-close-t nem trigerelné megfelelően.\n */\n async createNewSession(): Promise<void> {\n this.creating = true;\n\n try {\n const session: CCAP_SessionListItem_Response =\n await this.session_DS.createSession();\n\n // Cycle 785b: instance kontextus a route-ban.\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const target: string[] = ccapId\n ? ['/session', ccapId, session._id]\n : ['/session', session._id];\n this.router.navigate(target);\n this.session_DS.requestSidebarCloseOnMobileBump_$.update(\n (n: number): number => n + 1,\n );\n } finally {\n this.creating = 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 session: CCAP_SessionListItem_Response | undefined =\n this.session_DS.sessions_$().find(\n (s: CCAP_SessionListItem_Response): boolean => s._id === payload.id,\n )\n || this.session_DS.archivedSessions_$().find(\n (s: CCAP_SessionListItem_Response): boolean => s._id === payload.id,\n );\n if (!session) {\n return;\n }\n this.ctxMenuSession_$.set(session);\n this.ctxMenuPos_$.set({ x: payload.event.clientX, y: payload.event.clientY });\n }\n\n /** Kontextmenü bezárása (rename és copy-link feedback állapot is törlődik). */\n handleCloseCtxMenu(): void {\n this.ctxMenuSession_$.set(null);\n this.isRenaming_$.set(false);\n this.renameValue_$.set('');\n this.linkCopyState_$.set('idle');\n }\n\n /**\n * REQ-SES-CTX-COPY-LINK-001: Copy link a CCAP Session-höz — `${origin}/session[/<ccapId>]/<sessionId>`,\n * ami egy másik gépen / chat-üzenetben is azonosítja és megnyitja a session-t.\n * Sikeres / sikertelen visszajelzés ~700ms után automatikusan zárja a menüt.\n */\n async handleCtxCopyLink(): Promise<void> {\n const session: CCAP_SessionListItem_Response | null = this.ctxMenuSession_$();\n if (!session) {\n return;\n }\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const path: string = ccapId\n ? `/session/${ccapId}/${session._id}`\n : `/session/${session._id}`;\n const url: string = `${window.location.origin}${path}`;\n const result: { ok: boolean } = await this.globalError_CS.copyToClipboard(url);\n this.linkCopyState_$.set(result.ok ? 'copied' : 'failed');\n setTimeout((): void => {\n this.handleCloseCtxMenu();\n }, 700);\n }\n\n /** Archive a kontextmenüből. */\n async handleCtxArchive(): Promise<void> {\n const session: CCAP_SessionListItem_Response | null = this.ctxMenuSession_$();\n if (!session) {\n return;\n }\n this.handleCloseCtxMenu();\n await this.archiveSession(session._id);\n }\n\n /** Unarchive a kontextmenüből. */\n async handleCtxUnarchive(): Promise<void> {\n const session: CCAP_SessionListItem_Response | null = this.ctxMenuSession_$();\n if (!session) {\n return;\n }\n this.handleCloseCtxMenu();\n await this.deArchiveSession(session._id);\n }\n\n /**\n * Session másolása a kontextmenüből.\n * Conversation fork: a forrás session összes üzenetével új session jön létre.\n */\n async handleCtxCopy(): Promise<void> {\n const session: CCAP_SessionListItem_Response | null =\n this.ctxMenuSession_$();\n if (!session || this.copying) {\n return;\n }\n this.copying = true;\n this.handleCloseCtxMenu();\n\n try {\n const copiedSession: CCAP_SessionListItem_Response =\n await this.session_DS.copySession({\n sessionId: session._id,\n });\n // Cycle 785b: instance kontextus a route-ban.\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const target: string[] = ccapId\n ? ['/session', ccapId, copiedSession._id]\n : ['/session', copiedSession._id];\n this.router.navigate(target);\n } finally {\n this.copying = false;\n }\n }\n\n /** Rename mód indítása a kontextmenüből. */\n handleCtxRenameStart(): void {\n const session: CCAP_SessionListItem_Response | null = this.ctxMenuSession_$();\n if (!session) {\n return;\n }\n this.renameValue_$.set(session.name || '');\n this.isRenaming_$.set(true);\n // Fókusz a rename inputra a következő renderelési ciklusban\n setTimeout((): void => {\n const input: HTMLInputElement | null =\n document.querySelector<HTMLInputElement>('#sesRenameInput');\n if (input) {\n input.focus();\n input.select();\n }\n }, 0);\n }\n\n /** Rename végrehajtása (Enter). */\n async handleCtxRenameConfirm(): Promise<void> {\n const session: CCAP_SessionListItem_Response | null = this.ctxMenuSession_$();\n if (!session) {\n return;\n }\n const newName: string = this.renameValue_$().trim();\n if (newName !== (session.name || '')) {\n await this.session_DS.updateSession({\n sessionId: session._id,\n updates: { name: newName },\n });\n }\n this.handleCloseCtxMenu();\n }\n\n // ── Private helpers ─────────────────────────────────────────\n\n /**\n * CCAP_SessionListItem_Response → S_SessionListRowView_Interface mapping.\n * REQ-SES-SCH-IND-001: opcionális `scheduledIds` set a hasSchedule flag-hez.\n * REQ-SES-CRD-IND-001 (cycle 190): opcionális `coordinatedIds` set a hasCoordinator flag-hez.\n */\n private static mapSessionToRowView(\n session: CCAP_SessionListItem_Response,\n scheduledIds?: Set<string>,\n coordinatedIds?: Set<string>,\n ): S_SessionListRowView_Interface {\n const lastMod: Date | string = session.__lastModified;\n const lastActivityAt: string = lastMod instanceof Date\n ? lastMod.toISOString()\n : String(lastMod);\n return {\n id: session._id,\n label: session.name?.trim()\n || session.sessionGoal?.trim()\n || session.sessionIntent?.trim()\n || 'Unnamed Session',\n status: session.status,\n statusColorClass: S_SessionStatusColor_Util.resolve(session.status),\n isArchived: !!session._archived,\n lastActivityAt: lastActivityAt,\n isRunning: S_SessionStatusColor_Util.isRunning(session.status),\n hasSchedule: scheduledIds?.has(session._id) ?? false,\n hasCoordinator: coordinatedIds?.has(session._id) ?? false,\n };\n }\n}\n", "<div class=\"flex flex-col\">\n <!-- Instance-szelektor + info popup host (REQ-PEI-016, REQ-UI-INST-001 Slice 5) -->\n <div class=\"p-2 border-b border-neonDefault\">\n <app-s-instance-chip-row-with-info />\n </div>\n\n <!-- Header: Sessions title + New + Refresh -->\n <div class=\"flex items-center justify-between p-3 border-b border-neonDefault\">\n <h2 class=\"text-sm font-semibold text-neutral-200\">Sessions</h2>\n <div class=\"flex gap-1\">\n <button\n class=\"px-2 py-1 text-xs border border-neonDefault text-neutral-300 hover:bg-neutral-700 rounded transition-colors\"\n type=\"button\"\n title=\"Refresh\"\n (click)=\"refreshSessions()\">\n Refresh\n </button>\n <button\n class=\"px-2 py-1 text-xs border border-ccapAccent text-ccapAccent hover:bg-ccapAccent hover:text-white hover:shadow-neon-glow-accent rounded transition-colors\"\n [disabled]=\"creating\"\n (click)=\"createNewSession()\">\n + New\n </button>\n </div>\n </div>\n\n <!-- Search (REQ-SES-LIST-001): ékezet/kisbetű-érzéketlen match név + goal + intent mezőkre -->\n <div class=\"px-3 pt-2 pb-1 border-b border-neutral-800/60\">\n <input type=\"text\"\n class=\"w-full rounded-md border border-neutral-700 bg-neutral-800 px-2 py-1.5 text-sm\n text-neutral-200 placeholder:text-neutral-600\n focus:outline-none focus:border-neonCyan/60\"\n placeholder=\"Keresés session nevére, goal-ra, intent-re…\"\n title=\"Keresés a session lista nevére, sessionGoal-ra és sessionIntent-re (ékezet/kisbetű-érzéketlen)\"\n [ngModel]=\"searchQuery_$()\"\n (ngModelChange)=\"searchQuery_$.set($event)\" />\n </div>\n\n <!-- Session lista -->\n <div class=\"flex-1 overflow-y-auto\">\n @if (session_DS.sessionsLoading_$()) {\n <div class=\"p-4 text-center text-neutral-500 text-sm\">Loading sessions...</div>\n } @else if (activeSessionRowViews_$().length) {\n <!-- REQ-UI-SSEL-001 Slice 2: közös S_SessionSelect_Component. A ses-list saját\n keresőt tart name + goal + intent mezőkre, ezért `hideSearch=true`. -->\n <app-s-session-select\n kind=\"ccap\"\n [rows]=\"activeSessionRowViews_$()\"\n [activeId]=\"activeSessionId\"\n [hideSearch]=\"true\"\n (selected)=\"selectSession($event)\"\n (contextMenu)=\"handleRowContextMenu($event)\"\n (scheduleIndicatorClicked)=\"handleScheduleIndicatorClick($event)\"\n (coordinatorIndicatorClicked)=\"handleCoordinatorIndicatorClick($event)\" />\n } @else if (session_DS.sessionsLoadError_$()) {\n <div class=\"py-6 px-4\">\n <app-ccap-error-display [error]=\"session_DS.sessionsLoadError_$()\"\n sourceLabelOverride=\"Session lista\"\n class=\"mb-3 block\" />\n <div class=\"text-center\">\n <button class=\"mt-1 px-3 py-1.5 text-xs border border-neonDefault text-neutral-300 hover:bg-neutral-700 rounded transition-colors\"\n type=\"button\"\n (click)=\"refreshSessions()\">\n Try again\n </button>\n </div>\n </div>\n } @else {\n <div class=\"p-4 text-center text-neutral-500 text-sm\">No sessions found</div>\n }\n\n <!-- Archiváltak betöltése / szekció -->\n @if (!session_DS.sessionsLoading_$() && !session_DS.sessionsLoadError_$()) {\n <div class=\"border-t border-neonDefault\">\n @if (!showArchived) {\n <button class=\"w-full px-3 py-2 text-xs text-neutral-500 hover:text-neutral-300 hover:bg-neutral-800 transition-colors\n disabled:opacity-50\"\n type=\"button\"\n [disabled]=\"session_DS.archivedSessionsLoading_$()\"\n (click)=\"loadArchivedSessions()\">\n {{ session_DS.archivedSessionsLoading_$() ? 'Loading...' : 'Show archived' }}\n </button>\n } @else {\n <div class=\"flex items-center justify-between px-3 py-1.5 border-b border-neutral-700/30\">\n <span class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">Archived</span>\n <button class=\"text-[10px] text-neutral-500 hover:text-neutral-300 transition-colors\"\n type=\"button\"\n (click)=\"hideArchived()\">\n Hide\n </button>\n </div>\n @if (session_DS.archivedSessionsLoading_$()) {\n <div class=\"p-4 text-center text-neutral-500 text-sm\">Loading...</div>\n } @else if (archivedSessionRowViews_$().length) {\n <!-- REQ-UI-SSEL-001 Slice 2: ugyanaz a wrapper, archivált sorokra. -->\n <app-s-session-select\n kind=\"ccap\"\n [rows]=\"archivedSessionRowViews_$()\"\n [activeId]=\"activeSessionId\"\n [hideSearch]=\"true\"\n (selected)=\"selectSession($event)\"\n (contextMenu)=\"handleRowContextMenu($event)\"\n (scheduleIndicatorClicked)=\"handleScheduleIndicatorClick($event)\"\n (coordinatorIndicatorClicked)=\"handleCoordinatorIndicatorClick($event)\" />\n } @else {\n <div class=\"p-4 text-center text-neutral-500 text-xs\">No archived sessions</div>\n }\n }\n </div>\n }\n </div>\n</div>\n\n<!-- Context menu overlay -->\n@if (ctxMenuSession_$(); as ctxSession) {\n <div class=\"fixed inset-0 z-40\" (click)=\"handleCloseCtxMenu()\"></div>\n <div class=\"fixed z-50 min-w-[160px] 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\n @if (isRenaming_$()) {\n <!-- Rename inline input -->\n <div class=\"px-2 py-1.5\">\n <input\n #renameInput\n id=\"sesRenameInput\"\n type=\"text\"\n class=\"w-full bg-neutral-800 text-neutral-200 text-xs rounded px-2 py-1 border border-neonDefault\n focus:border-neonCyan focus:outline-none\"\n [value]=\"renameValue_$()\"\n (input)=\"renameValue_$.set(renameInput.value)\"\n (keydown.enter)=\"handleCtxRenameConfirm()\"\n (keydown.escape)=\"handleCloseCtxMenu()\" />\n </div>\n } @else {\n <!-- REQ-SES-CTX-COPY-LINK-001: Copy link — session deep-link a clipboard-ra\n (`${origin}/session[/<ccapId>]/<sessionId>`); másik gépen / chat-ben is megnyitható. -->\n <button\n class=\"w-full text-left px-3 py-1.5 text-neutral-300 hover:bg-neutral-800 transition-colors\"\n [disabled]=\"linkCopyState_$() !== 'idle'\"\n (click)=\"handleCtxCopyLink()\">\n @switch (linkCopyState_$()) {\n @case ('copied') { ✓ Link copied }\n @case ('failed') { Copy failed }\n @default { Copy link }\n }\n </button>\n\n <!-- Copy (conversation fork — másol egy új session-be a tartalmat) -->\n <button\n class=\"w-full text-left px-3 py-1.5 text-neutral-300\n hover:bg-neutral-800 transition-colors\"\n [disabled]=\"copying\"\n (click)=\"handleCtxCopy()\">\n {{ copying ? 'Copying…' : 'Copy' }}\n </button>\n\n <!-- Rename -->\n <button\n class=\"w-full text-left px-3 py-1.5 text-neutral-300 hover:bg-neutral-800 transition-colors\"\n (click)=\"handleCtxRenameStart()\">\n Rename\n </button>\n\n <!-- Archive / Unarchive -->\n @if (ctxSession._archived) {\n <button\n class=\"w-full text-left px-3 py-1.5 text-neutral-300 hover:bg-neutral-800 transition-colors\"\n (click)=\"handleCtxUnarchive()\">\n Unarchive\n </button>\n } @else {\n <button\n class=\"w-full text-left px-3 py-1.5 text-neutral-300 hover:bg-neutral-800 transition-colors\"\n (click)=\"handleCtxArchive()\">\n Archive\n </button>\n }\n }\n </div>\n}\n\n<!-- REQ-SCH-IND-CLICK-001 (cycle 201): Schedule popup a row schedule-indicator gomb click-jén nyit. -->\n<app-sch-schedule-popup\n [sessionId]=\"schedulePopupSessionId_$()\"\n [isOpen]=\"schedulePopupSessionId_$() !== null\"\n (closed)=\"handleCloseSchedulePopup()\" />\n\n<!-- REQ-SES-CRD-IND-001 Slice 3 (cycle 202): Coordinator popup a row coordinator-indicator gomb click-jén nyit. -->\n<app-crd-info-popup\n [sessionId]=\"coordinatorPopupSessionId_$()\"\n [isOpen]=\"coordinatorPopupSessionId_$() !== null\"\n (closed)=\"handleCloseCoordinatorPopup()\" />\n", "import {\n AC_RunExecutionMode_Type,\n AC_RunExecutionPaletteConstraint_Type,\n} from '@server-enums';\n\n/**\n * Run execution mode és palette constraint rövid, UI-barát címkék (Hunglish).\n * SSOT a run summary / chat státusz szövegekhez.\n */\nexport class CCAP_RunExecutionUiLabels_Util {\n\n /**\n * `runExecutionMode` enum / nyers string → megjelenítendő címke (ismeretlen → üres).\n */\n static labelForRunExecutionMode(raw: string | undefined): string {\n if (raw == null || raw.trim() === '') {\n return '';\n }\n const v: string = raw.trim();\n const modes: AC_RunExecutionMode_Type[] = [\n AC_RunExecutionMode_Type.instant,\n AC_RunExecutionMode_Type.agenticAny,\n AC_RunExecutionMode_Type.ask,\n AC_RunExecutionMode_Type.plan,\n ];\n for (const m of modes) {\n if (v === m) {\n return CCAP_RunExecutionUiLabels_Util.runModeLabelMap[m];\n }\n }\n return '';\n }\n\n /**\n * Palette constraint enum / nyers string → megjelenítendő címke (ismeretlen → üres).\n */\n static labelForPaletteConstraint(raw: string | undefined): string {\n if (raw == null || raw.trim() === '') {\n return '';\n }\n const v: string = raw.trim();\n const items: AC_RunExecutionPaletteConstraint_Type[] = [\n AC_RunExecutionPaletteConstraint_Type.full,\n AC_RunExecutionPaletteConstraint_Type.askOnly,\n AC_RunExecutionPaletteConstraint_Type.planOnly,\n ];\n for (const c of items) {\n if (v === c) {\n return CCAP_RunExecutionUiLabels_Util.paletteLabelMap[c];\n }\n }\n return '';\n }\n\n /** runExecutionMode → rövid magyarázó szöveg. */\n private static readonly runModeLabelMap: Record<AC_RunExecutionMode_Type, string> = {\n [AC_RunExecutionMode_Type.instant]: 'Instant (no tools)',\n [AC_RunExecutionMode_Type.agenticAny]: 'Agentic (full tools)',\n [AC_RunExecutionMode_Type.ask]: 'Ask (read-only tools)',\n [AC_RunExecutionMode_Type.plan]: 'Plan (+ plan tool)',\n };\n\n /** Palette constraint → rövid magyarázó szöveg. */\n private static readonly paletteLabelMap: Record<AC_RunExecutionPaletteConstraint_Type, string> = {\n [AC_RunExecutionPaletteConstraint_Type.full]: 'Palette: full',\n [AC_RunExecutionPaletteConstraint_Type.askOnly]: 'Palette: ask-only',\n [AC_RunExecutionPaletteConstraint_Type.planOnly]: 'Palette: plan-only',\n };\n}\n", "import { inject, Injectable, OnDestroy, signal, WritableSignal } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { DyFM_Error } from '@futdevpro/fsm-dynamo';\n\nimport {\n CCAP_MonitoringEventDisplay_Response,\n} from '../../../../_models/interfaces/monitoring-server-socket/ccap-monitoring-event-display.interface';\nimport {\n Ses_Monitoring_ApiService,\n} from '../api-services/ses-monitoring.api-service';\nimport {\n Session_DataService,\n} from './session.data-service';\n\n/**\n * Monitoring data service (REQ-MSG-010, REQ-MSG-012).\n * Monitoring event-ek state management-je; real-time event-ek Socket-ról.\n */\n@Injectable({ providedIn: 'root' })\nexport class Ses_Monitoring_DataService implements OnDestroy {\n\n /** Aktuális session ID (loadSessionEvents és real-time szűréshez). */\n private currentSessionId: string = '';\n\n /** Monitoring event-ek (signal). */\n readonly events_$: WritableSignal<CCAP_MonitoringEventDisplay_Response[]> =\n signal<CCAP_MonitoringEventDisplay_Response[]>([]);\n\n /** Event lista betöltés folyamatban (UI loading indicator). */\n readonly eventsLoading_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /**\n * HTTP run trace cache (csak szerver válasz); a buborék UI a buildMergedRunTrace()-sel\n * egyesíti a Socket-ról gyűjtött events_$ sorokkal.\n */\n private httpRunTraceCache: Map<string, CCAP_MonitoringEventDisplay_Response[]> = new Map();\n\n /** Subject subscription a megbízható monitoring event delivery-hez. */\n private monitoringSubscription: Subscription | null = null;\n\n private readonly monitoring_AS: Ses_Monitoring_ApiService =\n inject(Ses_Monitoring_ApiService);\n private readonly session_DS: Session_DataService = inject(Session_DataService);\n\n constructor() {\n // Subject-alapú monitoring event feldolgozás: minden event garantáltan megérkezik,\n // ellentétben a signal→effect pipeline-nal, ahol a batch-elés miatt köztes event-ek elveszhetnek.\n this.monitoringSubscription = this.session_DS.monitoringEvent_S.subscribe(\n (payload: { sessionId: string; event: Record<string, unknown> }): void => {\n const activeId: string = this.session_DS.activeSessionId_$().trim();\n if (activeId.length > 0 && payload.sessionId.trim() === activeId) {\n this.pushEvent(payload.sessionId.trim(), payload.event);\n }\n },\n );\n }\n\n /**\n * Egy real-time event hozzáadása a listához.\n */\n private pushEvent(\n sessionId: string,\n event: Record<string, unknown>,\n ): void {\n const display: CCAP_MonitoringEventDisplay_Response = {\n eventType: (event.eventType ?? '') as string,\n timestamp: new Date((event.timestamp as string) ?? Date.now()),\n data: (event.data ?? event) as Record<string, unknown>,\n durationMs: (event.durationMs ?? 0) as number,\n status: (event.status ?? '') as string,\n sessionId: sessionId,\n runId: (event.runId ?? '') as string,\n inputSize: (event.inputSize ?? 0) as number,\n outputSize: (event.outputSize ?? 0) as number,\n };\n\n this.events_$.update(\n (current: CCAP_MonitoringEventDisplay_Response[]): CCAP_MonitoringEventDisplay_Response[] =>\n [...current, display],\n );\n }\n\n /**\n * Session monitoring event-ek betöltése a szerverről.\n */\n async loadSessionEvents(sessionId: string): Promise<void> {\n const sid: string = sessionId.trim();\n this.currentSessionId = sid;\n this.eventsLoading_$.set(true);\n\n try {\n const response = await this.monitoring_AS.getEvents(sid);\n\n this.events_$.set(response.events);\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_MonitoringDS | Failed to load events',\n error,\n );\n } finally {\n this.eventsLoading_$.set(false);\n }\n }\n\n /**\n * Run trace betöltése.\n */\n async loadRunTrace(params: {\n sessionId: string;\n runId: string;\n }): Promise<void> {\n try {\n const response = await this.monitoring_AS.getRunTrace(params);\n\n this.events_$.set(response.trace);\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_MonitoringDS | Failed to load run trace',\n error,\n );\n }\n }\n\n ngOnDestroy(): void {\n if (this.monitoringSubscription) {\n this.monitoringSubscription.unsubscribe();\n this.monitoringSubscription = null;\n }\n }\n\n /**\n * Event-ek törlése.\n */\n clearEvents(): void {\n this.events_$.set([]);\n }\n\n /**\n * HTTP trace + élő events_$ összeállítása (dedupe + időrend).\n */\n buildMergedRunTrace(\n sessionId: string,\n runId: string,\n ): CCAP_MonitoringEventDisplay_Response[] {\n const sid: string = sessionId.trim();\n const rid: string = runId.trim();\n const key: string = `${sid}:${rid}`;\n const httpPart: CCAP_MonitoringEventDisplay_Response[] =\n this.httpRunTraceCache.get(key) ?? [];\n const livePart: CCAP_MonitoringEventDisplay_Response[] =\n this.filterEventsForRun(sid, rid);\n return this.mergeTraceLists(httpPart, livePart);\n }\n\n /**\n * Run trace lekérdezése vagy betöltése (HTTP cache + events_$ merge); message-bubble lazy load.\n */\n async getOrLoadRunTrace(\n sessionId: string,\n runId: string,\n ): Promise<CCAP_MonitoringEventDisplay_Response[]> {\n const sid: string = sessionId.trim();\n const rid: string = runId.trim();\n if (!sid || !rid) {\n return [];\n }\n const key: string = `${sid}:${rid}`;\n if (!this.httpRunTraceCache.has(key)) {\n try {\n const response = await this.monitoring_AS.getRunTrace({\n sessionId: sid,\n runId: rid,\n });\n const rawTrace: unknown[] = Array.isArray(response.trace) ? response.trace : [];\n const normalized: CCAP_MonitoringEventDisplay_Response[] = rawTrace.map(\n (e: unknown): CCAP_MonitoringEventDisplay_Response => {\n const row: Record<string, unknown> =\n (e !== null && typeof e === 'object') ? (e as Record<string, unknown>) : {};\n return {\n eventType: (row.eventType ?? '') as string,\n timestamp: row.timestamp\n ? new Date(row.timestamp as string)\n : new Date(),\n data: (row.data ?? row) as Record<string, unknown>,\n durationMs: (row.durationMs ?? 0) as number,\n status: (row.status ?? '') as string,\n sessionId: (row.sessionId ?? sid) as string,\n runId: String(row.runId ?? rid).trim(),\n inputSize: (row.inputSize ?? 0) as number,\n outputSize: (row.outputSize ?? 0) as number,\n };\n },\n );\n this.httpRunTraceCache.set(key, normalized);\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_MonitoringDS | Failed to load run trace for bubble',\n error,\n );\n throw error;\n }\n }\n return this.buildMergedRunTrace(sid, rid);\n }\n\n /**\n * events_$ szűrése session + run szerint (trim egyeztetés).\n */\n private filterEventsForRun(\n sessionId: string,\n runId: string,\n ): CCAP_MonitoringEventDisplay_Response[] {\n const sid: string = sessionId.trim();\n const rid: string = runId.trim();\n return this.events_$().filter(\n (e: CCAP_MonitoringEventDisplay_Response): boolean =>\n e.sessionId.trim() === sid && String(e.runId ?? '').trim() === rid,\n );\n }\n\n /**\n * Két trace lista egyesítése dedupe kulccsal, majd idő szerint rendezés.\n */\n private mergeTraceLists(\n a: CCAP_MonitoringEventDisplay_Response[],\n b: CCAP_MonitoringEventDisplay_Response[],\n ): CCAP_MonitoringEventDisplay_Response[] {\n const dedupeKey: (e: CCAP_MonitoringEventDisplay_Response) => string = (\n e: CCAP_MonitoringEventDisplay_Response,\n ): string =>\n `${e.timestamp.valueOf()}-${e.eventType}-${e.status}-${e.durationMs}`;\n const byKey: Map<string, CCAP_MonitoringEventDisplay_Response> = new Map();\n for (const e of a) {\n byKey.set(dedupeKey(e), e);\n }\n for (const e of b) {\n byKey.set(dedupeKey(e), e);\n }\n return Array.from(byKey.values()).sort(\n (x: CCAP_MonitoringEventDisplay_Response, y: CCAP_MonitoringEventDisplay_Response): number =>\n x.timestamp.valueOf() - y.timestamp.valueOf(),\n );\n }\n}\n", "import { CCAP_AgentConsoleBubbleKind_Type } from '../../../_enums/shared/ccap-agent-console-bubble-kind.enum';\nimport {\n CCAP_AgentConsoleBubbleTts_Interface,\n CCAP_AgentConsoleBubbleView_Interface,\n} from '../../../_models/interfaces/shared/ccap-agent-console-bubble-view.interface';\nimport { DisplayString_Util } from '../../../_collections/display/display-string.util';\n\nimport { Ses_ClientMessage_Response } from '../_services/api-services/conversation.api-service.interface';\n\n/**\n * CCAP Session üzenet → shared BubbleView konverzió.\n * Minden role-t (user, assistant, system, tool, stb.) a shared bubble\n * interfészre mappelja a shared agent console bubble komponenshez.\n */\nexport class SES_MessageToBubbleView_Util {\n\n /**\n * Ses_ClientMessage_Response → CCAP_AgentConsoleBubbleView_Interface.\n * Minden üzenet role-t kezel: user, assistant, system (flag-ekkel), tool, egyéb.\n */\n static fromClientMessage(\n msg: Ses_ClientMessage_Response,\n sessionId: string,\n ): CCAP_AgentConsoleBubbleView_Interface {\n const content: string = DisplayString_Util.toDisplayString(msg.content);\n const timestampIso: string = msg.timestamp instanceof Date\n ? msg.timestamp.toISOString()\n : new Date(msg.timestamp).toISOString();\n const isUser: boolean = msg.role === 'user';\n\n // TTS: csak user és assistant role-okhoz\n const tts: CCAP_AgentConsoleBubbleTts_Interface | undefined =\n msg.messageKey && (isUser || msg.role === 'assistant')\n ? {\n messageKey: msg.messageKey,\n sessionId: sessionId,\n role: msg.role,\n content: content,\n timestampIso: timestampIso,\n hasTtsAudio: msg.hasTtsAudio === true,\n }\n : undefined;\n\n // Kind és bodyText meghatározása role + system flag alapján\n const resolved: { kind: CCAP_AgentConsoleBubbleKind_Type; bodyText: string; isError: boolean } =\n SES_MessageToBubbleView_Util.resolveKind(msg.role, content);\n\n // REQ-SES-RAWINFO-001: rawData populálása a CCAP session bubble info-gombjához.\n // A nyers message JSON-ja (role, content, timestamp, messageKey, runId, hasTtsAudio)\n // — ezeket a `s-agent-console-message-bubble` raw overlay rendereli, ha\n // `flags.showRawInfo` engedélyezi és `hasBubbleRawSources` igazat ad.\n const rawData: Record<string, unknown> = {\n role: msg.role,\n content: msg.content,\n timestamp: timestampIso,\n };\n if (msg.messageKey) {\n rawData.messageKey = msg.messageKey;\n }\n if (msg.runId) {\n rawData.runId = msg.runId;\n }\n if (msg.clientListKey) {\n rawData.clientListKey = msg.clientListKey;\n }\n if (msg.hasTtsAudio !== undefined) {\n rawData.hasTtsAudio = msg.hasTtsAudio;\n }\n\n return {\n listKey: msg.clientListKey ?? msg.messageKey ?? '',\n kind: resolved.kind,\n bodyText: resolved.bodyText,\n timestampIso: timestampIso,\n isUserAligned: isUser,\n headerStatusDot: resolved.isError ? 'error' : undefined,\n flags: {\n showCopy: true,\n showRawInfo: true,\n useEditDiffForExpandable: false,\n },\n rawData: rawData,\n tts: tts,\n };\n }\n\n /**\n * Role + tartalom alapján meghatározza a bubble kind-ot és a tisztított szöveget.\n * A system üzenetekből a flag prefix-et ([ERROR], [INFO], stb.) eltávolítja.\n */\n private static resolveKind(\n role: string,\n content: string,\n ): { kind: CCAP_AgentConsoleBubbleKind_Type; bodyText: string; isError: boolean } {\n if (role === 'user') {\n return { kind: CCAP_AgentConsoleBubbleKind_Type.userPrompt, bodyText: content, isError: false };\n }\n if (role === 'assistant') {\n return { kind: CCAP_AgentConsoleBubbleKind_Type.assistant, bodyText: content, isError: false };\n }\n if (role === 'tool') {\n return { kind: CCAP_AgentConsoleBubbleKind_Type.toolResult, bodyText: content, isError: false };\n }\n if (role === 'system') {\n return SES_MessageToBubbleView_Util.resolveSystemKind(content);\n }\n // Ismeretlen role → raw\n return { kind: CCAP_AgentConsoleBubbleKind_Type.raw, bodyText: content, isError: false };\n }\n\n /**\n * System üzenet flag prefix → bubble kind mapping.\n * A prefix-et eltávolítja a megjelenített szövegből.\n */\n private static resolveSystemKind(\n content: string,\n ): { kind: CCAP_AgentConsoleBubbleKind_Type; bodyText: string; isError: boolean } {\n const trimmed: string = content.trim();\n\n if (trimmed.startsWith('[TOOL_ERROR]')) {\n return { kind: CCAP_AgentConsoleBubbleKind_Type.error, bodyText: trimmed.slice(12).trim(), isError: true };\n }\n if (trimmed.startsWith('[ERROR]')) {\n return { kind: CCAP_AgentConsoleBubbleKind_Type.error, bodyText: trimmed.slice(7).trim(), isError: true };\n }\n if (trimmed.startsWith('[TOOL_RESULT]')) {\n return { kind: CCAP_AgentConsoleBubbleKind_Type.toolResult, bodyText: trimmed.slice(13).trim(), isError: false };\n }\n if (trimmed.startsWith('[INFO]')) {\n return { kind: CCAP_AgentConsoleBubbleKind_Type.info, bodyText: trimmed.slice(6).trim(), isError: false };\n }\n if (trimmed.startsWith('[AGENT]')) {\n return { kind: CCAP_AgentConsoleBubbleKind_Type.statusUpdate, bodyText: trimmed.slice(7).trim(), isError: false };\n }\n if (trimmed.startsWith('[QUEUE]')) {\n return { kind: CCAP_AgentConsoleBubbleKind_Type.info, bodyText: trimmed.slice(7).trim(), isError: false };\n }\n // Plain system → status update (teal)\n return { kind: CCAP_AgentConsoleBubbleKind_Type.statusUpdate, bodyText: content, isError: false };\n }\n}\n", "import { SHR_PromptDraftStorage_Util } from '../../shared/_collections/utils/shr-prompt-draft-storage.util';\n\n/** localStorage prefix a CCAP Session input-ok mentéséhez. */\nconst STORAGE_PREFIX = 'ccap-ccapSession';\n\n/**\n * REQ-SES-INPUT-DRAFT-001 (cycle 196): CCAP Session input-piszkozat localStorage kezelése.\n *\n * A user kérése: a CC Sessionben már működik per-session draft persistence\n * (cycle 189 REQ-CC-INPUT-CLEAR-001 + a cycle 169 körüli draft-restore minta);\n * ugyanezt a viselkedést szeretnék a CCAP Sessionben is.\n *\n * Cycle 217 follow-up: az \"egységesített megoldás\" — a 3 prompt-draft metódus\n * delegálódik a `SHR_PromptDraftStorage_Util` shared util-ra (a `CC_InputStorage_Util`\n * is ugyanezt a shared util-t használja). A localStorage kulcs-formátum\n * (`ccap-ccapSession:promptDraft:{sessionId}`) változatlan — backward-compat.\n *\n * Send-flow használat (cycle 189 minta):\n * 1. user típus → `savePromptDraft(sessionId, content)` minden ngModelChange-en\n * 2. ngOnChanges sessionId váltás → `loadPromptDraft(sessionId)` → input feltöltés\n * 3. send-START → `clearPromptDraft(sessionId)` (await ELŐTT, hogy navigálás közben se legyen stuck)\n * 4. await sikeres → in-memory clear (a localStorage már üres)\n * 5. catch → `savePromptDraft(sessionId, content)` restore (retry-nál ne vesszen el)\n */\nexport class Ses_InputStorage_Util {\n\n /** Per-session prompt piszkozat mentése. */\n static savePromptDraft(sessionId: string, content: string): void {\n SHR_PromptDraftStorage_Util.saveDraft(STORAGE_PREFIX, sessionId, content);\n }\n\n /** Per-session prompt piszkozat betöltése; üres string ha nincs. */\n static loadPromptDraft(sessionId: string): string {\n return SHR_PromptDraftStorage_Util.loadDraft(STORAGE_PREFIX, sessionId);\n }\n\n /** Per-session prompt piszkozat törlése (sikeres küldés után). */\n static clearPromptDraft(sessionId: string): void {\n SHR_PromptDraftStorage_Util.clearDraft(STORAGE_PREFIX, sessionId);\n }\n}\n", "import { Component, Output, EventEmitter, input, computed, Signal } from '@angular/core';\n\nimport {\n CCAP_MonitoringEventDisplay_Response,\n} from '../../../../_models/interfaces/monitoring-server-socket/ccap-monitoring-event-display.interface';\nimport { AC_LlmDebugTraceEntry_Response } from '../../../../_models/server-index';\n\nconst DEFAULT_EVENT: CCAP_MonitoringEventDisplay_Response = {\n eventType: '',\n timestamp: new Date(),\n data: {},\n durationMs: 0,\n status: '',\n sessionId: '',\n runId: '',\n inputSize: 0,\n outputSize: 0,\n};\n\n/**\n * Trace detail komponens.\n * LLM hívás, tool hívás, kompaktálás részletek megjelenítése.\n * LLM call event esetén a szülőtől kapott debug trace entries-ből szűri a relevánsakat.\n */\n@Component({\n selector: 'app-ccap-trace-detail',\n templateUrl: './ses-trace-detail.component.html',\n})\n/** Ses_TraceDetail_Component class. */\nexport class Ses_TraceDetail_Component {\n\n event = input<CCAP_MonitoringEventDisplay_Response>(DEFAULT_EVENT);\n\n /** Debug trace bejegyzések (a szülő trace block-ból, teljes run-ra). */\n debugTraceEntries = input<AC_LlmDebugTraceEntry_Response[]>([]);\n\n @Output() close: EventEmitter<void> = new EventEmitter();\n\n /** Event data JSON formázása (computed). */\n readonly formattedData_$ = computed(\n (): string => JSON.stringify(this.event().data, null, 2),\n );\n\n /** LLM call event-e (computed): debug trace szekció megjelenítéséhez. */\n readonly isLlmCall_$ = computed(\n (): boolean => this.event().eventType === 'llm-call',\n );\n\n /** Az aktuális llm-call event-hez illeszkedő debug trace bejegyzések (callTag match). */\n readonly matchedDebugEntries_$: Signal<AC_LlmDebugTraceEntry_Response[]> = computed(\n (): AC_LlmDebugTraceEntry_Response[] => {\n if (!this.isLlmCall_$()) {\n return [];\n }\n const all: AC_LlmDebugTraceEntry_Response[] = this.debugTraceEntries();\n const data: Record<string, unknown> = this.event().data ?? {};\n const llmTag: string = typeof data.llmTag === 'string' ? data.llmTag as string : '';\n if (!llmTag || !all.length) {\n return [];\n }\n return all.filter(\n (e: AC_LlmDebugTraceEntry_Response): boolean => e.callTag === llmTag,\n );\n },\n );\n\n /**\n * data mező érték formázása (string vagy JSON).\n */\n formatDataValue(value: unknown): string {\n if (value === undefined || value === null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n return JSON.stringify(value, null, 2);\n }\n\n /**\n * Debug trace payload formázása.\n */\n formatPayload(payload: Record<string, unknown>): string {\n if (!payload) {\n return '';\n }\n return JSON.stringify(payload, null, 2);\n }\n\n /**\n * Panel bezárása.\n */\n onClose(): void {\n this.close.emit();\n }\n}\n", "<!-- BUG-VC-002 pattern: max-h-[80vh] Tailwind fallback + inline max-height: 80dvh a modern mobil iOS Safari dynamic toolbar-aware viewport-jára. -->\n<div class=\"w-[560px] max-w-[90vw] max-h-[80vh] bg-[#121220]\n border border-neonDefault rounded-lg p-4 overflow-y-auto shadow-2xl\"\n style=\"max-height: 80dvh;\">\n <div class=\"flex justify-between items-center mb-4 min-h-[44px]\">\n <h4 class=\"text-sm font-bold\">{{ event().eventType }} - Trace Detail</h4>\n <button class=\"px-2.5 py-1 min-h-[44px] min-w-[44px] flex items-center justify-center\n border border-neonCyan rounded bg-transparent text-neutral-200 cursor-pointer\n hover:bg-neutral-800 hover:shadow-neon-glow-cyan\"\n (click)=\"onClose()\"\n aria-label=\"Bezárás\">X</button>\n </div>\n\n <div class=\"flex flex-col gap-1 text-[13px] text-neutral-300\n mb-4 pb-4 border-b border-neonDefault\">\n <div><strong>Status:</strong> {{ event().status }}</div>\n <div><strong>Duration:</strong> {{ event().durationMs }}ms</div>\n @if (event().inputSize) {\n <div><strong>Input size:</strong> {{ event().inputSize }}</div>\n }\n @if (event().outputSize) {\n <div><strong>Output size:</strong> {{ event().outputSize }}</div>\n }\n @if (event().runId) {\n <div><strong>Run ID:</strong> {{ event().runId }}</div>\n }\n </div>\n\n @if (event().data['dts']) {\n <div class=\"mb-4\">\n <h5 class=\"text-xs uppercase text-neutral-400 mb-2\">DTS</h5>\n <pre class=\"bg-[#0a0a15] border border-neonDefault rounded-md p-3\n text-xs text-neutral-200 overflow-x-auto whitespace-pre-wrap\n break-words\">{{ formatDataValue(event().data['dts']) }}</pre>\n </div>\n }\n @if (event().data['conversationSlice']) {\n <div class=\"mb-4\">\n <h5 class=\"text-xs uppercase text-neutral-400 mb-2\">Conversation (felhasznált)</h5>\n <pre class=\"bg-[#0a0a15] border border-neonDefault rounded-md p-3\n text-xs text-neutral-200 overflow-x-auto whitespace-pre-wrap\n break-words\">{{ formatDataValue(event().data['conversationSlice']) }}</pre>\n </div>\n }\n @if (event().data['decisionSummary']) {\n <div class=\"mb-4\">\n <h5 class=\"text-xs uppercase text-neutral-400 mb-2\">Döntési pontok</h5>\n <pre class=\"bg-[#0a0a15] border border-neonDefault rounded-md p-3\n text-xs text-neutral-200 overflow-x-auto whitespace-pre-wrap\n break-words\">{{ formatDataValue(event().data['decisionSummary']) }}</pre>\n </div>\n }\n\n <div>\n <h5 class=\"text-xs uppercase text-neutral-400 mb-2\">Event Data</h5>\n <pre class=\"bg-[#0a0a15] border border-neonDefault rounded-md p-3\n text-xs text-neutral-200 overflow-x-auto whitespace-pre-wrap\n break-words\">{{ formattedData_$() }}</pre>\n </div>\n\n <!-- LLM Debug Trace szekció (csak llm-call event-eknél, ha van matched entry) -->\n @if (isLlmCall_$() && matchedDebugEntries_$().length) {\n <div class=\"mt-4 pt-4 border-t border-purple-500/30\">\n <h5 class=\"text-xs uppercase text-purple-400 mb-2\">LLM Debug Trace</h5>\n <div class=\"flex flex-col gap-2\">\n @for (entry of matchedDebugEntries_$(); track entry._id) {\n <div class=\"bg-[#0a0a15] border border-neonDefault rounded-md p-3\">\n <div class=\"flex items-center gap-2 mb-1.5 text-[11px]\">\n <span class=\"px-1.5 py-0.5 rounded text-[10px] font-semibold\"\n [ngClass]=\"{\n 'bg-purple-500/20 text-purple-300': entry.eventKind === 'prompt',\n 'bg-green-500/20 text-green-300': entry.eventKind === 'result',\n 'bg-yellow-500/20 text-yellow-300': entry.eventKind === 'tool-result',\n 'bg-blue-500/20 text-blue-300': entry.eventKind === 'agent-think',\n 'bg-red-500/20 text-red-300': entry.eventKind === 'error'\n }\">{{ entry.eventKind }}</span>\n <span class=\"text-neutral-500\">{{ entry.callTag }}</span>\n @if (entry.provider) {\n <span class=\"text-neutral-600\">{{ entry.provider }}</span>\n }\n </div>\n <pre class=\"text-xs text-neutral-200 overflow-x-auto whitespace-pre-wrap\n break-words max-h-[300px] overflow-y-auto\">{{ formatPayload(entry.payload) }}</pre>\n </div>\n }\n </div>\n </div>\n }\n</div>\n", "import { Component, computed, EventEmitter, input, Output, signal, Signal } from '@angular/core';\n\nimport {\n CCAP_MonitoringEventDisplay_Response,\n} from '../../../../_models/interfaces/monitoring-server-socket/ccap-monitoring-event-display.interface';\nimport { Ses_RunFlowEventDisplay_Util } from '../../_collections/run-flow-event-display.util';\nimport { AC_LlmDebugTraceEntry_Response } from '../../../../_models/server-index';\n\n/**\n * Event lista elem komponens (list nézet).\n * Event típus alapján eltérő megjelenítés: llm-call, tool-call, step, error, generic.\n * Kattintásra detail popup nyitás.\n */\n@Component({\n selector: 'app-ccap-event-list-item',\n templateUrl: './ses-event-list-item.component.html',\n styles: [`:host { display: block; }`],\n})\n/** Ses_EventListItem_Component class. */\nexport class Ses_EventListItem_Component {\n\n /** Megjelenítendő monitoring event. */\n readonly event = input.required<CCAP_MonitoringEventDisplay_Response>();\n\n /** LLM debug trace bejegyzések (a szülő trace block-ból). */\n readonly debugTraceEntries = input<AC_LlmDebugTraceEntry_Response[]>([]);\n\n /** Kattintás: detail popup megnyitása. */\n @Output() itemClick: EventEmitter<CCAP_MonitoringEventDisplay_Response> =\n new EventEmitter<CCAP_MonitoringEventDisplay_Response>();\n\n /** Emoji ikon (computed). */\n readonly emoji_$: Signal<string> = computed(\n (): string => Ses_RunFlowEventDisplay_Util.getEmoji(this.event()),\n );\n\n /** CSS keret/háttér osztályok (computed). */\n readonly borderClasses_$: Signal<string> = computed(\n (): string => Ses_RunFlowEventDisplay_Util.getBubbleClasses(this.event()),\n );\n\n /** Elsődleges címke (computed). */\n readonly label_$: Signal<string> = computed(\n (): string => Ses_RunFlowEventDisplay_Util.getStepLabel(this.event()),\n );\n\n /** Event kategória meghatározása (computed): llm, tool, step, error, generic. */\n readonly category_$: Signal<string> = computed((): string => {\n const ev: CCAP_MonitoringEventDisplay_Response = this.event();\n if (ev.eventType === 'llm-call') {\n return 'llm';\n }\n if (ev.eventType === 'tool-call') {\n return 'tool';\n }\n if (ev.eventType === 'error') {\n return 'error';\n }\n if (ev.eventType === 'step') {\n return 'step';\n }\n return 'generic';\n });\n\n /** Duration formázva (computed). */\n readonly durationLabel_$: Signal<string> = computed((): string => {\n const ms: number = this.event().durationMs;\n if (!ms) {\n return '';\n }\n return ms >= 1000 ? `${(ms / 1000).toFixed(1)}s` : `${ms}ms`;\n });\n\n /** Status szöveg (computed). */\n readonly status_$: Signal<string> = computed(\n (): string => this.event().status ?? '',\n );\n\n /** LLM call type (computed, csak llm event-eknél releváns). */\n readonly llmCallType_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const ct: unknown = data.callType;\n return typeof ct === 'string' ? Ses_RunFlowEventDisplay_Util.formatStepId(ct) : '';\n });\n\n /** LLM model (computed). */\n readonly llmModel_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const model: unknown = data.model;\n return typeof model === 'string' ? model : '';\n });\n\n /** Tool ID (computed, csak tool event-eknél). */\n readonly toolId_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const tid: unknown = data.toolId;\n return typeof tid === 'string' ? tid : '';\n });\n\n /** Error üzenet (computed, csak error event-eknél). */\n readonly errorMessage_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const msg: unknown = data.message ?? data.error;\n if (typeof msg === 'string') {\n return msg.length > 120 ? msg.substring(0, 120) + '…' : msg;\n }\n return '';\n });\n\n /** Input/output méret (computed). */\n readonly sizeLabel_$: Signal<string> = computed((): string => {\n const ev: CCAP_MonitoringEventDisplay_Response = this.event();\n const parts: string[] = [];\n if (ev.inputSize) {\n parts.push(`in: ${ev.inputSize}`);\n }\n if (ev.outputSize) {\n parts.push(`out: ${ev.outputSize}`);\n }\n return parts.join(' / ');\n });\n\n // --- Brief computed signal-ök (típusonként) ---\n\n /** LLM brief: token statisztika (computed). */\n readonly llmTokenBrief_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const prompt: unknown = data.promptTokens;\n const completion: unknown = data.completionTokens;\n if (typeof prompt === 'number' && typeof completion === 'number') {\n return `${prompt} → ${completion} tokens`;\n }\n return '';\n });\n\n /** LLM brief: finish reason (computed). */\n readonly llmFinishReason_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const fr: unknown = data.finishReason;\n return typeof fr === 'string' ? fr : '';\n });\n\n /** LLM brief: provider (computed). */\n readonly llmProvider_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const p: unknown = data.provider;\n return typeof p === 'string' ? p : '';\n });\n\n /** Step brief: step altípus (computed). */\n readonly stepType_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const step: unknown = data.step;\n return typeof step === 'string' ? step : '';\n });\n\n /** Step brief: message preview (run-initialization) (computed). */\n readonly stepMessagePreview_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const preview: unknown = data.messagePreview;\n if (typeof preview === 'string') {\n return preview.length > 80 ? preview.substring(0, 80) + '…' : preview;\n }\n return '';\n });\n\n /** Step brief: run intent (run-flow-complete) (computed). */\n readonly stepRunIntent_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const intent: unknown = data.runIntent;\n return typeof intent === 'string' ? intent : '';\n });\n\n /** Step brief: run summary (run-flow-complete) (computed). */\n readonly stepRunSummary_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const summary: unknown = data.runSummary;\n if (typeof summary === 'string') {\n return summary.length > 120 ? summary.substring(0, 120) + '…' : summary;\n }\n return '';\n });\n\n /** Tool brief: tool error szöveg (computed). */\n readonly toolError_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const err: unknown = data.error;\n if (typeof err === 'string' && err.length > 0) {\n return err.length > 100 ? err.substring(0, 100) + '…' : err;\n }\n return '';\n });\n\n /** Tool brief: tool category (computed). */\n readonly toolCategory_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const cat: unknown = data.toolCategory;\n return typeof cat === 'string' ? cat : '';\n });\n\n /** Step brief: iteration action (agentic-loop-iteration) (computed). */\n readonly iterationAction_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const action: unknown = data.action;\n return typeof action === 'string' ? action : '';\n });\n\n /** Step brief: iteration intent (agentic-loop-iteration) (computed). */\n readonly iterationIntent_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const intent: unknown = data.intent;\n if (typeof intent === 'string') {\n return intent.length > 80 ? intent.substring(0, 80) + '…' : intent;\n }\n return '';\n });\n\n /** Step brief: iteration tool (agentic-loop-iteration) (computed). */\n readonly iterationTool_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const tool: unknown = data.tool ?? data.toolGroup;\n return typeof tool === 'string' ? tool : '';\n });\n\n /** Step brief: iteration index (computed). */\n readonly iterationIndex_$: Signal<number> = computed((): number => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const iter: unknown = data.iteration;\n return typeof iter === 'number' ? iter : 0;\n });\n\n /** Step brief: isNewSession flag (run-initialization) (computed). */\n readonly isNewSession_$: Signal<boolean> = computed((): boolean => {\n const data: Record<string, unknown> = this.event().data ?? {};\n return data.isNewSession === true;\n });\n\n /** Step brief: runGoal (execution-start) (computed). */\n readonly runGoal_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const goal: unknown = data.runGoal;\n if (typeof goal === 'string') {\n return goal.length > 100 ? goal.substring(0, 100) + '…' : goal;\n }\n return '';\n });\n\n /** Step brief: hasAgentFeedback (agentic-loop-iteration) (computed). */\n readonly hasAgentFeedback_$: Signal<boolean> = computed((): boolean => {\n const data: Record<string, unknown> = this.event().data ?? {};\n return data.hasAgentFeedback === true;\n });\n\n /** Finalization: answer preview (computed). */\n readonly finalizationAnswer_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const result: unknown = data.result;\n if (typeof result === 'object' && result !== null) {\n const answer: unknown = (result as Record<string, unknown>)['answerToUser'];\n if (typeof answer === 'string') {\n return answer.length > 120 ? answer.substring(0, 120) + '…' : answer;\n }\n }\n return '';\n });\n\n /** Compacting: méretcsökkentés (computed). */\n readonly compactingSizeReduction_$: Signal<string> = computed((): string => {\n const data: Record<string, unknown> = this.event().data ?? {};\n const initial: unknown = data.initialSize;\n const final: unknown = data.finalSize;\n if (typeof initial === 'number' && typeof final === 'number') {\n const saved: number = initial - final;\n return `${initial} → ${final} chars (−${saved})`;\n }\n return '';\n });\n\n /**\n * Az aktuális monitoring event-hez illeszkedő debug trace bejegyzések (computed).\n * Matching: llm-call → callTag/llmTag egyezés; tool-call → toolResult eventKind + toolId;\n * step → agentThink/error eventKind; generic → üres.\n */\n readonly matchedDebugEntries_$: Signal<AC_LlmDebugTraceEntry_Response[]> = computed(\n (): AC_LlmDebugTraceEntry_Response[] => {\n const all: AC_LlmDebugTraceEntry_Response[] = this.debugTraceEntries();\n if (!all.length) {\n return [];\n }\n const ev: CCAP_MonitoringEventDisplay_Response = this.event();\n const data: Record<string, unknown> = ev.data ?? {};\n\n // LLM call: match by llmTag === callTag\n if (ev.eventType === 'llm-call') {\n const llmTag: string = typeof data.llmTag === 'string' ? data.llmTag as string : '';\n if (!llmTag) {\n return [];\n }\n return all.filter(\n (e: AC_LlmDebugTraceEntry_Response): boolean => e.callTag === llmTag,\n );\n }\n\n // Tool call: match toolResult entries by toolId\n if (ev.eventType === 'tool-call') {\n const toolId: string = typeof data.toolId === 'string' ? data.toolId as string : '';\n if (!toolId) {\n return [];\n }\n return all.filter(\n (e: AC_LlmDebugTraceEntry_Response): boolean =>\n e.eventKind === 'tool-result'\n && typeof e.payload?.['toolId'] === 'string'\n && (e.payload.toolId as string) === toolId,\n );\n }\n\n // Step: match agentThink or error entries\n if (ev.eventType === 'step') {\n const step: string = typeof data.step === 'string' ? data.step as string : '';\n if (step.includes('error') || step.includes('hallucination')) {\n return all.filter(\n (e: AC_LlmDebugTraceEntry_Response): boolean => e.eventKind === 'error',\n );\n }\n if (step.includes('loop-debrief') || step.includes('agentic-loop')) {\n return all.filter(\n (e: AC_LlmDebugTraceEntry_Response): boolean => e.eventKind === 'agent-think',\n );\n }\n }\n\n return [];\n },\n );\n\n /** Van-e illeszkedő debug trace bejegyzés (computed). */\n readonly hasDebugEntries_$: Signal<boolean> = computed(\n (): boolean => this.matchedDebugEntries_$().length > 0,\n );\n\n /** Debug popup nyitva/zárva. */\n readonly debugPopupOpen_$ = signal<boolean>(false);\n\n /**\n * Kattintás kezelése.\n */\n handleClick(): void {\n this.itemClick.emit(this.event());\n }\n\n /**\n * Debug trace popup nyitás/zárás.\n */\n toggleDebugPopup(): void {\n this.debugPopupOpen_$.update((v: boolean): boolean => !v);\n }\n\n /**\n * Debug popup bezárása.\n */\n closeDebugPopup(): void {\n this.debugPopupOpen_$.set(false);\n }\n\n /**\n * Debug trace payload formázása megjelenítéshez.\n * Belső JSON mezőket próbálja parse-olni és formázni.\n */\n formatDebugPayload(payload: Record<string, unknown>): string {\n if (!payload) {\n return '';\n }\n return JSON.stringify(payload, null, 2);\n }\n}\n", "<div class=\"rounded-md overflow-hidden\" [ngClass]=\"borderClasses_$()\">\n\n <!-- HEADER: kattintható → popup -->\n <div class=\"flex items-start\">\n <button class=\"flex-1 min-w-0 text-left px-2.5 py-1.5 text-xs\n hover:brightness-125 transition-colors cursor-pointer\n flex items-start gap-2\"\n (click)=\"handleClick()\">\n\n <!-- Emoji -->\n @if (emoji_$(); as emoji) {\n <span class=\"shrink-0 text-sm leading-none mt-0.5\">{{ emoji }}</span>\n }\n\n <!-- Tartalom: kategória-függő header -->\n <div class=\"flex-1 min-w-0\">\n @switch (category_$()) {\n @case ('llm') {\n <div class=\"font-medium\">{{ llmCallType_$() || 'LLM hívás' }}</div>\n <div class=\"flex flex-wrap gap-x-3 gap-y-0.5 mt-0.5 text-[10px] opacity-75\">\n @if (llmModel_$()) {\n <span>{{ llmModel_$() }}</span>\n }\n @if (durationLabel_$()) {\n <span>{{ durationLabel_$() }}</span>\n }\n @if (sizeLabel_$()) {\n <span>{{ sizeLabel_$() }}</span>\n }\n </div>\n }\n @case ('tool') {\n <div class=\"font-medium\">{{ toolId_$() || 'Eszközhívás' }}</div>\n <div class=\"flex flex-wrap gap-x-3 gap-y-0.5 mt-0.5 text-[10px] opacity-75\">\n @if (status_$()) {\n <span class=\"font-semibold\"\n [ngClass]=\"{\n 'text-green-300': status_$() === 'success',\n 'text-red-300': status_$() === 'failed' || status_$() === 'error'\n }\">{{ status_$() }}</span>\n }\n @if (durationLabel_$()) {\n <span>{{ durationLabel_$() }}</span>\n }\n </div>\n }\n @case ('error') {\n <div class=\"font-medium\">Hiba</div>\n @if (errorMessage_$()) {\n <div class=\"mt-0.5 text-[10px] opacity-75 truncate\">{{ errorMessage_$() }}</div>\n }\n }\n @case ('step') {\n <div class=\"font-medium\">{{ label_$() }}</div>\n <div class=\"flex flex-wrap gap-x-3 gap-y-0.5 mt-0.5 text-[10px] opacity-75\">\n @if (status_$()) {\n <span>{{ status_$() }}</span>\n }\n @if (durationLabel_$()) {\n <span>{{ durationLabel_$() }}</span>\n }\n </div>\n }\n @default {\n <div class=\"font-medium\">{{ label_$() }}</div>\n <div class=\"flex flex-wrap gap-x-3 gap-y-0.5 mt-0.5 text-[10px] opacity-75\">\n @if (durationLabel_$()) {\n <span>{{ durationLabel_$() }}</span>\n }\n @if (status_$()) {\n <span>{{ status_$() }}</span>\n }\n </div>\n }\n }\n </div>\n\n <!-- REQ-SES-EVT-TS-001 (cycle 192): timestamp jobb oldalon (duration mellett) — minden\n CCAP session event-en megjelenítjük, hogy mennyi ideje történt, az `sTimeAgo` pipe-pal.\n A user kérése: „minden egyes session eventre ... kerüljön fel egy timestamp\".\n REQ-SES-EVT-TS-002 (cycle 471): opacity-40 → text-neutral-400 (explicit szín a többi\n session timeline-nal konzisztensen) + [title] absolute ISO time hover-tooltip-pel. -->\n <div class=\"shrink-0 flex flex-col items-end gap-0 mt-0.5\">\n @if (durationLabel_$()) {\n <span class=\"text-[10px] opacity-50\">{{ durationLabel_$() }}</span>\n }\n <span class=\"text-[10px] text-neutral-400 whitespace-nowrap\" [title]=\"event().timestamp | sAbsoluteTime\">{{ event().timestamp | sTimeAgo }}</span>\n </div>\n </button>\n\n <!-- Debug trace gomb (ha van illeszkedő bejegyzés) -->\n @if (hasDebugEntries_$()) {\n <button class=\"shrink-0 px-1.5 py-1.5 text-purple-400 hover:text-purple-200\n hover:bg-purple-500/10 transition-colors\"\n title=\"Debug Log Trace\"\n (click)=\"toggleDebugPopup()\">\n <svg class=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/>\n <polyline points=\"14 2 14 8 20 8\"/>\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/>\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/>\n </svg>\n </button>\n }\n </div>\n\n <!-- BRIEF: CC Session stílusú, típusonkénti kompakt összefoglaló -->\n <div class=\"px-2.5 pb-1.5 text-[10px] leading-relaxed border-t border-white/5\">\n @switch (category_$()) {\n\n <!-- LLM Brief: provider | model | token stat | finish reason -->\n @case ('llm') {\n <div class=\"flex flex-wrap items-center gap-x-2 gap-y-0.5 pt-1 text-purple-300/80\">\n @if (llmProvider_$()) {\n <span class=\"px-1 py-0.5 rounded bg-purple-500/10 text-purple-300 font-mono\">{{ llmProvider_$() }}</span>\n }\n @if (llmModel_$()) {\n <span class=\"font-mono\">{{ llmModel_$() }}</span>\n }\n @if (llmTokenBrief_$()) {\n <span class=\"text-neutral-400\">{{ llmTokenBrief_$() }}</span>\n }\n @if (llmFinishReason_$()) {\n <span class=\"px-1 py-0.5 rounded text-[9px]\"\n [ngClass]=\"{\n 'bg-green-500/10 text-green-400': llmFinishReason_$() === 'stop',\n 'bg-amber-500/10 text-amber-400': llmFinishReason_$() !== 'stop'\n }\">{{ llmFinishReason_$() }}</span>\n }\n </div>\n }\n\n <!-- Tool Brief: category badge | status | error preview -->\n @case ('tool') {\n <div class=\"flex flex-wrap items-center gap-x-2 gap-y-0.5 pt-1\">\n @if (toolCategory_$()) {\n <span class=\"px-1 py-0.5 rounded bg-amber-500/10 text-amber-300 text-[9px] font-mono\">{{ toolCategory_$() }}</span>\n }\n @if (toolError_$()) {\n <div class=\"text-red-300/80 truncate flex-1 min-w-0\">{{ toolError_$() }}</div>\n }\n </div>\n }\n\n <!-- Error Brief: hibaüzenet -->\n @case ('error') {\n <div class=\"pt-1\">\n @if (errorMessage_$()) {\n <div class=\"text-red-300/80 bg-red-500/5 rounded px-1.5 py-0.5 whitespace-pre-wrap\">{{ errorMessage_$() }}</div>\n }\n </div>\n }\n\n <!-- Step Brief: altípus-függő -->\n @case ('step') {\n <div class=\"pt-1\">\n\n <!-- run-initialization: üzenet előnézet + new session badge -->\n @if (stepType_$() === 'run-initialization') {\n <div class=\"flex items-center gap-2\">\n @if (isNewSession_$()) {\n <span class=\"px-1 py-0.5 rounded bg-green-500/10 text-green-400 text-[9px]\">Új session</span>\n }\n @if (stepMessagePreview_$()) {\n <span class=\"text-neutral-400 truncate flex-1 min-w-0\">„{{ stepMessagePreview_$() }}\"</span>\n }\n </div>\n }\n\n <!-- execution-start: intent + goal + task count -->\n @else if (stepType_$() === 'execution-start') {\n <div class=\"flex flex-wrap items-center gap-x-2 gap-y-0.5\">\n @if (stepRunIntent_$()) {\n <span class=\"text-neutral-300 truncate\">{{ stepRunIntent_$() }}</span>\n }\n @if (runGoal_$()) {\n <span class=\"text-neutral-500 truncate\">{{ runGoal_$() }}</span>\n }\n </div>\n }\n\n <!-- execution-end: iterations + final action + used tools -->\n @else if (stepType_$() === 'execution-end') {\n <div class=\"flex flex-wrap items-center gap-x-2 gap-y-0.5\">\n <span class=\"text-neutral-400\">{{ iterationIndex_$() }} iteráció</span>\n @if (iterationAction_$()) {\n <span class=\"px-1 py-0.5 rounded bg-blue-500/10 text-blue-300 text-[9px]\">{{ iterationAction_$() }}</span>\n }\n </div>\n }\n\n <!-- agentic-loop-iteration: #N action → tool: intent -->\n @else if (stepType_$() === 'agentic-loop-iteration') {\n <div class=\"flex flex-wrap items-center gap-x-1.5 gap-y-0.5\">\n <span class=\"text-neutral-500 font-mono\">#{{ iterationIndex_$() }}</span>\n @if (iterationAction_$()) {\n <span class=\"px-1 py-0.5 rounded text-[9px]\"\n [ngClass]=\"{\n 'bg-blue-500/10 text-blue-300': iterationAction_$() === 'TOOL_SELECT',\n 'bg-green-500/10 text-green-300': iterationAction_$() === 'RESULT',\n 'bg-amber-500/10 text-amber-300': iterationAction_$() !== 'TOOL_SELECT' && iterationAction_$() !== 'RESULT'\n }\">{{ iterationAction_$() }}</span>\n }\n @if (iterationTool_$()) {\n <span class=\"text-amber-300/70 font-mono\">{{ iterationTool_$() }}</span>\n }\n @if (iterationIntent_$()) {\n <span class=\"text-neutral-500 truncate flex-1 min-w-0\">{{ iterationIntent_$() }}</span>\n }\n @if (hasAgentFeedback_$()) {\n <span class=\"px-1 py-0.5 rounded bg-cyan-500/10 text-cyan-400 text-[9px]\">feedback</span>\n }\n </div>\n }\n\n <!-- run-finalization: answer preview + cache keys -->\n @else if (stepType_$() === 'run-finalization') {\n <div class=\"flex flex-col gap-0.5\">\n @if (finalizationAnswer_$()) {\n <div class=\"text-neutral-400 truncate\">{{ finalizationAnswer_$() }}</div>\n }\n @if (stepRunSummary_$()) {\n <div class=\"text-neutral-500 truncate\">{{ stepRunSummary_$() }}</div>\n }\n </div>\n }\n\n <!-- run-flow-complete: intent + summary -->\n @else if (stepType_$() === 'run-flow-complete') {\n <div class=\"flex flex-col gap-0.5\">\n @if (stepRunIntent_$()) {\n <div class=\"text-neutral-400 truncate\">{{ stepRunIntent_$() }}</div>\n }\n @if (stepRunSummary_$()) {\n <div class=\"text-neutral-500 truncate\">{{ stepRunSummary_$() }}</div>\n }\n </div>\n }\n\n <!-- rejected step-ek: reason badge -->\n @else if (stepType_$().includes('rejected')) {\n <div class=\"flex items-center gap-2\">\n <span class=\"px-1 py-0.5 rounded bg-amber-500/10 text-amber-400 text-[9px]\">elutasítva</span>\n @if (iterationIntent_$()) {\n <span class=\"text-neutral-500 truncate\">{{ iterationIntent_$() }}</span>\n }\n </div>\n }\n </div>\n }\n\n <!-- Generic Brief: compacting méret info -->\n @default {\n <div class=\"pt-1\">\n @if (compactingSizeReduction_$()) {\n <div class=\"flex items-center gap-2 text-teal-300/70\">\n <span class=\"font-mono\">{{ compactingSizeReduction_$() }}</span>\n </div>\n }\n </div>\n }\n }\n </div>\n</div>\n\n<!-- Debug trace popup (per-event, centered modal) -->\n@if (debugPopupOpen_$()) {\n <div class=\"fixed inset-0 z-[100] flex items-center justify-center\"\n (click)=\"closeDebugPopup()\">\n <div class=\"absolute inset-0 bg-black/50\" aria-hidden=\"true\"></div>\n <!-- BUG-VC-002 pattern: max-h-[80vh] Tailwind fallback + inline max-height: 80dvh a modern mobil iOS Safari dynamic toolbar-aware viewport-jára. -->\n <div class=\"relative z-10 w-[640px] max-w-[90vw] max-h-[80vh] bg-[#121220]\n border border-purple-500/40 rounded-lg p-4 overflow-y-auto shadow-2xl\"\n style=\"max-height: 80dvh;\"\n (click)=\"$event.stopPropagation()\">\n\n <!-- Header -->\n <div class=\"flex justify-between items-center mb-3\">\n <h4 class=\"text-sm font-bold text-purple-300\">Debug Log Trace</h4>\n <button class=\"px-2 py-1 border border-neonCyan rounded bg-transparent text-neutral-200\n cursor-pointer hover:bg-neutral-800\"\n (click)=\"closeDebugPopup()\">X</button>\n </div>\n\n <!-- Bejegyzések -->\n <div class=\"flex flex-col gap-3\">\n @for (entry of matchedDebugEntries_$(); track entry._id) {\n <div class=\"bg-[#0a0a15] border border-neonDefault rounded-md p-3\">\n <!-- Entry header -->\n <div class=\"flex items-center gap-2 mb-2 text-[11px]\">\n <span class=\"px-1.5 py-0.5 rounded text-[10px] font-semibold\"\n [ngClass]=\"{\n 'bg-purple-500/20 text-purple-300': entry.eventKind === 'prompt',\n 'bg-green-500/20 text-green-300': entry.eventKind === 'result',\n 'bg-yellow-500/20 text-yellow-300': entry.eventKind === 'tool-result',\n 'bg-blue-500/20 text-blue-300': entry.eventKind === 'agent-think',\n 'bg-red-500/20 text-red-300': entry.eventKind === 'error'\n }\">{{ entry.eventKind }}</span>\n <span class=\"text-neutral-500 font-mono\">{{ entry.callTag }}</span>\n @if (entry.provider) {\n <span class=\"text-neutral-600 text-[10px]\">{{ entry.provider }}</span>\n }\n </div>\n\n <!-- Payload: formázott tartalom -->\n @if (entry.eventKind === 'prompt' && entry.payload['messages']) {\n <!-- Prompt: system prompt + messages listázva -->\n @if (entry.payload['systemPrompt']) {\n <div class=\"mb-2\">\n <div class=\"text-[10px] text-neutral-500 uppercase mb-1\">System Prompt\n <span class=\"text-neutral-600\">({{ entry.payload['systemPromptChars'] }} chars)</span>\n </div>\n <pre class=\"text-[11px] text-neutral-300 bg-[#080812] rounded p-2\n max-h-[200px] overflow-y-auto whitespace-pre-wrap break-words\">{{ entry.payload['systemPrompt'] }}</pre>\n </div>\n }\n <div class=\"text-[10px] text-neutral-500 uppercase mb-1\">Messages ({{ entry.payload['messageCount'] }})</div>\n <div class=\"flex flex-col gap-1.5\">\n @for (msg of $any(entry.payload['messages']); track $index) {\n <div class=\"bg-[#080812] rounded p-2\">\n <div class=\"text-[10px] font-bold mb-0.5\"\n [ngClass]=\"{\n 'text-green-400': msg.role === 'user',\n 'text-cyan-400': msg.role === 'assistant',\n 'text-neutral-400': msg.role === 'system'\n }\">{{ msg.role }}</div>\n <pre class=\"text-[11px] text-neutral-300 whitespace-pre-wrap break-words\n max-h-[150px] overflow-y-auto\">{{ msg.content }}</pre>\n </div>\n }\n </div>\n } @else if (entry.eventKind === 'result') {\n <!-- Result: LLM válasz tartalom -->\n <pre class=\"text-[11px] text-neutral-300 bg-[#080812] rounded p-2\n max-h-[300px] overflow-y-auto whitespace-pre-wrap break-words\">{{ entry.payload['content'] ?? formatDebugPayload(entry.payload) }}</pre>\n } @else if (entry.eventKind === 'tool-result') {\n <!-- Tool result: toolId + tartalom -->\n @if (entry.payload['toolId']) {\n <div class=\"text-[10px] text-yellow-400 mb-1\">Tool: {{ entry.payload['toolId'] }}</div>\n }\n <pre class=\"text-[11px] text-neutral-300 bg-[#080812] rounded p-2\n max-h-[300px] overflow-y-auto whitespace-pre-wrap break-words\">{{ entry.payload['content'] ?? formatDebugPayload(entry.payload) }}</pre>\n } @else if (entry.eventKind === 'error') {\n <!-- Error: hibaüzenet + details -->\n @if (entry.payload['message']) {\n <div class=\"text-red-300 text-xs mb-1\">{{ entry.payload['message'] }}</div>\n }\n @if (entry.payload['details']) {\n <pre class=\"text-[11px] text-neutral-300 bg-[#080812] rounded p-2\n max-h-[200px] overflow-y-auto whitespace-pre-wrap break-words\">{{ formatDebugPayload($any(entry.payload['details'])) }}</pre>\n }\n } @else {\n <!-- Generic / agent-think: JSON payload -->\n <pre class=\"text-[11px] text-neutral-300 bg-[#080812] rounded p-2\n max-h-[300px] overflow-y-auto whitespace-pre-wrap break-words\">{{ entry.payload['content'] ?? formatDebugPayload(entry.payload) }}</pre>\n }\n </div>\n }\n </div>\n </div>\n </div>\n}\n", "import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nimport {\n CCAP_MonitoringEventDisplay_Response,\n} from '../../../../_models/interfaces/monitoring-server-socket/ccap-monitoring-event-display.interface';\nimport { Ses_RunFlowEventDisplay_Util } from '../../_collections/run-flow-event-display.util';\nimport { AC_LlmDebugTraceEntry_Response } from '../../../../_models/server-index';\nimport { Ses_RunFlowVizMode_Type } from './ses-run-flow-viz.type-enum';\n\n/**\n * Egy sor a @for track-hez: kulcs a template-ben (tilos a track-ben logika / $index).\n */\ninterface CCAP_RunFlowViz_Row_Interface {\n trackKey: string;\n event: CCAP_MonitoringEventDisplay_Response;\n}\n\n/**\n * Run flow vizualizáció komponens.\n * Run trace eventek megjelenítése bubble-ökben (app-ccap-run-flow-bubble), összekötve nyíllal;\n * kattintásra event kiválasztás.\n */\n@Component({\n selector: 'app-ccap-run-flow-viz',\n templateUrl: './ses-run-flow-viz.component.html',\n styles: [`:host { display: block; }`],\n})\n/** Ses_RunFlowViz_Component class. */\nexport class Ses_RunFlowViz_Component implements OnChanges {\n\n @Input() trace: CCAP_MonitoringEventDisplay_Response[] = [];\n\n /** Megjelenítési mód: 'dots' = kompakt pöttyök, 'list' = teljes buborékok vertikálisan. */\n @Input() mode: Ses_RunFlowVizMode_Type = 'dots';\n\n /** LLM debug trace bejegyzések (a szülő trace block-ból, per-event gombhoz). */\n @Input() debugTraceEntries: AC_LlmDebugTraceEntry_Response[] = [];\n\n /**\n * Trace sorok stabil trackKey-jel; a szülő signal frissítésekor nem keveredik a DOM.\n */\n traceRows: CCAP_RunFlowViz_Row_Interface[] = [];\n\n @Output() eventSelected: EventEmitter<CCAP_MonitoringEventDisplay_Response> =\n new EventEmitter<CCAP_MonitoringEventDisplay_Response>();\n\n /**\n * Input változáskor újraszámoljuk a track kulcsokat.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.trace) {\n this.rebuildTraceRows();\n }\n }\n\n /**\n * Lista + determinisztikus trackKey soronként (index + idő + típus).\n */\n private rebuildTraceRows(): void {\n const list: CCAP_MonitoringEventDisplay_Response[] = this.trace ?? [];\n this.traceRows = list.map(\n (ev: CCAP_MonitoringEventDisplay_Response, i: number): CCAP_RunFlowViz_Row_Interface => ({\n trackKey: `${i}-${ev.timestamp.valueOf()}-${ev.eventType}`,\n event: ev,\n }),\n );\n }\n\n /**\n * Bubble kattintás: popup megnyitása a lépés részleteivel.\n */\n onBubbleClick(ev: CCAP_MonitoringEventDisplay_Response): void {\n this.eventSelected.emit(ev);\n }\n\n /**\n * Dot szín osztály (dots nézethez, template hívás).\n */\n getDotClasses(ev: CCAP_MonitoringEventDisplay_Response): string {\n return Ses_RunFlowEventDisplay_Util.getDotClasses(ev);\n }\n\n /**\n * Dot tooltip (dots nézethez: step label rövid szöveg).\n */\n getDotTooltip(ev: CCAP_MonitoringEventDisplay_Response): string {\n return Ses_RunFlowEventDisplay_Util.getStepLabel(ev);\n }\n}\n", "@if (mode === 'dots') {\n <!-- Dots nézet: kompakt színes pöttyök horizontálisan, custom tooltip fölötte -->\n <div class=\"flex flex-wrap items-center gap-1 py-1\">\n @for (row of traceRows; track row.trackKey) {\n <div class=\"relative group\">\n <button class=\"w-2.5 h-2.5 rounded-full shrink-0 hover:scale-150 transition-transform cursor-pointer\"\n [ngClass]=\"getDotClasses(row.event)\"\n (click)=\"onBubbleClick(row.event)\">\n </button>\n <div class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-1.5\n hidden group-hover:block px-1.5 py-0.5 bg-neutral-900 border border-neutral-700\n text-neutral-200 text-[10px] rounded whitespace-nowrap z-20\n pointer-events-none shadow-lg\">\n {{ getDotTooltip(row.event) }}\n </div>\n </div>\n }\n @if (!traceRows.length) {\n <span class=\"text-neutral-500 text-xs\">Nincs lépés.</span>\n }\n </div>\n} @else {\n <!-- List nézet: típus-specifikus event kártyák egymás alatt -->\n <div class=\"flex flex-col gap-1 py-1\">\n @for (row of traceRows; track row.trackKey) {\n <app-ccap-event-list-item\n [event]=\"row.event\"\n [debugTraceEntries]=\"debugTraceEntries\"\n (itemClick)=\"onBubbleClick(row.event)\">\n </app-ccap-event-list-item>\n }\n @if (!traceRows.length) {\n <span class=\"text-neutral-500 text-xs\">Nincs lépés.</span>\n }\n </div>\n}\n", "import {\n Component,\n computed,\n DestroyRef,\n effect,\n EffectRef,\n inject,\n input,\n OnInit,\n signal,\n} from '@angular/core';\n\nimport {\n CCAP_MonitoringEventDisplay_Response,\n} from '../../../../_models/interfaces/monitoring-server-socket/ccap-monitoring-event-display.interface';\nimport {\n Ses_Monitoring_DataService,\n} from '../../_services/data-services/ses-monitoring.data-service';\nimport { Session_DataService } from '../../_services/data-services/session.data-service';\nimport { AC_LlmDebugTraceEntry_Response } from '../../../../_models/server-index';\nimport { Ses_RunFlowVizMode_Type } from '../ccap-run-flow-viz/ses-run-flow-viz.type-enum';\nimport { Shr_LocalStoragePersistence_Util } from '../../../shared/_collections/utils/storage/shr-local-storage-persistence.util';\n\n/**\n * Run háttérfolyamat blokk.\n * Egy adott run-hoz tartozó monitoring event trace megjelenítése: expand/collapse, lazy betöltés, élő merge.\n * A chat-ben az assistant üzenet ELŐTT jelenik meg, vizuálisan a run lépéseit mutatja.\n * Párhuzamosan betölti az LLM debug trace-t is (per-event debug gomb).\n */\n@Component({\n selector: 'app-ccap-run-trace-block',\n templateUrl: './ses-run-trace-block.component.html',\n styles: [`\n :host {\n display: block;\n }\n `],\n})\n/** Ses_RunTraceBlock_Component class. */\nexport class Ses_RunTraceBlock_Component implements OnInit {\n\n /** Session azonosító. */\n sessionId = input<string>('');\n\n /** Run azonosító (az assistant üzenet runId-ja). */\n runId = input<string>('');\n\n /** Ha igaz, a blokk alapértelmezetten nyitva indul és lazy betöltés azonnal elindul. */\n autoExpand = input<boolean>(false);\n\n /** Lenyitva van-e a háttérfolyamat blokk. */\n readonly expanded_$ = signal<boolean>(false);\n\n /** Megjelenítési mód: 'dots' = kompakt pöttyök, 'list' = teljes buborékok vertikálisan. localStorage-ban perzisztált. */\n readonly vizMode_$ = signal<Ses_RunFlowVizMode_Type>(\n Ses_RunTraceBlock_Component.loadVizMode(),\n );\n\n /** localStorage kulcs a nézet mód perzisztálásához. */\n private static readonly VIZ_MODE_STORAGE_KEY: string = 'ccap-run-trace-viz-mode';\n\n /**\n * Nézet mód betöltése localStorage-ból (static, signal default-hoz).\n *\n * REQ-UI-MENU-STATE-001 (cycle 466): a `localStorage.getItem` + try/catch most\n * a shared `Shr_LocalStoragePersistence_Util.readString`-en megy. Az enum-\n * validator (`'dots' | 'list'` engedélyezett, minden egyéb → `'dots'` default)\n * változatlan.\n */\n private static loadVizMode(): Ses_RunFlowVizMode_Type {\n const stored: string | null = Shr_LocalStoragePersistence_Util.readString(\n Ses_RunTraceBlock_Component.VIZ_MODE_STORAGE_KEY,\n );\n if (stored === 'dots' || stored === 'list') {\n return stored;\n }\n return 'dots';\n }\n\n /**\n * Nézet mód mentése localStorage-ba.\n *\n * REQ-UI-MENU-STATE-001 (cycle 466): a `localStorage.setItem` + try/catch\n * most a shared `Shr_LocalStoragePersistence_Util.writeString`-en megy.\n */\n private static saveVizMode(mode: Ses_RunFlowVizMode_Type): void {\n Shr_LocalStoragePersistence_Util.writeString(\n Ses_RunTraceBlock_Component.VIZ_MODE_STORAGE_KEY,\n mode,\n );\n }\n\n /** Run trace (Monitoring DS getOrLoadRunTrace; cache). */\n readonly runTrace_$ = signal<CCAP_MonitoringEventDisplay_Response[]>([]);\n\n /** Run trace betöltés folyamatban. */\n readonly runTraceLoading_$ = signal<boolean>(false);\n\n /** Run trace már betöltve (nem kell újra hívni). */\n readonly runTraceLoaded_$ = signal<boolean>(false);\n\n /** HTTP / getOrLoadRunTrace kivétel történt. */\n readonly runTraceHttpFailed_$ = signal<boolean>(false);\n\n /** Üres trace (sikeres betöltés után nincs megjeleníthető lépés). */\n readonly runTraceError_$ = signal<boolean>(false);\n\n /** LLM debug trace bejegyzések (párhuzamosan betöltve a run trace-szel). */\n readonly debugTraceEntries_$ = signal<AC_LlmDebugTraceEntry_Response[]>([]);\n\n /** Flow bubble kattintás: kiválasztott event a popup-hoz. */\n readonly selectedEventForPopup_$ =\n signal<CCAP_MonitoringEventDisplay_Response | null>(null);\n\n private readonly monitoring_DS: Ses_Monitoring_DataService = inject(Ses_Monitoring_DataService);\n private readonly session_DS: Session_DataService = inject(Session_DataService);\n private readonly destroyRef: DestroyRef = inject(DestroyRef);\n\n /** events_$ változáskor újra merge (Socket push után is frissül a lenyitott trace). */\n private traceLiveEffectRef: EffectRef | null = null;\n\n constructor() {\n this.traceLiveEffectRef = effect((): void => {\n const evSnapshot: CCAP_MonitoringEventDisplay_Response[] = this.monitoring_DS.events_$();\n if (!this.expanded_$() || !this.runTraceLoaded_$()) {\n return;\n }\n const sid: string = this.sessionId().trim();\n const rid: string = this.runId().trim();\n if (!sid || !rid) {\n return;\n }\n // Signal regisztráció: evSnapshot.length olvasás a reaktív összekötéshez\n void evSnapshot.length;\n const merged: CCAP_MonitoringEventDisplay_Response[] =\n this.monitoring_DS.buildMergedRunTrace(sid, rid);\n this.runTrace_$.set(merged);\n this.runTraceError_$.set(merged.length === 0);\n }, { allowSignalWrites: true });\n\n this.destroyRef.onDestroy((): void => {\n if (this.traceLiveEffectRef) {\n this.traceLiveEffectRef.destroy();\n this.traceLiveEffectRef = null;\n }\n });\n }\n\n /**\n * autoExpand input esetén automatikusan kinyitjuk és betöltjük a trace-t.\n */\n ngOnInit(): void {\n if (this.autoExpand()) {\n this.expanded_$.set(true);\n const sid: string = this.sessionId().trim();\n const rid: string = this.runId().trim();\n if (sid && rid) {\n void this.loadRunTrace();\n }\n }\n }\n\n /**\n * Lenyitás / összecsukás. Első lenyitáskor lazy betöltés.\n */\n toggleExpanded(): void {\n this.expanded_$.update((v: boolean): boolean => !v);\n const sid: string = this.sessionId().trim();\n const rid: string = this.runId().trim();\n if (this.expanded_$() && rid.length > 0 && sid.length > 0 && !this.runTraceLoaded_$()) {\n void this.loadRunTrace();\n }\n }\n\n /**\n * Nézet mód váltás: dots ↔ list. Mentés localStorage-ba.\n */\n toggleVizMode(): void {\n const next: Ses_RunFlowVizMode_Type = this.vizMode_$() === 'dots' ? 'list' : 'dots';\n this.vizMode_$.set(next);\n Ses_RunTraceBlock_Component.saveVizMode(next);\n }\n\n /**\n * Flow bubble kattintás: popup megjelenítése.\n */\n onFlowEventSelected(ev: CCAP_MonitoringEventDisplay_Response): void {\n this.selectedEventForPopup_$.set(ev);\n }\n\n /**\n * Lépés popup bezárása.\n */\n closeTracePopup(): void {\n this.selectedEventForPopup_$.set(null);\n }\n\n /**\n * Run trace + debug trace párhuzamos lazy betöltés.\n */\n async loadRunTrace(): Promise<void> {\n const sid: string = this.sessionId().trim();\n const rid: string = this.runId().trim();\n if (!sid || !rid) {\n return;\n }\n\n this.runTraceLoading_$.set(true);\n this.runTraceError_$.set(false);\n this.runTraceHttpFailed_$.set(false);\n\n // Párhuzamos betöltés: monitoring trace + debug trace\n const monitoringPromise: Promise<CCAP_MonitoringEventDisplay_Response[]> =\n this.monitoring_DS.getOrLoadRunTrace(sid, rid).catch((): CCAP_MonitoringEventDisplay_Response[] => {\n this.runTraceHttpFailed_$.set(true);\n return this.monitoring_DS.buildMergedRunTrace(sid, rid);\n });\n\n const debugPromise: Promise<AC_LlmDebugTraceEntry_Response[]> =\n this.session_DS.fetchLlmDebugTraceEntriesForRun({ sessionId: sid, runId: rid });\n\n try {\n const [merged, debugEntries] = await Promise.all([monitoringPromise, debugPromise]);\n this.runTrace_$.set(merged);\n this.runTraceLoaded_$.set(true);\n this.runTraceError_$.set(merged.length === 0);\n this.debugTraceEntries_$.set(debugEntries);\n } finally {\n this.runTraceLoading_$.set(false);\n }\n }\n}\n", "<!-- Run háttérfolyamatok blokk: az assistant üzenet ELŐTT, függetlenül -->\n<div class=\"self-start w-full mb-1\">\n <div class=\"flex items-center gap-1.5\">\n <button class=\"text-xs text-neutral-400 hover:text-ccapAccent px-1 py-0.5 flex items-center gap-1\"\n (click)=\"toggleExpanded()\">\n <svg class=\"w-3 h-3 shrink-0 transition-transform duration-150\"\n [class.-rotate-90]=\"!expanded_$()\"\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n Háttérfolyamatok\n </button>\n @if (expanded_$() && runTrace_$().length) {\n <button class=\"text-[10px] text-neutral-500 hover:text-ccapAccent px-1 py-0.5 border border-neutral-700\n rounded transition-colors\"\n [title]=\"vizMode_$() === 'dots' ? 'Részletes nézet' : 'Kompakt nézet'\"\n (click)=\"toggleVizMode()\">\n {{ vizMode_$() === 'dots' ? '⋯ → ☰' : '☰ → ⋯' }}\n </button>\n }\n </div>\n @if (expanded_$()) {\n <div class=\"mt-1 pl-2 border-l-2 border-neonDefault space-y-1\">\n @if (runTraceLoading_$()) {\n <div class=\"flex items-center gap-2 text-neutral-500 text-xs py-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Event history betöltése…\n </div>\n } @else if (runTrace_$().length) {\n <app-ccap-run-flow-viz\n [trace]=\"runTrace_$()\"\n [mode]=\"vizMode_$()\"\n [debugTraceEntries]=\"debugTraceEntries_$()\"\n (eventSelected)=\"onFlowEventSelected($event)\">\n </app-ccap-run-flow-viz>\n } @else if (runTraceHttpFailed_$()) {\n <p class=\"text-amber-200/90 text-xs\">\n A háttér-lépéslista betöltése sikertelen (kapcsolat vagy szerver hiba). Próbáld újra később;\n ha a futás még fut, élő monitoring event-ek még megjelenhetnek.\n </p>\n } @else {\n <p class=\"text-amber-200/90 text-xs\">\n Ehhez a válaszhoz nincs megjeleníthető háttér-lépéslista. Régi üzeneteknél ez normális\n (a lépések naplózása később került perzisztens tárolóba); új futásoknál pár másodperc múlva\n érdemes újra lenyitni, ha az első betöltés üres volt.\n </p>\n }\n </div>\n }\n</div>\n\n<!-- Trace detail popup -->\n@if (selectedEventForPopup_$(); as popupEv) {\n <div class=\"fixed inset-0 z-[100] flex items-center justify-center\"\n (click)=\"closeTracePopup()\">\n <div class=\"absolute inset-0 bg-black/50\"\n aria-hidden=\"true\"></div>\n <div class=\"relative z-10\"\n (click)=\"$event.stopPropagation()\">\n <app-ccap-trace-detail\n [event]=\"popupEv\"\n [debugTraceEntries]=\"debugTraceEntries_$()\"\n (close)=\"closeTracePopup()\">\n </app-ccap-trace-detail>\n </div>\n </div>\n}\n", "import { Component, EventEmitter, Input, Output, signal } from '@angular/core';\n\nimport {\n UIn_UserInteractionRequest_Interface,\n UIn_UserInteractionResponse_Interface,\n Tls_UserInteractionType_Type,\n} from '../../../../_models/server-index';\n\n/**\n * User Interaction Card komponens.\n * A chat-ban jelenik meg, amikor az agent user interakciót kér (confirm, option-select, question).\n * A user válasza (responded) output event-ként megy vissza a szülő komponensnek.\n */\n@Component({\n selector: 'app-ccap-user-interaction-card',\n templateUrl: './ses-user-interaction-card.component.html',\n})\n/** Ses_UserInteractionCard_Component class. */\nexport class Ses_UserInteractionCard_Component {\n\n @Input() request: UIn_UserInteractionRequest_Interface | null = null;\n @Output() responded: EventEmitter<UIn_UserInteractionResponse_Interface> = new EventEmitter();\n\n /** Kiválasztott opció ID (option-select típushoz). */\n readonly selectedOptionId_$ = signal<string>('');\n\n /** Szabad szöveges válasz. */\n textResponse: string = '';\n\n /** Válasz elküldve flag (double submit védelem). */\n readonly isSubmitted_$ = signal<boolean>(false);\n\n /**\n * Confirm típus: igen gomb.\n */\n handleConfirm(confirmed: boolean): void {\n if (this.isSubmitted_$() || !this.request) {\n return;\n }\n this.isSubmitted_$.set(true);\n\n const response: UIn_UserInteractionResponse_Interface = {\n interactionId: this.request.interactionId,\n sessionId: this.request.sessionId,\n confirmed: confirmed,\n };\n if (this.request.allowTextResponse && this.textResponse.trim()) {\n response.textResponse = this.textResponse.trim();\n }\n this.responded.emit(response);\n }\n\n /**\n * Option-select típus: kiválasztás megerősítése.\n */\n handleOptionSelect(): void {\n if (this.isSubmitted_$() || !this.request) {\n return;\n }\n const optionId: string = this.selectedOptionId_$();\n if (!optionId) {\n return;\n }\n this.isSubmitted_$.set(true);\n\n const response: UIn_UserInteractionResponse_Interface = {\n interactionId: this.request.interactionId,\n sessionId: this.request.sessionId,\n selectedOptionId: optionId,\n };\n if (this.request.allowTextResponse && this.textResponse.trim()) {\n response.textResponse = this.textResponse.trim();\n }\n this.responded.emit(response);\n }\n\n /**\n * Question típus: szöveges válasz küldése.\n */\n handleQuestionSubmit(): void {\n if (this.isSubmitted_$() || !this.request) {\n return;\n }\n const text: string = this.textResponse.trim();\n if (!text) {\n return;\n }\n this.isSubmitted_$.set(true);\n\n const response: UIn_UserInteractionResponse_Interface = {\n interactionId: this.request.interactionId,\n sessionId: this.request.sessionId,\n textResponse: text,\n };\n this.responded.emit(response);\n }\n\n /**\n * Dismiss/skip gomb: user válasz nélkül bezárja az interakciót.\n */\n handleDismiss(): void {\n if (this.isSubmitted_$() || !this.request) {\n return;\n }\n this.isSubmitted_$.set(true);\n\n const response: UIn_UserInteractionResponse_Interface = {\n interactionId: this.request.interactionId,\n sessionId: this.request.sessionId,\n isDismissed: true,\n };\n this.responded.emit(response);\n }\n\n /**\n * Opció kiválasztása (option-select).\n */\n selectOption(optionId: string): void {\n this.selectedOptionId_$.set(optionId);\n }\n\n /**\n * Típus ellenőrzés helper-ek a template-hez.\n */\n get isConfirm(): boolean {\n return this.request?.type === Tls_UserInteractionType_Type.confirm;\n }\n\n get isOptionSelect(): boolean {\n return this.request?.type === Tls_UserInteractionType_Type.optionSelect;\n }\n\n get isQuestion(): boolean {\n return this.request?.type === Tls_UserInteractionType_Type.question;\n }\n}\n", "@if (request) {\n <div class=\"w-full max-w-lg rounded-lg border border-neonCyan bg-neutral-900/80 p-4 shadow-neon-glow-cyan\">\n <!-- Fejléc -->\n <div class=\"mb-3\">\n <h4 class=\"text-sm font-semibold text-neonCyan\">{{ request.title }}</h4>\n @if (request.description) {\n <p class=\"mt-1 text-xs text-neutral-400 leading-relaxed\">{{ request.description }}</p>\n }\n </div>\n\n <!-- Submitted állapot -->\n @if (isSubmitted_$()) {\n <div class=\"flex items-center gap-2 text-neutral-400 text-xs py-2\">\n <svg class=\"w-4 h-4 text-green-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"/>\n </svg>\n <span>Response sent</span>\n </div>\n } @else {\n\n <!-- CONFIRM típus -->\n @if (isConfirm) {\n @if (request.confirmMessage) {\n <p class=\"text-sm text-neutral-200 mb-3\">{{ request.confirmMessage }}</p>\n }\n <div class=\"flex gap-2\">\n <button type=\"button\"\n class=\"flex-1 px-4 py-2 rounded-md border border-green-500/60 text-green-400\n text-sm font-medium hover:bg-green-500/10 transition-colors\"\n (click)=\"handleConfirm(true)\">\n Yes\n </button>\n <button type=\"button\"\n class=\"flex-1 px-4 py-2 rounded-md border border-red-500/60 text-red-400\n text-sm font-medium hover:bg-red-500/10 transition-colors\"\n (click)=\"handleConfirm(false)\">\n No\n </button>\n </div>\n }\n\n <!-- OPTION-SELECT típus -->\n @if (isOptionSelect && request.options) {\n <div class=\"flex flex-col gap-1.5 mb-3\">\n @for (opt of request.options; track opt.id) {\n <button type=\"button\"\n class=\"w-full text-left px-3 py-2 rounded-md border text-sm transition-colors\"\n [class]=\"selectedOptionId_$() === opt.id\n ? 'border-neonCyan bg-neonCyan/10 text-neonCyan'\n : 'border-neutral-600 text-neutral-300 hover:border-neutral-400'\"\n (click)=\"selectOption(opt.id)\">\n <span class=\"font-medium\">{{ opt.label }}</span>\n @if (opt.description) {\n <span class=\"block text-xs text-neutral-500 mt-0.5\">{{ opt.description }}</span>\n }\n </button>\n }\n </div>\n <button type=\"button\"\n class=\"w-full px-4 py-2 rounded-md text-sm font-medium transition-colors\"\n [class]=\"selectedOptionId_$()\n ? 'bg-ccapAccent text-white hover:bg-ccapAccentHover cursor-pointer'\n : 'bg-neutral-700 text-neutral-500 cursor-not-allowed'\"\n [disabled]=\"!selectedOptionId_$()\"\n (click)=\"handleOptionSelect()\">\n Select\n </button>\n }\n\n <!-- QUESTION típus -->\n @if (isQuestion) {\n <textarea rows=\"3\"\n class=\"w-full px-3 py-2 border border-neutral-600 rounded-md bg-ccapSurface text-neutral-100\n text-sm outline-none resize-none focus:border-neonCyan focus:shadow-neon-glow-cyan\n min-h-[3.5rem] max-h-[150px] mb-2\"\n [placeholder]=\"request.textPlaceholder || 'Type your answer...'\"\n [(ngModel)]=\"textResponse\"></textarea>\n <button type=\"button\"\n class=\"w-full px-4 py-2 rounded-md text-sm font-medium transition-colors\"\n [class]=\"textResponse.trim()\n ? 'bg-ccapAccent text-white hover:bg-ccapAccentHover cursor-pointer'\n : 'bg-neutral-700 text-neutral-500 cursor-not-allowed'\"\n [disabled]=\"!textResponse.trim()\"\n (click)=\"handleQuestionSubmit()\">\n Submit\n </button>\n }\n\n <!-- Opcionális szöveges mező (confirm és option-select mellett) -->\n @if (!isQuestion && request.allowTextResponse) {\n <textarea rows=\"2\"\n class=\"w-full mt-3 px-3 py-2 border border-neutral-600 rounded-md bg-ccapSurface text-neutral-100\n text-sm outline-none resize-none focus:border-neonCyan focus:shadow-neon-glow-cyan\n min-h-[2.5rem] max-h-[100px]\"\n [placeholder]=\"request.textPlaceholder || 'Additional comment (optional)...'\"\n [(ngModel)]=\"textResponse\"></textarea>\n }\n\n <!-- Dismiss/skip gomb -->\n <div class=\"mt-3 flex justify-end\">\n <button type=\"button\"\n class=\"text-xs text-neutral-500 hover:text-neutral-300 transition-colors\"\n (click)=\"handleDismiss()\">\n Skip\n </button>\n </div>\n }\n </div>\n}\n", "import {\n Component,\n Input,\n OnInit,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n ElementRef,\n AfterViewInit,\n computed,\n effect,\n EffectRef,\n signal,\n Signal,\n inject,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { AC_RunExecutionMode_Type } from '@server-enums';\n\nimport { CCAP_RunExecutionUiLabels_Util } from '../../../../_collections/run-execution/ccap-run-execution-ui-labels.util';\nimport { DisplayString_Util } from '../../../../_collections/display/display-string.util';\nimport { ExS_InstanceContext_DataService } from '../../../external-sessions/_services/exs-instance-context.data-service';\nimport { AIS_RegistrySsot_ControlService } from '../../../ai-systems/_services/ais-registry-ssot.control-service';\nimport { MRg_ListItem_Response } from '../../../ai-systems/_modules/model-registry/_services/mrg-list-item.interface';\nimport {\n AC_SessionInfo_Response,\n UIn_UserInteractionResponse_Interface,\n} from '../../../../_models/server-index';\n\n/** NTF notification tool ID — agent-events toolId felismeréshez. */\nconst NTF_TOOL_ID: string = 'ccap_notification';\n/** Agent-events phase: notification elküldve (message típus). */\nconst NTF_PHASE_SENT: string = 'notification-sent';\nimport {\n Session_DataService,\n} from '../../_services/data-services/session.data-service';\nimport {\n Ses_Monitoring_DataService,\n} from '../../_services/data-services/ses-monitoring.data-service';\nimport {\n CCAP_MonitoringEventDisplay_Response,\n} from '../../../../_models/interfaces/monitoring-server-socket/ccap-monitoring-event-display.interface';\nimport { CCAP_GlobalError_ControlService } from '../../../../_services/control-services/ccap-global-error.control-service';\nimport { VNP_InputUi_DataService } from '../../../dev/_modules/poc/_modules/voice-notes-poc/_services/vnp-input-ui.data-service';\nimport {\n Ses_ClientImageAttachment_Response,\n Ses_ClientMessage_Response,\n} from '../../_services/api-services/conversation.api-service.interface';\nimport {\n CCAP_PendingAttachment_Interface,\n} from '../../../../_models/interfaces/session/ccap-pending-attachment.interface';\nimport { CCAP_AgentConsoleBubbleView_Interface } from '../../../../_models/interfaces/shared/ccap-agent-console-bubble-view.interface';\n\nimport { ExS_Queue_DataService } from '../../../external-sessions/_services/exs-queue.data-service';\n\nimport { SES_MessageToBubbleView_Util } from '../../_collections/ses-message-to-bubble-view.util';\nimport { Ses_InputStorage_Util } from '../../_collections/ses-input-storage.util';\n\n/**\n * Üzenet + BubbleView pár a chat template-hez.\n * Minden role a shared bubble-re mappelik.\n */\ninterface SES_ChatViewItem_Interface {\n msg: Ses_ClientMessage_Response;\n bubbleView: CCAP_AgentConsoleBubbleView_Interface;\n}\n\n\n/**\n * Chat komponens.\n * Üzenet küldés REST API-n (POST /session/:id/messages), válaszok valós időben WebSocketon.\n * Üzenetek betöltése a Session Data Service loadMessagesForView()-ján keresztül (mindig teljes lista).\n * Monitoring session event lista: chat mount (a timeline komponens nincs a template-ben, ezért itt töltjük).\n */\n@Component({\n selector: 'app-ccap-chat',\n templateUrl: './ses-chat.component.html',\n host: { class: 'flex flex-col flex-1 min-h-0 overflow-hidden' },\n})\n/** Ses_Chat_Component class. */\nexport class Ses_Chat_Component implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n\n @Input() sessionId: string = '';\n\n /** Új üzenet szövege. */\n newMessage: string = '';\n\n /** Shared input komponensből érkező attachment-ek (küldéshez konvertáljuk). */\n private pendingAttachments: CCAP_PendingAttachment_Interface[] = [];\n\n /** Run status szöveg (analyzing…, executing tool…). */\n readonly runStatusText_$ = signal<string>('');\n\n /**\n * Chat státusz sor: futás közben opcionális run execution mode suffix (socket latch).\n */\n readonly chatRunStatusLine_$ = computed((): string => {\n const base: string = this.runStatusText_$();\n if (base === '') {\n return '';\n }\n const modeKey: string = this.session_DS.activeRunExecutionMode_$().trim();\n if (modeKey === '') {\n return base;\n }\n const label: string = CCAP_RunExecutionUiLabels_Util.labelForRunExecutionMode(modeKey);\n if (label === '') {\n return base;\n }\n return `${base} · ${label}`;\n });\n\n /** Typing/thinking indicator: agent dolgozik. */\n readonly isTyping_$ = signal<boolean>(false);\n\n /** Stop execution folyamatban jelző. */\n readonly isStopping_$ = signal<boolean>(false);\n\n /** Flow bubble kattintás: kiválasztott event a popup-hoz. */\n readonly selectedEventForPopup_$ =\n signal<CCAP_MonitoringEventDisplay_Response | null>(null);\n\n /**\n * Az utolsó assistant üzenet runId-ja (a hozzá tartozó trace block auto-expand-hoz).\n */\n readonly lastAssistantRunId_$: Signal<string> = computed(\n (): string => {\n const msgs: Ses_ClientMessage_Response[] = this.session_DS.messages_$();\n for (let i: number = msgs.length - 1; i >= 0; i--) {\n const m: Ses_ClientMessage_Response = msgs[i];\n if (m.role === 'assistant' && (m.runId ?? '').trim().length > 0) {\n return m.runId!.trim();\n }\n }\n return '';\n },\n );\n\n /**\n * Üzenetek bubble view wrapping: minden role → shared bubble.\n */\n readonly chatViewItems_$ = computed((): SES_ChatViewItem_Interface[] => {\n const msgs: Ses_ClientMessage_Response[] = this.session_DS.messages_$();\n const sid: string = this.sessionId;\n return msgs.map(\n (msg: Ses_ClientMessage_Response): SES_ChatViewItem_Interface => ({\n msg: msg,\n bubbleView: SES_MessageToBubbleView_Util.fromClientMessage(msg, sid),\n }),\n );\n });\n\n /**\n * TTS cache jelzés a shared bubble-ből: messageKey → hasTtsAudio jelölés a data-service-ben.\n */\n handleTtsCached(messageKey: string): void {\n this.session_DS.setMessageTtsCached(messageKey);\n }\n\n // ── REQ-SES-FORK-001 Slice 3: fork-from-here UI ────────────────\n\n /** Nyitva van-e a fork-confirm modal. */\n readonly forkConfirmOpen_$ = signal<boolean>(false);\n\n /** Folyamatban van-e a fork-kérés. */\n readonly forkConfirmBusy_$ = signal<boolean>(false);\n\n /** A kiválasztott user-üzenet messageKey-e (ez lesz a fork pont, inclusive). */\n readonly forkPointMessageKey_$ = signal<string>('');\n\n /**\n * Fork button (user-role bubble mellett) klikk kezelése — a messageKey-t tároljuk\n * és megnyitjuk a megerősítő modalt.\n */\n handleForkFromHereClick(messageKey: string | undefined): void {\n const key: string = (messageKey ?? '').trim();\n if (!key) {\n return;\n }\n this.forkPointMessageKey_$.set(key);\n this.forkConfirmOpen_$.set(true);\n }\n\n /** Megerősítő modal bezárás (X, backdrop, Escape, Cancel). */\n handleForkConfirmClosed(): void {\n if (this.forkConfirmBusy_$()) {\n return;\n }\n this.forkConfirmOpen_$.set(false);\n this.forkPointMessageKey_$.set('');\n }\n\n /**\n * Fork végrehajtás: session_DS.forkSession → navigate az új session detail-re.\n * Hiba esetén a global error UI jeleníti meg (adatszerviz dobja tovább).\n */\n async handleForkConfirm(): Promise<void> {\n const key: string = this.forkPointMessageKey_$();\n if (!key || !this.sessionId.trim()) {\n return;\n }\n this.forkConfirmBusy_$.set(true);\n try {\n const newSession = await this.session_DS.forkSession({\n sessionId: this.sessionId,\n forkUntilMessageKey: key,\n });\n this.forkConfirmOpen_$.set(false);\n this.forkPointMessageKey_$.set('');\n if (newSession._id) {\n // Cycle 785b: instance kontextus a route-ban.\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const target: string[] = ccapId\n ? ['/session', ccapId, newSession._id]\n : ['/session', newSession._id];\n void this.router.navigate(target);\n }\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ccap-ses-fork');\n } finally {\n this.forkConfirmBusy_$.set(false);\n }\n }\n\n /**\n * Élő háttérfolyamat trace: az utolsó üzenet utáni (legfrissebb run) monitoring event-ek.\n * Amikor az agent dolgozik, itt jelennek meg valós időben a lépések.\n */\n readonly liveRunTrace_$: Signal<CCAP_MonitoringEventDisplay_Response[]> = computed(\n (): CCAP_MonitoringEventDisplay_Response[] => {\n // Ha nincs aktív futás, nincs mit mutatni\n if (!this.isTyping_$()) {\n return [];\n }\n const allEvents: CCAP_MonitoringEventDisplay_Response[] = this.monitoring_DS.events_$();\n if (!allEvents.length) {\n return [];\n }\n // Legfrissebb runId meghatározása az utolsó event-ből\n const lastRunId: string = allEvents[allEvents.length - 1].runId?.trim() ?? '';\n if (!lastRunId) {\n return [];\n }\n // Csak az aktuális session + run event-jei\n const sid: string = this.sessionId?.trim() ?? '';\n return allEvents.filter(\n (e: CCAP_MonitoringEventDisplay_Response): boolean =>\n e.sessionId.trim() === sid && (e.runId?.trim() ?? '') === lastRunId,\n );\n },\n );\n\n /**\n * Scroll anchor div a lista végén — scrollIntoView()-hoz.\n * A tényleges scroll containert (s-session-chat-column-layout div-je) nem érjük el ViewChild-dal,\n * ezért a lista végén lévő sentinel elemre hívunk scrollIntoView-t, ami a legközelebbi\n * scrollable ancestor-t scrollozza (a layout overflow-y-auto div-je).\n */\n @ViewChild('scrollAnchor') private scrollAnchorRef: ElementRef | null = null;\n\n private messagesEffectRef: EffectRef | null = null;\n private agentEventsEffectRef: EffectRef | null = null;\n\n readonly session_DS: Session_DataService = inject(Session_DataService);\n private readonly monitoring_DS: Ses_Monitoring_DataService =\n inject(Ses_Monitoring_DataService);\n private readonly router: Router = inject(Router);\n\n /** Cycle 785b (REQ-INST-SES-URL-001 Slice B): instance kontextus a navigation-höz. */\n private readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n private readonly globalError_CS: CCAP_GlobalError_ControlService =\n inject(CCAP_GlobalError_ControlService);\n private readonly voiceInputUi_DS: VNP_InputUi_DataService =\n inject(VNP_InputUi_DataService);\n\n readonly sessionQueue_DS: ExS_Queue_DataService =\n inject(ExS_Queue_DataService);\n private readonly registrySsot_CS: AIS_RegistrySsot_ControlService =\n inject(AIS_RegistrySsot_ControlService);\n\n // ── Model / Mode / Effort config (shared input dropdownok) ──────────\n\n /** Aktuális session info (reaktív, cache-ből). */\n private readonly sessionInfo_$: Signal<AC_SessionInfo_Response | null> = computed(\n (): AC_SessionInfo_Response | null => {\n const map: Map<string, AC_SessionInfo_Response> = this.session_DS.sessionInfoMap_$();\n return map.get(this.sessionId) ?? null;\n },\n );\n\n /** Enabled LLM modellek a registry-ből (model nevek listája a dropdown-hoz). */\n readonly modelOptions_$: Signal<string[]> = computed((): string[] => {\n const entries: MRg_ListItem_Response[] = this.registrySsot_CS.enabledLlmModels_$();\n return entries.map((e: MRg_ListItem_Response): string => e.modelName);\n });\n\n /** Kiválasztott model (session override vagy globál default). */\n readonly selectedModel_$: Signal<string> = computed((): string => {\n const info: AC_SessionInfo_Response | null = this.sessionInfo_$();\n return info?.activeLlmModel?.trim() || info?.defaultLlmModel?.trim() || '';\n });\n\n /** Elérhető run execution mode opciók. */\n readonly modeOptions: string[] = [\n AC_RunExecutionMode_Type.agenticAny,\n AC_RunExecutionMode_Type.instant,\n AC_RunExecutionMode_Type.ask,\n AC_RunExecutionMode_Type.plan,\n ];\n\n /** Kiválasztott forced run execution mode (session override vagy default agentic-any). */\n readonly selectedMode_$: Signal<string> = computed((): string => {\n const info: AC_SessionInfo_Response | null = this.sessionInfo_$();\n return info?.forcedRunExecutionMode ?? AC_RunExecutionMode_Type.agenticAny;\n });\n\n /** Elérhető reasoning effort opciók. */\n readonly effortOptions: string[] = ['none', 'low', 'mid', 'high'];\n\n /** Kiválasztott reasoning effort (session override vagy 'none'). */\n readonly selectedEffort_$: Signal<string> = computed((): string => {\n const info: AC_SessionInfo_Response | null = this.sessionInfo_$();\n const effort: unknown = (info as Record<string, unknown> | null)?.reasoningEffort;\n return typeof effort === 'string' && effort.trim() !== '' ? effort.trim() : 'none';\n });\n\n constructor() {\n this.messagesEffectRef = effect((): void => {\n this.session_DS.messages_$();\n this.scheduleScrollToBottom();\n });\n this.agentEventsEffectRef = effect((): void => {\n const eventData: Record<string, unknown> = this.session_DS.agentEvents_$();\n const rawPhase: unknown = eventData.phase ?? eventData.step ?? '';\n const rawStatus: unknown = eventData.status ?? '';\n const phase: string = DisplayString_Util.toDisplayString(rawPhase);\n const status: string = DisplayString_Util.toDisplayString(rawStatus);\n\n this.isTyping_$.set(Boolean(phase || status));\n\n if (phase === NTF_PHASE_SENT) {\n // Notification tool: message típus elküldve (rövid flash)\n const ntfTitle: string = DisplayString_Util.toDisplayString(eventData.notificationTitle ?? '');\n this.runStatusText_$.set(ntfTitle ? `Notification sent: ${ntfTitle}` : 'Notification sent');\n } else if (phase === 'waiting-for-user' && eventData.toolId === NTF_TOOL_ID) {\n // Notification tool: interaktív típus — válaszra vár\n const ntfTitle: string = DisplayString_Util.toDisplayString(eventData.notificationTitle ?? '');\n this.runStatusText_$.set(ntfTitle ? `Waiting for response: ${ntfTitle}` : 'Waiting for your response…');\n } else if (phase === 'waiting-for-user') {\n this.runStatusText_$.set('Waiting for your response…');\n } else if (phase === 'analyze' || status === 'analyzing') {\n this.runStatusText_$.set('Analyzing…');\n } else if (phase === 'assemble' || status === 'assembling') {\n this.runStatusText_$.set('Assembling conversation…');\n } else if (phase === 'execution' || status === 'executing') {\n this.runStatusText_$.set('Executing…');\n } else if (phase === 'finalization') {\n this.runStatusText_$.set('Finalizing…');\n } else if (phase === 'toolCall' || eventData.toolCall) {\n this.runStatusText_$.set('Executing tool…');\n } else if (phase || status) {\n this.runStatusText_$.set(status || phase);\n } else {\n this.runStatusText_$.set('');\n }\n this.scheduleScrollToBottom();\n }, { allowSignalWrites: true });\n }\n\n ngOnInit(): void {\n this.loadMessages();\n this.loadMonitoringEventsForSession();\n this.loadSessionConfigData();\n if (this.sessionId) {\n // REQ-SES-INPUT-DRAFT-001 (cycle 196): per-session piszkozat visszatöltése\n // localStorage-ból, hogy a user navigálás után visszakapja a beírt szöveget.\n this.newMessage = Ses_InputStorage_Util.loadPromptDraft(this.sessionId);\n this.sessionQueue_DS.subscribeToSession({\n sessionId: this.sessionId,\n baseRoute: 'session',\n });\n }\n }\n\n ngOnDestroy(): void {\n if (this.messagesEffectRef) {\n this.messagesEffectRef.destroy();\n this.messagesEffectRef = null;\n }\n if (this.agentEventsEffectRef) {\n this.agentEventsEffectRef.destroy();\n this.agentEventsEffectRef = null;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.sessionId && this.sessionId) {\n // REQ-SES-INPUT-DRAFT-001 (cycle 196): session-váltáskor új session-höz\n // tartozó piszkozat visszatöltése (per-session storage).\n this.newMessage = Ses_InputStorage_Util.loadPromptDraft(this.sessionId);\n this.loadMessages();\n this.loadMonitoringEventsForSession();\n this.loadSessionConfigData();\n }\n }\n\n ngAfterViewInit(): void {\n this.scheduleScrollToBottom();\n }\n\n /**\n * A chat mindig az aljára görget: következő tick-ben, hogy a DOM frissült legyen.\n */\n private scheduleScrollToBottom(): void {\n setTimeout((): void => this.scrollToBottom(), 0);\n }\n\n /**\n * Scroll a messages lista aljára.\n * A scrollAnchor sentinel elem scrollIntoView()-ja a legközelebbi scrollable ancestor-t scrollozza,\n * ami a s-session-chat-column-layout overflow-y-auto div-je.\n */\n private scrollToBottom(): void {\n this.scrollAnchorRef?.nativeElement?.scrollIntoView({ behavior: 'instant' });\n }\n\n /**\n * Meglévő üzenetek betöltése a Session DS-en keresztül (mindig teljes lista).\n * Nem várja meg a betöltést; a loading állapot a session_DS.messagesLoading_$() alapján jelezhető.\n */\n loadMessages(): void {\n if (!this.sessionId) {\n return;\n }\n void this.session_DS.loadMessagesForView(this.sessionId);\n }\n\n /**\n * Session-hez tartozó monitoring event lista (HTTP); háttérfolyamat buborék merge + timeline alap.\n */\n private loadMonitoringEventsForSession(): void {\n const sid: string = this.sessionId?.trim() ?? '';\n if (!sid) {\n return;\n }\n void this.monitoring_DS.loadSessionEvents(sid);\n }\n\n /**\n * REQ-SES-INPUT-DRAFT-001 (cycle 196): input-mező változás kezelése — signal-frissítés\n * + per-session piszkozat-mentés localStorage-ba (parity a CC session `handlePromptInputChange`\n * metódussal). A user kérése: a CC sessionhöz hasonlóan a CCAP session is őrizze meg a\n * félig-megírt üzenetet, ha közben máshol navigálunk.\n */\n handleDraftTextChange(value: string): void {\n this.newMessage = value;\n if (this.sessionId) {\n Ses_InputStorage_Util.savePromptDraft(this.sessionId, value);\n }\n }\n\n /**\n * Üzenet küldése (REST API).\n * \"/new\" esetén új session jön létre és navigálunk rá.\n * Ha a küldés sikertelen (nincs sessionId vagy API hiba), hibát mutatunk és a szöveget megőrizzük.\n *\n * REQ-SES-INPUT-DRAFT-001 (cycle 196): localStorage piszkozat-törlés a send-INDULÁSÁNÁL,\n * a `setMessageViaSocket` előtt — hogy ha a user közben navigál, a visszanavigálásnál\n * üres input mezőt lásson, ne stuck üzenetet (cycle 189 minta a CC sessionben).\n * Hiba ágban a draft visszaíródik, hogy retry-nál (akár új komponens-mount után) megmaradjon.\n */\n async sendMessage(): Promise<void> {\n const text: string = this.newMessage;\n const currentAttachments: CCAP_PendingAttachment_Interface[] = [...this.pendingAttachments];\n if (!text.trim() && !currentAttachments.length) {\n return;\n }\n\n const sidForDraft: string = this.sessionId;\n // REQ-SES-INPUT-DRAFT-001: clear the localStorage draft on send-START.\n Ses_InputStorage_Util.clearPromptDraft(sidForDraft);\n this.newMessage = '';\n\n // Attachment-ek konvertálása a conversation API formátumára (image-ek)\n const imageAttachments: Ses_ClientImageAttachment_Response[] | undefined =\n currentAttachments.length > 0\n ? currentAttachments\n .filter((a: CCAP_PendingAttachment_Interface): boolean => a.isImage)\n .map(\n (a: CCAP_PendingAttachment_Interface): Ses_ClientImageAttachment_Response => ({\n mimeType: a.mimeType,\n base64: a.base64,\n }),\n )\n : undefined;\n\n const result = await this.session_DS.sendMessageViaSocket(text, imageAttachments);\n\n if (result.newSession?._id) {\n this.session_DS.setActiveSession(result.newSession._id);\n // Cycle 785b: instance kontextus a route-ban.\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const target: string[] = ccapId\n ? ['/session', ccapId, result.newSession._id]\n : ['/session', result.newSession._id];\n this.router.navigate(target);\n } else if (!result.sent) {\n this.newMessage = text;\n // REQ-SES-INPUT-DRAFT-001: failure → restore draft to localStorage\n // (retry-nál — akár új komponens-mount-on — ne vesszen el).\n Ses_InputStorage_Util.savePromptDraft(sidForDraft, text);\n const errorText: string =\n result.error?.trim() ?? 'Üzenet küldése sikertelen.';\n this.globalError_CS.showError(new Error(errorText), 'ccap-chat');\n }\n }\n\n /**\n * Shared input komponens attachment lista változás.\n */\n onAttachmentsChanged(attachments: CCAP_PendingAttachment_Interface[]): void {\n this.pendingAttachments = attachments;\n }\n\n /**\n * QuickCast overlay akció: a választott szöveget azonnal a sessionbe küldjük\n * a piszkozat-mező felülírása nélkül. Hibaesetén a global error UI megjeleníti.\n */\n async handleQuickCastAction(text: string): Promise<void> {\n const trimmed: string = text.trim();\n if (!trimmed || !this.sessionId) {\n return;\n }\n const result = await this.session_DS.sendMessageViaSocket(trimmed, undefined);\n if (!result.sent) {\n const errorText: string = result.error?.trim() ?? 'QuickCast üzenet küldése sikertelen.';\n this.globalError_CS.showError(new Error(errorText), 'ccap-chat-quickcast');\n }\n }\n\n /**\n * Futó execution leállítása (stop gomb kattintás).\n */\n async handleStopExecution(): Promise<void> {\n if (!this.sessionId || this.isStopping_$()) {\n return;\n }\n this.isStopping_$.set(true);\n try {\n await this.session_DS.stopExecution(this.sessionId);\n } finally {\n this.isStopping_$.set(false);\n }\n }\n\n /**\n * Voice record gomb: transcribe szegmens eredmény hozzáfűzése a newMessage-hez.\n * Minden szegmens akkumulálódik (mid-recording, silence, final).\n * Auto-send: csak isFinal=true esetén küld (user megállította a felvételt).\n */\n onVoiceSegment(event: { text: string; isFinal: boolean }): void {\n const t: string = event.text?.trim() ?? '';\n // Szöveg hozzáfűzés (akkumuláció): mid-recording és silence szegmensek is gyűlnek.\n if (t) {\n const current: string = this.newMessage.trim();\n this.newMessage = current.length > 0 ? current + ' ' + t : t;\n }\n // Auto-send isFinal esetén: üres szegmenssel (non_speech) is trigger-el, ha van akkumulált szöveg.\n if (this.voiceInputUi_DS.autoSendAfterVoice_$() && event.isFinal && this.newMessage.trim().length > 0) {\n void this.sendMessage();\n }\n }\n\n /**\n * User interaction card válasz: a session data service-en keresztül elküldjük a szerverre.\n */\n onInteractionResponse(response: UIn_UserInteractionResponse_Interface): void {\n this.session_DS.sendInteractionResponse(response);\n }\n\n /**\n * Flow bubble kattintás: popup megjelenítése a lépés részleteivel.\n */\n onFlowEventSelected(ev: CCAP_MonitoringEventDisplay_Response): void {\n this.selectedEventForPopup_$.set(ev);\n }\n\n /**\n * Lépés popup bezárása.\n */\n closeTracePopup(): void {\n this.selectedEventForPopup_$.set(null);\n }\n\n // ── Model / Mode / Effort handlerek ─────────────────────────────────\n\n /**\n * Session info + model registry betöltése (dropdown-ok adatforrása).\n */\n private loadSessionConfigData(): void {\n if (!this.sessionId) {\n return;\n }\n void this.session_DS.loadSessionInfo(this.sessionId);\n this.registrySsot_CS.ensureLoaded('llm');\n }\n\n /**\n * Model kiválasztás handler — PATCH session activeLlmProvider + activeLlmModel.\n * A provider-t a model registry-ből keressük ki a modelName alapján.\n */\n handleModelChanged(modelName: string): void {\n const entries: MRg_ListItem_Response[] = this.registrySsot_CS.enabledLlmModels_$();\n const entry: MRg_ListItem_Response | undefined = entries.find(\n (e: MRg_ListItem_Response): boolean => e.modelName === modelName,\n );\n if (!entry || !this.sessionId) {\n return;\n }\n void this.session_DS.updateSession({\n sessionId: this.sessionId,\n updates: {\n activeLlmProvider: entry.provider,\n activeLlmModel: entry.modelName,\n },\n }).then((): void => {\n void this.session_DS.loadSessionInfo(this.sessionId);\n });\n }\n\n /**\n * Mode kiválasztás handler — PATCH session forcedRunExecutionMode.\n */\n handleModeChanged(mode: string): void {\n if (!this.sessionId) {\n return;\n }\n void this.session_DS.updateSession({\n sessionId: this.sessionId,\n updates: { forcedRunExecutionMode: mode || null },\n }).then((): void => {\n void this.session_DS.loadSessionInfo(this.sessionId);\n });\n }\n\n /**\n * Effort kiválasztás handler — PATCH session reasoningEffort.\n */\n handleEffortChanged(effort: string): void {\n if (!this.sessionId) {\n return;\n }\n void this.session_DS.updateSession({\n sessionId: this.sessionId,\n updates: { reasoningEffort: effort || null },\n }).then((): void => {\n void this.session_DS.loadSessionInfo(this.sessionId);\n });\n }\n}\n", "<app-s-session-chat-column-layout>\n\n <div sChatColumnScroll class=\"p-3 flex flex-col\">\n <div class=\"flex flex-col gap-1 w-full max-w-3xl mx-auto\">\n\n @for (item of chatViewItems_$(); track item.msg.clientListKey) {\n <!-- Assistant üzenet előtt: a run háttérfolyamatai -->\n @if (item.msg.role === 'assistant' && (item.msg.runId ?? '').trim().length > 0) {\n <app-ccap-run-trace-block\n [sessionId]=\"sessionId\"\n [runId]=\"item.msg.runId ?? ''\"\n [autoExpand]=\"(item.msg.runId ?? '').trim() === lastAssistantRunId_$()\">\n </app-ccap-run-trace-block>\n }\n <div class=\"group relative\"\n [class]=\"item.bubbleView.isUserAligned\n ? 'self-end max-w-[80%]' : 'self-start max-w-[92%]'\">\n <app-s-agent-console-message-bubble\n [view]=\"item.bubbleView\"\n (ttsCached)=\"handleTtsCached($event)\" />\n <!-- REQ-SES-FORK-001 Slice 3: fork-from-here gomb user bubble-ön (hover-on látszik). -->\n @if (item.msg.role === 'user' && item.msg.messageKey) {\n <button type=\"button\"\n (click)=\"handleForkFromHereClick(item.msg.messageKey)\"\n title=\"Fork session a jelenlegi üzenetig (inclusive) — új session az előzmény másolatával\"\n aria-label=\"Fork session up to this message\"\n class=\"absolute -left-7 top-1 p-1 rounded text-neutral-500\n hover:text-ccapAccent hover:bg-neutral-800/60\n opacity-0 group-hover:opacity-100 focus:opacity-100\n transition-opacity duration-150\">\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\"></line>\n <circle cx=\"18\" cy=\"6\" r=\"3\"></circle>\n <circle cx=\"6\" cy=\"18\" r=\"3\"></circle>\n <path d=\"M18 9a9 9 0 0 1-9 9\"></path>\n </svg>\n </button>\n }\n </div>\n }\n\n <!-- Élő háttérfolyamatok (futás közben, az utolsó üzenet után) -->\n @if (liveRunTrace_$().length) {\n <div class=\"self-start mt-1 mb-1 w-full\">\n <div class=\"pl-2 border-l-2 border-neonDefault\">\n <app-ccap-run-flow-viz\n [trace]=\"liveRunTrace_$()\"\n (eventSelected)=\"onFlowEventSelected($event)\">\n </app-ccap-run-flow-viz>\n </div>\n </div>\n }\n\n <!-- User interaction card (agent kérdez, user válaszol) -->\n @if (session_DS.pendingInteraction_$(); as interaction) {\n <div class=\"self-start mt-2 mb-2\">\n <app-ccap-user-interaction-card\n [request]=\"interaction\"\n (responded)=\"onInteractionResponse($event)\">\n </app-ccap-user-interaction-card>\n </div>\n }\n\n <!-- Inline notification indicator (ccap_notification tool hívás közben) -->\n @if (session_DS.pendingNotification_$(); as ntf) {\n <div class=\"self-start mt-2 mb-2 px-3 py-2 rounded-md border text-sm flex items-center gap-2\n max-w-[80%]\"\n [ngClass]=\"{\n 'border-neonCyan/40 bg-neonCyan/5 text-neonCyan': ntf.notificationPriority === 'info',\n 'border-amber-500/40 bg-amber-500/5 text-amber-400': ntf.notificationPriority === 'warning',\n 'border-green-500/40 bg-green-500/5 text-green-400': ntf.notificationPriority === 'success',\n 'border-red-500/40 bg-red-500/5 text-red-400': ntf.notificationPriority === 'error'\n }\">\n <!-- Típus ikon -->\n @if (ntf.phase === 'notification-sent') {\n <svg class=\"w-4 h-4 shrink-0\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11\n a6 6 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165\n 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4\n 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"/>\n </svg>\n } @else {\n <span class=\"w-2 h-2 rounded-full bg-current animate-pulse shrink-0\"></span>\n }\n <!-- Szöveg -->\n <span class=\"truncate\">\n @if (ntf.phase === 'notification-sent') {\n Notification sent: {{ ntf.notificationTitle }}\n } @else {\n Waiting for response: {{ ntf.notificationTitle }}\n }\n </span>\n <!-- Típus badge -->\n <span class=\"shrink-0 text-[10px] px-1.5 py-0.5 rounded-full border border-current/30 opacity-70\">\n {{ ntf.notificationType }}\n </span>\n </div>\n }\n\n @if (isTyping_$()) {\n <div class=\"flex items-center gap-2 text-neutral-400 text-sm py-1\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n @if (chatRunStatusLine_$()) {\n <span>{{ chatRunStatusLine_$() }}</span>\n } @else {\n <span>Thinking…</span>\n }\n </div>\n }\n\n <!-- Trace detail popup (élő flow bubble kattintás) -->\n @if (selectedEventForPopup_$(); as popupEv) {\n <div class=\"fixed inset-0 z-[100] flex items-center justify-center\"\n (click)=\"closeTracePopup()\">\n <div class=\"absolute inset-0 bg-black/50\"\n aria-hidden=\"true\"></div>\n <div class=\"relative z-10\"\n (click)=\"$event.stopPropagation()\">\n <app-ccap-trace-detail\n [event]=\"popupEv\"\n (close)=\"closeTracePopup()\">\n </app-ccap-trace-detail>\n </div>\n </div>\n }\n\n @if (session_DS.messagesLoadError_$()) {\n <div class=\"max-w-xl mx-auto\">\n <app-ccap-error-display [error]=\"session_DS.messagesLoadError_$()\"\n sourceLabelOverride=\"Üzenetek betöltés\"\n class=\"block\" />\n </div>\n }\n @if (session_DS.messagesLoading_$() && !session_DS.messages_$().length) {\n <div class=\"flex flex-col items-center gap-2 py-12 text-neutral-500\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n <span class=\"text-sm\">Üzenetek betöltése…</span>\n <div class=\"flex flex-col gap-2 w-full max-w-md mt-2\">\n <div class=\"h-12 w-3/4 bg-neutral-700 rounded-lg animate-pulse\"></div>\n <div class=\"h-12 w-2/3 self-end bg-neutral-700 rounded-lg animate-pulse\"></div>\n <div class=\"h-12 w-4/5 bg-neutral-700 rounded-lg animate-pulse\"></div>\n </div>\n </div>\n } @else if (!session_DS.messages_$().length && !isTyping_$() && !session_DS.messagesLoadError_$()) {\n <div class=\"text-center text-neutral-500 py-12\">\n No messages yet. Start a conversation.\n </div>\n }\n\n <!-- Scroll anchor: scrollIntoView() ide hívja le a lista aljára a shared layout scroll div-jét -->\n <div #scrollAnchor></div>\n\n </div>\n </div>\n\n <div sChatColumnComposer class=\"max-w-3xl mx-auto w-full\">\n <app-s-session-input\n [draftText]=\"newMessage\"\n (draftTextChange)=\"handleDraftTextChange($event)\"\n [isExecuting]=\"isTyping_$()\"\n [isStopping]=\"isStopping_$()\"\n [enableAttachments]=\"true\"\n placeholder=\"Type a message...\"\n [textareaRows]=\"3\"\n [modeOptions]=\"modeOptions\"\n [selectedMode]=\"selectedMode_$()\"\n [modelOptions]=\"modelOptions_$()\"\n [selectedModel]=\"selectedModel_$()\"\n [effortOptions]=\"effortOptions\"\n [selectedEffort]=\"selectedEffort_$()\"\n (modeChanged)=\"handleModeChanged($event)\"\n (modelChanged)=\"handleModelChanged($event)\"\n (effortChanged)=\"handleEffortChanged($event)\"\n (sendRequested)=\"sendMessage()\"\n (queueRequested)=\"sendMessage()\"\n (stopRequested)=\"handleStopExecution()\"\n (attachmentsChanged)=\"onAttachmentsChanged($event)\"\n [queueItems]=\"sessionQueue_DS.items_$()\"\n [isQueueLocked]=\"sessionQueue_DS.isLocked_$()\"\n [editingQueueItemId]=\"sessionQueue_DS.editingItemId_$()\"\n [editingQueueText]=\"sessionQueue_DS.editingText_$()\"\n (queueEditStart)=\"sessionQueue_DS.startEditing($event)\"\n (queueEditTextChange)=\"sessionQueue_DS.editingText_$.set($event)\"\n (queueEditSave)=\"sessionQueue_DS.saveEdit()\"\n (queueEditCancel)=\"sessionQueue_DS.cancelEdit()\"\n (queueRemoveItem)=\"sessionQueue_DS.removeItem($event)\"\n (queueSendNow)=\"sessionQueue_DS.sendNow($event)\"\n (queueMoveUp)=\"sessionQueue_DS.reorderItem({ queueItemId: $event, direction: 'up' })\"\n (queueMoveDown)=\"sessionQueue_DS.reorderItem({ queueItemId: $event, direction: 'down' })\">\n </app-s-session-input>\n </div>\n\n <!-- Bal alul belógó schedule overlay — csak akkor látszik, ha van schedule a sessionhöz. -->\n <app-s-session-schedule-overlay sChatColumnOverlay [sessionId]=\"sessionId\" />\n\n <!-- A schedule overlay fölött: QuickCast — gyors-akciógombok. -->\n <app-s-session-quickcast-overlay sChatColumnOverlay\n (actionSelected)=\"handleQuickCastAction($event)\" />\n\n <!-- QuickCast fölött: Coordinator — assigned info / assign UI. -->\n <app-s-session-coordinator-overlay sChatColumnOverlay [sessionId]=\"sessionId\" />\n\n <!-- Coordinator fölött: Session Quick Settings (stub v1, plan-state). -->\n <app-s-session-quick-settings-overlay sChatColumnOverlay [sessionId]=\"sessionId\" />\n\n <!-- Voice record gomb a session history jobb-alsó sarkában. Az Auto-Read TTS toggle\n cycle 814 óta a Quick Settings overlay-be költözött (user explicit kérés). -->\n <div sChatColumnOverlay class=\"absolute bottom-4 right-4 z-30 pointer-events-auto\">\n <app-ccap-voice-record-button\n [compactLayout]=\"true\"\n (transcriptSegmentReady)=\"onVoiceSegment($event)\">\n </app-ccap-voice-record-button>\n </div>\n\n</app-s-session-chat-column-layout>\n\n<!-- REQ-SES-FORK-001 Slice 3: fork-from-here megerősítő modal -->\n<app-s-modal [isOpen]=\"forkConfirmOpen_$()\"\n [title]=\"'Fork session from this message'\"\n maxWidth=\"lg\"\n (closed)=\"handleForkConfirmClosed()\">\n <div class=\"flex flex-col gap-3 p-4\">\n <p class=\"text-sm text-neutral-200\">\n A fork egy új session-t hoz létre, ami csak az üzeneteket tartalmazza egészen\n a kiválasztott user üzenetig (inclusive). Az eredeti session érintetlen marad.\n </p>\n <p class=\"text-xs text-neutral-500 font-mono break-all\">\n fork point: {{ forkPointMessageKey_$() }}\n </p>\n </div>\n <div modal-footer class=\"flex flex-wrap gap-3 px-4 py-3 border-t border-neutral-700/60\">\n <button type=\"button\"\n (click)=\"handleForkConfirm()\"\n [disabled]=\"forkConfirmBusy_$()\"\n class=\"px-4 py-2 rounded border border-ccapAccent text-ccapAccent text-sm font-medium\n hover:bg-ccapAccent/10 disabled:opacity-40 disabled:pointer-events-none\">\n {{ forkConfirmBusy_$() ? 'Forking…' : 'Fork session' }}\n </button>\n <button type=\"button\"\n (click)=\"handleForkConfirmClosed()\"\n [disabled]=\"forkConfirmBusy_$()\"\n class=\"px-4 py-2 rounded border border-neutral-600 text-neutral-200 text-sm\n hover:bg-neutral-800 disabled:opacity-40 disabled:pointer-events-none\">\n Cancel\n </button>\n </div>\n</app-s-modal>\n", "import { Component, input, computed } from '@angular/core';\n\nimport { CCAP_RunExecutionUiLabels_Util } from '../../../../_collections/run-execution/ccap-run-execution-ui-labels.util';\nimport { DisplayString_Util } from '../../../../_collections/display/display-string.util';\n\n/**\n * Run summary komponens.\n * Collapsible run összefoglaló blokk: summary, status, intent/goal.\n * Failed run esetén a shared error display komponens jelenik meg (nyers error: runSummary vagy fallback string).\n * Opcionális: run execution mode + session palette badge (REST lastRun + élő socket latch).\n */\n@Component({\n selector: 'app-ccap-run-summary',\n templateUrl: './ses-run-summary.component.html',\n})\n/** Ses_RunSummary_Component class. */\nexport class Ses_RunSummary_Component {\n\n runSummary = input<string>('');\n runStatus = input<string>('');\n runIntent = input<string>('');\n runGoal = input<string>('');\n /** Utolsó run `runExecutionMode` (session detail). */\n runExecutionMode = input<string | undefined>(undefined);\n /** Session palette override (GET session detail); null/üres = globál settings. */\n sessionRunExecutionPaletteConstraint = input<string | null | undefined>(undefined);\n /** Élő mód az agent-events analyze-result latch-ből (üres ha nincs futó run). */\n liveRunExecutionMode = input<string | undefined>(undefined);\n\n /** Összecsukott állapot. */\n collapsed: boolean = true;\n\n /** Megjelenítendő run status (computed). */\n readonly runStatusDisplay_$ = computed(\n (): string => DisplayString_Util.toDisplayString(this.runStatus()) || '—',\n );\n\n /** Megjelenítendő run summary (computed). */\n readonly runSummaryDisplay_$ = computed(\n (): string => DisplayString_Util.toDisplayString(this.runSummary()) || '—',\n );\n\n /** Megjelenítendő run intent (computed). */\n readonly runIntentDisplay_$ = computed(\n (): string => DisplayString_Util.toDisplayString(this.runIntent()) || '—',\n );\n\n /** Megjelenítendő run goal (computed). */\n readonly runGoalDisplay_$ = computed(\n (): string => DisplayString_Util.toDisplayString(this.runGoal()) || '—',\n );\n\n /** Effektív mode kulcs: live első, különben perzisztált lastRun. */\n readonly effectiveRunExecutionModeKey_$ = computed((): string => {\n const live: string | undefined = this.liveRunExecutionMode();\n if (live != null && live.trim() !== '') {\n return live.trim();\n }\n const persisted: string | undefined = this.runExecutionMode();\n if (persisted != null && persisted.trim() !== '') {\n return persisted.trim();\n }\n return '';\n });\n\n /** Mode badge szöveg (üres ha nincs adat). */\n readonly runExecutionModeLabel_$ = computed((): string => {\n const key: string = this.effectiveRunExecutionModeKey_$();\n if (key === '') {\n return '';\n }\n return CCAP_RunExecutionUiLabels_Util.labelForRunExecutionMode(key);\n });\n\n /** Session palette badge (csak ha van session override). */\n readonly sessionPaletteLabel_$ = computed((): string => {\n const raw: string | null | undefined = this.sessionRunExecutionPaletteConstraint();\n if (raw == null) {\n return '';\n }\n const s: string = typeof raw === 'string' ? raw.trim() : '';\n if (s === '') {\n return '';\n }\n return CCAP_RunExecutionUiLabels_Util.labelForPaletteConstraint(s);\n });\n\n /** Van-e bármely execution info badge a fejlécben. */\n readonly hasExecutionInfoBadges_$ = computed((): boolean => {\n return this.runExecutionModeLabel_$().length > 0 || this.sessionPaletteLabel_$().length > 0;\n });\n\n /**\n * Failed run esetén a megjelenítendő nyers error (computed).\n * Üres vagy \"[object Object]\" summary-nál fallback string.\n */\n readonly runError_$ = computed((): unknown | null => {\n if (this.runStatus() !== 'failed') {\n return null;\n }\n const msg: string = DisplayString_Util.toDisplayString(this.runSummary()).trim();\n return msg && msg !== '—' ? this.runSummary() : 'Run failed (no details).';\n });\n\n /**\n * Összefoglaló ki/becsukása.\n */\n toggleCollapse(): void {\n this.collapsed = !this.collapsed;\n }\n}\n", "<div class=\"border border-neonDefault rounded-lg my-2 overflow-hidden\">\n <div class=\"flex items-center gap-3 px-3.5 py-2.5 cursor-pointer\n bg-ccapSurface text-[13px] hover:bg-neutral-800\"\n (click)=\"toggleCollapse()\">\n <span class=\"font-bold uppercase text-[11px]\"\n [ngClass]=\"{\n 'text-green-500': runStatus() === 'completed',\n 'text-red-500': runStatus() === 'failed',\n 'text-orange-500': runStatus() === 'executing'\n }\">\n {{ runStatusDisplay_$() }}\n </span>\n @if (hasExecutionInfoBadges_$()) {\n <span class=\"flex flex-wrap items-center gap-1.5 shrink-0 max-w-[min(100%,14rem)]\">\n @if (runExecutionModeLabel_$()) {\n <span class=\"text-[10px] px-1.5 py-0.5 rounded border border-neonCyan/40 text-ccapAccent font-medium whitespace-nowrap\">\n {{ runExecutionModeLabel_$() }}\n </span>\n }\n @if (sessionPaletteLabel_$()) {\n <span class=\"text-[10px] px-1.5 py-0.5 rounded border border-neutral-600 text-neutral-400 whitespace-nowrap\">\n {{ sessionPaletteLabel_$() }}\n </span>\n }\n </span>\n }\n <span class=\"flex-1 text-neutral-200 min-w-0 truncate\">{{ runIntentDisplay_$() }}</span>\n <span class=\"text-neutral-400 text-base font-bold shrink-0\">\n {{ collapsed ? '+' : '-' }}\n </span>\n </div>\n\n @if (!collapsed) {\n <div class=\"px-3.5 py-3 text-[13px] text-neutral-300 border-t border-neonDefault\">\n @if (runError_$()) {\n <app-ccap-error-display [error]=\"runError_$()\" class=\"mb-3 block\" />\n } @else {\n @if (runGoalDisplay_$()) {\n <div class=\"mb-2 text-neutral-400\">\n <strong>Goal:</strong> {{ runGoalDisplay_$() }}\n </div>\n }\n <div>{{ runSummaryDisplay_$() }}</div>\n }\n </div>\n }\n</div>\n", "import { Component, OnInit, OnDestroy, computed, effect, EffectRef, inject, signal, untracked } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { DyNX_SubscriptionControl } from '@futdevpro/ngx-dynamo';\n\nimport { DisplayString_Util } from '../../../../_collections/display/display-string.util';\nimport { ExS_InstanceContext_DataService } from '../../../external-sessions/_services/exs-instance-context.data-service';\nimport {\n Session_DataService,\n} from '../../_services/data-services/session.data-service';\n\n/**\n * Session detail komponens.\n * Középső tartalom a shell-ben: run summary + chat. Adat a Session Data Service cache-ből.\n */\n@Component({\n selector: 'app-ccap-session-detail',\n templateUrl: './ses-detail.component.html',\n styles: [`\n :host {\n display: block;\n height: 100%;\n min-height: 0;\n flex: 1 1 auto;\n }\n `],\n})\n/** Ses_Detail_Component class. */\nexport class Ses_Detail_Component extends DyNX_SubscriptionControl implements OnInit, OnDestroy {\n\n private readonly route: ActivatedRoute = inject(ActivatedRoute);\n readonly session_DS: Session_DataService = inject(Session_DataService);\n\n /** Cycle 785b (REQ-INST-SES-URL-001 Slice B): instance kontextus URL paramból. */\n private readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n\n /**\n * Session ID az URL-ből (writable signal).\n * Direkt RxJS subscription frissíti (nem toSignal): a setActiveSession (clearMessages) szinkronban\n * fut a route-param változással, MIELŐTT az Angular change detection elindulna.\n * toSignal + effect kombóval a clearMessages UTÁNA futott volna (effect = microtask),\n * ami flash-t okozott (régi session üzenetei villantak egy pillanatra) és race condition-t\n * a loadMessagesForView guard-jával (activeSessionId nem volt frissítve időben).\n */\n readonly sessionId_$ = signal<string>('');\n\n /** Session detail (session + lastRun) a cache-ből. */\n readonly detail_$ = computed(() => {\n const id: string = this.sessionId_$();\n const mapVal = this.session_DS.sessionDetailMap_$();\n return id ? mapVal.get(id) ?? null : null;\n });\n\n /** Run status a run summary-nek (agent-events alapján). */\n readonly runStatusText_$ = signal<string>('');\n\n private agentEventsEffectRef: EffectRef | null = null;\n\n constructor() {\n super();\n // Szinkron session setup route változáskor: a subscription callback AZONNAL fut\n // amikor a route params observable emit-el — change detection ELŐTT.\n // Ez biztosítja, hogy a clearMessages() megtörténjen mielőtt a chat komponens renderelne.\n this.addSubscription(this.route.params.subscribe(\n (params: Record<string, string>): void => {\n const id: string = params.id ?? '';\n // Cycle 785b (REQ-INST-SES-URL-001): új `:ccapId/:id` route — ha ccapId\n // az URL-ben, állítsuk aktív instance-nek a session load ELŐTT.\n const ccapIdFromUrl: string = params.ccapId ?? '';\n this.sessionId_$.set(id);\n if (ccapIdFromUrl) {\n // ensureInitialized() awaitelhetné a peiContext-et, de a setActiveSession\n // synchronous és nem instance-aware (csak frontend cache-key); a\n // selectInstance synchronously frissíti az `activeCcapId_$` signal-t.\n if (this.peiContext_DS.activeCcapId_$() !== ccapIdFromUrl) {\n this.peiContext_DS.selectInstance(ccapIdFromUrl);\n }\n }\n this.session_DS.setActiveSession(id);\n if (id) {\n void this.session_DS.loadSessionDetail(id);\n }\n },\n ));\n\n this.agentEventsEffectRef = effect((): void => {\n const eventData: Record<string, unknown> = this.session_DS.agentEvents_$();\n const rawPhase: unknown = eventData.phase ?? eventData.step ?? '';\n const phase: string = DisplayString_Util.toDisplayString(rawPhase);\n const nextStatus: string = this.mapPhaseToRunStatus(phase);\n const wasRunning: boolean = untracked(this.runStatusText_$).length > 0;\n this.runStatusText_$.set(nextStatus);\n if (wasRunning && !nextStatus) {\n const id: string = this.sessionId_$();\n if (id) {\n void this.session_DS.loadSessionDetail(id);\n }\n }\n }, { allowSignalWrites: true });\n }\n\n ngOnInit(): void {}\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n if (this.agentEventsEffectRef) {\n this.agentEventsEffectRef.destroy();\n this.agentEventsEffectRef = null;\n }\n }\n\n /**\n * Phase → run summary megjelenített szöveg (analyze, assemble, execution, finalization).\n */\n private mapPhaseToRunStatus(phase: string): string {\n if (!phase) {\n return '';\n }\n if (phase === 'run-initialization') {\n return 'Initializing…';\n }\n if (phase === 'analyze') {\n return 'Analyzing…';\n }\n if (phase === 'assemble') {\n return 'Assembling context…';\n }\n if (phase === 'execution') {\n return 'Executing…';\n }\n if (phase === 'finalization') {\n return 'Finalizing…';\n }\n return phase;\n }\n}\n", "<div class=\"flex flex-col h-full\">\n @if (session_DS.sessionDetailLoading_$()) {\n <div class=\"px-4 py-3 border-b border-neonDefault shrink-0\">\n <div class=\"h-4 w-48 bg-neutral-600 rounded animate-pulse mb-2\"></div>\n <div class=\"h-3 w-full max-w-md bg-neutral-700 rounded animate-pulse mb-1\"></div>\n <div class=\"h-3 w-full max-w-sm bg-neutral-700 rounded animate-pulse\"></div>\n <div class=\"flex items-center gap-2 text-neutral-500 text-sm mt-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Betöltés…\n </div>\n </div>\n } @else {\n @if (detail_$(); as detail) {\n <app-ccap-run-summary\n [runSummary]=\"detail.lastRun?.runSummary ?? ''\"\n [runStatus]=\"runStatusText_$() || (detail.lastRun?.runStatus ?? '')\"\n [runIntent]=\"detail.lastRun ? detail.lastRun.runIntent : detail.session.sessionIntent\"\n [runGoal]=\"detail.lastRun ? detail.lastRun.runGoal : (detail.session.sessionGoal ?? '')\"\n [runExecutionMode]=\"detail.lastRun?.runExecutionMode\"\n [sessionRunExecutionPaletteConstraint]=\"detail.session.runExecutionPaletteConstraint\"\n [liveRunExecutionMode]=\"session_DS.activeRunExecutionMode_$()\">\n </app-ccap-run-summary>\n } @else {\n <div class=\"px-4 py-3 border-b border-neonDefault shrink-0 text-neutral-500 text-sm\">\n Session not found.\n </div>\n }\n }\n\n <div class=\"flex-1 min-h-0 overflow-hidden flex flex-col\">\n <app-ccap-chat [sessionId]=\"sessionId_$()\"></app-ccap-chat>\n </div>\n</div>\n", "import { effect, EffectRef, inject, Injectable, OnDestroy, signal } from '@angular/core';\n\nimport { DyFM_Error } from '@futdevpro/fsm-dynamo';\n\nimport {\n Ctx_ContextState_Response,\n} from '../../../../_models/server-index';\nimport { Ses_Context_ApiService } from '../api-services/ses-context.api-service';\nimport { Session_DataService } from './session.data-service';\n\n/** Üres context state fallback. */\nconst EMPTY_CONTEXT_STATE: Ctx_ContextState_Response = {\n activeKeys: [],\n pinnedKeys: [],\n cachedKeys: [],\n keys: {},\n sessionContextCache: {},\n};\n\n/**\n * Context data service.\n * Context állapot sessionId szerint cache-elése; real-time frissítés a Session DS contextUpdated_$-ról.\n */\n@Injectable({ providedIn: 'root' })\nexport class Ses_Context_DataService implements OnDestroy {\n\n /** Context állapot sessionId szerint (cache). */\n private contextBySessionId: Map<string, Ctx_ContextState_Response> = new Map();\n\n /** Context map (bármely session context frissülése). */\n readonly contextMap_$ = signal<Map<string, Ctx_ContextState_Response>>(new Map());\n\n /** Betöltés folyamatban (true = loading). */\n readonly contextLoading_$ = signal<boolean>(false);\n\n /** Betöltési hiba (null = nincs hiba); nyers error az app-ccap-error-display-nek. */\n readonly contextLoadError_$ = signal<unknown | null>(null);\n\n /** effect: Session DS contextUpdated_$ → context map frissítés. */\n private contextUpdatedEffectRef: EffectRef | null = null;\n\n private readonly context_AS: Ses_Context_ApiService = inject(Ses_Context_ApiService);\n private readonly session_DS: Session_DataService = inject(Session_DataService);\n\n constructor() {\n this.contextUpdatedEffectRef = effect((): void => {\n const payload: { sessionId: string; contextState: Ctx_ContextState_Response } | null =\n this.session_DS.contextUpdated_$() as { sessionId: string; contextState: Ctx_ContextState_Response } | null;\n if (payload?.sessionId) {\n this.contextBySessionId.set(payload.sessionId, payload.contextState);\n this.contextMap_$.set(new Map(this.contextBySessionId));\n }\n }, { allowSignalWrites: true });\n }\n\n ngOnDestroy(): void {\n if (this.contextUpdatedEffectRef) {\n this.contextUpdatedEffectRef.destroy();\n this.contextUpdatedEffectRef = null;\n }\n }\n\n /**\n * Cachelt context lekérdezése (sync).\n */\n getCachedContext(sessionId: string): Ctx_ContextState_Response {\n return this.contextBySessionId.get(sessionId) ?? { ...EMPTY_CONTEXT_STATE };\n }\n\n /**\n * Context állapot betöltése a szerverről; cache-be mentés.\n */\n async loadContext(sessionId: string): Promise<Ctx_ContextState_Response> {\n this.contextLoading_$.set(true);\n this.contextLoadError_$.set(null);\n\n try {\n const response = await this.context_AS.getContext(sessionId);\n const context: Ctx_ContextState_Response = response.context ?? { ...EMPTY_CONTEXT_STATE };\n\n this.contextBySessionId.set(sessionId, context);\n this.contextMap_$.set(new Map(this.contextBySessionId));\n return context;\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_ContextDS | Failed to load context',\n error,\n );\n\n this.contextLoadError_$.set(error);\n return { ...EMPTY_CONTEXT_STATE };\n } finally {\n this.contextLoading_$.set(false);\n }\n }\n\n /**\n * Context key művelet (open/close/pin); sikeres válasz után lokálisan újratöltjük a context-et.\n */\n async updateContextKey(params: {\n sessionId: string;\n key: string;\n action: string;\n }): Promise<void> {\n await this.context_AS.updateContextKey(params);\n await this.loadContext(params.sessionId);\n }\n}\n", "import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { firstValueFrom } from 'rxjs';\n\nimport { Ctx_ContextState_Response } from '../../../../_models/server-index';\nimport { environment } from '../../../../../environments/environment';\n\n/**\n * Context API service.\n * HTTP hívások a server context endpoint-jaira.\n */\n@Injectable({ providedIn: 'root' })\nexport class Ses_Context_ApiService {\n\n /** API base URL. */\n private baseUrl: string = `${environment.api.baseUrl}/session`;\n\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Context állapot lekérdezése.\n */\n getContext(sessionId: string): Promise<{\n context: Ctx_ContextState_Response;\n }> {\n return firstValueFrom(\n this.http.get<{\n context: Ctx_ContextState_Response;\n }>(`${this.baseUrl}/${sessionId}/context`),\n );\n }\n\n /**\n * Context key művelet (open/close/pin).\n */\n updateContextKey(params: {\n sessionId: string;\n key: string;\n action: string;\n }): Promise<{\n success: boolean;\n result: unknown;\n }> {\n return firstValueFrom(\n this.http.patch<{\n success: boolean;\n result: unknown;\n }>(\n `${this.baseUrl}/${params.sessionId}/context/keys/${params.key}`,\n { action: params.action },\n ),\n );\n }\n}\n", "import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\n\nimport {\n Ctx_ContextKey_Interface,\n} from '../../../../_models/server-index';\n\n/** Max preview karakter-szám. */\nconst CONTENT_PREVIEW_MAX: number = 200;\n\n/**\n * Context key item komponens.\n * Egy context key megjelenítése: tartalom előnézet, verzió, source badge, open/close/pin akciók.\n */\n@Component({\n selector: 'app-ccap-context-key-item',\n templateUrl: './ses-context-key-item.component.html',\n})\n/** Ses_ContextKeyItem_Component class. */\nexport class Ses_ContextKeyItem_Component implements OnChanges {\n\n /** Kulcs azonosító. */\n @Input() keyName: string = '';\n\n /** Kulcs státusz (a kategóriából: active / pinned / cached). */\n @Input() status: string = '';\n\n /** Legfrissebb verzió key objektuma (tartalom, verzió, source). Null ha nincs elérhető adat. */\n @Input() keyData: Ctx_ContextKey_Interface | null = null;\n\n /** Tartalom kinyitva / összecsukva. */\n isContentExpanded: boolean = false;\n\n /** Precomputált: van-e megjeleníthető tartalom. */\n hasContent: boolean = false;\n\n /** Precomputált: truncált tartalom előnézet (max 200 kar.). */\n contentPreview: string = '';\n\n /** Precomputált: teljes tartalom string. */\n contentFull: string = '';\n\n @Output() keyAction: EventEmitter<{\n key: string;\n action: string;\n }> = new EventEmitter();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.keyData) {\n this.computeContentFields();\n }\n }\n\n /**\n * Key művelet emit-elése.\n */\n emitAction(action: string): void {\n this.keyAction.emit({\n key: this.keyName,\n action: action,\n });\n }\n\n /**\n * Tartalom kinyitás/összecsukás toggle.\n */\n toggleContent(): void {\n this.isContentExpanded = !this.isContentExpanded;\n }\n\n /**\n * Tartalom mezők precomputálása a keyData input-ból.\n */\n private computeContentFields(): void {\n if (!this.keyData?.content) {\n this.hasContent = false;\n this.contentPreview = '';\n this.contentFull = '';\n return;\n }\n\n this.hasContent = true;\n const raw: string = typeof this.keyData.content === 'string'\n ? this.keyData.content\n : JSON.stringify(this.keyData.content, null, 2);\n this.contentFull = raw;\n this.contentPreview = raw.length <= CONTENT_PREVIEW_MAX\n ? raw\n : raw.substring(0, CONTENT_PREVIEW_MAX) + '…';\n }\n}\n", "<div class=\"rounded-md mb-2 border text-[13px]\"\n [ngClass]=\"{\n 'border-neonGreen': status === 'active',\n 'border-neonAmber': status === 'pinned',\n 'border-neonDefault': status === 'cached'\n }\">\n <!-- Header sor: key neve, meta badge-ek, action gombok -->\n <div class=\"flex items-center gap-2 px-2.5 py-1.5\">\n <span class=\"flex-1 font-mono text-neutral-200 truncate\" [title]=\"keyName\">{{ keyName }}</span>\n\n <!-- Source badge -->\n @if (keyData?.source) {\n <app-s-status-badge [value]=\"keyData!.source\" theme=\"source\" />\n }\n\n <!-- Verzió badge (csak ha > 0) -->\n @if (keyData?.version) {\n <span class=\"text-[9px] text-neutral-500 font-mono\">v{{ keyData!.version }}</span>\n }\n\n <!-- Státusz badge -->\n <span class=\"text-[9px] uppercase text-neutral-500\">{{ status }}</span>\n\n <!-- Action gombok -->\n <div class=\"flex gap-1 shrink-0\">\n @if (status !== 'active') {\n <button class=\"px-2 py-0.5 border border-neonCyan rounded text-[11px]\n bg-transparent text-neutral-300 cursor-pointer\n hover:bg-neutral-800 hover:text-white\"\n (click)=\"emitAction('open')\"\n title=\"Megnyitás (active)\">Open</button>\n }\n @if (status !== 'pinned') {\n <button class=\"px-2 py-0.5 border border-neonAmber/60 rounded text-[11px]\n bg-transparent text-neutral-300 cursor-pointer\n hover:bg-neutral-800 hover:text-white\"\n (click)=\"emitAction('pin')\"\n title=\"Rögzítés (pin)\">Pin</button>\n }\n @if (status === 'active' || status === 'pinned') {\n <button class=\"px-2 py-0.5 border border-neutral-600 rounded text-[11px]\n bg-transparent text-neutral-400 cursor-pointer\n hover:bg-neutral-800 hover:text-neutral-200\"\n (click)=\"emitAction('close')\"\n title=\"Bezárás (cache-be)\">Close</button>\n }\n </div>\n </div>\n\n <!-- Tartalom preview / expand -->\n @if (hasContent) {\n <div class=\"border-t px-2.5 py-1.5\"\n [ngClass]=\"{\n 'border-neonGreen/30': status === 'active',\n 'border-neonAmber/30': status === 'pinned',\n 'border-neonDefault/30': status === 'cached'\n }\">\n @if (!isContentExpanded) {\n <button class=\"text-[11px] text-neutral-400 hover:text-neutral-200 cursor-pointer\n w-full text-left\"\n (click)=\"toggleContent()\"\n title=\"Tartalom megjelenítése\">\n <span class=\"text-neutral-500 mr-1\">▸</span>\n <span class=\"whitespace-pre-wrap break-words\">{{ contentPreview }}</span>\n </button>\n } @else {\n <div>\n <button class=\"text-[11px] text-neutral-400 hover:text-neutral-200 cursor-pointer mb-1\"\n (click)=\"toggleContent()\"\n title=\"Tartalom elrejtése\">\n <span class=\"text-neutral-500 mr-1\">▾</span> Összecsukás\n </button>\n <pre class=\"text-[11px] text-neutral-300 whitespace-pre-wrap break-words\n max-h-60 overflow-y-auto bg-neutral-900/50 rounded p-2 mt-1\">{{ contentFull }}</pre>\n </div>\n }\n </div>\n }\n</div>\n", "import {\n effect,\n EffectRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnInit,\n OnDestroy,\n SimpleChanges,\n signal,\n} from '@angular/core';\n\nimport {\n Ctx_ContextState_Response,\n Ctx_ContextKey_Interface,\n} from '../../../../_models/server-index';\nimport {\n Ses_Context_DataService,\n} from '../../_services/data-services/ses-context.data-service';\nimport {\n Session_DataService,\n} from '../../_services/data-services/session.data-service';\n\n/** Üres context state fallback. */\nconst EMPTY_CONTEXT_STATE: Ctx_ContextState_Response = {\n activeKeys: [],\n pinnedKeys: [],\n cachedKeys: [],\n keys: {},\n sessionContextCache: {},\n};\n\n/** Session cache entry: precomputált megjelenítési adat. */\ninterface SessionCacheDisplayEntry {\n key: string;\n formattedValue: string;\n}\n\n/**\n * Context panel komponens (REQ-MSG-010, REQ-MSG-012).\n * Active/pinned/cached key-ek megjelenítése tartalom előnézettel, verzió/source infóval,\n * session context cache megjelenítéssel és compacting indikátorral.\n * Adat a Context Data Service-ből (cache + real-time context:updated).\n */\n@Component({\n selector: 'app-ccap-context-panel',\n templateUrl: './ses-context-panel.component.html',\n})\n/** Ses_ContextPanel_Component class. */\nexport class Ses_ContextPanel_Component implements OnInit, OnChanges, OnDestroy {\n\n @Input() sessionId: string = '';\n\n /** SessionId signal (computed/effect függőség). */\n readonly sessionId_$ = signal<string>('');\n\n /** Typed context state. */\n contextState: Ctx_ContextState_Response = { ...EMPTY_CONTEXT_STATE };\n\n /** Active key-ek listája. */\n activeKeys: string[] = [];\n\n /** Pinned key-ek listája. */\n pinnedKeys: string[] = [];\n\n /** Cached key-ek listája. */\n cachedKeys: string[] = [];\n\n /** Precomputált: key neve → legfrissebb verzió key objektum (Record a template property access-hez). */\n keyDataMap: Record<string, Ctx_ContextKey_Interface | null> = {};\n\n /** Precomputált: session context cache megjelenítési adatok. */\n sessionCacheEntries: SessionCacheDisplayEntry[] = [];\n\n /** Van-e compacted context override. */\n isCompacted: boolean = false;\n\n /** Session context cache kinyitva. */\n isSessionCacheExpanded: boolean = false;\n\n /** Előző connected érték (reconnect detektáláshoz). */\n private wasConnected: boolean = false; // ccap-review-disable-line boolean-is-prefix\n\n private contextEffectRef: EffectRef | null = null;\n private connectedEffectRef: EffectRef | null = null;\n\n readonly context_DS: Ses_Context_DataService = inject(Ses_Context_DataService);\n private readonly session_DS: Session_DataService = inject(Session_DataService);\n\n constructor() {\n this.contextEffectRef = effect((): void => {\n const state: Ctx_ContextState_Response =\n this.context_DS.contextMap_$().get(this.sessionId_$()) ?? { ...EMPTY_CONTEXT_STATE };\n this.applyContextState(state);\n });\n\n // loadContext szinkronban ír a Context DS loading signalokra — NG0600 nélkül: allowSignalWrites.\n this.connectedEffectRef = effect((): void => {\n const connected: boolean = this.session_DS.connected_$();\n const sid: string = this.sessionId_$();\n if (connected && !this.wasConnected && sid) {\n void this.context_DS.loadContext(sid);\n }\n this.wasConnected = connected;\n }, { allowSignalWrites: true });\n }\n\n ngOnInit(): void {\n this.sessionId_$.set(this.sessionId);\n\n if (this.sessionId) {\n void this.context_DS.loadContext(this.sessionId);\n }\n }\n\n ngOnDestroy(): void {\n if (this.contextEffectRef) {\n this.contextEffectRef.destroy();\n this.contextEffectRef = null;\n }\n if (this.connectedEffectRef) {\n this.connectedEffectRef.destroy();\n this.connectedEffectRef = null;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes.sessionId) {\n return;\n }\n this.sessionId_$.set(this.sessionId);\n if (this.sessionId) {\n void this.context_DS.loadContext(this.sessionId);\n }\n }\n\n /**\n * Context state alkalmazása (DS cache vagy Socket payload).\n * Precomputálja a keyDataMap-et és a session cache entry-ket.\n */\n private applyContextState(state: Ctx_ContextState_Response): void {\n this.contextState = state;\n this.activeKeys = state.activeKeys ?? [];\n this.pinnedKeys = state.pinnedKeys ?? [];\n this.cachedKeys = state.cachedKeys ?? [];\n this.isCompacted = !!state.compactedContextOverride;\n\n // keyDataMap precomputálás: összes key-hez a legfrissebb verzió.\n const newKeyDataMap: Record<string, Ctx_ContextKey_Interface | null> = {};\n const allKeyNames: string[] = [\n ...this.activeKeys,\n ...this.pinnedKeys,\n ...this.cachedKeys,\n ];\n for (const keyName of allKeyNames) {\n newKeyDataMap[keyName] = this.resolveLatestKeyData(keyName, state);\n }\n this.keyDataMap = newKeyDataMap;\n\n // Session cache entries precomputálás.\n const cacheObj: Record<string, unknown> = state.sessionContextCache ?? {};\n this.sessionCacheEntries = Object.keys(cacheObj).map(\n (cacheKey: string): SessionCacheDisplayEntry => ({\n key: cacheKey,\n formattedValue: this.formatValue(cacheObj[cacheKey]),\n }),\n );\n }\n\n /**\n * Legfrissebb verzió key objektum feloldása a state.keys-ből.\n */\n private resolveLatestKeyData(\n keyName: string,\n state: Ctx_ContextState_Response,\n ): Ctx_ContextKey_Interface | null {\n const versions: Ctx_ContextKey_Interface[] = state.keys?.[keyName] ?? [];\n if (!versions.length) {\n return null;\n }\n let latest: Ctx_ContextKey_Interface = versions[0];\n for (let i: number = 1; i < versions.length; i++) {\n if (versions[i].version > latest.version) {\n latest = versions[i];\n }\n }\n return latest;\n }\n\n /**\n * Érték formázása megjelenítéshez.\n */\n private formatValue(value: unknown): string {\n if (!value) {\n return '';\n }\n return typeof value === 'string' ? value : JSON.stringify(value, null, 2);\n }\n\n /**\n * Session cache toggle.\n */\n toggleSessionCache(): void {\n this.isSessionCacheExpanded = !this.isSessionCacheExpanded;\n }\n\n /**\n * Context állapot betöltése a szerverről (DS cache frissítése).\n */\n loadContext(): void {\n if (!this.sessionId) {\n return;\n }\n void this.context_DS.loadContext(this.sessionId);\n }\n\n /**\n * Context key művelet végrehajtása.\n */\n async onKeyAction(params: {\n key: string;\n action: string;\n }): Promise<void> {\n if (!this.sessionId) {\n return;\n }\n await this.context_DS.updateContextKey({\n sessionId: this.sessionId,\n key: params.key,\n action: params.action,\n });\n }\n}\n", "<div class=\"p-4 overflow-y-auto h-full\">\n <div class=\"flex items-center justify-between mb-4\">\n <h3 class=\"text-base font-bold\">Context</h3>\n <div class=\"flex items-center gap-2\">\n <!-- Összesített key darabszám -->\n <span class=\"text-[10px] text-neutral-500\">\n {{ activeKeys.length + pinnedKeys.length + cachedKeys.length }} kulcs\n </span>\n <button class=\"px-3 py-1 border border-neonCyan rounded-md bg-transparent\n text-neutral-200 text-xs cursor-pointer hover:bg-neutral-800\n hover:shadow-neon-glow-cyan\"\n (click)=\"loadContext()\">\n Frissítés\n </button>\n </div>\n </div>\n\n @if (context_DS.contextLoading_$()) {\n <div class=\"flex items-center gap-2 text-neutral-500 text-sm py-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Betöltés…\n </div>\n } @else if (context_DS.contextLoadError_$()) {\n <div class=\"py-2\">\n <app-ccap-error-display [error]=\"context_DS.contextLoadError_$()\"\n sourceLabelOverride=\"Context betöltés\"\n class=\"mb-3 block\" />\n <button class=\"mt-2 px-3 py-1.5 text-sm border border-neonCyan rounded-md\n bg-transparent text-neutral-200 hover:bg-neutral-800\n hover:shadow-neon-glow-cyan\"\n type=\"button\"\n (click)=\"loadContext()\">\n Újra\n </button>\n </div>\n } @else {\n\n <!-- Compacting indikátor -->\n @if (isCompacted) {\n <div class=\"mb-4 px-3 py-2 rounded-md border border-neonAmber/60 bg-amber-900/20\n text-xs text-amber-200 flex items-center gap-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-amber-400 animate-pulse\"></span>\n <span>\n <span class=\"font-semibold\">Compacted context aktív</span> — a context kompaktálva lett,\n az eredeti kulcsok tartalma helyett az LLM által összefoglalt változat van használatban.\n </span>\n </div>\n }\n\n <!-- Active Keys -->\n <div class=\"mb-5\">\n <h4 class=\"text-xs text-neutral-400 uppercase mb-2 flex items-center gap-2\">\n <span class=\"inline-block w-1.5 h-1.5 rounded-full bg-neonGreen\"></span>\n Active Keys ({{ activeKeys.length }})\n </h4>\n @for (key of activeKeys; track key) {\n <app-ccap-context-key-item\n [keyName]=\"key\"\n [status]=\"'active'\"\n [keyData]=\"keyDataMap[key] ?? null\"\n (keyAction)=\"onKeyAction($event)\"\n ></app-ccap-context-key-item>\n }\n @if (!activeKeys.length) {\n <div class=\"text-xs text-neutral-600 px-2\">Nincs aktív kulcs.</div>\n }\n </div>\n\n <!-- Pinned Keys -->\n <div class=\"mb-5\">\n <h4 class=\"text-xs text-neutral-400 uppercase mb-2 flex items-center gap-2\">\n <span class=\"inline-block w-1.5 h-1.5 rounded-full bg-neonAmber\"></span>\n Pinned Keys ({{ pinnedKeys.length }})\n </h4>\n @for (key of pinnedKeys; track key) {\n <app-ccap-context-key-item\n [keyName]=\"key\"\n [status]=\"'pinned'\"\n [keyData]=\"keyDataMap[key] ?? null\"\n (keyAction)=\"onKeyAction($event)\"\n ></app-ccap-context-key-item>\n }\n @if (!pinnedKeys.length) {\n <div class=\"text-xs text-neutral-600 px-2\">Nincs rögzített kulcs.</div>\n }\n </div>\n\n <!-- Cached Keys -->\n <div class=\"mb-5\">\n <h4 class=\"text-xs text-neutral-400 uppercase mb-2 flex items-center gap-2\">\n <span class=\"inline-block w-1.5 h-1.5 rounded-full bg-neutral-500\"></span>\n Cached Keys ({{ cachedKeys.length }})\n </h4>\n @for (key of cachedKeys; track key) {\n <app-ccap-context-key-item\n [keyName]=\"key\"\n [status]=\"'cached'\"\n [keyData]=\"keyDataMap[key] ?? null\"\n (keyAction)=\"onKeyAction($event)\"\n ></app-ccap-context-key-item>\n }\n @if (!cachedKeys.length) {\n <div class=\"text-xs text-neutral-600 px-2\">Nincs cached kulcs.</div>\n }\n </div>\n\n <!-- Session Context Cache -->\n <div class=\"mb-5\">\n <h4 class=\"text-xs text-neutral-400 uppercase mb-2 flex items-center gap-2\">\n Session Context Cache ({{ sessionCacheEntries.length }})\n </h4>\n @if (sessionCacheEntries.length) {\n <div class=\"border border-neonDefault/40 rounded-md\">\n <button class=\"w-full text-left px-2.5 py-1.5 text-[11px] text-neutral-400\n hover:text-neutral-200 cursor-pointer flex items-center gap-1\"\n (click)=\"toggleSessionCache()\">\n <span class=\"text-neutral-500\">{{ isSessionCacheExpanded ? '▾' : '▸' }}</span>\n {{ isSessionCacheExpanded ? 'Összecsukás' : 'Cache tartalom megjelenítése' }}\n </button>\n @if (isSessionCacheExpanded) {\n <div class=\"border-t border-neonDefault/30 px-2.5 py-2 max-h-48 overflow-y-auto\">\n @for (entry of sessionCacheEntries; track entry.key) {\n <div class=\"mb-2\">\n <span class=\"text-[10px] font-semibold text-neutral-400 font-mono block mb-0.5\">\n {{ entry.key }}\n </span>\n <pre class=\"text-[10px] text-neutral-500 whitespace-pre-wrap break-words\n bg-neutral-900/50 rounded p-1.5 max-h-32\n overflow-y-auto\">{{ entry.formattedValue }}</pre>\n </div>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"text-xs text-neutral-600 px-2\">Nincs cache bejegyzés.</div>\n }\n </div>\n\n }\n</div>\n", "import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Szöveg rövidítése megadott hosszra; ha hosszabb, levágja és '…'-t ad hozzá.\n * Template-ben: {{ msg.content | ccapTruncate:120 }}\n */\n@Pipe({\n name: 'ccapTruncate',\n standalone: true,\n})\n/** CCAP_Truncate_Pipe class. */\nexport class CCAP_Truncate_Pipe implements PipeTransform {\n\n transform(value: string | null | undefined, limit: number = 120): string {\n if (value == null || typeof value !== 'string') {\n return '';\n }\n if (value.length <= limit) {\n return value;\n }\n return value.slice(0, limit) + '…';\n }\n}\n", "import {\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n computed,\n effect,\n signal,\n} from '@angular/core';\n\nimport { DisplayString_Util } from '../../../../_collections/display/display-string.util';\nimport { CCAP_LayoutBreakpoint_ControlService } from '../../../../_services/control-services/ccap-layout-breakpoint.control-service';\nimport {\n AC_LlmDebugTraceEntry_Response,\n AC_SessionInfo_Response,\n AC_SessionInfoRunTask_Interface,\n} from '../../../../_models/server-index';\nimport { AC_RunExecutionMode_Type, AC_RunExecutionPaletteConstraint_Type } from '@server-enums';\nimport {\n Ses_ClientMessage_Response,\n} from '../../_services/api-services/conversation.api-service.interface';\nimport {\n Session_DataService,\n} from '../../_services/data-services/session.data-service';\nimport { Shr_LocalStoragePersistence_Util } from '../../../shared/_collections/utils/storage/shr-local-storage-persistence.util';\n\n/** localStorage kulcs az Info panel nyitott/bezárt állapotához. */\nconst CCAP_INFO_PANEL_OPEN_STORAGE_KEY = 'ccap-infoPanelOpen';\n\n/** localStorage kulcs az Info panel desktop szélességéhez (px). */\nconst CCAP_INFO_PANEL_WIDTH_PX_STORAGE_KEY = 'ccap-infoPanelWidthPx';\n\n/** Alapértelmezett panel szélesség (px), ha nincs mentett érték. */\nconst CCAP_INFO_PANEL_WIDTH_PX_DEFAULT = 360;\n\n/** Minimális panel szélesség (px) resize és restore közben. */\nconst CCAP_INFO_PANEL_WIDTH_PX_MIN = 240;\n\n/** Maximális panel szélesség (px), ha nincs window (teszt / SSR). */\nconst CCAP_INFO_PANEL_WIDTH_PX_MAX_FALLBACK = 960;\n\n/**\n * Szélesség clamp: min–max között; NaN esetén default.\n */\nfunction clampInfoPanelWidthPx(widthPx: number, maxPxOverride?: number): number {\n const minPx: number = CCAP_INFO_PANEL_WIDTH_PX_MIN;\n let maxPx: number = maxPxOverride ?? CCAP_INFO_PANEL_WIDTH_PX_MAX_FALLBACK;\n if (maxPxOverride === undefined && typeof window !== 'undefined') {\n maxPx = Math.max(minPx, window.innerWidth - 200);\n }\n const n: number = Math.round(widthPx);\n if (Number.isNaN(n)) {\n return CCAP_INFO_PANEL_WIDTH_PX_DEFAULT;\n }\n return Math.min(maxPx, Math.max(minPx, n));\n}\n\n\n/**\n * Jobb oldali információs panel.\n * Session goal & intent, last run, conversation full, session info a Session Data Service cache-ből.\n * Session info betöltése: sessionId változásakor vagy panel nyitásakor (üres sessionId nem indít load-ot).\n */\n@Component({\n selector: 'app-ccap-info-panel',\n templateUrl: './ses-info-panel.component.html',\n styles: [`\n :host {\n display: block;\n height: 100%;\n flex-shrink: 0;\n }\n `],\n})\n/** Ses_InfoPanel_Component class. */\nexport class Ses_InfoPanel_Component implements OnInit, OnChanges, OnDestroy {\n\n @Input() sessionId: string = '';\n\n /** Panel nyitott/bezárt állapotváltozás értesítés (shell header szinkronhoz). */\n @Output() readonly isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** SessionId signal: ngOnChanges/ngOnInit-ban beállítva, computed-ok függenek tőle. */\n private readonly sessionId_$ = signal<string>('');\n\n /** Panel nyitva (signal – effect-ek és trace betöltés reaktívan követik); localStorage-ból betöltve. */\n readonly isOpen_$ = signal<boolean>(Ses_InfoPanel_Component.readInfoPanelOpenFromStorage());\n\n /**\n * Desktop (gt-xs) panel szélesség px-ben; kezdő érték localStorage-ból.\n * Mobile overlay nem használja (teljes szélesség).\n */\n readonly panelWidthPx_$ = signal<number>(Ses_InfoPanel_Component.readInfoPanelWidthPxFromStorage());\n\n /**\n * Nyitott + desktop: külső flex slot szélessége; egyébként null (Tailwind w-0 / xs layout).\n */\n readonly openDesktopOuterWidthPx_$ = computed((): number | null => {\n if (!this.isOpen_$() || this.layoutBreakpoint_CS.isMobile_$()) {\n return null;\n }\n return this.panelWidthPx_$();\n });\n\n /**\n * Resize handle: csak nyitott, nem mobile nézetben.\n */\n readonly showInfoPanelResizeHandle_$ = computed((): boolean => {\n return this.isOpen_$() && !this.layoutBreakpoint_CS.isMobile_$();\n });\n\n /** Conversation full üzenetek: az aktív session teljes listája, ha a panel épp azt mutatja. */\n readonly conversationFullMessages_$ = computed<Ses_ClientMessage_Response[]>(\n (): Ses_ClientMessage_Response[] => {\n const sid: string = this.sessionId_$();\n if (sid && sid === this.session_DS.activeSessionId_$()) {\n return this.session_DS.messages_$();\n }\n return [];\n },\n );\n\n /** Session info (Session DS cache, sessionId szerint). */\n readonly sessionInfo_$ = computed<AC_SessionInfo_Response | null>(\n (): AC_SessionInfo_Response | null =>\n this.session_DS.sessionInfoMap_$().get(this.sessionId_$()) ?? null,\n );\n\n /** Last run status megjelenítéshez (computed). */\n readonly lastRunStatusDisplay_$ = computed(\n (): string => DisplayString_Util.toDisplayString(this.sessionInfo_$()?.lastRun?.runStatus) || '',\n );\n\n /** Last run summary megjelenítéshez (computed). */\n readonly lastRunSummaryDisplay_$ = computed(\n (): string => DisplayString_Util.toDisplayString(this.sessionInfo_$()?.lastRun?.runSummary) || '—',\n );\n\n /** Last run answerToUser megjelenítéshez, max 200 karakter (computed). */\n readonly lastRunAnswerToUserDisplay_$ = computed((): string => {\n const raw: unknown = this.sessionInfo_$()?.lastRun?.answerToUser;\n const s: string = DisplayString_Util.toDisplayString(raw);\n return s.length > 200 ? s.slice(0, 200) + '…' : s;\n });\n\n /** Last run intent megjelenítéshez (computed). */\n readonly lastRunIntentDisplay_$ = computed(\n (): string => DisplayString_Util.toDisplayString(this.sessionInfo_$()?.lastRun?.runIntent) || '—',\n );\n\n /** Last run goal megjelenítéshez (computed). */\n readonly lastRunGoalDisplay_$ = computed(\n (): string => DisplayString_Util.toDisplayString(this.sessionInfo_$()?.lastRun?.runGoal) || '—',\n );\n\n /** Session run execution palette override select érték (üres = globál settings). */\n readonly sessionRunPaletteSelectValue_$ = computed((): string => {\n const raw: unknown = this.sessionInfo_$()?.runExecutionPaletteConstraint;\n if (raw == null) {\n return '';\n }\n const candidates: AC_RunExecutionPaletteConstraint_Type[] = [\n AC_RunExecutionPaletteConstraint_Type.full,\n AC_RunExecutionPaletteConstraint_Type.askOnly,\n AC_RunExecutionPaletteConstraint_Type.planOnly,\n ];\n for (const c of candidates) {\n if (raw === c) {\n return c;\n }\n }\n if (typeof raw === 'string') {\n const t: string = raw.trim();\n for (const c of candidates) {\n if (t === c) {\n return c;\n }\n }\n }\n return '';\n });\n\n /** Utolsó run `runExecutionMode` (ANALYZE) megjelenítéshez. */\n readonly lastRunExecutionModeDisplay_$ = computed((): string => {\n const m: unknown = this.sessionInfo_$()?.lastRun?.runExecutionMode;\n if (m == null || typeof m !== 'string' || m.trim() === '') {\n return '—';\n }\n return m.trim();\n });\n\n /**\n * Utolsó run `continuePreviousRunContext` (ANALYZE): prior-run full execution injekció a következő\n * assemble-ban (info / debug).\n */\n readonly lastRunContinuePreviousContextDisplay_$ = computed((): string => {\n const v: unknown = this.sessionInfo_$()?.lastRun?.continuePreviousRunContext;\n if (v === true) {\n return 'yes';\n }\n if (v === false) {\n return 'no';\n }\n return '—';\n });\n\n /** Session palette PATCH közben — select letiltás. */\n readonly sessionRunPaletteSaving_$ = signal<boolean>(false);\n\n /** Session-szintű forced run execution mód select érték (üres = alapértelmezett agentic-any). */\n readonly sessionForcedModeSelectValue_$ = computed((): string => {\n const raw: unknown = this.sessionInfo_$()?.forcedRunExecutionMode;\n if (raw == null) {\n return '';\n }\n const candidates: AC_RunExecutionMode_Type[] = [\n AC_RunExecutionMode_Type.agenticAny,\n AC_RunExecutionMode_Type.instant,\n AC_RunExecutionMode_Type.ask,\n AC_RunExecutionMode_Type.plan,\n ];\n for (const c of candidates) {\n if (raw === c) {\n return c;\n }\n }\n if (typeof raw === 'string') {\n const t: string = raw.trim();\n for (const c of candidates) {\n if (t === c) {\n return c;\n }\n }\n }\n return '';\n });\n\n /** Session forced mode PATCH közben — select letiltás. */\n readonly sessionForcedModeSaving_$ = signal<boolean>(false);\n\n /** Used elements: toolIds join string (template csak signal-t olvas). */\n readonly usedElementsToolIdsStr_$ = computed(\n (): string => (this.sessionInfo_$()?.usedElements?.toolIds ?? []).join(', '),\n );\n\n /** Used elements: groupIds join string. */\n readonly usedElementsGroupIdsStr_$ = computed(\n (): string => (this.sessionInfo_$()?.usedElements?.groupIds ?? []).join(', '),\n );\n\n /** Used elements: contextKeys join string. */\n readonly usedElementsContextKeysStr_$ = computed(\n (): string => (this.sessionInfo_$()?.usedElements?.contextKeys ?? []).join(', '),\n );\n\n /** Used elements: van-e bármi (toolIds, groupIds, contextKeys). */\n readonly usedElementsHasAny_$ = computed((): boolean => {\n const u = this.sessionInfo_$()?.usedElements;\n return !!(u?.toolIds?.length || u?.groupIds?.length || u?.contextKeys?.length);\n });\n\n /** Full active context execution history summary preview (max 80 char + '…'). */\n readonly executionHistorySummaryPreview_$ = computed((): string => {\n const raw: string | undefined =\n this.sessionInfo_$()?.fullActiveContext?.executionHistorySummary;\n if (raw == null || raw.length === 0) {\n return '';\n }\n return raw.length > 80 ? raw.slice(0, 80) + '…' : raw;\n });\n\n /** Utolsó run azonosító a trace API-hoz (üres ha nincs last run). */\n readonly lastRunIdForTrace_$ = computed((): string => {\n const rid: string | undefined = this.sessionInfo_$()?.lastRun?.runId;\n return rid !== undefined && rid.trim() !== '' ? rid.trim() : '';\n });\n\n /** Last run task-ok listája (ANALYZE feladatok + kész állapot). */\n readonly lastRunTasks_$ = computed((): AC_SessionInfoRunTask_Interface[] => {\n return this.sessionInfo_$()?.lastRun?.tasks ?? [];\n });\n\n /** Last run kész task-ok száma. */\n readonly lastRunCompletedTaskCount_$ = computed((): number => {\n return this.lastRunTasks_$().filter((t: AC_SessionInfoRunTask_Interface): boolean => t.isCompleted).length;\n });\n\n /** Last run task progress százalék (0–100). */\n readonly lastRunTaskProgressPercent_$ = computed((): number => {\n const tasks: AC_SessionInfoRunTask_Interface[] = this.lastRunTasks_$();\n if (!tasks.length) {\n return 0;\n }\n return Math.round((this.lastRunCompletedTaskCount_$() / tasks.length) * 100);\n });\n\n readonly session_DS: Session_DataService = inject(Session_DataService);\n readonly layoutBreakpoint_CS: CCAP_LayoutBreakpoint_ControlService = inject(\n CCAP_LayoutBreakpoint_ControlService,\n );\n\n /** Resize drag: kezdő egér X és panel szélesség. */\n private infoPanelResizeStartClientX: number = 0;\n private infoPanelResizeStartWidthPx: number = 0;\n\n /** Fogó elem és pointer id (pointerup a window-on jön — releaseCapture-hez kell). */\n private infoPanelResizeHandleEl: HTMLElement | null = null;\n private infoPanelResizePointerId: number | null = null;\n\n /** Resize közben bound listener-ek (ngOnDestroy + pointerup takarítás). */\n private readonly onInfoPanelResizePointerMoveBound = (event: PointerEvent): void => {\n this.applyInfoPanelResizePointerMove(event);\n };\n\n private readonly onInfoPanelResizePointerUpBound = (): void => {\n this.finishInfoPanelResize();\n };\n\n constructor() {\n // Session info betöltése, ha sessionId megváltozik és a panel nyitva van (pl. későbbi route frissülés).\n // allowSignalWrites: loadSessionInfo / loadLlmDebugTrace szinkronban ír a Session DS signalokra\n // (loading / error) — ez nélkül NG0600 (signal write tiltott effect-ben).\n effect((): void => {\n const sid: string = this.sessionId_$();\n const open: boolean = this.isOpen_$();\n if (!sid || !open) {\n return;\n }\n const cachedInfo: AC_SessionInfo_Response | null =\n this.session_DS.getCachedSessionInfo(sid);\n if (!cachedInfo) {\n void this.session_DS.loadSessionInfo(sid);\n }\n }, { allowSignalWrites: true });\n\n // Session info + nyitott panel + runId: LLM debug trace lista (lazy, MongoDB).\n effect((): void => {\n const sid: string = this.sessionId_$();\n const open: boolean = this.isOpen_$();\n const runId: string = this.lastRunIdForTrace_$();\n if (!sid || !open || !runId) {\n return;\n }\n void this.session_DS.loadLlmDebugTrace({\n sessionId: sid,\n runId: runId,\n });\n }, { allowSignalWrites: true });\n }\n\n ngOnInit(): void {\n this.sessionId_$.set(this.sessionId);\n if (this.isOpen_$() && this.sessionId) {\n void this.session_DS.loadSessionInfo(this.sessionId);\n }\n }\n\n ngOnDestroy(): void {\n this.disposeInfoPanelResizeOnDestroy();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.sessionId) {\n this.sessionId_$.set(this.sessionId);\n if (this.isOpen_$() && this.sessionId) {\n void this.session_DS.loadSessionInfo(this.sessionId);\n }\n }\n }\n\n /**\n * Panel nyitása/bezárása — állapot mentése localStorage-ba, értesítés a shell-nek.\n */\n togglePanel(): void {\n const next: boolean = !this.isOpen_$();\n this.isOpen_$.set(next);\n Ses_InfoPanel_Component.persistInfoPanelOpen(next);\n this.isOpenChange.emit(next);\n if (next && this.sessionId) {\n const cachedInfo: AC_SessionInfo_Response | null =\n this.session_DS.getCachedSessionInfo(this.sessionId);\n if (!cachedInfo) {\n void this.session_DS.loadSessionInfo(this.sessionId);\n }\n }\n }\n\n /**\n * Session info betöltési hiba után újrapróbálkozás.\n */\n /**\n * Session-szintű run execution palette override mentése (üres = globál constraint).\n */\n handleSessionRunPaletteSelect(selectedRaw: string): void {\n void this.persistSessionRunPaletteConstraint(selectedRaw);\n }\n\n /**\n * Palette constraint PATCH + session-info újratöltés.\n */\n private async persistSessionRunPaletteConstraint(selectedRaw: string): Promise<void> {\n const sid: string = this.sessionId_$().trim();\n if (!sid) {\n return;\n }\n this.sessionRunPaletteSaving_$.set(true);\n try {\n let updates: Record<string, unknown>;\n if (selectedRaw === '') {\n updates = { runExecutionPaletteConstraint: null };\n } else {\n const matched: AC_RunExecutionPaletteConstraint_Type | undefined =\n Ses_InfoPanel_Component.parseSessionPaletteConstraintString(selectedRaw);\n if (matched === undefined) {\n return;\n }\n updates = { runExecutionPaletteConstraint: matched };\n }\n await this.session_DS.updateSession({ sessionId: sid, updates: updates });\n await this.session_DS.loadSessionInfo(sid);\n } finally {\n this.sessionRunPaletteSaving_$.set(false);\n }\n }\n\n /**\n * Select value string → palette enum; csak ismert értékre ad vissza non-undefined-ot.\n */\n private static parseSessionPaletteConstraintString(\n raw: string,\n ): AC_RunExecutionPaletteConstraint_Type | undefined {\n const candidates: AC_RunExecutionPaletteConstraint_Type[] = [\n AC_RunExecutionPaletteConstraint_Type.full,\n AC_RunExecutionPaletteConstraint_Type.askOnly,\n AC_RunExecutionPaletteConstraint_Type.planOnly,\n ];\n for (const c of candidates) {\n if (raw === c) {\n return c;\n }\n }\n return undefined;\n }\n\n /**\n * Session-szintű forced run execution mód mentése (üres = alapértelmezett agentic-any törlése).\n */\n handleSessionForcedModeSelect(selectedRaw: string): void {\n void this.persistSessionForcedMode(selectedRaw);\n }\n\n /**\n * Forced run execution mód PATCH + session-info újratöltés.\n */\n private async persistSessionForcedMode(selectedRaw: string): Promise<void> {\n const sid: string = this.sessionId_$().trim();\n if (!sid) {\n return;\n }\n this.sessionForcedModeSaving_$.set(true);\n try {\n let updates: Record<string, unknown>;\n if (selectedRaw === '') {\n updates = { forcedRunExecutionMode: null };\n } else {\n const matched: AC_RunExecutionMode_Type | undefined =\n Ses_InfoPanel_Component.parseSessionForcedModeString(selectedRaw);\n if (matched === undefined) {\n return;\n }\n updates = { forcedRunExecutionMode: matched };\n }\n await this.session_DS.updateSession({ sessionId: sid, updates: updates });\n await this.session_DS.loadSessionInfo(sid);\n } finally {\n this.sessionForcedModeSaving_$.set(false);\n }\n }\n\n /**\n * Select value string → AC_RunExecutionMode_Type; csak ismert értékre ad vissza non-undefined-ot.\n */\n private static parseSessionForcedModeString(\n raw: string,\n ): AC_RunExecutionMode_Type | undefined {\n const candidates: AC_RunExecutionMode_Type[] = [\n AC_RunExecutionMode_Type.agenticAny,\n AC_RunExecutionMode_Type.instant,\n AC_RunExecutionMode_Type.ask,\n AC_RunExecutionMode_Type.plan,\n ];\n for (const c of candidates) {\n if (raw === c) {\n return c;\n }\n }\n return undefined;\n }\n\n retrySessionInfo(): void {\n if (this.sessionId) {\n void this.session_DS.loadSessionInfo(this.sessionId);\n }\n }\n\n /**\n * LLM debug trace lista manuális frissítése (ugyanahhoz a runId-hoz).\n */\n refreshLlmDebugTrace(): void {\n const sid: string = this.sessionId_$().trim();\n const runId: string = this.lastRunIdForTrace_$();\n if (!sid || !runId) {\n return;\n }\n void this.session_DS.loadLlmDebugTrace({\n sessionId: sid,\n runId: runId,\n });\n }\n\n /**\n * Trace sor részletes JSON (expand / pre blokk).\n */\n formatTraceEntryBody(entry: AC_LlmDebugTraceEntry_Response): string {\n return JSON.stringify(\n {\n eventKind: entry.eventKind,\n callTag: entry.callTag,\n provider: entry.provider,\n logLevel: entry.logLevel,\n __created: entry.__created,\n payload: entry.payload,\n },\n null,\n 2,\n );\n }\n\n /**\n * Info panel bal szélének húzása: pointer down (csak primary button, desktop).\n */\n onInfoPanelResizePointerDown(event: PointerEvent): void {\n if (this.layoutBreakpoint_CS.isMobile_$()) {\n return;\n }\n if (event.button !== 0) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const target: EventTarget | null = event.currentTarget;\n if (!(target instanceof HTMLElement)) {\n return;\n }\n this.infoPanelResizeHandleEl = target;\n this.infoPanelResizePointerId = event.pointerId;\n this.infoPanelResizeStartClientX = event.clientX;\n this.infoPanelResizeStartWidthPx = this.panelWidthPx_$();\n target.setPointerCapture(event.pointerId);\n if (typeof document !== 'undefined') {\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n window.addEventListener('pointermove', this.onInfoPanelResizePointerMoveBound);\n window.addEventListener('pointerup', this.onInfoPanelResizePointerUpBound, { capture: true });\n window.addEventListener('pointercancel', this.onInfoPanelResizePointerUpBound, { capture: true });\n }\n\n /**\n * Pointer move közben: új szélesség számítása és signal frissítése (viewport max clamp).\n */\n private applyInfoPanelResizePointerMove(event: PointerEvent): void {\n const maxPx: number = this.computeMaxInfoPanelWidthPx();\n const nextRaw: number =\n this.infoPanelResizeStartWidthPx + (this.infoPanelResizeStartClientX - event.clientX);\n const next: number = clampInfoPanelWidthPx(nextRaw, maxPx);\n this.panelWidthPx_$.set(next);\n }\n\n /**\n * Resize befejezése: capture feloldás, localStorage mentés.\n */\n private finishInfoPanelResize(): void {\n const handleEl: HTMLElement | null = this.infoPanelResizeHandleEl;\n const pid: number | null = this.infoPanelResizePointerId;\n if (handleEl && pid !== null && handleEl.hasPointerCapture(pid)) {\n handleEl.releasePointerCapture(pid);\n }\n this.infoPanelResizeHandleEl = null;\n this.infoPanelResizePointerId = null;\n Ses_InfoPanel_Component.persistInfoPanelWidthPx(this.panelWidthPx_$());\n this.teardownInfoPanelResizeListeners();\n if (typeof document !== 'undefined') {\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }\n }\n\n /**\n * Window listener-ek és body stílus törlése (unmount vagy hiba esetén).\n */\n private teardownInfoPanelResizeListeners(): void {\n window.removeEventListener('pointermove', this.onInfoPanelResizePointerMoveBound);\n window.removeEventListener('pointerup', this.onInfoPanelResizePointerUpBound, { capture: true });\n window.removeEventListener('pointercancel', this.onInfoPanelResizePointerUpBound, { capture: true });\n if (typeof document !== 'undefined') {\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }\n }\n\n /**\n * Komponens megsemmisülése: aktív resize esetén ugyanaz mint pointerup; egyébként csak listener takarítás.\n */\n private disposeInfoPanelResizeOnDestroy(): void {\n if (this.infoPanelResizeHandleEl !== null || this.infoPanelResizePointerId !== null) {\n this.finishInfoPanelResize();\n return;\n }\n this.teardownInfoPanelResizeListeners();\n }\n\n /**\n * Maximális engedett szélesség a jelenlegi viewport alapján.\n */\n private computeMaxInfoPanelWidthPx(): number {\n if (typeof window === 'undefined') {\n return CCAP_INFO_PANEL_WIDTH_PX_MAX_FALLBACK;\n }\n return Math.max(CCAP_INFO_PANEL_WIDTH_PX_MIN, window.innerWidth - 200);\n }\n\n /**\n * Mentett Info panel szélesség kiolvasása localStorage-ból.\n *\n * REQ-UI-MENU-STATE-001 (cycle 465): top-level function → private static\n * method. A `localStorage.getItem` + `parseInt` + try/catch most a shared\n * `Shr_LocalStoragePersistence_Util.readNumber(KEY, DEFAULT)`-on megy\n * (NaN/null/empty → DEFAULT egyetlen call-ban). A `clampInfoPanelWidthPx`\n * post-process változatlan.\n */\n private static readInfoPanelWidthPxFromStorage(): number {\n const parsed: number = Shr_LocalStoragePersistence_Util.readNumber(\n CCAP_INFO_PANEL_WIDTH_PX_STORAGE_KEY,\n CCAP_INFO_PANEL_WIDTH_PX_DEFAULT,\n );\n return clampInfoPanelWidthPx(parsed);\n }\n\n /**\n * Info panel szélesség mentése localStorage-ba (resize végén).\n *\n * REQ-UI-MENU-STATE-001 (cycle 465): top-level function → private static\n * method; `localStorage.setItem(KEY, String(value))` →\n * `Shr_LocalStoragePersistence_Util.writeNumber`.\n */\n private static persistInfoPanelWidthPx(widthPx: number): void {\n Shr_LocalStoragePersistence_Util.writeNumber(CCAP_INFO_PANEL_WIDTH_PX_STORAGE_KEY, widthPx);\n }\n\n /**\n * Info panel nyitott állapotának kiolvasása localStorage-ból.\n * Ha nincs tárolt érték, false (bezárva) a default.\n *\n * REQ-UI-MENU-STATE-001 (cycle 465): top-level function → private static\n * method. A `localStorage.getItem === 'true'` minta a shared\n * `Shr_LocalStoragePersistence_Util.readString === 'true'`-on megy. Default\n * false (`null === 'true'` → false) változatlan.\n */\n private static readInfoPanelOpenFromStorage(): boolean {\n return Shr_LocalStoragePersistence_Util.readString(CCAP_INFO_PANEL_OPEN_STORAGE_KEY) === 'true';\n }\n\n /**\n * Info panel nyitott állapotának mentése localStorage-ba.\n *\n * REQ-UI-MENU-STATE-001 (cycle 465): top-level function → private static\n * method; szándékosan `writeString(String(value))` és NEM `writeBoolean` —\n * a meglévő on-disk format (`'true'`/`'false'`) megőrzéséhez (a read\n * `=== 'true'` minta erre támaszkodik).\n */\n private static persistInfoPanelOpen(isOpen: boolean): void {\n Shr_LocalStoragePersistence_Util.writeString(CCAP_INFO_PANEL_OPEN_STORAGE_KEY, String(isOpen));\n }\n}\n", "<div class=\"flex h-full shrink-0 xs:w-0 xs:min-w-0 transition-[width] duration-200 ease-out overflow-hidden\"\n [class.gt-xs:w-0]=\"!isOpen_$()\"\n [class.gt-xs:min-w-0]=\"!isOpen_$()\"\n [style.width.px]=\"openDesktopOuterWidthPx_$()\">\n @if (isOpen_$()) {\n <!-- Nyitott panel: xs full-width overlay + backdrop; gt-xs inline panel, szélesség localStorage + resize handle. -->\n <div class=\"fixed inset-0 z-30 bg-black/50 xs:block gt-xs:hidden\"\n (click)=\"togglePanel()\"\n aria-hidden=\"true\"></div>\n <div class=\"flex flex-row h-full min-w-0 border-l border-neonDefault bg-ccapSurface overflow-hidden\n w-full\n xs:fixed xs:inset-y-0 xs:right-0 xs:left-0 xs:z-40 xs:w-full xs:max-w-full\n xs:top-14 xs:bottom-0\">\n @if (showInfoPanelResizeHandle_$()) {\n <div role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Info panel szélesség állítása\"\n class=\"shrink-0 w-1 min-w-[4px] cursor-col-resize hover:bg-neonCyan/20\n border-r border-neonDefault/60 self-stretch touch-none select-none\"\n (pointerdown)=\"onInfoPanelResizePointerDown($event)\">\n </div>\n }\n <div class=\"flex flex-col flex-1 min-w-0 h-full overflow-hidden\">\n <div class=\"flex items-center justify-between px-3 py-2 border-b border-neonDefault shrink-0\n min-h-[44px]\">\n <span class=\"text-sm font-semibold text-neutral-200\">Info panel</span>\n <button class=\"px-2 py-1 min-h-[44px] min-w-[44px] flex items-center justify-center\n text-neutral-400 hover:text-neutral-200 rounded\"\n (click)=\"togglePanel()\"\n title=\"Bezárás\"\n aria-label=\"Bezárás\">\n ✕\n </button>\n </div>\n <div class=\"flex-1 overflow-y-auto p-4 min-h-0\">\n @if (!sessionId) {\n <p class=\"text-neutral-500 text-sm\">Válassz sessiont a chat megtekintéséhez.</p>\n } @else {\n @if (session_DS.sessionInfoLoadError_$()) {\n <div class=\"mb-6\">\n <app-ccap-error-display [error]=\"session_DS.sessionInfoLoadError_$()\" class=\"mb-4 block\" />\n <button type=\"button\"\n class=\"px-3 py-2 text-sm font-medium rounded border border-neonCyan\n text-neutral-200 hover:bg-neutral-700 hover:border-neonCyan/70 hover:shadow-neon-glow-cyan\n transition-colors\"\n (click)=\"retrySessionInfo()\">\n Újra\n </button>\n </div>\n } @else {\n <section class=\"mb-6\">\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase mb-2\">Session goal & intent</h4>\n @if (session_DS.sessionInfoLoading_$()) {\n <div class=\"flex items-center gap-2 text-neutral-500 text-sm py-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Betöltés…\n </div>\n } @else {\n <div class=\"flex flex-col gap-2\">\n <div class=\"rounded border border-neonDefault bg-neutral-800/40 px-3 py-2\">\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-0.5\">Intent</div>\n <div class=\"text-xs text-neutral-200 break-words\">{{ sessionInfo_$()?.sessionIntent || '—' }}</div>\n </div>\n <div class=\"rounded border border-neonDefault bg-neutral-800/40 px-3 py-2\">\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-0.5\">Goal</div>\n <div class=\"text-xs text-neutral-200 break-words\">{{ sessionInfo_$()?.sessionGoal || '—' }}</div>\n </div>\n </div>\n }\n </section>\n\n <!-- Cost tracking [REQ-CT-009] -->\n @if (sessionInfo_$()?.costUsdTotal != null || sessionInfo_$()?.llmCallCount) {\n <section class=\"mb-6\">\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase mb-2\">Cost</h4>\n <div class=\"rounded border border-neonDefault bg-neutral-800/40 px-3 py-2\">\n <div class=\"flex flex-wrap items-center gap-3 text-xs\">\n @if (sessionInfo_$()?.costUsdTotal != null) {\n <span class=\"text-neonGreen font-mono font-bold\">\n ${{ sessionInfo_$()!.costUsdTotal! | number:'1.4-4' }}\n </span>\n }\n @if (sessionInfo_$()?.inputTokensTotal) {\n <span class=\"text-neutral-400\">\n {{ sessionInfo_$()!.inputTokensTotal! | number }} in\n </span>\n }\n @if (sessionInfo_$()?.outputTokensTotal) {\n <span class=\"text-neutral-400\">\n {{ sessionInfo_$()!.outputTokensTotal! | number }} out\n </span>\n }\n @if (sessionInfo_$()?.llmCallCount) {\n <span class=\"text-neutral-500\">\n {{ sessionInfo_$()!.llmCallCount! | number }} LLM hívás\n </span>\n }\n </div>\n </div>\n </section>\n }\n\n <!-- Goal state -->\n <section class=\"mb-6\">\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase mb-2\">Goal state</h4>\n @if (session_DS.sessionInfoLoading_$()) {\n <div class=\"flex items-center gap-2 text-neutral-500 text-sm py-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Betöltés…\n </div>\n } @else if (sessionInfo_$()?.goalState) {\n @let gs = sessionInfo_$()!.goalState!;\n <div class=\"rounded border border-neonDefault bg-neutral-800/40 overflow-hidden\">\n <!-- Phase + Status header -->\n <div class=\"flex items-center justify-between px-3 py-1.5 border-b border-neonDefault/40 bg-neutral-800/60\">\n <div class=\"flex items-center gap-1.5\">\n <span class=\"w-1.5 h-1.5 rounded-full\"\n [class.bg-green-500]=\"gs.status === 'completed'\"\n [class.bg-yellow-500]=\"gs.status === 'active'\"\n [class.bg-red-500]=\"gs.status === 'stalled'\">\n </span>\n <span class=\"text-[10px] text-neutral-400 uppercase tracking-wider\">{{ gs.status }}</span>\n </div>\n <span class=\"text-[10px] px-1.5 py-0.5 rounded-full border border-neonDefault text-neutral-400\">{{ gs.phase }}</span>\n </div>\n\n <div class=\"flex flex-col gap-2 px-3 py-2\">\n <!-- Goal -->\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-0.5\">Goal</div>\n <div class=\"text-xs text-neutral-200 break-words\">{{ gs.goal || '—' }}</div>\n </div>\n\n <!-- Focus -->\n @if (gs.focus) {\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-0.5\">Focus</div>\n <div class=\"text-xs text-neutral-200 break-words\">{{ gs.focus }}</div>\n </div>\n }\n\n <!-- Next steps -->\n @if (gs.next.length) {\n <div class=\"pt-1 border-t border-neonDefault/30\">\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-1\">Next steps</div>\n <ul class=\"flex flex-col gap-0.5\">\n @for (step of gs.next; track $index) {\n <li class=\"flex items-start gap-1.5 text-xs text-neutral-300\">\n <span class=\"text-neutral-500 mt-px shrink-0\">›</span>\n <span class=\"break-words\">{{ step }}</span>\n </li>\n }\n </ul>\n </div>\n }\n\n <!-- Done -->\n @if (gs.done.length) {\n <div class=\"pt-1 border-t border-neonDefault/30\">\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-1\">Done</div>\n <ul class=\"flex flex-col gap-0.5\">\n @for (item of gs.done; track $index) {\n <li class=\"flex items-start gap-1.5 text-xs text-green-400/80\">\n <span class=\"shrink-0 mt-px\">✓</span>\n <span class=\"break-words\">{{ item }}</span>\n </li>\n }\n </ul>\n </div>\n }\n\n <!-- Blockers -->\n @if (gs.blockers.length) {\n <div class=\"pt-1 border-t border-neonDefault/30\">\n <div class=\"text-[10px] text-red-400/80 uppercase tracking-wider mb-1\">Blockers</div>\n <ul class=\"flex flex-col gap-0.5\">\n @for (b of gs.blockers; track $index) {\n <li class=\"flex items-start gap-1.5 text-xs text-red-300/80\">\n <span class=\"shrink-0 mt-px\">⚠</span>\n <span class=\"break-words\">{{ b }}</span>\n </li>\n }\n </ul>\n </div>\n }\n\n <!-- Decisions -->\n @if (gs.decisions.length) {\n <div class=\"pt-1 border-t border-neonDefault/30\">\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-1\">Decisions</div>\n <ul class=\"flex flex-col gap-0.5\">\n @for (d of gs.decisions; track $index) {\n <li class=\"flex items-start gap-1.5 text-xs text-neutral-400\">\n <span class=\"text-neutral-500 mt-px shrink-0\">•</span>\n <span class=\"break-words\">{{ d }}</span>\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </div>\n } @else {\n <p class=\"text-neutral-500 text-sm\">Nincs goal state.</p>\n }\n </section>\n\n <section class=\"mb-6\">\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase mb-2\">Aktív LLM</h4>\n @if (session_DS.sessionInfoLoading_$()) {\n <div class=\"flex items-center gap-2 text-neutral-500 text-sm py-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Betöltés…\n </div>\n } @else {\n <div class=\"rounded border border-neonDefault bg-neutral-800/40 px-3 py-2\">\n @if (sessionInfo_$()?.activeLlmProvider?.trim()) {\n <div class=\"flex items-center gap-1.5 mb-1.5\">\n <span class=\"text-[10px] px-1.5 py-0.5 rounded-full bg-ccapAccent/20 text-ccapAccent font-semibold uppercase\">Override</span>\n </div>\n <div class=\"grid grid-cols-2 gap-x-3 gap-y-1.5\">\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">Provider</div>\n <div class=\"text-xs text-neutral-200\">{{ sessionInfo_$()?.activeLlmProvider }}</div>\n </div>\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">Model</div>\n <div class=\"text-xs text-neutral-200\">{{ sessionInfo_$()?.activeLlmModel || '—' }}</div>\n </div>\n </div>\n <div class=\"mt-1.5 pt-1.5 border-t border-neonDefault/40\">\n <div class=\"text-[10px] text-neutral-500\">\n Globál: {{ sessionInfo_$()?.defaultLlmProvider || '—' }} / {{ sessionInfo_$()?.defaultLlmModel || '—' }}\n </div>\n </div>\n } @else {\n <div class=\"grid grid-cols-2 gap-x-3 gap-y-1.5\">\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">Provider</div>\n <div class=\"text-xs text-neutral-200\">{{ sessionInfo_$()?.defaultLlmProvider || '—' }}</div>\n </div>\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">Model</div>\n <div class=\"text-xs text-neutral-200\">{{ sessionInfo_$()?.defaultLlmModel || '—' }}</div>\n </div>\n </div>\n <div class=\"mt-1 text-[10px] text-neutral-500\">Globál konfiguráció</div>\n }\n </div>\n }\n </section>\n\n <section class=\"mb-6\">\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase mb-2\">Run execution mód</h4>\n @if (session_DS.sessionInfoLoading_$()) {\n <div class=\"flex items-center gap-2 text-neutral-500 text-sm py-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Betöltés…\n </div>\n } @else {\n <div class=\"rounded border border-neonDefault bg-neutral-800/40 px-3 py-2 space-y-2\">\n <p class=\"text-[10px] text-neutral-500\">\n Session-szintű kényszerített run mód; üres = alapértelmezett\n <span class=\"text-neutral-400\">agentic-any</span>.\n </p>\n <select\n class=\"w-full max-w-sm px-2 py-1.5 bg-neutral-900 border border-neonDefault rounded text-neutral-100 text-xs\n focus:shadow-neon-glow-cyan disabled:opacity-50\"\n [disabled]=\"sessionForcedModeSaving_$()\"\n [value]=\"sessionForcedModeSelectValue_$()\"\n (change)=\"handleSessionForcedModeSelect($any($event.target).value)\">\n <option value=\"\">Alapértelmezett (agentic-any)</option>\n <option value=\"agentic-any\">Agentic — teljes eszközkészlet</option>\n <option value=\"instant\">Instant — azonnali válasz, eszközök nélkül</option>\n <option value=\"ask\">Ask — csak olvasási eszközök</option>\n <option value=\"plan\">Plan — olvasás + tervfájl eszköz</option>\n </select>\n </div>\n }\n </section>\n\n <section class=\"mb-6\">\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase mb-2\">Last run</h4>\n @if (session_DS.sessionInfoLoading_$()) {\n <div class=\"flex items-center gap-2 text-neutral-500 text-sm py-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Betöltés…\n </div>\n } @else if (sessionInfo_$()?.lastRun) {\n <div class=\"rounded border border-neonDefault bg-neutral-800/40 overflow-hidden\">\n <!-- Status badge -->\n @if (lastRunStatusDisplay_$()) {\n <div class=\"flex items-center gap-1.5 px-3 py-1.5 border-b border-neonDefault/40 bg-neutral-800/60\">\n <span class=\"w-1.5 h-1.5 rounded-full\"\n [class.bg-green-500]=\"lastRunStatusDisplay_$() === 'completed'\"\n [class.bg-red-500]=\"lastRunStatusDisplay_$() === 'errored'\"\n [class.bg-yellow-500]=\"lastRunStatusDisplay_$() !== 'completed' && lastRunStatusDisplay_$() !== 'errored'\">\n </span>\n <span class=\"text-[10px] text-neutral-400 uppercase tracking-wider\">{{ lastRunStatusDisplay_$() }}</span>\n </div>\n }\n\n <div class=\"flex flex-col gap-2 px-3 py-2\">\n <!-- Intent + Goal -->\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-0.5\">Intent</div>\n <div class=\"text-xs text-neutral-200 break-words\">{{ lastRunIntentDisplay_$() }}</div>\n </div>\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-0.5\">Goal</div>\n <div class=\"text-xs text-neutral-200 break-words\">{{ lastRunGoalDisplay_$() }}</div>\n </div>\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-0.5\">Run execution mode</div>\n <div class=\"text-xs text-neutral-200 font-mono break-words\">{{ lastRunExecutionModeDisplay_$() }}</div>\n </div>\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-0.5\">Continue prior run context</div>\n <div class=\"text-xs text-neutral-200 font-mono break-words\">{{ lastRunContinuePreviousContextDisplay_$() }}</div>\n </div>\n\n <!-- Summary -->\n <div class=\"pt-1 border-t border-neonDefault/30\">\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-0.5\">Summary</div>\n <div class=\"text-xs text-neutral-300 break-words\">{{ lastRunSummaryDisplay_$() }}</div>\n </div>\n\n <!-- Answer to user -->\n @if (sessionInfo_$()?.lastRun?.answerToUser) {\n <div class=\"pt-1 border-t border-neonDefault/30\">\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider mb-0.5\">Answer to user</div>\n <div class=\"text-xs text-neutral-200 whitespace-pre-wrap break-words\">{{ lastRunAnswerToUserDisplay_$() }}</div>\n </div>\n }\n\n <!-- Run tasks -->\n @if (lastRunTasks_$().length) {\n <div class=\"pt-1 border-t border-neonDefault/30\">\n <div class=\"flex items-center justify-between mb-1\">\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">Tasks</div>\n <span class=\"text-[10px] text-neutral-500\">\n {{ lastRunCompletedTaskCount_$() }}/{{ lastRunTasks_$().length }}\n </span>\n </div>\n <!-- Progress bar -->\n <div class=\"w-full h-1 rounded-full bg-neutral-700 mb-1.5\">\n <div class=\"h-1 rounded-full bg-green-500 transition-all\"\n [style.width.%]=\"lastRunTaskProgressPercent_$()\">\n </div>\n </div>\n <ul class=\"flex flex-col gap-1\">\n @for (task of lastRunTasks_$(); track $index) {\n <li class=\"flex flex-col gap-0.5\">\n <div class=\"flex items-start gap-1.5 text-xs\"\n [class]=\"task.isCompleted ? 'text-green-400/80' : 'text-neutral-300'\">\n @if (task.isCompleted) {\n <span class=\"shrink-0 mt-px w-3 text-center\">✓</span>\n } @else {\n <span class=\"shrink-0 mt-px w-3 text-center\">☐</span>\n }\n <span class=\"break-words\">{{ task.label }}</span>\n </div>\n @if (task.subTasks.length) {\n <ul class=\"flex flex-col gap-0.5 ml-5\">\n @for (sub of task.subTasks; track $index) {\n <li class=\"flex items-start gap-1 text-[11px]\"\n [class]=\"sub.isCompleted ? 'text-green-400/60' : 'text-neutral-400'\">\n @if (sub.isCompleted) {\n <span class=\"shrink-0 mt-px w-3 text-center\">✓</span>\n } @else {\n <span class=\"shrink-0 mt-px w-3 text-center\">☐</span>\n }\n <span class=\"break-words\">{{ sub.label }}</span>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </div>\n } @else {\n <p class=\"text-neutral-500 text-sm\">Nincs lezárt run.</p>\n }\n </section>\n\n <section class=\"mb-6\">\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase mb-2\">Aktuális context</h4>\n <app-ccap-context-panel [sessionId]=\"sessionId\"></app-ccap-context-panel>\n </section>\n\n <details class=\"mb-6 group\">\n <summary class=\"cursor-pointer select-none list-none flex items-center gap-1.5 mb-2\n [&::-webkit-details-marker]:hidden\">\n <span class=\"text-[10px] text-neutral-500 transition-transform group-open:rotate-90\">▶</span>\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase inline\">Conversation full</h4>\n </summary>\n @if (conversationFullMessages_$().length) {\n <div class=\"flex flex-col gap-1.5 max-h-48 overflow-y-auto\">\n @for (msg of conversationFullMessages_$(); track $index) {\n <div class=\"px-2 py-1.5 rounded border border-neonDefault text-xs\n bg-neutral-800/50\"\n [class.self-end]=\"msg.role === 'user'\"\n [class.self-start]=\"msg.role !== 'user'\">\n <span class=\"font-semibold text-neutral-400\">{{ msg.role }}:</span>\n <span class=\"text-neutral-200 whitespace-pre-wrap break-words\">\n {{ msg.content | ccapTruncate:120 }}\n </span>\n </div>\n }\n </div>\n } @else {\n <p class=\"text-neutral-500 text-sm\">\n {{ sessionId === session_DS.activeSessionId_$() ? 'Nincs üzenet.' : 'Válassz sessiont a chat-ben.' }}\n </p>\n }\n </details>\n\n <details class=\"mb-6 group\">\n <summary class=\"cursor-pointer select-none list-none flex items-center gap-1.5 mb-2\n [&::-webkit-details-marker]:hidden\">\n <span class=\"text-[10px] text-neutral-500 transition-transform group-open:rotate-90\">▶</span>\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase inline\">Used conversation inputs</h4>\n </summary>\n @if (session_DS.sessionInfoLoading_$()) {\n <div class=\"flex items-center gap-2 text-neutral-500 text-sm py-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Betöltés…\n </div>\n } @else if (sessionInfo_$()?.usedConversationInputs?.length) {\n <div class=\"flex flex-col gap-1.5 max-h-48 overflow-y-auto\">\n @for (msg of sessionInfo_$()?.usedConversationInputs ?? []; track $index) {\n <div class=\"px-2 py-1.5 rounded border border-neonDefault text-xs\n bg-neutral-800/50\"\n [class.self-end]=\"msg.role === 'user'\"\n [class.self-start]=\"msg.role !== 'user'\">\n <span class=\"font-semibold text-neutral-400\">{{ msg.role }}:</span>\n <span class=\"text-neutral-200 whitespace-pre-wrap break-words\">\n {{ msg.content | ccapTruncate:120 }}\n </span>\n </div>\n }\n </div>\n } @else {\n <p class=\"text-neutral-500 text-sm\">Nincs run vagy nincs mentett bemenet.</p>\n }\n </details>\n\n <section class=\"mb-6\">\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase mb-2\">Used elements</h4>\n @if (session_DS.sessionInfoLoading_$()) {\n <div class=\"flex items-center gap-2 text-neutral-500 text-sm py-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Betöltés…\n </div>\n } @else if (sessionInfo_$()?.usedElements) {\n @if (usedElementsHasAny_$()) {\n <div class=\"rounded border border-neonDefault bg-neutral-800/40 px-3 py-2 flex flex-col gap-1.5\">\n @if (usedElementsToolIdsStr_$()) {\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">Tools</div>\n <div class=\"text-xs text-neutral-200 break-words\">{{ usedElementsToolIdsStr_$() }}</div>\n </div>\n }\n @if (usedElementsGroupIdsStr_$()) {\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">Groups</div>\n <div class=\"text-xs text-neutral-200 break-words\">{{ usedElementsGroupIdsStr_$() }}</div>\n </div>\n }\n @if (usedElementsContextKeysStr_$()) {\n <div>\n <div class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">Context keys</div>\n <div class=\"text-xs text-neutral-200 break-words\">{{ usedElementsContextKeysStr_$() }}</div>\n </div>\n }\n </div>\n } @else {\n <p class=\"text-neutral-500 text-sm\">Nincs használt elem.</p>\n }\n } @else {\n <p class=\"text-neutral-500 text-sm\">Nincs run vagy nincs mentett elem.</p>\n }\n </section>\n\n <details class=\"mb-6 group\">\n <summary class=\"cursor-pointer select-none list-none flex items-center gap-1.5 mb-2\n [&::-webkit-details-marker]:hidden\">\n <span class=\"text-[10px] text-neutral-500 transition-transform group-open:rotate-90\">▶</span>\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase inline\">Full active context</h4>\n </summary>\n @if (session_DS.sessionInfoLoading_$()) {\n <div class=\"flex items-center gap-2 text-neutral-500 text-sm py-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Betöltés…\n </div>\n } @else if (sessionInfo_$()?.fullActiveContext?.messages?.length) {\n <div class=\"flex flex-col gap-1.5 max-h-48 overflow-y-auto\">\n @for (msg of sessionInfo_$()?.fullActiveContext?.messages ?? []; track $index) {\n <div class=\"px-2 py-1.5 rounded border border-neonDefault text-xs\n bg-neutral-800/50\"\n [class.self-end]=\"msg.role === 'user'\"\n [class.self-start]=\"msg.role !== 'user'\">\n <span class=\"font-semibold text-neutral-400\">{{ msg.role }}:</span>\n <span class=\"text-neutral-200 whitespace-pre-wrap break-words\">\n {{ msg.content | ccapTruncate:120 }}\n </span>\n </div>\n }\n </div>\n @if (executionHistorySummaryPreview_$()) {\n <p class=\"text-neutral-500 text-xs mt-1 truncate\"\n [title]=\"sessionInfo_$()?.fullActiveContext?.executionHistorySummary ?? ''\">\n Summary: {{ executionHistorySummaryPreview_$() }}\n </p>\n }\n } @else {\n <p class=\"text-neutral-500 text-sm\">Nincs run vagy nincs mentett full active context.</p>\n }\n </details>\n\n <details class=\"mb-6 group\">\n <summary class=\"cursor-pointer select-none list-none flex items-center gap-1.5 mb-2\n [&::-webkit-details-marker]:hidden\">\n <span class=\"text-[10px] text-neutral-500 transition-transform group-open:rotate-90\">▶</span>\n <h4 class=\"text-xs font-bold text-neutral-400 uppercase inline\">LLM debug trace (last run)</h4>\n </summary>\n @if (!lastRunIdForTrace_$()) {\n <p class=\"text-neutral-500 text-sm\">Nincs lezárt run vagy runId – trace nem elérhető.</p>\n } @else {\n @if (session_DS.llmDebugTraceLoadError_$()) {\n <app-ccap-error-display [error]=\"session_DS.llmDebugTraceLoadError_$()\"\n sourceLabelOverride=\"LLM debug trace\"\n class=\"mb-2 block\" />\n <button type=\"button\"\n class=\"px-3 py-1.5 text-xs rounded border border-neonCyan text-neutral-200\n hover:bg-neutral-700 mb-2\"\n (click)=\"refreshLlmDebugTrace()\">\n Trace újra\n </button>\n } @else if (session_DS.llmDebugTraceLoading_$()) {\n <div class=\"flex items-center gap-2 text-neutral-500 text-sm py-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-ccapAccent animate-pulse\"></span>\n Trace betöltés…\n </div>\n } @else {\n <div class=\"flex items-center justify-between gap-2 mb-2\">\n <span class=\"text-neutral-500 text-xs\">\n {{ session_DS.llmDebugTraceEntries_$().length }} bejegyzés\n </span>\n <button type=\"button\"\n class=\"px-2 py-1 text-xs rounded border border-neonDefault text-neutral-300\n hover:bg-neutral-700\"\n (click)=\"refreshLlmDebugTrace()\">\n Frissítés\n </button>\n </div>\n @if (!session_DS.llmDebugTraceEntries_$().length) {\n <p class=\"text-neutral-500 text-sm\">Még nincs trace esemény ehhez a run-hoz.</p>\n } @else {\n <div class=\"flex flex-col gap-1 max-h-64 overflow-y-auto\">\n @for (entry of session_DS.llmDebugTraceEntries_$(); track entry._id) {\n <details class=\"rounded border border-neonDefault bg-neutral-800/40 text-xs\">\n <summary class=\"cursor-pointer px-2 py-1.5 text-neutral-300 select-none\">\n <span class=\"font-semibold text-ccapAccent\">{{ entry.eventKind }}</span>\n <span class=\"text-neutral-500 mx-1\">·</span>\n <span class=\"text-neutral-200\">{{ entry.callTag }}</span>\n </summary>\n <pre class=\"px-2 pb-2 text-[10px] text-neutral-300 whitespace-pre-wrap break-words\n max-h-40 overflow-y-auto border-t border-neonDefault/50 mt-1 pt-1\">{{\n formatTraceEntryBody(entry)\n }}</pre>\n </details>\n }\n </div>\n }\n }\n }\n </details>\n\n }\n }\n </div>\n </div>\n </div>\n }\n</div>\n", "import { Component, inject, Signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { S_Modal_Component } from '../../../../shared/_components/s-modal/s-modal.component';\nimport { Ses_Graph_DataService } from '../../../_services/data-services/ses-graph.data-service';\nimport { Ses_GraphLayout_Interface } from '../../../_collections/graph/ses-graph-node.interface';\nimport { Ses_GraphView_Component } from '../ccap-graph-view/ses-graph-view.component';\n\n/**\n * Session graph modal wrapper.\n * Közel-teljesképernyős modálban jeleníti meg a graph view-t.\n * A Ses_Graph_DataService signal-jaiból olvassa az állapotot és input-ként továbbítja a graph view-nak.\n */\n@Component({\n selector: 'app-ses-graph-modal',\n standalone: true,\n imports: [CommonModule, S_Modal_Component, Ses_GraphView_Component],\n templateUrl: './ses-graph-modal.component.html',\n})\n/** Ses_GraphModal_Component class. */\nexport class Ses_GraphModal_Component {\n\n private readonly graph_DS: Ses_Graph_DataService = inject(Ses_Graph_DataService);\n\n /** Modal nyitva-e. */\n readonly isOpen_$: Signal<boolean> = this.graph_DS.isGraphOpen_$;\n\n /** Live mód-e. */\n readonly isLive_$: Signal<boolean> = this.graph_DS.isLive_$;\n\n /** Graph layout (node-ok, edge-ek, viewBox). */\n readonly layout_$: Signal<Ses_GraphLayout_Interface | null> = this.graph_DS.graphLayout_$;\n\n /** Aktív node ID. */\n readonly activeNodeId_$: Signal<string> = this.graph_DS.activeNodeId_$;\n\n /** Kiválasztott node ID. */\n readonly selectedNodeId_$: Signal<string> = this.graph_DS.selectedNodeId_$;\n\n /** Loading állapot. */\n readonly isLoading_$: Signal<boolean> = this.graph_DS.isLoading_$;\n\n /**\n * Modal bezárás handler.\n */\n handleClose(): void {\n this.graph_DS.closeGraph();\n }\n\n /**\n * Node kiválasztás handler.\n */\n handleNodeClick(nodeId: string): void {\n this.graph_DS.selectNode(nodeId);\n }\n\n /**\n * Detail bezárás handler.\n */\n handleDetailClose(): void {\n this.graph_DS.clearSelection();\n }\n}\n", "<app-s-modal\n [isOpen]=\"isOpen_$()\"\n [title]=\"isLive_$() ? 'Run Flow Graph (Live)' : 'Run Flow Graph'\"\n maxWidth=\"7xl\"\n [bodyFlexColumn]=\"true\"\n headerBorderClass=\"border-neonCyan/30\"\n (closed)=\"handleClose()\">\n\n <app-ses-graph-view\n class=\"flex-1 min-h-0\"\n [layout]=\"layout_$()\"\n [activeNodeId]=\"activeNodeId_$()\"\n [selectedNodeId]=\"selectedNodeId_$()\"\n [isLoading]=\"isLoading_$()\"\n (nodeClicked)=\"handleNodeClick($event)\"\n (detailClosed)=\"handleDetailClose()\" />\n\n</app-s-modal>\n", "import { Component, inject, OnInit, OnDestroy, ViewChild, computed, effect, EffectRef, signal, WritableSignal } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\n\nimport { filter } from 'rxjs';\n\nimport { DyNX_SubscriptionControl } from '@futdevpro/ngx-dynamo';\n\nimport {\n CCAP_SessionListItem_Response,\n} from '../../../../_models/interfaces/session/ccap-session-list-item.interface';\nimport { CCAP_LayoutBreakpoint_ControlService } from '../../../../_services/control-services/ccap-layout-breakpoint.control-service';\nimport {\n SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX,\n SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX,\n SESSION_SHELL_SIDEBAR_MAX_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';\nimport { Shr_LocalStoragePersistence_Util } from '../../../shared/_collections/utils/storage/shr-local-storage-persistence.util';\nimport { ExS_InstanceContext_DataService } from '../../../external-sessions/_services/exs-instance-context.data-service';\nimport {\n Session_DataService,\n} from '../../_services/data-services/session.data-service';\nimport { Ses_Graph_DataService } from '../../_services/data-services/ses-graph.data-service';\nimport { SCH_ScheduledJobs_DataService } from '../../../scheduler/_services/data-services/sch-scheduled-jobs.data-service';\nimport { Coordinator_DataService } from '../../../coordinator/_services/coordinator.data-service';\nimport { Ses_InfoPanel_Component } from '../ccap-info-panel/ses-info-panel.component';\n\n/** localStorage kulcs a session lista panel nyitott/bezárt állapotához. */\nconst CCAP_SESSIONS_PANEL_OPEN_STORAGE_KEY = 'ccap-sessionsPanelOpen';\n\n/** localStorage kulcs a session lista panel szélességéhez (px). */\nconst CCAP_SESSIONS_PANEL_WIDTH_PX_STORAGE_KEY = 'ccap-sessionsPanelWidthPx';\n\n\n/**\n * Session shell komponens.\n * ChatGPT-szerű layout: bal sidebar (session lista), középen chat/detail, jobb oldalon info panel.\n * A shell a shared s-session-shell-toolbar + s-resizable-session-shell-layout komponenseket használja.\n */\n@Component({\n selector: 'app-ccap-session-shell',\n templateUrl: './ses-shell.component.html',\n styles: [`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n min-height: 0;\n }\n ::ng-deep .session-outlet-wrapper router-outlet {\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n `],\n})\n/** Ses_Shell_Component class. */\nexport class Ses_Shell_Component extends DyNX_SubscriptionControl implements OnInit, OnDestroy {\n\n /** Info panel ViewChild referencia (toggle híváshoz a header sávból). */\n @ViewChild(Ses_InfoPanel_Component) infoPanel: Ses_InfoPanel_Component | undefined;\n\n /** Aktív session ID (gyerek route :id param); a jobb panelnak. */\n activeSessionId: string = '';\n\n /** Bal oldali session lista panel nyitva/bezárva signal. */\n readonly isSidebarOpen_$: WritableSignal<boolean> = signal<boolean>(Ses_Shell_Component.readSessionsPanelOpenFromStorage());\n\n /** Session lista panel szélessége (px) — drag handle-lel állítható. */\n readonly sidebarWidth_$: WritableSignal<number> = signal<number>(Ses_Shell_Component.readSidebarWidthFromStorage());\n\n /** Sidebar resize drag aktív-e (select-none a host-on). */\n readonly isResizing_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Info panel nyitva/zárva — szinkronban az info panel komponens állapotával (header gomb vizuális state-jéhez). */\n readonly isInfoPanelOpen_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Effect: session gyökérön (/session) session lista betöltése után navigál az első session-re. */\n private openLastSessionEffectRef: EffectRef | null = null;\n\n private readonly route: ActivatedRoute = inject(ActivatedRoute);\n private readonly router: Router = inject(Router);\n private readonly layoutBreakpoint_CS: CCAP_LayoutBreakpoint_ControlService =\n inject(CCAP_LayoutBreakpoint_ControlService);\n /** Cycle 785b (REQ-INST-SES-URL-001 Slice B): instance kontextus a navigation-höz. */\n private readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n readonly session_DS: Session_DataService = inject(Session_DataService);\n private readonly graph_DS: Ses_Graph_DataService = inject(Ses_Graph_DataService);\n\n /** REQ-SES-SCH-IND-001 detail-view follow-up: schedule-indicator forrás. */\n private readonly scheduledJobs_DS: SCH_ScheduledJobs_DataService =\n inject(SCH_ScheduledJobs_DataService);\n\n /** REQ-SES-CRD-IND-001 (cycle 190): coordinator-indicator forrás. */\n private readonly coordinator_DS: Coordinator_DataService =\n inject(Coordinator_DataService);\n\n /** Reactive jelenleg-aktív CCAP session id signal (a child route :id-jából). */\n readonly activeSessionId_$: WritableSignal<string> = signal<string>('');\n\n /** Igaz, ha a megnyitott CCAP session-höz tartozik aktív schedule. */\n readonly hasSchedule_$ = computed((): boolean => {\n const sid: string = this.activeSessionId_$();\n if (!sid) {\n return false;\n }\n return this.scheduledJobs_DS.scheduledSessionIds_$().has(sid);\n });\n\n /** Igaz, ha a megnyitott CCAP session-höz tartozik aktív koordinátor. */\n readonly hasCoordinator_$ = computed((): boolean => {\n const sid: string = this.activeSessionId_$();\n if (!sid) {\n return false;\n }\n return this.coordinator_DS.coordinatedSessionIds_$().has(sid);\n });\n\n /**\n * REQ-SCH-IND-CLICK-001 toolbar follow-up (cycle 203): a Schedule popup-on\n * megjelenített sessionId. `null` → popup zárva.\n */\n readonly schedulePopupSessionId_$: WritableSignal<string | null> = signal<string | null>(null);\n\n /**\n * REQ-SES-CRD-IND-001 Slice 3 toolbar follow-up (cycle 203): a Coordinator\n * popup-on megjelenített sessionId. `null` → popup zárva.\n */\n readonly coordinatorPopupSessionId_$: WritableSignal<string | null> = signal<string | null>(null);\n\n /** Schedule-badge click handler — popup nyitása az aktuális CCAP sessionId-vel. */\n handleScheduleBadgeClick(): void {\n const sid: string = this.activeSessionId_$();\n if (sid) {\n this.schedulePopupSessionId_$.set(sid);\n }\n }\n\n /** Schedule popup bezárása. */\n handleCloseSchedulePopup(): void {\n this.schedulePopupSessionId_$.set(null);\n }\n\n /** Coordinator-badge click handler — popup nyitása az aktuális CCAP sessionId-vel. */\n handleCoordinatorBadgeClick(): void {\n const sid: string = this.activeSessionId_$();\n if (sid) {\n this.coordinatorPopupSessionId_$.set(sid);\n }\n }\n\n /** Coordinator popup bezárása. */\n handleCloseCoordinatorPopup(): void {\n this.coordinatorPopupSessionId_$.set(null);\n }\n\n constructor() {\n super();\n this.openLastSessionEffectRef = effect((): void => {\n const loading: boolean = this.session_DS.sessionsLoading_$();\n const sessions: CCAP_SessionListItem_Response[] = this.session_DS.sessions_$();\n const path: string = this.router.url.split('?')[0].replace(/\\/$/, '');\n if (path !== '/session' || loading || sessions.length === 0) {\n return;\n }\n const first: CCAP_SessionListItem_Response = sessions[0];\n // Cycle 785b: instance kontextus a route-ban.\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const target: string[] = ccapId\n ? ['/session', ccapId, first._id]\n : ['/session', first._id];\n void this.router.navigate(target);\n });\n\n // REQ-UI-SES-MOB-AUTOCLOSE-001: explicit close-pulse signal a `ses-list`\n // (createNewSession) felől. A bump-counter változás triggereli a mobil\n // sidebar bezárását — kiegészíti a NavigationEnd-alapú auto-close-t azokra\n // az esetekre, ahol a route-snapshot lag miatt nem fut megfelelően.\n effect(\n (): void => {\n const bump: number = this.session_DS.requestSidebarCloseOnMobileBump_$();\n if (bump === 0) {\n return; // initial-skip\n }\n if (this.layoutBreakpoint_CS.isMobile_$()) {\n this.closeSidebarPanel();\n }\n },\n { allowSignalWrites: true },\n );\n }\n\n /** Socket csatlakozva (computed). */\n readonly connected_$ = computed((): boolean => this.session_DS.connected_$());\n\n ngOnInit(): void {\n // Mobile (xs) nézetben kezdeti állapot: sessions panel bezárva.\n if (this.layoutBreakpoint_CS.isMobile_$()) {\n this.closeSidebarPanel();\n }\n // Schedule-indicator forrás: ha a user közvetlenül session URL-re érkezik, a job-lista még üres.\n if (this.scheduledJobs_DS.jobs_$().length === 0) {\n void this.scheduledJobs_DS.loadAll();\n }\n // REQ-SES-CRD-IND-001: coordinator-lista lekérése a toolbar compass-ikonjához (deep-link fallback).\n if (this.coordinator_DS.globalCoordinatorsList_$().length === 0) {\n void this.coordinator_DS.loadAllCoordinatorsForManagementPage();\n }\n // Child route váltáskor a snapshot-ból olvassuk az id-t, hogy a session lista ki tudja emelni az aktív elemet.\n this.applyActiveSessionIdFromChildRoute();\n this.closeSidebarOnMobileIfSessionSelected();\n this.addSubscription(this.router.events.pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n ).subscribe((): void => {\n this.applyActiveSessionIdFromChildRoute();\n this.closeSidebarOnMobileIfSessionSelected();\n }));\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n if (this.openLastSessionEffectRef) {\n this.openLastSessionEffectRef.destroy();\n this.openLastSessionEffectRef = null;\n }\n }\n\n /**\n * Aktív session ID frissítése az outlet alatti child route :id param alapján.\n */\n private applyActiveSessionIdFromChildRoute(): void {\n const id: string = this.route.firstChild?.snapshot.paramMap.get('id') ?? '';\n this.activeSessionId = id;\n this.activeSessionId_$.set(id);\n if (!this.activeSessionId) {\n void this.session_DS.loadSessions();\n }\n }\n\n /**\n * Session lista panel nyitott állapotának mentése localStorage-ba.\n *\n * REQ-UI-MENU-STATE-001 (cycle 464): a `localStorage.setItem` + try/catch\n * most a shared `Shr_LocalStoragePersistence_Util.writeString`-en megy.\n * Szándékosan `writeString(String(value))` és NEM `writeBoolean` — a\n * meglévő on-disk format (`'true'`/`'false'`) megőrzéséhez.\n */\n private persistSidebarOpenToStorage(): void {\n Shr_LocalStoragePersistence_Util.writeString(\n CCAP_SESSIONS_PANEL_OPEN_STORAGE_KEY,\n String(this.isSidebarOpen_$()),\n );\n }\n\n /**\n * Sidebar panel szélesség mentése localStorage-ba (resize végén).\n *\n * REQ-UI-MENU-STATE-001 (cycle 464): a `localStorage.setItem` + try/catch\n * most a shared `Shr_LocalStoragePersistence_Util.writeNumber`-en megy\n * (number kompakt írás `String(value)` formátumban).\n */\n private persistSidebarWidthToStorage(): void {\n Shr_LocalStoragePersistence_Util.writeNumber(\n CCAP_SESSIONS_PANEL_WIDTH_PX_STORAGE_KEY,\n this.sidebarWidth_$(),\n );\n }\n\n /**\n * Session lista panel nyitott állapotának kiolvasása localStorage-ból.\n * Ha nincs tárolt érték vagy nem 'false', true (nyitva) a default.\n *\n * REQ-UI-MENU-STATE-001 (cycle 464): top-level function → private static method\n * (CLAUDE.md compliance); a `localStorage.getItem !== 'false'` minta a shared\n * `Shr_LocalStoragePersistence_Util.readString !== 'false'`-on megy. Default\n * true (`null !== 'false'` → true) változatlan.\n */\n private static readSessionsPanelOpenFromStorage(): boolean {\n return Shr_LocalStoragePersistence_Util.readString(CCAP_SESSIONS_PANEL_OPEN_STORAGE_KEY) !== 'false';\n }\n\n /**\n * Session lista panel szélesség kiolvasása localStorage-ból.\n * Ha nincs tárolt érték vagy invalid, az alapértelmezett szélesség.\n *\n * REQ-UI-MENU-STATE-001 (cycle 464): top-level function → private static\n * method; a `localStorage.getItem` + `parseInt` + NaN-check most a shared\n * `Shr_LocalStoragePersistence_Util.readNumber(KEY, DEFAULT)`-on megy\n * (DEFAULT fallback a parseInt-NaN ágra is). A clamp (MIN..MAX) változatlan.\n */\n private static readSidebarWidthFromStorage(): number {\n const parsed: number = Shr_LocalStoragePersistence_Util.readNumber(\n CCAP_SESSIONS_PANEL_WIDTH_PX_STORAGE_KEY,\n SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX,\n );\n return Math.max(SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX, Math.min(SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX, parsed));\n }\n\n /**\n * Sessions drawer bezárása és állapot perzisztálása.\n */\n private closeSidebarPanel(): void {\n this.isSidebarOpen_$.set(false);\n this.persistSidebarOpenToStorage();\n }\n\n /**\n * Mobil nézetben a session lista drawer bezárása, ha van aktív session (:id child route).\n * Desktopon nem zárunk — a lista nyitva maradhat session váltáskor.\n */\n private closeSidebarOnMobileIfSessionSelected(): void {\n if (!this.layoutBreakpoint_CS.isMobile_$()) {\n return;\n }\n if (!this.activeSessionId) {\n return;\n }\n this.closeSidebarPanel();\n }\n\n /**\n * Session lista panel nyitása/bezárása; állapot mentése localStorage-ba.\n */\n handleToggleSidebar(): void {\n this.isSidebarOpen_$.update((v: boolean): boolean => !v);\n this.persistSidebarOpenToStorage();\n }\n\n /**\n * Sidebar resize drag indítása (pointerdown a drag handle-n).\n * Pointer capture + pointermove/pointerup a document-en keresztül.\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 this.persistSidebarWidthToStorage();\n },\n });\n }\n\n /** Info panel toggle a header sávból — ViewChild-on keresztül delegáljuk. */\n handleToggleInfoPanel(): void {\n if (this.infoPanel) {\n this.infoPanel.togglePanel();\n }\n }\n\n /** Info panel állapotváltozás callback (az info panel @Output-jából). */\n handleInfoPanelOpenChange(isOpen: boolean): void {\n this.isInfoPanelOpen_$.set(isOpen);\n }\n\n /**\n * Graph modal megnyitása az aktív session-höz.\n * Ha agent-event fázis aktív (futó run), live módban nyitjuk; egyébként historical.\n */\n handleOpenGraph(): void {\n if (!this.activeSessionId) {\n return;\n }\n const agentEvents: Record<string, unknown> = this.session_DS.agentEvents_$();\n const phase: unknown = agentEvents.phase;\n const isLive: boolean = typeof phase === 'string' && phase.length > 0 && phase !== 'run-flow-complete';\n const rawRunId: unknown = agentEvents.runId;\n const runId: string = typeof rawRunId === 'string' ? rawRunId : '';\n this.graph_DS.openGraphForRun(this.activeSessionId, runId, isLive);\n }\n}\n", "<app-s-session-shell-toolbar>\n <div sSessionToolbarLeft class=\"flex items-center gap-1 min-w-0\">\n <button\n class=\"px-2 py-1 text-xs border rounded transition-colors flex items-center gap-1 shrink-0\"\n [class]=\"isSidebarOpen_$()\n ? 'border-neonCyan/50 text-neonCyan bg-neonCyan/10'\n : 'border-neutral-700 text-neutral-500 hover:text-neutral-300 hover:border-neutral-600'\"\n (click)=\"handleToggleSidebar()\">\n <svg 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\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n Sessions\n </button>\n </div>\n\n <div sSessionToolbarRight class=\"flex items-center gap-1 min-w-0\">\n <!-- Schedule-indicator: REQ-SES-SCH-IND-001 detail-view follow-up.\n REQ-SCH-IND-CLICK-001 toolbar follow-up (cycle 203): kattintható → popup. -->\n @if (hasSchedule_$()) {\n <button type=\"button\"\n class=\"text-neonCyan/80 hover:text-neonCyan focus:outline-none focus:ring-1 focus:ring-neonCyan/60 rounded px-1 shrink-0\"\n title=\"Ehhez a session-höz tartozik schedule — kattints a részletekért\"\n aria-label=\"Schedule attached — open popup\"\n (click)=\"handleScheduleBadgeClick()\">\n <svg class=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n </button>\n }\n <!-- Coordinator-indicator: REQ-SES-CRD-IND-001 (cycle 190).\n Slice 3 toolbar follow-up (cycle 203): kattintható → popup. -->\n @if (hasCoordinator_$()) {\n <button type=\"button\"\n class=\"text-neonAmber/80 hover:text-neonAmber focus:outline-none focus:ring-1 focus:ring-neonAmber/60 rounded px-1 shrink-0\"\n title=\"Ehhez a session-höz tartozik koordinátor — kattints a részletekért\"\n aria-label=\"Coordinator attached — open popup\"\n (click)=\"handleCoordinatorBadgeClick()\">\n <svg class=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polygon points=\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\" />\n </svg>\n </button>\n }\n <button\n class=\"px-2 py-1 text-xs border rounded transition-colors\n border-neutral-700 text-neutral-500 hover:text-neutral-300 hover:border-neutral-600\"\n (click)=\"handleOpenGraph()\"\n title=\"Run Flow Graph\">\n <svg class=\"w-3 h-3 inline-block mr-0.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"5\" cy=\"6\" r=\"3\" /><circle cx=\"19\" cy=\"6\" r=\"3\" />\n <circle cx=\"12\" cy=\"18\" r=\"3\" /><path d=\"M5 9v3a4 4 0 004 4h2M19 9v3a4 4 0 01-4 4h-2\" />\n </svg>\n Graph\n </button>\n <button\n class=\"px-2 py-1 text-xs border rounded transition-colors\"\n [class]=\"isInfoPanelOpen_$()\n ? 'border-neonCyan/50 text-neonCyan bg-neonCyan/10'\n : 'border-neutral-700 text-neutral-500 hover:text-neutral-300 hover:border-neutral-600'\"\n (click)=\"handleToggleInfoPanel()\">\n Info\n </button>\n </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 [isMobileBackdropActive]=\"isSidebarOpen_$()\"\n (sidebarResizeStart)=\"handleSidebarResizeStart($event)\"\n (mobileBackdropClicked)=\"handleToggleSidebar()\">\n\n <div sSessionShellSidebar class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"flex items-center justify-between px-3 py-2 border-b border-neonDefault shrink-0\n min-h-[44px]\">\n <span class=\"text-sm font-semibold text-neutral-200\">Sessions</span>\n <button class=\"px-2 py-1 min-h-[44px] min-w-[44px] flex items-center justify-center\n text-neutral-400 hover:text-neutral-200 rounded\"\n (click)=\"handleToggleSidebar()\"\n title=\"Bezárás\"\n aria-label=\"Bezárás\">\n ✕\n </button>\n </div>\n <div class=\"flex-1 min-h-0 overflow-y-auto\">\n <app-ccap-session-list [activeSessionId]=\"activeSessionId\"></app-ccap-session-list>\n </div>\n </div>\n\n <div sSessionShellMain class=\"flex flex-col flex-1 min-h-0 overflow-hidden\">\n @if (activeSessionId && !connected_$()) {\n <div class=\"shrink-0 px-4 py-1.5 bg-amber-900/50 border-b border-neonAmber\n text-amber-200 text-xs flex items-center gap-2\">\n <span class=\"inline-block w-2 h-2 rounded-full bg-amber-400 animate-pulse\"></span>\n Reconnecting…\n </div>\n }\n <div class=\"flex-1 min-h-0 flex flex-col session-outlet-wrapper\">\n <router-outlet></router-outlet>\n </div>\n </div>\n\n <app-ccap-info-panel sSessionShellRightPanel\n [sessionId]=\"activeSessionId\"\n (isOpenChange)=\"handleInfoPanelOpenChange($event)\">\n </app-ccap-info-panel>\n\n</app-s-resizable-session-shell-layout>\n\n<app-ses-graph-modal></app-ses-graph-modal>\n\n<!-- REQ-SCH-IND-CLICK-001 toolbar follow-up (cycle 203): Schedule popup. -->\n<app-sch-schedule-popup\n [sessionId]=\"schedulePopupSessionId_$()\"\n [isOpen]=\"schedulePopupSessionId_$() !== null\"\n (closed)=\"handleCloseSchedulePopup()\" />\n\n<!-- REQ-SES-CRD-IND-001 Slice 3 toolbar follow-up (cycle 203): Coordinator popup. -->\n<app-crd-info-popup\n [sessionId]=\"coordinatorPopupSessionId_$()\"\n [isOpen]=\"coordinatorPopupSessionId_$() !== null\"\n (closed)=\"handleCloseCoordinatorPopup()\" />\n", "import { Component } from '@angular/core';\n\n/**\n * Session placeholder komponens.\n * Középső tartalom amikor nincs session kiválasztva (shell layout).\n */\n@Component({\n selector: 'app-ccap-session-placeholder',\n templateUrl: './ses-placeholder.component.html',\n styles: [`\n :host {\n display: block;\n height: 100%;\n }\n `],\n})\n/** Ses_Placeholder_Component class. */\nexport class Ses_Placeholder_Component {}\n", "<div class=\"flex flex-col items-center justify-center h-full text-center px-4\">\n <p class=\"text-neutral-400 text-sm\">Válassz sessiont a bal oldali listából.</p>\n</div>\n", "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport {\n Ses_List_Component,\n} from './_components/ccap-session-list/ses-list.component';\nimport {\n Ses_Detail_Component,\n} from './_components/ccap-session-detail/ses-detail.component';\nimport {\n Ses_Chat_Component,\n} from './_components/ccap-chat/ses-chat.component';\nimport {\n Ses_ContextPanel_Component,\n} from './_components/ccap-context-panel/ses-context-panel.component';\nimport {\n Ses_ContextKeyItem_Component,\n} from './_components/ccap-context-key-item/ses-context-key-item.component';\nimport {\n Ses_MonitoringTimeline_Component,\n} from './_components/ccap-monitoring-timeline/ses-monitoring-timeline.component';\nimport {\n Ses_TraceDetail_Component,\n} from './_components/ccap-trace-detail/ses-trace-detail.component';\nimport {\n Ses_RunSummary_Component,\n} from './_components/ccap-run-summary/ses-run-summary.component';\nimport {\n Ses_Shell_Component,\n} from './_components/ccap-session-shell/ses-shell.component';\nimport {\n Ses_Placeholder_Component,\n} from './_components/ccap-session-placeholder/ses-placeholder.component';\nimport {\n Ses_InfoPanel_Component,\n} from './_components/ccap-info-panel/ses-info-panel.component';\nimport {\n Ses_RunFlowViz_Component,\n} from './_components/ccap-run-flow-viz/ses-run-flow-viz.component';\nimport {\n Ses_RunFlowBubble_Component,\n} from './_components/ccap-run-flow-bubble/ses-run-flow-bubble.component';\nimport {\n Ses_RunTraceBlock_Component,\n} from './_components/ccap-run-trace-block/ses-run-trace-block.component';\nimport {\n Ses_EventListItem_Component,\n} from './_components/ccap-event-list-item/ses-event-list-item.component';\nimport {\n Ses_UserInteractionCard_Component,\n} from './_components/ccap-user-interaction-card/ses-user-interaction-card.component';\nimport {\n S_SessionSelect_Component,\n} from '../shared/_components/session-ui/s-session-select/s-session-select.component';\nimport { CCAP_Truncate_Pipe } from '../../_pipes/ccap-truncate.pipe';\nimport { S_AbsoluteTime_Pipe } from '../shared/_pipes/s-absolute-time.pipe';\nimport { S_TimeAgo_Pipe } from '../shared/_pipes/s-time-ago.pipe';\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 { S_InstanceChipRowWithInfo_Component } from '../shared/_components/s-instance-chip-row-with-info/s-instance-chip-row-with-info.component';\nimport { S_StatusBadge_Component } from '../shared/_components/s-status-badge/s-status-badge.component';\nimport { S_SessionInput_Component } from '../shared/_components/session-ui/s-session-input/s-session-input.component';\nimport {\n S_AgentConsoleMessageBubble_Component,\n} from '../shared/_components/session-ui/s-agent-console-message-bubble/s-agent-console-message-bubble.component';\nimport {\n S_SessionShellToolbar_Component,\n} from '../shared/_components/session-ui/s-session-shell-toolbar/s-session-shell-toolbar.component';\nimport {\n S_ResizableSessionShellLayout_Component,\n} from '../shared/_components/session-ui/s-resizable-session-shell-layout/s-resizable-session-shell-layout.component';\nimport {\n S_SessionChatColumnLayout_Component,\n} from '../shared/_components/session-ui/s-session-chat-column-layout/s-session-chat-column-layout.component';\nimport {\n S_SessionScheduleOverlay_Component,\n} from '../shared/_components/session-ui/s-session-schedule-overlay/s-session-schedule-overlay.component';\nimport {\n S_SessionQuickCast_Overlay_Component,\n} from '../shared/_components/session-ui/s-session-quickcast-overlay/s-session-quickcast-overlay.component';\nimport {\n S_SessionCoordinator_Overlay_Component,\n} from '../shared/_components/session-ui/s-session-coordinator-overlay/s-session-coordinator-overlay.component';\nimport {\n S_SessionQuickSettings_Overlay_Component,\n} from '../shared/_components/session-ui/s-session-quick-settings-overlay/s-session-quick-settings-overlay.component';\nimport {\n Ses_GraphModal_Component,\n} from './_components/ccap-graph/ccap-graph-modal/ses-graph-modal.component';\nimport { S_Modal_Component } from '../shared/_components/s-modal/s-modal.component';\nimport { SCH_SchedulePopup_Component } from '../scheduler/_components/sch-schedule-popup/sch-schedule-popup.component';\nimport { CRD_InfoPopup_Component } from '../coordinator/_components/crd-info-popup/crd-info-popup.component';\n\n/** Session modul route-ok. Shell: bal lista + középen outlet + jobb panel hely.\n * Cycle 785b (REQ-INST-SES-URL-001): új `:ccapId/:id` route a meglévő `:id` ELŐTT\n * regisztrálva (more-specific-first), a 1-paramos legacy fallback megmarad. */\nconst sessionRoutes: Routes = [\n {\n path: '',\n component: Ses_Shell_Component,\n children: [\n { path: '', pathMatch: 'full', component: Ses_Placeholder_Component },\n { path: ':ccapId/:id', component: Ses_Detail_Component },\n { path: ':id', component: Ses_Detail_Component },\n ],\n },\n];\n\n/**\n * Session modul (REQ-MSG-011).\n * Session lista, chat, context panel, monitoring timeline komponensek.\n */\n@NgModule({\n declarations: [\n Ses_Shell_Component,\n Ses_Placeholder_Component,\n Ses_List_Component,\n Ses_Detail_Component,\n Ses_Chat_Component,\n Ses_ContextPanel_Component,\n Ses_ContextKeyItem_Component,\n Ses_MonitoringTimeline_Component,\n Ses_TraceDetail_Component,\n Ses_RunSummary_Component,\n Ses_InfoPanel_Component,\n Ses_RunFlowViz_Component,\n Ses_RunFlowBubble_Component,\n Ses_RunTraceBlock_Component,\n Ses_EventListItem_Component,\n Ses_UserInteractionCard_Component,\n ],\n imports: [\n CCAP_Truncate_Pipe,\n S_AbsoluteTime_Pipe,\n S_TimeAgo_Pipe,\n S_SessionSelect_Component,\n CommonModule,\n FormsModule,\n RouterModule.forChild(sessionRoutes),\n CCAP_ErrorDisplay_Component,\n CCAP_VoiceRecordButton_Component,\n S_InstanceChipRowWithInfo_Component,\n S_StatusBadge_Component,\n S_SessionInput_Component,\n S_AgentConsoleMessageBubble_Component,\n S_SessionShellToolbar_Component,\n S_ResizableSessionShellLayout_Component,\n S_SessionChatColumnLayout_Component,\n S_SessionScheduleOverlay_Component,\n S_SessionQuickCast_Overlay_Component,\n S_SessionCoordinator_Overlay_Component,\n S_SessionQuickSettings_Overlay_Component,\n Ses_GraphModal_Component,\n S_Modal_Component,\n SCH_SchedulePopup_Component,\n CRD_InfoPopup_Component,\n ],\n})\n/** Session_Module class. */\nexport class Session_Module {}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "selectSession", "handleRowContextMenu", "handleScheduleIndicatorClick", "handleCoordinatorIndicatorClick", "\u0275\u0275property", "activeSessionRowViews_$", "activeSessionId", "\u0275\u0275element", "_r3", "refreshSessions", "\u0275\u0275advance", "session_DS", "sessionsLoadError_$", "_r4", "loadArchivedSessions", "archivedSessionsLoading_$", "\u0275\u0275textInterpolate1", "_r6", "archivedSessionRowViews_$", "_r5", "hideArchived", "\u0275\u0275template", "Ses_List_Component_Conditional_18_Conditional_2_Conditional_5_Template", "Ses_List_Component_Conditional_18_Conditional_2_Conditional_6_Template", "Ses_List_Component_Conditional_18_Conditional_2_Conditional_7_Template", "\u0275\u0275conditional", "length", "Ses_List_Component_Conditional_18_Conditional_1_Template", "Ses_List_Component_Conditional_18_Conditional_2_Template", "showArchived", "_r8", "renameInput_r9", "\u0275\u0275reference", "renameValue_$", "set", "value", "handleCtxRenameConfirm", "handleCloseCtxMenu", "_r11", "handleCtxUnarchive", "_r12", "handleCtxArchive", "_r10", "handleCtxCopyLink", "Ses_List_Component_Conditional_19_Conditional_3_Case_1_Template", "Ses_List_Component_Conditional_19_Conditional_3_Case_2_Template", "Ses_List_Component_Conditional_19_Conditional_3_Case_3_Template", "handleCtxCopy", "handleCtxRenameStart", "Ses_List_Component_Conditional_19_Conditional_3_Conditional_8_Template", "Ses_List_Component_Conditional_19_Conditional_3_Conditional_9_Template", "linkCopyState_$", "tmp_4_0", "copying", "ctxSession_r13", "_archived", "_r7", "Ses_List_Component_Conditional_19_Conditional_2_Template", "Ses_List_Component_Conditional_19_Conditional_3_Template", "\u0275\u0275styleProp", "ctxMenuPos_$", "x", "y", "isRenaming_$", "Ses_List_Component", "creating", "archiving", "deArchiving", "inject", "Session_DataService", "peiContext_DS", "ExS_InstanceContext_DataService", "globalError_CS", "CCAP_GlobalError_ControlService", "scheduledJobs_DS", "SCH_ScheduledJobs_DataService", "coordinator_DS", "Coordinator_DataService", "router", "Router", "instanceChangeEffect", "effect", "activeCcapId_$", "untracked", "loadSessions", "searchQuery_$", "signal", "filteredActiveSessions_$", "computed", "query", "all", "sessions_$", "trim", "filter", "s", "CCAP_TextSearch_Util", "includesText", "name", "sessionGoal", "sessionIntent", "filteredArchivedSessions_$", "archivedSessions_$", "scheduledIds", "scheduledSessionIds_$", "coordinatedIds", "coordinatedSessionIds_$", "map", "mapSessionToRowView", "__spreadProps", "__spreadValues", "statusColorClass", "isRunning", "ctxMenuSession_$", "schedulePopupSessionId_$", "sessionId", "handleCloseSchedulePopup", "coordinatorPopupSessionId_$", "handleCloseCoordinatorPopup", "ngOnInit", "initialize", "loadAll", "loadAllCoordinatorsForManagementPage", "ccapId", "target", "navigate", "archiveSession", "__async", "updateSession", "updates", "archived", "deArchiveSession", "then", "createNewSession", "session", "createSession", "_id", "requestSidebarCloseOnMobileBump_$", "update", "n", "payload", "find", "id", "event", "clientX", "clientY", "path", "url", "window", "location", "origin", "result", "copyToClipboard", "ok", "setTimeout", "copiedSession", "copySession", "input", "document", "querySelector", "focus", "select", "newName", "lastMod", "__lastModified", "lastActivityAt", "Date", "toISOString", "String", "label", "status", "S_SessionStatusColor_Util", "resolve", "isArchived", "hasSchedule", "has", "hasCoordinator", "selectors", "inputs", "decls", "vars", "consts", "template", "rf", "ctx", "Ses_List_Component_Conditional_14_Template", "Ses_List_Component_Conditional_15_Template", "Ses_List_Component_Conditional_16_Template", "Ses_List_Component_Conditional_17_Template", "Ses_List_Component_Conditional_18_Template", "Ses_List_Component_Conditional_19_Template", "sessionsLoading_$", "CCAP_RunExecutionUiLabels_Util", "labelForRunExecutionMode", "raw", "trim", "v", "modes", "AC_RunExecutionMode_Type", "instant", "agenticAny", "ask", "plan", "m", "runModeLabelMap", "labelForPaletteConstraint", "items", "AC_RunExecutionPaletteConstraint_Type", "full", "askOnly", "planOnly", "c", "paletteLabelMap", "import_fsm_dynamo", "Ses_Monitoring_DataService", "currentSessionId", "events_$", "signal", "eventsLoading_$", "httpRunTraceCache", "Map", "monitoringSubscription", "monitoring_AS", "inject", "Ses_Monitoring_ApiService", "session_DS", "Session_DataService", "constructor", "monitoringEvent_S", "subscribe", "payload", "activeId", "activeSessionId_$", "trim", "length", "sessionId", "pushEvent", "event", "display", "eventType", "timestamp", "Date", "now", "data", "durationMs", "status", "runId", "inputSize", "outputSize", "update", "current", "loadSessionEvents", "__async", "sid", "set", "response", "getEvents", "events", "error", "DyFM_Error", "logSimple", "loadRunTrace", "params", "getRunTrace", "trace", "ngOnDestroy", "unsubscribe", "clearEvents", "buildMergedRunTrace", "rid", "key", "httpPart", "get", "livePart", "filterEventsForRun", "mergeTraceLists", "getOrLoadRunTrace", "has", "normalized", "Array", "isArray", "map", "e", "row", "String", "filter", "a", "b", "dedupeKey", "valueOf", "byKey", "from", "values", "sort", "x", "y", "factory", "\u0275fac", "providedIn", "SES_MessageToBubbleView_Util", "fromClientMessage", "msg", "sessionId", "content", "DisplayString_Util", "toDisplayString", "timestampIso", "timestamp", "Date", "toISOString", "isUser", "role", "tts", "messageKey", "hasTtsAudio", "undefined", "resolved", "resolveKind", "rawData", "runId", "clientListKey", "listKey", "kind", "bodyText", "isUserAligned", "headerStatusDot", "isError", "flags", "showCopy", "showRawInfo", "useEditDiffForExpandable", "CCAP_AgentConsoleBubbleKind_Type", "userPrompt", "assistant", "toolResult", "resolveSystemKind", "raw", "trimmed", "trim", "startsWith", "error", "slice", "info", "statusUpdate", "STORAGE_PREFIX", "Ses_InputStorage_Util", "savePromptDraft", "sessionId", "content", "SHR_PromptDraftStorage_Util", "saveDraft", "loadPromptDraft", "loadDraft", "clearPromptDraft", "clearDraft", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "ctx_r0", "event", "inputSize", "outputSize", "runId", "\u0275\u0275textInterpolate", "formatDataValue", "data", "entry_r2", "provider", "\u0275\u0275template", "Ses_TraceDetail_Component_Conditional_26_For_5_Conditional_6_Template", "\u0275\u0275property", "\u0275\u0275pureFunction5", "_c0", "eventKind", "callTag", "\u0275\u0275conditional", "formatPayload", "payload", "\u0275\u0275repeaterCreate", "Ses_TraceDetail_Component_Conditional_26_For_5_Template", "_forTrack0", "\u0275\u0275repeater", "matchedDebugEntries_$", "DEFAULT_EVENT", "eventType", "timestamp", "Date", "durationMs", "status", "sessionId", "Ses_TraceDetail_Component", "input", "debugTraceEntries", "close", "EventEmitter", "formattedData_$", "computed", "JSON", "stringify", "isLlmCall_$", "all", "llmTag", "length", "filter", "e", "value", "onClose", "emit", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275listener", "Ses_TraceDetail_Component_Conditional_15_Template", "Ses_TraceDetail_Component_Conditional_16_Template", "Ses_TraceDetail_Component_Conditional_17_Template", "Ses_TraceDetail_Component_Conditional_18_Template", "Ses_TraceDetail_Component_Conditional_19_Template", "Ses_TraceDetail_Component_Conditional_20_Template", "Ses_TraceDetail_Component_Conditional_26_Template", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "ctx", "ctx_r0", "llmModel_$", "durationLabel_$", "sizeLabel_$", "\u0275\u0275template", "Ses_EventListItem_Component_Case_5_Conditional_3_Template", "Ses_EventListItem_Component_Case_5_Conditional_4_Template", "Ses_EventListItem_Component_Case_5_Conditional_5_Template", "llmCallType_$", "\u0275\u0275conditional", "\u0275\u0275property", "\u0275\u0275pureFunction2", "_c0", "status_$", "Ses_EventListItem_Component_Case_6_Conditional_3_Template", "Ses_EventListItem_Component_Case_6_Conditional_4_Template", "toolId_$", "errorMessage_$", "Ses_EventListItem_Component_Case_7_Conditional_2_Template", "Ses_EventListItem_Component_Case_8_Conditional_3_Template", "Ses_EventListItem_Component_Case_8_Conditional_4_Template", "label_$", "Ses_EventListItem_Component_Case_9_Conditional_3_Template", "Ses_EventListItem_Component_Case_9_Conditional_4_Template", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "toggleDebugPopup", "\u0275\u0275element", "llmProvider_$", "llmTokenBrief_$", "_c1", "llmFinishReason_$", "Ses_EventListItem_Component_Case_18_Conditional_1_Template", "Ses_EventListItem_Component_Case_18_Conditional_2_Template", "Ses_EventListItem_Component_Case_18_Conditional_3_Template", "Ses_EventListItem_Component_Case_18_Conditional_4_Template", "toolCategory_$", "toolError_$", "Ses_EventListItem_Component_Case_19_Conditional_1_Template", "Ses_EventListItem_Component_Case_19_Conditional_2_Template", "Ses_EventListItem_Component_Case_20_Conditional_1_Template", "\u0275\u0275textInterpolate1", "stepMessagePreview_$", "Ses_EventListItem_Component_Case_21_Conditional_1_Conditional_1_Template", "Ses_EventListItem_Component_Case_21_Conditional_1_Conditional_2_Template", "isNewSession_$", "stepRunIntent_$", "runGoal_$", "Ses_EventListItem_Component_Case_21_Conditional_2_Conditional_1_Template", "Ses_EventListItem_Component_Case_21_Conditional_2_Conditional_2_Template", "iterationAction_$", "Ses_EventListItem_Component_Case_21_Conditional_3_Conditional_3_Template", "iterationIndex_$", "\u0275\u0275pureFunction3", "_c2", "iterationTool_$", "iterationIntent_$", "Ses_EventListItem_Component_Case_21_Conditional_4_Conditional_3_Template", "Ses_EventListItem_Component_Case_21_Conditional_4_Conditional_4_Template", "Ses_EventListItem_Component_Case_21_Conditional_4_Conditional_5_Template", "Ses_EventListItem_Component_Case_21_Conditional_4_Conditional_6_Template", "hasAgentFeedback_$", "finalizationAnswer_$", "stepRunSummary_$", "Ses_EventListItem_Component_Case_21_Conditional_5_Conditional_1_Template", "Ses_EventListItem_Component_Case_21_Conditional_5_Conditional_2_Template", "Ses_EventListItem_Component_Case_21_Conditional_6_Conditional_1_Template", "Ses_EventListItem_Component_Case_21_Conditional_6_Conditional_2_Template", "Ses_EventListItem_Component_Case_21_Conditional_7_Conditional_3_Template", "Ses_EventListItem_Component_Case_21_Conditional_1_Template", "Ses_EventListItem_Component_Case_21_Conditional_2_Template", "Ses_EventListItem_Component_Case_21_Conditional_3_Template", "Ses_EventListItem_Component_Case_21_Conditional_4_Template", "Ses_EventListItem_Component_Case_21_Conditional_5_Template", "Ses_EventListItem_Component_Case_21_Conditional_6_Template", "Ses_EventListItem_Component_Case_21_Conditional_7_Template", "stepType_$", "includes", "compactingSizeReduction_$", "Ses_EventListItem_Component_Case_22_Conditional_1_Template", "entry_r4", "provider", "payload", "_c4", "msg_r5", "role", "content", "Ses_EventListItem_Component_Conditional_23_For_10_Conditional_7_Conditional_0_Template", "\u0275\u0275repeaterCreate", "Ses_EventListItem_Component_Conditional_23_For_10_Conditional_7_For_5_Template", "\u0275\u0275repeaterTrackByIndex", "\u0275\u0275repeater", "tmp_12_0", "undefined", "formatDebugPayload", "Ses_EventListItem_Component_Conditional_23_For_10_Conditional_9_Conditional_0_Template", "tmp_13_0", "Ses_EventListItem_Component_Conditional_23_For_10_Conditional_10_Conditional_0_Template", "Ses_EventListItem_Component_Conditional_23_For_10_Conditional_10_Conditional_1_Template", "Ses_EventListItem_Component_Conditional_23_For_10_Conditional_6_Template", "Ses_EventListItem_Component_Conditional_23_For_10_Conditional_7_Template", "Ses_EventListItem_Component_Conditional_23_For_10_Conditional_8_Template", "Ses_EventListItem_Component_Conditional_23_For_10_Conditional_9_Template", "Ses_EventListItem_Component_Conditional_23_For_10_Conditional_10_Template", "Ses_EventListItem_Component_Conditional_23_For_10_Conditional_11_Template", "\u0275\u0275pureFunction5", "_c3", "eventKind", "callTag", "_r3", "closeDebugPopup", "$event", "i0", "stopPropagation", "Ses_EventListItem_Component_Conditional_23_For_10_Template", "_forTrack0", "matchedDebugEntries_$", "Ses_EventListItem_Component", "event", "input", "required", "debugTraceEntries", "itemClick", "EventEmitter", "emoji_$", "computed", "Ses_RunFlowEventDisplay_Util", "getEmoji", "borderClasses_$", "getBubbleClasses", "getStepLabel", "category_$", "ev", "eventType", "ms", "durationMs", "toFixed", "status", "ct", "data", "callType", "formatStepId", "model", "tid", "toolId", "msg", "message", "error", "length", "substring", "parts", "inputSize", "push", "outputSize", "join", "prompt", "promptTokens", "completion", "completionTokens", "fr", "finishReason", "p", "step", "preview", "messagePreview", "intent", "runIntent", "summary", "runSummary", "err", "cat", "toolCategory", "action", "tool", "toolGroup", "iter", "iteration", "isNewSession", "goal", "runGoal", "hasAgentFeedback", "result", "answer", "initial", "initialSize", "final", "finalSize", "saved", "all", "llmTag", "filter", "e", "hasDebugEntries_$", "debugPopupOpen_$", "signal", "handleClick", "emit", "update", "v", "set", "JSON", "stringify", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "Ses_EventListItem_Component_Conditional_3_Template", "Ses_EventListItem_Component_Case_5_Template", "Ses_EventListItem_Component_Case_6_Template", "Ses_EventListItem_Component_Case_7_Template", "Ses_EventListItem_Component_Case_8_Template", "Ses_EventListItem_Component_Case_9_Template", "Ses_EventListItem_Component_Conditional_11_Template", "Ses_EventListItem_Component_Conditional_16_Template", "Ses_EventListItem_Component_Case_18_Template", "Ses_EventListItem_Component_Case_19_Template", "Ses_EventListItem_Component_Case_20_Template", "Ses_EventListItem_Component_Case_21_Template", "Ses_EventListItem_Component_Case_22_Template", "Ses_EventListItem_Component_Conditional_23_Template", "tmp_1_0", "tmp_2_0", "\u0275\u0275pipeBind1", "timestamp", "tmp_7_0", "\u0275\u0275elementStart", "\u0275\u0275listener", "row_r2", "\u0275\u0275restoreView", "_r1", "$implicit", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onBubbleClick", "event", "\u0275\u0275elementEnd", "\u0275\u0275text", "\u0275\u0275advance", "\u0275\u0275property", "getDotClasses", "\u0275\u0275textInterpolate1", "getDotTooltip", "\u0275\u0275repeaterCreate", "Ses_RunFlowViz_Component_Conditional_0_For_2_Template", "_forTrack0", "\u0275\u0275template", "Ses_RunFlowViz_Component_Conditional_0_Conditional_3_Template", "\u0275\u0275repeater", "traceRows", "\u0275\u0275conditional", "length", "row_r5", "_r4", "debugTraceEntries", "Ses_RunFlowViz_Component_Conditional_1_For_2_Template", "Ses_RunFlowViz_Component_Conditional_1_Conditional_3_Template", "Ses_RunFlowViz_Component", "trace", "mode", "eventSelected", "EventEmitter", "ngOnChanges", "changes", "rebuildTraceRows", "list", "map", "ev", "i", "trackKey", "timestamp", "valueOf", "eventType", "emit", "Ses_RunFlowEventDisplay_Util", "getStepLabel", "selectors", "inputs", "outputs", "features", "\u0275\u0275NgOnChangesFeature", "decls", "vars", "consts", "template", "rf", "ctx", "Ses_RunFlowViz_Component_Conditional_0_Template", "Ses_RunFlowViz_Component_Conditional_1_Template", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "toggleVizMode", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "vizMode_$", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "\u0275\u0275element", "$event", "_r3", "onFlowEventSelected", "runTrace_$", "debugTraceEntries_$", "\u0275\u0275template", "Ses_RunTraceBlock_Component_Conditional_7_Conditional_1_Template", "Ses_RunTraceBlock_Component_Conditional_7_Conditional_2_Template", "Ses_RunTraceBlock_Component_Conditional_7_Conditional_3_Template", "Ses_RunTraceBlock_Component_Conditional_7_Conditional_4_Template", "\u0275\u0275conditional", "runTraceLoading_$", "length", "runTraceHttpFailed_$", "_r4", "closeTracePopup", "i0", "stopPropagation", "ctx", "Ses_RunTraceBlock_Component", "sessionId", "input", "runId", "autoExpand", "expanded_$", "signal", "loadVizMode", "VIZ_MODE_STORAGE_KEY", "stored", "Shr_LocalStoragePersistence_Util", "readString", "saveVizMode", "mode", "writeString", "runTraceLoaded_$", "runTraceError_$", "selectedEventForPopup_$", "monitoring_DS", "inject", "Ses_Monitoring_DataService", "session_DS", "Session_DataService", "destroyRef", "DestroyRef", "traceLiveEffectRef", "constructor", "effect", "evSnapshot", "events_$", "sid", "trim", "rid", "merged", "buildMergedRunTrace", "set", "allowSignalWrites", "onDestroy", "destroy", "ngOnInit", "loadRunTrace", "toggleExpanded", "update", "v", "next", "ev", "__async", "monitoringPromise", "getOrLoadRunTrace", "catch", "debugPromise", "fetchLlmDebugTraceEntriesForRun", "debugEntries", "Promise", "all", "selectors", "inputs", "decls", "vars", "consts", "template", "rf", "Ses_RunTraceBlock_Component_Conditional_6_Template", "Ses_RunTraceBlock_Component_Conditional_7_Template", "Ses_RunTraceBlock_Component_Conditional_8_Template", "\u0275\u0275classProp", "tmp_3_0", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "ctx_r0", "request", "description", "\u0275\u0275element", "confirmMessage", "\u0275\u0275template", "Ses_UserInteractionCard_Component_Conditional_0_Conditional_6_Conditional_0_Conditional_0_Template", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r3", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleConfirm", "\u0275\u0275conditional", "opt_r6", "_r5", "$implicit", "selectOption", "id", "Ses_UserInteractionCard_Component_Conditional_0_Conditional_6_Conditional_1_For_2_Conditional_3_Template", "\u0275\u0275classMap", "selectedOptionId_$", "label", "\u0275\u0275repeaterCreate", "Ses_UserInteractionCard_Component_Conditional_0_Conditional_6_Conditional_1_For_2_Template", "_forTrack0", "_r4", "handleOptionSelect", "\u0275\u0275repeater", "options", "\u0275\u0275property", "\u0275\u0275twoWayListener", "$event", "_r7", "i0", "\u0275\u0275twoWayBindingSet", "textResponse", "handleQuestionSubmit", "textPlaceholder", "\u0275\u0275twoWayProperty", "trim", "_r8", "Ses_UserInteractionCard_Component_Conditional_0_Conditional_6_Conditional_0_Template", "Ses_UserInteractionCard_Component_Conditional_0_Conditional_6_Conditional_1_Template", "Ses_UserInteractionCard_Component_Conditional_0_Conditional_6_Conditional_2_Template", "Ses_UserInteractionCard_Component_Conditional_0_Conditional_6_Conditional_3_Template", "_r2", "handleDismiss", "isConfirm", "isOptionSelect", "isQuestion", "allowTextResponse", "Ses_UserInteractionCard_Component_Conditional_0_Conditional_4_Template", "Ses_UserInteractionCard_Component_Conditional_0_Conditional_5_Template", "Ses_UserInteractionCard_Component_Conditional_0_Conditional_6_Template", "title", "isSubmitted_$", "Ses_UserInteractionCard_Component", "responded", "EventEmitter", "signal", "confirmed", "set", "response", "interactionId", "sessionId", "emit", "optionId", "selectedOptionId", "text", "isDismissed", "type", "Tls_UserInteractionType_Type", "confirm", "optionSelect", "question", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "Ses_UserInteractionCard_Component_Conditional_0_Template", "\u0275\u0275element", "\u0275\u0275property", "ctx_r3", "sessionId", "tmp_13_0", "item_r3", "msg", "runId", "undefined", "tmp_14_0", "trim", "lastAssistantRunId_$", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r5", "\u0275\u0275nextContext", "$implicit", "\u0275\u0275resetView", "handleForkFromHereClick", "messageKey", "\u0275\u0275elementEnd", "\u0275\u0275template", "Ses_Chat_Component_For_4_Conditional_0_Template", "$event", "_r2", "handleTtsCached", "Ses_Chat_Component_For_4_Conditional_3_Template", "\u0275\u0275conditional", "role", "tmp_11_0", "length", "\u0275\u0275advance", "\u0275\u0275classMap", "bubbleView", "isUserAligned", "_r6", "onFlowEventSelected", "liveRunTrace_$", "_r7", "onInteractionResponse", "ctx", "\u0275\u0275text", "\u0275\u0275textInterpolate1", "ntf_r8", "notificationTitle", "Ses_Chat_Component_Conditional_7_Conditional_1_Template", "Ses_Chat_Component_Conditional_7_Conditional_2_Template", "Ses_Chat_Component_Conditional_7_Conditional_4_Template", "Ses_Chat_Component_Conditional_7_Conditional_5_Template", "\u0275\u0275pureFunction4", "_c1", "notificationPriority", "phase", "notificationType", "\u0275\u0275textInterpolate", "chatRunStatusLine_$", "Ses_Chat_Component_Conditional_8_Conditional_2_Template", "Ses_Chat_Component_Conditional_8_Conditional_3_Template", "_r9", "closeTracePopup", "i0", "stopPropagation", "session_DS", "messagesLoadError_$", "NTF_TOOL_ID", "NTF_PHASE_SENT", "Ses_Chat_Component", "newMessage", "pendingAttachments", "runStatusText_$", "signal", "computed", "base", "modeKey", "activeRunExecutionMode_$", "label", "CCAP_RunExecutionUiLabels_Util", "labelForRunExecutionMode", "isTyping_$", "isStopping_$", "selectedEventForPopup_$", "msgs", "messages_$", "i", "m", "chatViewItems_$", "sid", "map", "SES_MessageToBubbleView_Util", "fromClientMessage", "setMessageTtsCached", "forkConfirmOpen_$", "forkConfirmBusy_$", "forkPointMessageKey_$", "key", "set", "handleForkConfirmClosed", "handleForkConfirm", "__async", "newSession", "forkSession", "forkUntilMessageKey", "_id", "ccapId", "peiContext_DS", "activeCcapId_$", "target", "router", "navigate", "err", "globalError_CS", "showError", "allEvents", "monitoring_DS", "events_$", "lastRunId", "filter", "e", "scrollAnchorRef", "messagesEffectRef", "agentEventsEffectRef", "inject", "Session_DataService", "Ses_Monitoring_DataService", "Router", "ExS_InstanceContext_DataService", "CCAP_GlobalError_ControlService", "voiceInputUi_DS", "VNP_InputUi_DataService", "sessionQueue_DS", "ExS_Queue_DataService", "registrySsot_CS", "AIS_RegistrySsot_ControlService", "sessionInfo_$", "sessionInfoMap_$", "get", "modelOptions_$", "enabledLlmModels_$", "modelName", "selectedModel_$", "info", "activeLlmModel", "defaultLlmModel", "modeOptions", "AC_RunExecutionMode_Type", "agenticAny", "instant", "ask", "plan", "selectedMode_$", "forcedRunExecutionMode", "effortOptions", "selectedEffort_$", "effort", "reasoningEffort", "constructor", "effect", "scheduleScrollToBottom", "eventData", "agentEvents_$", "rawPhase", "step", "rawStatus", "status", "DisplayString_Util", "toDisplayString", "Boolean", "ntfTitle", "toolId", "toolCall", "allowSignalWrites", "ngOnInit", "loadMessages", "loadMonitoringEventsForSession", "loadSessionConfigData", "Ses_InputStorage_Util", "loadPromptDraft", "subscribeToSession", "baseRoute", "ngOnDestroy", "destroy", "ngOnChanges", "changes", "ngAfterViewInit", "setTimeout", "scrollToBottom", "nativeElement", "scrollIntoView", "behavior", "loadMessagesForView", "loadSessionEvents", "handleDraftTextChange", "value", "savePromptDraft", "sendMessage", "text", "currentAttachments", "sidForDraft", "clearPromptDraft", "imageAttachments", "a", "isImage", "mimeType", "base64", "result", "sendMessageViaSocket", "setActiveSession", "sent", "errorText", "error", "Error", "onAttachmentsChanged", "attachments", "handleQuickCastAction", "trimmed", "handleStopExecution", "stopExecution", "onVoiceSegment", "event", "t", "current", "autoSendAfterVoice_$", "isFinal", "response", "sendInteractionResponse", "ev", "loadSessionInfo", "ensureLoaded", "handleModelChanged", "entry", "find", "updateSession", "updates", "activeLlmProvider", "provider", "then", "handleModeChanged", "mode", "handleEffortChanged", "selectors", "viewQuery", "rf", "\u0275\u0275repeaterCreate", "Ses_Chat_Component_For_4_Template", "_forTrack0", "Ses_Chat_Component_Conditional_5_Template", "Ses_Chat_Component_Conditional_6_Template", "Ses_Chat_Component_Conditional_7_Template", "Ses_Chat_Component_Conditional_8_Template", "Ses_Chat_Component_Conditional_9_Template", "Ses_Chat_Component_Conditional_10_Template", "Ses_Chat_Component_Conditional_11_Template", "Ses_Chat_Component_Conditional_12_Template", "_r1", "startEditing", "editingText_$", "saveEdit", "cancelEdit", "removeItem", "sendNow", "reorderItem", "queueItemId", "direction", "\u0275\u0275repeater", "tmp_3_0", "pendingInteraction_$", "tmp_4_0", "pendingNotification_$", "tmp_6_0", "messagesLoading_$", "items_$", "isLocked_$", "editingItemId_$", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "ctx_r0", "runExecutionModeLabel_$", "sessionPaletteLabel_$", "\u0275\u0275template", "Ses_RunSummary_Component_Conditional_4_Conditional_1_Template", "Ses_RunSummary_Component_Conditional_4_Conditional_2_Template", "\u0275\u0275conditional", "\u0275\u0275element", "\u0275\u0275property", "runError_$", "runGoalDisplay_$", "Ses_RunSummary_Component_Conditional_9_Conditional_2_Conditional_0_Template", "\u0275\u0275textInterpolate", "runSummaryDisplay_$", "Ses_RunSummary_Component_Conditional_9_Conditional_1_Template", "Ses_RunSummary_Component_Conditional_9_Conditional_2_Template", "Ses_RunSummary_Component", "runSummary", "input", "runStatus", "runIntent", "runGoal", "runExecutionMode", "undefined", "sessionRunExecutionPaletteConstraint", "liveRunExecutionMode", "collapsed", "runStatusDisplay_$", "computed", "DisplayString_Util", "toDisplayString", "runIntentDisplay_$", "effectiveRunExecutionModeKey_$", "live", "trim", "persisted", "key", "CCAP_RunExecutionUiLabels_Util", "labelForRunExecutionMode", "raw", "s", "labelForPaletteConstraint", "hasExecutionInfoBadges_$", "length", "msg", "toggleCollapse", "selectors", "inputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275listener", "Ses_RunSummary_Component_Conditional_4_Template", "Ses_RunSummary_Component_Conditional_9_Template", "\u0275\u0275pureFunction3", "_c0", "\u0275\u0275elementStart", "\u0275\u0275element", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "tmp_3_0", "detail_r1", "lastRun", "runSummary", "undefined", "ctx_r1", "runStatusText_$", "tmp_4_0", "runStatus", "runIntent", "session", "sessionIntent", "runGoal", "tmp_6_0", "sessionGoal", "runExecutionMode", "runExecutionPaletteConstraint", "session_DS", "activeRunExecutionMode_$", "\u0275\u0275template", "Ses_Detail_Component_Conditional_2_Conditional_0_Template", "Ses_Detail_Component_Conditional_2_Conditional_1_Template", "\u0275\u0275conditional", "tmp_1_0", "detail_$", "Ses_Detail_Component", "DyNX_SubscriptionControl", "route", "inject", "ActivatedRoute", "Session_DataService", "peiContext_DS", "ExS_InstanceContext_DataService", "sessionId_$", "signal", "computed", "id", "mapVal", "sessionDetailMap_$", "get", "agentEventsEffectRef", "constructor", "addSubscription", "params", "subscribe", "ccapIdFromUrl", "ccapId", "set", "activeCcapId_$", "selectInstance", "setActiveSession", "loadSessionDetail", "effect", "eventData", "agentEvents_$", "rawPhase", "phase", "step", "DisplayString_Util", "toDisplayString", "nextStatus", "mapPhaseToRunStatus", "wasRunning", "untracked", "length", "allowSignalWrites", "ngOnInit", "ngOnDestroy", "destroy", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "Ses_Detail_Component_Conditional_1_Template", "Ses_Detail_Component_Conditional_2_Template", "\u0275\u0275advance", "sessionDetailLoading_$", "import_fsm_dynamo", "Ses_Context_ApiService", "baseUrl", "environment", "api", "http", "inject", "HttpClient", "getContext", "sessionId", "firstValueFrom", "get", "updateContextKey", "params", "patch", "key", "action", "factory", "\u0275fac", "providedIn", "EMPTY_CONTEXT_STATE", "activeKeys", "pinnedKeys", "cachedKeys", "keys", "sessionContextCache", "Ses_Context_DataService", "contextBySessionId", "Map", "contextMap_$", "signal", "contextLoading_$", "contextLoadError_$", "contextUpdatedEffectRef", "context_AS", "inject", "Ses_Context_ApiService", "session_DS", "Session_DataService", "constructor", "effect", "payload", "contextUpdated_$", "sessionId", "set", "contextState", "allowSignalWrites", "ngOnDestroy", "destroy", "getCachedContext", "get", "__spreadValues", "loadContext", "__async", "context", "getContext", "error", "DyFM_Error", "logSimple", "updateContextKey", "params", "factory", "\u0275fac", "providedIn", "\u0275\u0275element", "\u0275\u0275property", "ctx_r0", "keyData", "source", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "version", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "emitAction", "_r3", "_r4", "_r5", "toggleContent", "\u0275\u0275textInterpolate", "contentPreview", "_r6", "contentFull", "\u0275\u0275template", "Ses_ContextKeyItem_Component_Conditional_12_Conditional_1_Template", "Ses_ContextKeyItem_Component_Conditional_12_Conditional_2_Template", "\u0275\u0275pureFunction3", "_c1", "status", "\u0275\u0275conditional", "isContentExpanded", "CONTENT_PREVIEW_MAX", "Ses_ContextKeyItem_Component", "keyName", "hasContent", "keyAction", "EventEmitter", "ngOnChanges", "changes", "computeContentFields", "action", "emit", "key", "content", "raw", "JSON", "stringify", "length", "substring", "selectors", "inputs", "outputs", "features", "\u0275\u0275NgOnChangesFeature", "decls", "vars", "consts", "template", "rf", "ctx", "Ses_ContextKeyItem_Component_Conditional_4_Template", "Ses_ContextKeyItem_Component_Conditional_5_Template", "Ses_ContextKeyItem_Component_Conditional_9_Template", "Ses_ContextKeyItem_Component_Conditional_10_Template", "Ses_ContextKeyItem_Component_Conditional_11_Template", "Ses_ContextKeyItem_Component_Conditional_12_Template", "_c0", "\u0275\u0275elementStart", "\u0275\u0275element", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "loadContext", "\u0275\u0275advance", "\u0275\u0275property", "context_DS", "contextLoadError_$", "$event", "_r3", "onKeyAction", "key_r4", "tmp_13_0", "keyDataMap", "undefined", "_r5", "key_r6", "_r7", "key_r8", "\u0275\u0275textInterpolate1", "entry_r10", "key", "\u0275\u0275textInterpolate", "formattedValue", "\u0275\u0275repeaterCreate", "Ses_ContextPanel_Component_Conditional_11_Conditional_25_Conditional_5_For_2_Template", "_forTrack0", "\u0275\u0275repeater", "sessionCacheEntries", "_r9", "toggleSessionCache", "\u0275\u0275template", "Ses_ContextPanel_Component_Conditional_11_Conditional_25_Conditional_5_Template", "isSessionCacheExpanded", "\u0275\u0275conditional", "Ses_ContextPanel_Component_Conditional_11_Conditional_0_Template", "Ses_ContextPanel_Component_Conditional_11_For_6_Template", "\u0275\u0275repeaterTrackByIdentity", "Ses_ContextPanel_Component_Conditional_11_Conditional_7_Template", "Ses_ContextPanel_Component_Conditional_11_For_13_Template", "Ses_ContextPanel_Component_Conditional_11_Conditional_14_Template", "Ses_ContextPanel_Component_Conditional_11_For_20_Template", "Ses_ContextPanel_Component_Conditional_11_Conditional_21_Template", "Ses_ContextPanel_Component_Conditional_11_Conditional_25_Template", "Ses_ContextPanel_Component_Conditional_11_Conditional_26_Template", "isCompacted", "activeKeys", "length", "pinnedKeys", "cachedKeys", "EMPTY_CONTEXT_STATE", "keys", "sessionContextCache", "Ses_ContextPanel_Component", "sessionId", "sessionId_$", "signal", "contextState", "__spreadValues", "wasConnected", "contextEffectRef", "connectedEffectRef", "inject", "Ses_Context_DataService", "session_DS", "Session_DataService", "constructor", "effect", "state", "contextMap_$", "get", "applyContextState", "connected", "connected_$", "sid", "allowSignalWrites", "ngOnInit", "set", "ngOnDestroy", "destroy", "ngOnChanges", "changes", "compactedContextOverride", "newKeyDataMap", "allKeyNames", "keyName", "resolveLatestKeyData", "cacheObj", "Object", "map", "cacheKey", "formatValue", "versions", "latest", "i", "version", "value", "JSON", "stringify", "params", "__async", "updateContextKey", "action", "selectors", "inputs", "features", "\u0275\u0275NgOnChangesFeature", "decls", "vars", "consts", "template", "rf", "ctx", "Ses_ContextPanel_Component_Conditional_9_Template", "Ses_ContextPanel_Component_Conditional_10_Template", "Ses_ContextPanel_Component_Conditional_11_Template", "contextLoading_$", "CCAP_Truncate_Pipe", "transform", "value", "limit", "length", "slice", "pure", "standalone", "\u0275\u0275elementStart", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r3", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onInfoPanelResizePointerDown", "\u0275\u0275elementEnd", "\u0275\u0275text", "\u0275\u0275element", "_r4", "retrySessionInfo", "\u0275\u0275advance", "\u0275\u0275property", "session_DS", "sessionInfoLoadError_$", "\u0275\u0275textInterpolate", "tmp_4_0", "sessionInfo_$", "sessionIntent", "tmp_5_0", "sessionGoal", "\u0275\u0275textInterpolate1", "\u0275\u0275pipeBind2", "costUsdTotal", "\u0275\u0275pipeBind1", "inputTokensTotal", "outputTokensTotal", "llmCallCount", "\u0275\u0275template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_5_Conditional_5_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_5_Conditional_6_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_5_Conditional_7_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_5_Conditional_8_Template", "\u0275\u0275conditional", "tmp_6_0", "tmp_7_0", "gs_r5", "focus", "step_r6", "\u0275\u0275repeaterCreate", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_10_Conditional_16_For_5_Template", "\u0275\u0275repeaterTrackByIndex", "\u0275\u0275repeater", "next", "item_r7", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_10_Conditional_17_For_5_Template", "done", "b_r8", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_10_Conditional_18_For_5_Template", "blockers", "d_r9", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_10_Conditional_19_For_5_Template", "decisions", "\u0275\u0275declareLet", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_10_Conditional_15_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_10_Conditional_16_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_10_Conditional_17_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_10_Conditional_18_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_10_Conditional_19_Template", "\u0275\u0275storeLet", "goalState", "\u0275\u0275classProp", "gs_r10", "status", "phase", "goal", "length", "activeLlmProvider", "activeLlmModel", "\u0275\u0275textInterpolate2", "defaultLlmProvider", "defaultLlmModel", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_16_Conditional_1_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_16_Conditional_2_Template", "trim", "_r11", "handleSessionForcedModeSelect", "target", "value", "sessionForcedModeSaving_$", "sessionForcedModeSelectValue_$", "lastRunStatusDisplay_$", "lastRunAnswerToUserDisplay_$", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_26_Conditional_29_For_10_Conditional_6_For_2_Conditional_1_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_26_Conditional_29_For_10_Conditional_6_For_2_Conditional_2_Template", "\u0275\u0275classMap", "sub_r12", "isCompleted", "label", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_26_Conditional_29_For_10_Conditional_6_For_2_Template", "task_r13", "subTasks", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_26_Conditional_29_For_10_Conditional_2_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_26_Conditional_29_For_10_Conditional_3_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_26_Conditional_29_For_10_Conditional_6_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_26_Conditional_29_For_10_Template", "lastRunCompletedTaskCount_$", "lastRunTasks_$", "\u0275\u0275styleProp", "lastRunTaskProgressPercent_$", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_26_Conditional_1_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_26_Conditional_28_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_26_Conditional_29_Template", "lastRunIntentDisplay_$", "lastRunGoalDisplay_$", "lastRunExecutionModeDisplay_$", "lastRunContinuePreviousContextDisplay_$", "lastRunSummaryDisplay_$", "tmp_10_0", "lastRun", "answerToUser", "msg_r14", "role", "content", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_38_For_2_Template", "conversationFullMessages_$", "sessionId", "activeSessionId_$", "msg_r15", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_47_For_2_Template", "usedConversationInputs", "undefined", "\u0275\u0275pureFunction0", "_c0", "usedElementsToolIdsStr_$", "usedElementsGroupIdsStr_$", "usedElementsContextKeysStr_$", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_53_Conditional_0_Conditional_1_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_53_Conditional_0_Conditional_2_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_53_Conditional_0_Conditional_3_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_53_Conditional_0_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_53_Conditional_1_Template", "usedElementsHasAny_$", "msg_r16", "fullActiveContext", "executionHistorySummary", "executionHistorySummaryPreview_$", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_62_For_2_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_62_Conditional_3_Template", "messages", "_r17", "refreshLlmDebugTrace", "llmDebugTraceLoadError_$", "entry_r19", "eventKind", "callTag", "formatTraceEntryBody", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_71_Conditional_2_Conditional_6_For_2_Template", "_forTrack0", "llmDebugTraceEntries_$", "_r18", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_71_Conditional_2_Conditional_5_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_71_Conditional_2_Conditional_6_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_71_Conditional_0_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_71_Conditional_1_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_71_Conditional_2_Template", "llmDebugTraceLoading_$", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_3_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_4_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_5_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_9_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_10_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_11_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_15_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_16_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_20_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_21_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_25_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_26_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_27_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_38_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_39_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_46_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_47_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_48_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_52_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_53_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_54_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_61_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_62_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_63_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_70_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Conditional_71_Template", "sessionInfoLoading_$", "tmp_8_0", "tmp_11_0", "tmp_12_0", "usedElements", "tmp_13_0", "lastRunIdForTrace_$", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_0_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Conditional_1_Template", "_r1", "togglePanel", "Ses_InfoPanel_Component_Conditional_1_Conditional_2_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_10_Template", "Ses_InfoPanel_Component_Conditional_1_Conditional_11_Template", "showInfoPanelResizeHandle_$", "CCAP_INFO_PANEL_OPEN_STORAGE_KEY", "CCAP_INFO_PANEL_WIDTH_PX_STORAGE_KEY", "CCAP_INFO_PANEL_WIDTH_PX_DEFAULT", "CCAP_INFO_PANEL_WIDTH_PX_MIN", "CCAP_INFO_PANEL_WIDTH_PX_MAX_FALLBACK", "clampInfoPanelWidthPx", "widthPx", "maxPxOverride", "minPx", "maxPx", "window", "Math", "max", "innerWidth", "n", "round", "Number", "isNaN", "min", "Ses_InfoPanel_Component", "isOpenChange", "EventEmitter", "sessionId_$", "signal", "isOpen_$", "readInfoPanelOpenFromStorage", "panelWidthPx_$", "readInfoPanelWidthPxFromStorage", "openDesktopOuterWidthPx_$", "computed", "layoutBreakpoint_CS", "isMobile_$", "sid", "messages_$", "sessionInfoMap_$", "get", "DisplayString_Util", "toDisplayString", "runStatus", "runSummary", "raw", "s", "slice", "runIntent", "runGoal", "sessionRunPaletteSelectValue_$", "runExecutionPaletteConstraint", "candidates", "AC_RunExecutionPaletteConstraint_Type", "full", "askOnly", "planOnly", "c", "t", "m", "runExecutionMode", "v", "continuePreviousRunContext", "sessionRunPaletteSaving_$", "forcedRunExecutionMode", "AC_RunExecutionMode_Type", "agenticAny", "instant", "ask", "plan", "toolIds", "join", "groupIds", "contextKeys", "u", "rid", "runId", "tasks", "filter", "inject", "Session_DataService", "CCAP_LayoutBreakpoint_ControlService", "infoPanelResizeStartClientX", "infoPanelResizeStartWidthPx", "infoPanelResizeHandleEl", "infoPanelResizePointerId", "onInfoPanelResizePointerMoveBound", "event", "applyInfoPanelResizePointerMove", "onInfoPanelResizePointerUpBound", "finishInfoPanelResize", "constructor", "effect", "open", "getCachedSessionInfo", "loadSessionInfo", "allowSignalWrites", "loadLlmDebugTrace", "ngOnInit", "set", "ngOnDestroy", "disposeInfoPanelResizeOnDestroy", "ngOnChanges", "changes", "persistInfoPanelOpen", "emit", "handleSessionRunPaletteSelect", "selectedRaw", "persistSessionRunPaletteConstraint", "__async", "updates", "matched", "parseSessionPaletteConstraintString", "updateSession", "persistSessionForcedMode", "parseSessionForcedModeString", "entry", "JSON", "stringify", "provider", "logLevel", "__created", "payload", "button", "preventDefault", "stopPropagation", "currentTarget", "HTMLElement", "pointerId", "clientX", "setPointerCapture", "document", "body", "style", "cursor", "userSelect", "addEventListener", "capture", "computeMaxInfoPanelWidthPx", "nextRaw", "handleEl", "pid", "hasPointerCapture", "releasePointerCapture", "persistInfoPanelWidthPx", "teardownInfoPanelResizeListeners", "removeEventListener", "parsed", "Shr_LocalStoragePersistence_Util", "readNumber", "writeNumber", "readString", "isOpen", "writeString", "String", "selectors", "inputs", "outputs", "features", "\u0275\u0275NgOnChangesFeature", "decls", "vars", "consts", "template", "rf", "ctx", "Ses_InfoPanel_Component_Conditional_1_Template", "Ses_GraphModal_Component", "graph_DS", "inject", "Ses_Graph_DataService", "isOpen_$", "isGraphOpen_$", "isLive_$", "layout_$", "graphLayout_$", "activeNodeId_$", "selectedNodeId_$", "isLoading_$", "handleClose", "closeGraph", "handleNodeClick", "nodeId", "selectNode", "handleDetailClose", "clearSelection", "selectors", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275elementStart", "\u0275\u0275listener", "$event", "\u0275\u0275elementEnd", "\u0275\u0275property", "\u0275\u0275advance", "CommonModule", "S_Modal_Component", "Ses_GraphView_Component", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleScheduleBadgeClick", "\u0275\u0275element", "\u0275\u0275elementEnd", "_r3", "handleCoordinatorBadgeClick", "\u0275\u0275text", "CCAP_SESSIONS_PANEL_OPEN_STORAGE_KEY", "CCAP_SESSIONS_PANEL_WIDTH_PX_STORAGE_KEY", "Ses_Shell_Component", "DyNX_SubscriptionControl", "infoPanel", "activeSessionId", "isSidebarOpen_$", "signal", "readSessionsPanelOpenFromStorage", "sidebarWidth_$", "readSidebarWidthFromStorage", "isResizing_$", "isInfoPanelOpen_$", "openLastSessionEffectRef", "route", "inject", "ActivatedRoute", "router", "Router", "layoutBreakpoint_CS", "CCAP_LayoutBreakpoint_ControlService", "peiContext_DS", "ExS_InstanceContext_DataService", "session_DS", "Session_DataService", "graph_DS", "Ses_Graph_DataService", "scheduledJobs_DS", "SCH_ScheduledJobs_DataService", "coordinator_DS", "Coordinator_DataService", "activeSessionId_$", "hasSchedule_$", "computed", "sid", "scheduledSessionIds_$", "has", "hasCoordinator_$", "coordinatedSessionIds_$", "schedulePopupSessionId_$", "coordinatorPopupSessionId_$", "set", "handleCloseSchedulePopup", "handleCloseCoordinatorPopup", "constructor", "effect", "loading", "sessionsLoading_$", "sessions", "sessions_$", "url", "split", "replace", "length", "first", "ccapId", "activeCcapId_$", "target", "_id", "navigate", "requestSidebarCloseOnMobileBump_$", "isMobile_$", "closeSidebarPanel", "allowSignalWrites", "connected_$", "ngOnInit", "jobs_$", "loadAll", "globalCoordinatorsList_$", "loadAllCoordinatorsForManagementPage", "applyActiveSessionIdFromChildRoute", "closeSidebarOnMobileIfSessionSelected", "addSubscription", "events", "pipe", "filter", "event", "NavigationEnd", "subscribe", "ngOnDestroy", "destroy", "id", "firstChild", "snapshot", "paramMap", "get", "loadSessions", "persistSidebarOpenToStorage", "Shr_LocalStoragePersistence_Util", "writeString", "String", "persistSidebarWidthToStorage", "writeNumber", "readString", "parsed", "readNumber", "SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX", "Math", "max", "SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX", "min", "SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX", "handleToggleSidebar", "update", "v", "handleSidebarResizeStart", "startX", "clientX", "startWidth", "SHR_DocumentPointerDrag_Util", "attachUntilPointerUp", "startEvent", "onMove", "e", "delta", "newWidth", "onEnd", "handleToggleInfoPanel", "togglePanel", "handleInfoPanelOpenChange", "isOpen", "handleOpenGraph", "agentEvents", "agentEvents_$", "phase", "isLive", "rawRunId", "runId", "openGraphForRun", "selectors", "viewQuery", "rf", "ctx", "Ses_InfoPanel_Component", "\u0275\u0275template", "Ses_Shell_Component_Conditional_7_Template", "Ses_Shell_Component_Conditional_8_Template", "$event", "Ses_Shell_Component_Conditional_28_Template", "\u0275\u0275advance", "\u0275\u0275classMap", "\u0275\u0275classProp", "\u0275\u0275conditional", "\u0275\u0275property", "Ses_Placeholder_Component", "selectors", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "sessionRoutes", "path", "component", "Ses_Shell_Component", "children", "pathMatch", "Ses_Placeholder_Component", "Ses_Detail_Component", "Session_Module", "S_SessionSelect_Component", "CommonModule", "FormsModule", "RouterModule", "forChild", "CCAP_ErrorDisplay_Component", "CCAP_VoiceRecordButton_Component", "S_InstanceChipRowWithInfo_Component", "S_StatusBadge_Component", "S_SessionInput_Component", "S_AgentConsoleMessageBubble_Component", "S_SessionShellToolbar_Component", "S_ResizableSessionShellLayout_Component", "S_SessionChatColumnLayout_Component", "S_SessionCoordinator_Overlay_Component", "Ses_GraphModal_Component", "S_Modal_Component", "SCH_SchedulePopup_Component", "CRD_InfoPopup_Component"]
|
|
7
|
+
}
|