@futdevpro/ccap 1.1.3002 → 1.1.3013
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client-dist/{agent-instances.module-VLGX2Z7Z.js → agent-instances.module-SZDIKSIR.js} +2 -2
- package/client-dist/ca.module-JYSD4TBY.js +5 -0
- package/client-dist/ca.module-JYSD4TBY.js.map +7 -0
- package/client-dist/{cc-usage-dashboard.component-D6CNJHB5.js → cc-usage-dashboard.component-O4VDGFYY.js} +2 -2
- package/client-dist/{cc.module-T3NJWMZ5.js → cc.module-HHIOLYUZ.js} +4 -4
- package/client-dist/cc.module-HHIOLYUZ.js.map +7 -0
- package/client-dist/{chunk-7VUQTBJ2.js → chunk-2BZ4R623.js} +2 -2
- package/client-dist/{chunk-YWW2VAZR.js → chunk-2V2O2JAL.js} +2 -2
- package/client-dist/{chunk-3SYXOECP.js → chunk-3KB6O77F.js} +2 -2
- package/client-dist/{chunk-PTS77H25.js → chunk-4ZEPJMCK.js} +2 -2
- package/client-dist/{chunk-64K7CP3A.js → chunk-5ATMD4SY.js} +2 -2
- package/client-dist/{chunk-W3HNVMKS.js → chunk-5GTIJO5T.js} +2 -2
- package/client-dist/{chunk-PVLRUWUC.js → chunk-5UADYWSA.js} +2 -2
- package/client-dist/{chunk-36LPXL3M.js → chunk-5Z43LN5U.js} +2 -2
- package/client-dist/{chunk-3JQ2UHMM.js → chunk-6HMRYXOI.js} +2 -2
- package/client-dist/{chunk-6227S2CN.js → chunk-6JLLWGQF.js} +2 -2
- package/client-dist/{chunk-EGZ2ZMS3.js → chunk-72Z4K7WC.js} +2 -2
- package/client-dist/{chunk-O6IRGFCX.js → chunk-7FGU7NN2.js} +2 -2
- package/client-dist/{chunk-SJTW4HLQ.js → chunk-A6TWPSUA.js} +2 -2
- package/client-dist/{chunk-2IYGO6RM.js → chunk-APYQ4B27.js} +2 -2
- package/client-dist/{chunk-SAC7F2CB.js → chunk-AVH4FZ6Z.js} +2 -2
- package/client-dist/{chunk-FOL6X3TR.js → chunk-B24YBK2I.js} +2 -2
- package/client-dist/{chunk-5HYEA5IO.js → chunk-BGD62M7R.js} +2 -2
- package/client-dist/{chunk-5DUG67IY.js → chunk-BKR6H3SJ.js} +2 -2
- package/client-dist/{chunk-OVU6SA42.js → chunk-BWW75POL.js} +2 -2
- package/client-dist/{chunk-WNQYZI4D.js → chunk-DC4EFEQU.js} +2 -2
- package/client-dist/{chunk-SJ6KKDJT.js → chunk-EEOSB2P7.js} +2 -2
- package/client-dist/{chunk-W7OH67K2.js → chunk-EVREGV4D.js} +2 -2
- package/client-dist/{chunk-S46BSLUB.js → chunk-FD6QRJ7H.js} +2 -2
- package/client-dist/{chunk-JLF2BDJU.js → chunk-G5CYHOH4.js} +2 -2
- package/client-dist/{chunk-2ZTUWDCN.js → chunk-GB5ESWPG.js} +2 -2
- package/client-dist/{chunk-SBJAWWHF.js → chunk-GERQQL7M.js} +2 -2
- package/client-dist/{chunk-SBJAWWHF.js.map → chunk-GERQQL7M.js.map} +3 -3
- package/client-dist/{chunk-ZZ7RWOLH.js → chunk-GHUVIUFQ.js} +2 -2
- package/client-dist/{chunk-7YT7BGBD.js → chunk-GKKG77XM.js} +2 -2
- package/client-dist/{chunk-ZZRTMXBT.js → chunk-GPAB3FYW.js} +2 -2
- package/client-dist/chunk-GWFZKTPN.js +4 -0
- package/client-dist/{chunk-OXEKAYMY.js.map → chunk-GWFZKTPN.js.map} +3 -3
- package/client-dist/{chunk-TIJCR5DW.js → chunk-HHHXXHAW.js} +2 -2
- package/client-dist/{chunk-TIJCR5DW.js.map → chunk-HHHXXHAW.js.map} +1 -1
- package/client-dist/{chunk-NCOPOED7.js → chunk-HK42XXL4.js} +2 -2
- package/client-dist/{chunk-VQSRIIPK.js → chunk-KB4N3NQJ.js} +2 -2
- package/client-dist/{chunk-7SCYMYZG.js → chunk-KM4V4ZQZ.js} +2 -2
- package/client-dist/{chunk-XKS3GVP3.js → chunk-KYW5YFHW.js} +2 -2
- package/client-dist/{chunk-QXIUTGNM.js → chunk-LUJCXLWT.js} +2 -2
- package/client-dist/{chunk-3LPBF4AU.js → chunk-M5ZAOY2Y.js} +2 -2
- package/client-dist/{chunk-TNGH7PJP.js → chunk-MJJNEYN2.js} +2 -2
- package/client-dist/{chunk-IGWJMU5B.js → chunk-NEGX5HML.js} +2 -2
- package/client-dist/{chunk-KHVPVWG7.js → chunk-NGFX2IRI.js} +2 -2
- package/client-dist/{chunk-E6DWNZNG.js → chunk-NH77DCAE.js} +2 -2
- package/client-dist/{chunk-CN76LOPU.js → chunk-NLYXP47X.js} +2 -2
- package/client-dist/chunk-P3IBAIKH.js +18 -0
- package/client-dist/chunk-P3IBAIKH.js.map +7 -0
- package/client-dist/{chunk-FID2RUXN.js → chunk-PBI4ECTK.js} +2 -2
- package/client-dist/{chunk-I4V3JDZC.js → chunk-QF6DLZ66.js} +2 -2
- package/client-dist/{chunk-ZLCRMQAK.js → chunk-QFD5FURA.js} +2 -2
- package/client-dist/{chunk-AQD6DEHR.js → chunk-QGUF3JAC.js} +2 -2
- package/client-dist/{chunk-IUCQWZ34.js → chunk-RKWECXJW.js} +2 -2
- package/client-dist/{chunk-ZW4M7CJ2.js → chunk-THHGTIDJ.js} +2 -2
- package/client-dist/{chunk-4AVVQGND.js → chunk-TZIBF6RE.js} +2 -2
- package/client-dist/{chunk-A3RMSX34.js → chunk-WI4NEQOH.js} +2 -2
- package/client-dist/{chunk-GNWPRBF5.js → chunk-X2RTRMJW.js} +2 -2
- package/client-dist/{chunk-DPXSAO23.js → chunk-X4RAIC74.js} +2 -2
- package/client-dist/{chunk-7MZ4N75F.js → chunk-XJDLUP33.js} +2 -2
- package/client-dist/{chunk-ZPE6HI3H.js → chunk-YR6NTERF.js} +2 -2
- package/client-dist/{chunk-P7Z33WJF.js → chunk-ZTXRLQE6.js} +2 -2
- package/client-dist/{consultant.module-J2JDO2WS.js → consultant.module-UR6QVGHX.js} +2 -2
- package/client-dist/{crd.module-SCW4OTC2.js → crd.module-VBL7AIQU.js} +2 -2
- package/client-dist/{dashboard.module-F55QGGVH.js → dashboard.module-NM4D5NW3.js} +2 -2
- package/client-dist/{do.module-7FRBSMAA.js → do.module-IILFMQ4A.js} +2 -2
- package/client-dist/{document-library.module-B6VXHRG7.js → document-library.module-2DB3MQAW.js} +2 -2
- package/client-dist/{embedding-eval.module-NPC3TEIO.js → embedding-eval.module-WSWE67IJ.js} +2 -2
- package/client-dist/{embedding-registry.module-LIVVEPZY.js → embedding-registry.module-SG3ZJKPN.js} +2 -2
- package/client-dist/{err.module-YOIHNORT.js → err.module-ALQB32AB.js} +2 -2
- package/client-dist/{feedback.module-V5KVPNYZ.js → feedback.module-Y2YSFOAJ.js} +2 -2
- package/client-dist/{host-runtime-mcp.module-PHWXY4PV.js → host-runtime-mcp.module-YZ6D6IOC.js} +2 -2
- package/client-dist/index.html +2 -2
- package/client-dist/{live-dev-pipeline.module-NGFZQDD3.js → live-dev-pipeline.module-2IEAOW5B.js} +2 -2
- package/client-dist/{logs.module-U22RMCHY.js → logs.module-6654WNYH.js} +2 -2
- package/client-dist/{main-E47XWCXH.js → main-P264JJGJ.js} +3 -3
- package/client-dist/{master-control-remote-poc.module-EBA63OMO.js → master-control-remote-poc.module-CKHW6KMI.js} +2 -2
- package/client-dist/{mobile-app.module-SRY6NVNR.js → mobile-app.module-LLBTOC54.js} +2 -2
- package/client-dist/{model-registry.module-UTATZZJR.js → model-registry.module-MLQXILLQ.js} +2 -2
- package/client-dist/oc.module-IBQUD7B7.js +3 -0
- package/client-dist/oc.module-IBQUD7B7.js.map +7 -0
- package/client-dist/{orc.module-MKANMSGC.js → orc.module-EHJZJMOJ.js} +2 -2
- package/client-dist/{project-management.module-4LL5UVW5.js → project-management.module-QW2OUHID.js} +2 -2
- package/client-dist/project-source-routed.module-ZRIGHKPE.js +2 -0
- package/client-dist/{scheduler.module-COHLY6ZF.js → scheduler.module-3ZZRNJUV.js} +2 -2
- package/client-dist/{session.module-JQCXS6ZJ.js → session.module-N6ITSDGW.js} +9 -9
- package/client-dist/session.module-N6ITSDGW.js.map +7 -0
- package/client-dist/{set.module-PUU5N4MJ.js → set.module-DQOBFJCH.js} +2 -2
- package/client-dist/{setup.module-HPV5JS3I.js → setup.module-R2TZA42H.js} +2 -2
- package/client-dist/{styles-XKQ3MDLE.css → styles-ETK3TL2N.css} +2 -2
- package/client-dist/{styles-XKQ3MDLE.css.map → styles-ETK3TL2N.css.map} +1 -1
- package/client-dist/{terminals.module-VIWV443T.js → terminals.module-4NZBPA65.js} +2 -2
- package/client-dist/{voice-notes-poc.module-ZNRSQ6XH.js → voice-notes-poc.module-UZUWDFZD.js} +2 -2
- package/client-dist/{wfs.module-CIG5GOVA.js → wfs.module-4GKFJ5LB.js} +2 -2
- package/package.json +1 -1
- package/client-dist/ca.module-FMCAOMOB.js +0 -5
- package/client-dist/ca.module-FMCAOMOB.js.map +0 -7
- package/client-dist/cc.module-T3NJWMZ5.js.map +0 -7
- package/client-dist/chunk-DB44BUNE.js +0 -18
- package/client-dist/chunk-DB44BUNE.js.map +0 -7
- package/client-dist/chunk-OXEKAYMY.js +0 -4
- package/client-dist/oc.module-SVMLBM6T.js +0 -3
- package/client-dist/oc.module-SVMLBM6T.js.map +0 -7
- package/client-dist/project-source-routed.module-DSUCIWHV.js +0 -2
- package/client-dist/session.module-JQCXS6ZJ.js.map +0 -7
- /package/client-dist/{agent-instances.module-VLGX2Z7Z.js.map → agent-instances.module-SZDIKSIR.js.map} +0 -0
- /package/client-dist/{cc-usage-dashboard.component-D6CNJHB5.js.map → cc-usage-dashboard.component-O4VDGFYY.js.map} +0 -0
- /package/client-dist/{chunk-7VUQTBJ2.js.map → chunk-2BZ4R623.js.map} +0 -0
- /package/client-dist/{chunk-YWW2VAZR.js.map → chunk-2V2O2JAL.js.map} +0 -0
- /package/client-dist/{chunk-3SYXOECP.js.map → chunk-3KB6O77F.js.map} +0 -0
- /package/client-dist/{chunk-PTS77H25.js.map → chunk-4ZEPJMCK.js.map} +0 -0
- /package/client-dist/{chunk-64K7CP3A.js.map → chunk-5ATMD4SY.js.map} +0 -0
- /package/client-dist/{chunk-W3HNVMKS.js.map → chunk-5GTIJO5T.js.map} +0 -0
- /package/client-dist/{chunk-PVLRUWUC.js.map → chunk-5UADYWSA.js.map} +0 -0
- /package/client-dist/{chunk-36LPXL3M.js.map → chunk-5Z43LN5U.js.map} +0 -0
- /package/client-dist/{chunk-3JQ2UHMM.js.map → chunk-6HMRYXOI.js.map} +0 -0
- /package/client-dist/{chunk-6227S2CN.js.map → chunk-6JLLWGQF.js.map} +0 -0
- /package/client-dist/{chunk-EGZ2ZMS3.js.map → chunk-72Z4K7WC.js.map} +0 -0
- /package/client-dist/{chunk-O6IRGFCX.js.map → chunk-7FGU7NN2.js.map} +0 -0
- /package/client-dist/{chunk-SJTW4HLQ.js.map → chunk-A6TWPSUA.js.map} +0 -0
- /package/client-dist/{chunk-2IYGO6RM.js.map → chunk-APYQ4B27.js.map} +0 -0
- /package/client-dist/{chunk-SAC7F2CB.js.map → chunk-AVH4FZ6Z.js.map} +0 -0
- /package/client-dist/{chunk-FOL6X3TR.js.map → chunk-B24YBK2I.js.map} +0 -0
- /package/client-dist/{chunk-5HYEA5IO.js.map → chunk-BGD62M7R.js.map} +0 -0
- /package/client-dist/{chunk-5DUG67IY.js.map → chunk-BKR6H3SJ.js.map} +0 -0
- /package/client-dist/{chunk-OVU6SA42.js.map → chunk-BWW75POL.js.map} +0 -0
- /package/client-dist/{chunk-WNQYZI4D.js.map → chunk-DC4EFEQU.js.map} +0 -0
- /package/client-dist/{chunk-SJ6KKDJT.js.map → chunk-EEOSB2P7.js.map} +0 -0
- /package/client-dist/{chunk-W7OH67K2.js.map → chunk-EVREGV4D.js.map} +0 -0
- /package/client-dist/{chunk-S46BSLUB.js.map → chunk-FD6QRJ7H.js.map} +0 -0
- /package/client-dist/{chunk-JLF2BDJU.js.map → chunk-G5CYHOH4.js.map} +0 -0
- /package/client-dist/{chunk-2ZTUWDCN.js.map → chunk-GB5ESWPG.js.map} +0 -0
- /package/client-dist/{chunk-ZZ7RWOLH.js.map → chunk-GHUVIUFQ.js.map} +0 -0
- /package/client-dist/{chunk-7YT7BGBD.js.map → chunk-GKKG77XM.js.map} +0 -0
- /package/client-dist/{chunk-ZZRTMXBT.js.map → chunk-GPAB3FYW.js.map} +0 -0
- /package/client-dist/{chunk-NCOPOED7.js.map → chunk-HK42XXL4.js.map} +0 -0
- /package/client-dist/{chunk-VQSRIIPK.js.map → chunk-KB4N3NQJ.js.map} +0 -0
- /package/client-dist/{chunk-7SCYMYZG.js.map → chunk-KM4V4ZQZ.js.map} +0 -0
- /package/client-dist/{chunk-XKS3GVP3.js.map → chunk-KYW5YFHW.js.map} +0 -0
- /package/client-dist/{chunk-QXIUTGNM.js.map → chunk-LUJCXLWT.js.map} +0 -0
- /package/client-dist/{chunk-3LPBF4AU.js.map → chunk-M5ZAOY2Y.js.map} +0 -0
- /package/client-dist/{chunk-TNGH7PJP.js.map → chunk-MJJNEYN2.js.map} +0 -0
- /package/client-dist/{chunk-IGWJMU5B.js.map → chunk-NEGX5HML.js.map} +0 -0
- /package/client-dist/{chunk-KHVPVWG7.js.map → chunk-NGFX2IRI.js.map} +0 -0
- /package/client-dist/{chunk-E6DWNZNG.js.map → chunk-NH77DCAE.js.map} +0 -0
- /package/client-dist/{chunk-CN76LOPU.js.map → chunk-NLYXP47X.js.map} +0 -0
- /package/client-dist/{chunk-FID2RUXN.js.map → chunk-PBI4ECTK.js.map} +0 -0
- /package/client-dist/{chunk-I4V3JDZC.js.map → chunk-QF6DLZ66.js.map} +0 -0
- /package/client-dist/{chunk-ZLCRMQAK.js.map → chunk-QFD5FURA.js.map} +0 -0
- /package/client-dist/{chunk-AQD6DEHR.js.map → chunk-QGUF3JAC.js.map} +0 -0
- /package/client-dist/{chunk-IUCQWZ34.js.map → chunk-RKWECXJW.js.map} +0 -0
- /package/client-dist/{chunk-ZW4M7CJ2.js.map → chunk-THHGTIDJ.js.map} +0 -0
- /package/client-dist/{chunk-4AVVQGND.js.map → chunk-TZIBF6RE.js.map} +0 -0
- /package/client-dist/{chunk-A3RMSX34.js.map → chunk-WI4NEQOH.js.map} +0 -0
- /package/client-dist/{chunk-GNWPRBF5.js.map → chunk-X2RTRMJW.js.map} +0 -0
- /package/client-dist/{chunk-DPXSAO23.js.map → chunk-X4RAIC74.js.map} +0 -0
- /package/client-dist/{chunk-7MZ4N75F.js.map → chunk-XJDLUP33.js.map} +0 -0
- /package/client-dist/{chunk-ZPE6HI3H.js.map → chunk-YR6NTERF.js.map} +0 -0
- /package/client-dist/{chunk-P7Z33WJF.js.map → chunk-ZTXRLQE6.js.map} +0 -0
- /package/client-dist/{consultant.module-J2JDO2WS.js.map → consultant.module-UR6QVGHX.js.map} +0 -0
- /package/client-dist/{crd.module-SCW4OTC2.js.map → crd.module-VBL7AIQU.js.map} +0 -0
- /package/client-dist/{dashboard.module-F55QGGVH.js.map → dashboard.module-NM4D5NW3.js.map} +0 -0
- /package/client-dist/{do.module-7FRBSMAA.js.map → do.module-IILFMQ4A.js.map} +0 -0
- /package/client-dist/{document-library.module-B6VXHRG7.js.map → document-library.module-2DB3MQAW.js.map} +0 -0
- /package/client-dist/{embedding-eval.module-NPC3TEIO.js.map → embedding-eval.module-WSWE67IJ.js.map} +0 -0
- /package/client-dist/{embedding-registry.module-LIVVEPZY.js.map → embedding-registry.module-SG3ZJKPN.js.map} +0 -0
- /package/client-dist/{err.module-YOIHNORT.js.map → err.module-ALQB32AB.js.map} +0 -0
- /package/client-dist/{feedback.module-V5KVPNYZ.js.map → feedback.module-Y2YSFOAJ.js.map} +0 -0
- /package/client-dist/{host-runtime-mcp.module-PHWXY4PV.js.map → host-runtime-mcp.module-YZ6D6IOC.js.map} +0 -0
- /package/client-dist/{live-dev-pipeline.module-NGFZQDD3.js.map → live-dev-pipeline.module-2IEAOW5B.js.map} +0 -0
- /package/client-dist/{logs.module-U22RMCHY.js.map → logs.module-6654WNYH.js.map} +0 -0
- /package/client-dist/{main-E47XWCXH.js.map → main-P264JJGJ.js.map} +0 -0
- /package/client-dist/{master-control-remote-poc.module-EBA63OMO.js.map → master-control-remote-poc.module-CKHW6KMI.js.map} +0 -0
- /package/client-dist/{mobile-app.module-SRY6NVNR.js.map → mobile-app.module-LLBTOC54.js.map} +0 -0
- /package/client-dist/{model-registry.module-UTATZZJR.js.map → model-registry.module-MLQXILLQ.js.map} +0 -0
- /package/client-dist/{orc.module-MKANMSGC.js.map → orc.module-EHJZJMOJ.js.map} +0 -0
- /package/client-dist/{project-management.module-4LL5UVW5.js.map → project-management.module-QW2OUHID.js.map} +0 -0
- /package/client-dist/{project-source-routed.module-DSUCIWHV.js.map → project-source-routed.module-ZRIGHKPE.js.map} +0 -0
- /package/client-dist/{scheduler.module-COHLY6ZF.js.map → scheduler.module-3ZZRNJUV.js.map} +0 -0
- /package/client-dist/{set.module-PUU5N4MJ.js.map → set.module-DQOBFJCH.js.map} +0 -0
- /package/client-dist/{setup.module-HPV5JS3I.js.map → setup.module-R2TZA42H.js.map} +0 -0
- /package/client-dist/{terminals.module-VIWV443T.js.map → terminals.module-4NZBPA65.js.map} +0 -0
- /package/client-dist/{voice-notes-poc.module-ZNRSQ6XH.js.map → voice-notes-poc.module-UZUWDFZD.js.map} +0 -0
- /package/client-dist/{wfs.module-CIG5GOVA.js.map → wfs.module-4GKFJ5LB.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["src/app/_modules/external-sessions/_modules/cursor-acp/_collections/ca-input-storage.util.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_services/ca-detail-ui.data-service.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-dashboard/ca-dashboard.component.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-dashboard/ca-dashboard.component.html", "src/app/_modules/external-sessions/_modules/cursor-acp/_pipes/ca-status-color.pipe.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-shell/ca-shell.component.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-shell/ca-shell.component.html", "src/app/_modules/external-sessions/_modules/cursor-acp/_collections/ca-default-selection.util.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_collections/utils/console-display/ca-console-display-filter.util.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_collections/utils/console-display/ca-console-pair-tool-lifecycle.util.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_collections/utils/console-display/ca-console-to-bubble-view.util.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-console/ca-console.component.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-console/ca-console.component.html", "src/app/_modules/external-sessions/_modules/cursor-acp/_pipes/ca-event-type-color.pipe.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_pipes/ca-json-format.pipe.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_collections/utils/console-display/ca-timeline-row-display.util.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_pipes/ca-timeline-stream-row-brief.pipe.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_pipes/ca-timeline-stream-row-clipboard-text.pipe.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_pipes/ca-timeline-stream-row-sequence-label.pipe.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-timeline/ca-timeline.component.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-timeline/ca-timeline.component.html", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-metadata/ca-metadata.component.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-metadata/ca-metadata.component.html", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-detail/ca-detail.component.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_components/ccap-ca-detail/ca-detail.component.html", "src/app/_modules/external-sessions/_modules/cursor-acp/ca.module.ts"],
|
|
4
|
+
"sourcesContent": ["import { Shr_LocalStoragePersistence_Util } from '../../../../shared/_collections/utils/storage/shr-local-storage-persistence.util';\nimport { SHR_PromptDraftStorage_Util } from '../../../../shared/_collections/utils/shr-prompt-draft-storage.util';\n\n/** localStorage prefix — CA session UI. */\nconst STORAGE_PREFIX: string = 'ccap-caSession';\n\n/**\n * CA session felület localStorage (panel, piszkozat, szűrő).\n *\n * REQ-UI-MENU-STATE-001 (cycle 446): a metódusok a shared\n * `Shr_LocalStoragePersistence_Util`-ra delegálnak (a prompt-draft hármas a\n * `SHR_PromptDraftStorage_Util`-ra). LocalStorage kulcs-formátum változatlan\n * (`ccap-caSession:*` prefix) — backward-compat a meglévő user-pref-ekkel.\n */\nexport class CA_InputStorage_Util {\n\n static saveStatusFilter(value: string): void {\n Shr_LocalStoragePersistence_Util.writeString(`${STORAGE_PREFIX}:statusFilter`, value);\n }\n\n static loadStatusFilter(): string {\n return Shr_LocalStoragePersistence_Util.readString(`${STORAGE_PREFIX}:statusFilter`) ?? '';\n }\n\n static saveShowArchived(isArchived: boolean): void {\n Shr_LocalStoragePersistence_Util.writeBoolean(`${STORAGE_PREFIX}:showArchived`, isArchived);\n }\n\n static loadShowArchived(): boolean {\n return Shr_LocalStoragePersistence_Util.readBoolean(`${STORAGE_PREFIX}:showArchived`, false);\n }\n\n static saveLastWorkspacePath(value: string): void {\n Shr_LocalStoragePersistence_Util.writeString(`${STORAGE_PREFIX}:lastWorkspacePath`, value);\n }\n\n static loadLastWorkspacePath(): string {\n return Shr_LocalStoragePersistence_Util.readString(`${STORAGE_PREFIX}:lastWorkspacePath`) ?? '';\n }\n\n /** Utolsó használt session label mentése. */\n static saveLastLabel(value: string): void {\n Shr_LocalStoragePersistence_Util.writeString(`${STORAGE_PREFIX}:lastLabel`, value);\n }\n\n /** Utolsó használt session label betöltése. */\n static loadLastLabel(): string {\n return Shr_LocalStoragePersistence_Util.readString(`${STORAGE_PREFIX}:lastLabel`) ?? '';\n }\n\n static savePromptDraft(sessionId: string, content: string): void {\n SHR_PromptDraftStorage_Util.saveDraft(STORAGE_PREFIX, sessionId, content);\n }\n\n static loadPromptDraft(sessionId: string): string {\n return SHR_PromptDraftStorage_Util.loadDraft(STORAGE_PREFIX, sessionId);\n }\n\n static clearPromptDraft(sessionId: string): void {\n SHR_PromptDraftStorage_Util.clearDraft(STORAGE_PREFIX, sessionId);\n }\n\n /** REQ-UI-SES-LIST-DRAFT-INDICATOR-001 (cycle 902): igaz, ha el-nem-küldött piszkozat van. */\n static hasPromptDraft(sessionId: string): boolean {\n return SHR_PromptDraftStorage_Util.hasDraft(STORAGE_PREFIX, sessionId);\n }\n\n static savePanelOpen(panelKey: string, isOpen: boolean): void {\n Shr_LocalStoragePersistence_Util.writeBoolean(`${STORAGE_PREFIX}:panelOpen:${panelKey}`, isOpen);\n }\n\n static loadPanelOpen(panelKey: string, defaultOpen: boolean): boolean {\n return Shr_LocalStoragePersistence_Util.readBoolean(\n `${STORAGE_PREFIX}:panelOpen:${panelKey}`,\n defaultOpen,\n );\n }\n\n static savePanelWidth(panelKey: string, width: number): void {\n Shr_LocalStoragePersistence_Util.writeNumber(`${STORAGE_PREFIX}:panelWidth:${panelKey}`, width);\n }\n\n static loadPanelWidth(panelKey: string, defaultWidth: number): number {\n return Shr_LocalStoragePersistence_Util.readNumber(\n `${STORAGE_PREFIX}:panelWidth:${panelKey}`,\n defaultWidth,\n );\n }\n\n static saveLastSessionId(sessionId: string): void {\n Shr_LocalStoragePersistence_Util.writeString(`${STORAGE_PREFIX}:lastSessionId`, sessionId);\n }\n\n static loadLastSessionId(): string {\n return Shr_LocalStoragePersistence_Util.readString(`${STORAGE_PREFIX}:lastSessionId`) ?? '';\n }\n\n /** Agent / tool progress (`status-update`) sorok megjelenítése — CC Session `showStatusUpdates` minta. */\n static saveShowAgentUpdates(value: boolean): void {\n Shr_LocalStoragePersistence_Util.writeBoolean(`${STORAGE_PREFIX}:showAgentUpdates`, value);\n }\n\n /** Alapértelmezés: bekapcsolva (mint CC Session). */\n static loadShowAgentUpdates(): boolean {\n return Shr_LocalStoragePersistence_Util.readBoolean(`${STORAGE_PREFIX}:showAgentUpdates`, true);\n }\n\n /** Session status hisztori (lifecycle status változások) megjelenítés — CC Session minta. */\n static saveShowSessionStatus(value: boolean): void {\n Shr_LocalStoragePersistence_Util.writeBoolean(`${STORAGE_PREFIX}:showSessionStatus`, value);\n }\n\n /** Alapértelmezés: bekapcsolva. */\n static loadShowSessionStatus(): boolean {\n return Shr_LocalStoragePersistence_Util.readBoolean(`${STORAGE_PREFIX}:showSessionStatus`, true);\n }\n}\n", "import { inject, Injectable, signal } from '@angular/core';\n\nimport { CursorAcp_DataService } from './cursor-acp.data-service';\nimport { CA_InputStorage_Util } from '../_collections/ca-input-storage.util';\n\n/**\n * CA session detail chrome állapot és akciók (SSOT).\n * A shell top bar és a detail layout ugyanazokat a panel-toggle és terminate signal-okat használja.\n * CC Session DetailUi minta alapján.\n */\n@Injectable({ providedIn: 'root' })\nexport class CA_DetailUi_DataService {\n\n private readonly ca_DS: CursorAcp_DataService =\n inject(CursorAcp_DataService);\n\n /**\n * Timeline panel nyitva/zárva (localStorage-ból betöltve).\n * REQ-CC-PANELS-DEFAULT-CLOSED-001 (cycle 437, cycle 435 follow-up): default\n * `false` (zárva), UX konzisztencia a CC Sessionnel. localStorage user-pref\n * felülírja, csak no-stored-value (első használat) esetén érvényes a default.\n */\n readonly isTimelinePanelOpen_$ = signal<boolean>(\n CA_InputStorage_Util.loadPanelOpen('timeline', false),\n );\n\n /**\n * Metadata panel nyitva/zárva (localStorage-ból betöltve).\n * REQ-CC-PANELS-DEFAULT-CLOSED-001 (cycle 437, cycle 435 follow-up): default `false` (zárva).\n */\n readonly isMetadataPanelOpen_$ = signal<boolean>(\n CA_InputStorage_Util.loadPanelOpen('metadata', false),\n );\n\n /** Terminate folyamatban. */\n readonly isTerminating_$ = signal<boolean>(false);\n\n /** Stop execution folyamatban. */\n readonly isStopping_$ = signal<boolean>(false);\n\n /** Session status hisztori megjelenítés (lifecycle status változások). */\n readonly isShowSessionStatus_$ = signal<boolean>(\n CA_InputStorage_Util.loadShowSessionStatus(),\n );\n\n /** Tool call `in_progress` / Agent update sorok — toolbar toggle + localStorage. */\n readonly isShowAgentUpdates_$ = signal<boolean>(\n CA_InputStorage_Util.loadShowAgentUpdates(),\n );\n\n /** Timeline panel toggle — állapot mentése localStorage-ba. */\n handleToggleTimeline(): void {\n const newValue: boolean = !this.isTimelinePanelOpen_$();\n this.isTimelinePanelOpen_$.set(newValue);\n CA_InputStorage_Util.savePanelOpen('timeline', newValue);\n }\n\n /** Metadata panel toggle — állapot mentése localStorage-ba. */\n handleToggleMetadata(): void {\n const newValue: boolean = !this.isMetadataPanelOpen_$();\n this.isMetadataPanelOpen_$.set(newValue);\n CA_InputStorage_Util.savePanelOpen('metadata', newValue);\n }\n\n /** Session status hisztori toggle. */\n handleToggleSessionStatus(): void {\n const newValue: boolean = !this.isShowSessionStatus_$();\n this.isShowSessionStatus_$.set(newValue);\n CA_InputStorage_Util.saveShowSessionStatus(newValue);\n }\n\n /** Agent updates megjelenítés — CC Session „Agent updates” viselkedés. */\n handleToggleAgentUpdates(): void {\n const newValue: boolean = !this.isShowAgentUpdates_$();\n this.isShowAgentUpdates_$.set(newValue);\n CA_InputStorage_Util.saveShowAgentUpdates(newValue);\n }\n\n /**\n * Futó execution leállítása az aktuális session-re (stop gomb).\n * A session megmarad, újra promptolható.\n */\n async handleStopExecution(): Promise<void> {\n const selected = this.ca_DS.selectedSession_$();\n if (!selected || this.isStopping_$()) {\n return;\n }\n const sessionId: string = selected.sessionId ?? '';\n if (!sessionId) {\n return;\n }\n\n this.isStopping_$.set(true);\n try {\n await this.ca_DS.stopExecution(sessionId);\n } catch {\n // Hiba már a data service-ben kezelve (global error)\n } finally {\n this.isStopping_$.set(false);\n }\n }\n\n /**\n * Session terminate az aktuálisan kiválasztott detail session-re.\n * Hiba esetén a data service global error-t küld — itt csak a loading state-et kezeljük.\n */\n async handleTerminate(): Promise<void> {\n const selected = this.ca_DS.selectedSession_$();\n if (!selected || this.isTerminating_$()) {\n return;\n }\n const sessionId: string = selected.sessionId ?? '';\n if (!sessionId) {\n return;\n }\n\n this.isTerminating_$.set(true);\n try {\n await this.ca_DS.terminateSession(sessionId);\n } catch {\n // Hiba már a data service-ben kezelve (global error)\n } finally {\n this.isTerminating_$.set(false);\n }\n }\n}\n", "import { Component, computed, effect, inject, OnInit, output, signal, untracked } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { CCAP_TextSearch_Util } from '../../../../../../_collections/utils/ccap-text-search.util';\nimport { CCAP_GlobalError_ControlService } from '../../../../../../_services/control-services/ccap-global-error.control-service';\nimport { CA_ListItem_Interface } from '../../_models/interfaces/ca-view.interface';\nimport { CursorAcp_DataService } from '../../_services/cursor-acp.data-service';\nimport { ExS_NewAgentWorkspace_DataService } from '../../../../_services/exs-new-agent-workspace.data-service';\nimport { ExS_InstanceContext_DataService } from '../../../../_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 { CA_InputStorage_Util } from '../../_collections/ca-input-storage.util';\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 * CA session lista — mirror alapú, sync gombbal.\n */\n@Component({\n selector: 'app-ccap-ca-dashboard',\n templateUrl: './ca-dashboard.component.html',\n host: { class: 'flex flex-col flex-1 min-h-0 overflow-hidden' },\n})\n/** CA_Dashboard_Component class. */\nexport class CA_Dashboard_Component implements OnInit {\n\n readonly ca_DS: CursorAcp_DataService = inject(CursorAcp_DataService);\n\n readonly newAgentSessionWorkspace_DS: ExS_NewAgentWorkspace_DataService =\n inject(ExS_NewAgentWorkspace_DataService);\n\n private readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n\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\n /** REQ-SES-CRD-IND-001 slice 2 (cycle 191): coordinator-indicator a session row-on (compass ikon). */\n readonly coordinator_DS: Coordinator_DataService =\n inject(Coordinator_DataService);\n\n private readonly router: Router = inject(Router);\n\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\n /**\n * Instance-szelektor változásra automatikus session lista újratöltés.\n * Az effect figyeli az activeCcapId_$-t — ha változik, újratölti a listát.\n */\n private readonly instanceChangeEffect = effect((): void => {\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const includeArchived: boolean = this.showArchived_$();\n if (ccapId) {\n untracked((): void => {\n void this.ca_DS.loadSessions({\n includeArchived: includeArchived || undefined,\n });\n });\n }\n });\n\n readonly statusFilter_$ = signal<string>('');\n readonly searchQuery_$ = signal<string>('');\n readonly isCreateDialogOpen_$ = signal<boolean>(false);\n readonly newSessionWorkspacePath_$ = signal<string>('');\n readonly newSessionLabel_$ = signal<string>('');\n /** Kiválasztott path selector érték ('custom' ha kézi bevitel). */\n readonly selectedPathOption_$ = signal<string>('');\n readonly isCreating_$ = signal<boolean>(false);\n /** Create POST hiba — inline error-display a modalban (globális bubble a modal mögé kerülhet). */\n readonly createSessionError_$ = signal<unknown | null>(null);\n readonly showArchived_$ = signal<boolean>(false);\n readonly isSyncing_$ = signal<boolean>(false);\n\n /** Kiadja, amikor a user egy session-re kattint — a shell mobil nézeten bezárja a sidebar-t. */\n readonly sessionSelected = output<void>();\n\n ngOnInit(): void {\n const savedFilter: string = CA_InputStorage_Util.loadStatusFilter();\n if (savedFilter) {\n this.statusFilter_$.set(savedFilter);\n }\n this.showArchived_$.set(CA_InputStorage_Util.loadShowArchived());\n // BUG-INST-SES-REFRESH-001 (cycle 434, cycle 433 follow-up): a CC dashboard\n // mintát követjük — a loadSessions a peiContext sessionStorage restore\n // UTÁN fut, hogy cross-instance refresh esetén az ccapId helyes legyen\n // a query-ben. Az instanceChangeEffect re-load-ja megszűnik flicker\n // előfutamot adni.\n void this.peiContext_DS.ensureInitialized().then((): void => {\n void this.ca_DS.loadSessions({ includeArchived: this.showArchived_$() });\n });\n // REQ-SES-SCH-IND-001: schedule lookup-set populálása.\n void this.scheduledJobs_DS.loadAll();\n // REQ-SES-CRD-IND-001 slice 2: coordinator lookup-set populálása.\n void this.coordinator_DS.loadAllCoordinatorsForManagementPage();\n }\n\n handleStatusFilterChange(value: string): void {\n this.statusFilter_$.set(value);\n CA_InputStorage_Util.saveStatusFilter(value);\n }\n\n handleToggleShowArchived(): void {\n const newValue: boolean = !this.showArchived_$();\n this.showArchived_$.set(newValue);\n CA_InputStorage_Util.saveShowArchived(newValue);\n void this.ca_DS.loadSessions({ includeArchived: newValue });\n }\n\n readonly filteredSessions_$ = computed((): CA_ListItem_Interface[] => {\n const q: string = this.searchQuery_$();\n const st: string = this.statusFilter_$().trim();\n const filtered: CA_ListItem_Interface[] = this.ca_DS.sessions_$().filter(\n (s: CA_ListItem_Interface): boolean => {\n if (!s.sessionId) {\n return false;\n }\n if (st && s.status !== st) {\n return false;\n }\n // REQ-SE-001: ékezet- és kisbetű/nagybetű-érzéketlen match (label + workspacePath + lastPrompt).\n return CCAP_TextSearch_Util.includesText(s.label, q)\n || CCAP_TextSearch_Util.includesText(s.workspacePath, q)\n || CCAP_TextSearch_Util.includesText(s.lastPrompt, q);\n },\n );\n return [...filtered].sort(\n (a: CA_ListItem_Interface, b: CA_ListItem_Interface): number =>\n CA_Dashboard_Component.listFreshnessSortMs(b)\n - CA_Dashboard_Component.listFreshnessSortMs(a),\n );\n });\n\n /**\n * Kliens oldali frissesség (ISO lastActivityAt) — szerver rendezés mellett biztonsági háló.\n */\n private static listFreshnessSortMs(row: CA_ListItem_Interface): number {\n const iso: string | undefined = row.lastActivityAt;\n if (typeof iso === 'string' && iso.length > 0) {\n const t: number = Date.parse(iso);\n if (!isNaN(t)) {\n return t;\n }\n }\n return 0;\n }\n\n /** Szűrt session lista → shared list row view model mapping.\n REQ-SES-SCH-IND-001: hasSchedule flag a `scheduledJobs_DS.scheduledSessionIds_$`-ből.\n REQ-SES-CRD-IND-001 slice 2: hasCoordinator flag a `coordinator_DS.coordinatedSessionIds_$`-ből. */\n readonly sessionRowViews_$ = 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.filteredSessions_$().map((s: CA_ListItem_Interface): S_SessionListRowView_Interface => ({\n id: s.sessionId ?? '',\n label: s.label || s.sessionId || '',\n status: s.status ?? '',\n statusColorClass: S_SessionStatusColor_Util.resolve(s.status),\n workspacePath: s.workspacePath,\n isArchived: !!s.isArchived,\n lastActivityAt: s.lastActivityAt,\n promptCount: s.promptCount,\n isRunning: S_SessionStatusColor_Util.isRunning(s.status),\n hasSchedule: scheduledIds.has(s.sessionId ?? ''),\n hasCoordinator: coordinatedIds.has(s.sessionId ?? ''),\n // REQ-UI-SES-LIST-DRAFT-INDICATOR-001 (cycle 902).\n hasDraft: CA_InputStorage_Util.hasPromptDraft(s.sessionId ?? ''),\n }));\n },\n );\n\n handleSelectSession(sessionId: string): void {\n if (!sessionId) {\n return;\n }\n // Cycle 785c: instance kontextus a route-ban.\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const target: string[] = ccapId\n ? ['/ca-session', ccapId, sessionId]\n : ['/ca-session', sessionId];\n void this.router.navigate(target);\n this.sessionSelected.emit();\n }\n\n /**\n * Create dialog: path opciók SSOT refresh, majd default vagy utolsó mentett path előtöltés.\n */\n async handleOpenCreateDialog(): Promise<void> {\n this.createSessionError_$.set(null);\n this.isCreateDialogOpen_$.set(true);\n await this.newAgentSessionWorkspace_DS.refreshWorkspacePathPickerOptions();\n\n if (!this.newSessionWorkspacePath_$()) {\n const fallback: string = this.newAgentSessionWorkspace_DS.resolveInitialWorkspacePath({\n lastWorkspacePath: CA_InputStorage_Util.loadLastWorkspacePath(),\n });\n if (fallback) {\n this.newSessionWorkspacePath_$.set(fallback);\n this.selectedPathOption_$.set(fallback);\n }\n }\n\n // Label előtöltés localStorage-ból\n const savedLabel: string = CA_InputStorage_Util.loadLastLabel();\n if (savedLabel) {\n this.newSessionLabel_$.set(savedLabel);\n }\n }\n\n /**\n * Path selector változás — 'custom' esetén a szövegmezőt nem írjuk felül.\n */\n handlePathOptionChange(value: string): void {\n this.selectedPathOption_$.set(value);\n if (value && value !== 'custom') {\n this.newSessionWorkspacePath_$.set(value);\n }\n }\n\n handleCloseCreateDialog(): void {\n this.createSessionError_$.set(null);\n this.isCreateDialogOpen_$.set(false);\n this.newSessionWorkspacePath_$.set('');\n this.newSessionLabel_$.set('');\n this.selectedPathOption_$.set('');\n }\n\n async handleConfirmCreate(): Promise<void> {\n const ws: string = this.newSessionWorkspacePath_$().trim();\n if (!ws) {\n return;\n }\n this.isCreating_$.set(true);\n try {\n CA_InputStorage_Util.saveLastWorkspacePath(ws);\n CA_InputStorage_Util.saveLastLabel(this.newSessionLabel_$().trim());\n const newId: string = await this.ca_DS.createSession({\n workspacePath: ws,\n label: this.newSessionLabel_$().trim() || undefined,\n });\n this.handleCloseCreateDialog();\n if (newId.length > 0) {\n // Cycle 785c: instance kontextus a route-ban.\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const target: string[] = ccapId\n ? ['/ca-session', ccapId, newId]\n : ['/ca-session', newId];\n void this.router.navigate(target);\n }\n } catch (err: unknown) {\n this.createSessionError_$.set(err);\n } finally {\n this.isCreating_$.set(false);\n }\n }\n\n // ── Context menu ─────────────────────────────────────────────\n\n /** Kontextmenü session-je (null = zárt). */\n readonly ctxMenuSession_$ = signal<CA_ListItem_Interface | null>(null);\n\n /** Kontextmenü pozíció. */\n readonly ctxMenuPos_$ = signal<{ x: number; y: number }>({ x: 0, y: 0 });\n\n /** Shared list row contextMenu output kezelése. */\n handleRowContextMenu(payload: { event: MouseEvent; id: string }): void {\n const session: CA_ListItem_Interface | undefined =\n this.filteredSessions_$().find(\n (s: CA_ListItem_Interface): boolean => s.sessionId === 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 /** REQ-SES-CTX-COPY-LINK-001: Copy link gomb feedback állapot. */\n readonly linkCopyState_$ = signal<'idle' | 'copied' | 'failed'>('idle');\n\n /** Kontextmenü bezárása (copy-link feedback állapot is törlődik). */\n handleCloseCtxMenu(): void {\n this.ctxMenuSession_$.set(null);\n this.linkCopyState_$.set('idle');\n }\n\n /**\n * REQ-SES-CTX-COPY-LINK-001: Copy link a CA Session-höz —\n * `${origin}/ca-session[/<ccapId>]/<sessionId>`.\n */\n async handleCtxCopyLink(): Promise<void> {\n const session: CA_ListItem_Interface | null = this.ctxMenuSession_$();\n if (!session?.sessionId) {\n return;\n }\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const path: string = ccapId\n ? `/ca-session/${ccapId}/${session.sessionId}`\n : `/ca-session/${session.sessionId}`;\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 /**\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 /** Archive/Unarchive a kontextmenüből. */\n async handleCtxToggleArchive(): Promise<void> {\n const session: CA_ListItem_Interface | null = this.ctxMenuSession_$();\n if (!session?.sessionId) {\n return;\n }\n const sessionId: string = session.sessionId;\n this.handleCloseCtxMenu();\n await this.handleArchiveRow(sessionId);\n }\n\n async handleSyncFromAgent(): Promise<void> {\n this.isSyncing_$.set(true);\n try {\n await this.ca_DS.syncFromAgent();\n } finally {\n this.isSyncing_$.set(false);\n }\n }\n\n /**\n * Lista sor archívum toggle — id alapján visszakeresi a session-t.\n */\n async handleArchiveRow(sessionId: string): Promise<void> {\n if (!sessionId) {\n return;\n }\n const session: CA_ListItem_Interface | undefined =\n this.filteredSessions_$().find(\n (s: CA_ListItem_Interface): boolean => s.sessionId === sessionId,\n );\n if (!session) {\n return;\n }\n const wasActive: boolean = this.ca_DS.activeSessionId_$() === sessionId;\n const nextArchived: boolean = session.isArchived !== true;\n try {\n await this.ca_DS.setSessionArchived({\n sessionId: sessionId,\n isArchived: nextArchived,\n });\n if (wasActive && nextArchived && !this.showArchived_$()) {\n void this.router.navigate(['/ca-session']);\n }\n } catch {\n // globális error a data-service-ben\n }\n }\n}\n", "<div class=\"shrink-0 px-2 py-1.5 border-b border-neonDefault flex flex-col gap-1\">\n <div class=\"flex items-center gap-1\">\n <span class=\"text-xs font-semibold text-neutral-300 flex-1\">CA session</span>\n <button\n type=\"button\"\n class=\"px-1.5 py-0.5 text-xs border border-neutral-600 text-neutral-400 hover:bg-neutral-700 rounded shrink-0\"\n [disabled]=\"isSyncing_$()\"\n (click)=\"handleSyncFromAgent()\"\n title=\"Sync session list from Agent\">\n Sync\n </button>\n <button\n type=\"button\"\n class=\"px-1.5 py-0.5 text-xs border border-neonDefault text-neutral-300 hover:bg-neutral-700 rounded shrink-0\"\n (click)=\"handleOpenCreateDialog()\">\n + New\n </button>\n </div>\n @if (ca_DS.mirrorRuntime_$(); as rt) {\n <div class=\"flex flex-wrap items-center gap-1 text-[9px] text-neutral-500\">\n <span\n class=\"px-1 py-0.5 rounded\"\n [class.bg-emerald-950]=\"rt.isAcpConnected\"\n [class.text-emerald-300]=\"rt.isAcpConnected\"\n [class.bg-neutral-800]=\"!rt.isAcpConnected\"\n [class.text-neutral-500]=\"!rt.isAcpConnected\">\n ACP {{ rt.isAcpConnected ? 'connected' : 'offline' }}\n </span>\n <span\n class=\"px-1 py-0.5 rounded\"\n [class.bg-sky-950]=\"rt.loadSessionSupported\"\n [class.text-sky-300]=\"rt.loadSessionSupported\"\n [class.bg-neutral-800]=\"!rt.loadSessionSupported\"\n [class.text-neutral-500]=\"!rt.loadSessionSupported\">\n session/load {{ rt.loadSessionSupported ? 'yes' : 'no' }}\n </span>\n </div>\n }\n</div>\n\n<div class=\"shrink-0 px-2 py-1.5 border-b border-neutral-800 flex flex-col gap-1\">\n <input\n type=\"text\"\n placeholder=\"Search…\"\n class=\"w-full px-2 py-1 text-xs bg-neutral-800 border border-neutral-700 text-neutral-200 rounded\"\n [value]=\"searchQuery_$()\"\n (input)=\"searchQuery_$.set($any($event.target).value)\" />\n <div class=\"flex items-center gap-1\">\n <select\n class=\"flex-1 px-1.5 py-0.5 text-xs bg-neutral-800 border border-neutral-700 text-neutral-300 rounded\"\n [value]=\"statusFilter_$()\"\n (change)=\"handleStatusFilterChange($any($event.target).value)\">\n <option value=\"\">All statuses</option>\n <option value=\"waiting-input\">Waiting</option>\n <option value=\"running\">Running</option>\n <option value=\"connecting\">Connecting</option>\n <option value=\"disconnected\">Disconnected</option>\n <option value=\"errored\">Errored</option>\n <option value=\"completed\">Completed</option>\n <option value=\"terminated\">Terminated</option>\n </select>\n <button\n type=\"button\"\n class=\"px-1.5 py-0.5 text-xs border rounded shrink-0\"\n [class]=\"showArchived_$() ? 'border-ccapAccent/60 text-ccapAccent/80 bg-ccapAccent/10' : 'border-neutral-700 text-neutral-500'\"\n (click)=\"handleToggleShowArchived()\">\n Arch\n </button>\n </div>\n</div>\n\n@if (ca_DS.sessionsLoadError_$()) {\n <div class=\"shrink-0 px-2 py-1.5\">\n <app-ccap-error-display\n [error]=\"ca_DS.sessionsLoadError_$()\"\n sourceLabelOverride=\"CA session list\"\n class=\"block\" />\n </div>\n}\n\n<div class=\"flex-1 overflow-y-auto\">\n @if (ca_DS.sessionsLoading_$()) {\n <div class=\"flex items-center justify-center py-8 text-xs text-neutral-500\">Loading…</div>\n } @else if (!filteredSessions_$().length && !ca_DS.sessionsLoadError_$()) {\n <div class=\"flex flex-col items-center justify-center py-8 gap-2\">\n <span class=\"text-xs text-neutral-500\">No sessions</span>\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border border-neonDefault text-neutral-300 rounded\"\n (click)=\"handleOpenCreateDialog()\">\n Create session\n </button>\n </div>\n } @else {\n <!-- REQ-UI-SSEL-001 Slice 3: közös S_SessionSelect_Component.\n Jelenleg a CA dashboard szöveges keresést nem mutat külön (a parent\n filter chain végzi a szűrést), ezért `hideSearch=true`. -->\n <app-s-session-select\n kind=\"ca\"\n [rows]=\"sessionRowViews_$()\"\n [activeId]=\"ca_DS.activeSessionId_$()\"\n [showWorkspacePath]=\"true\"\n [showPromptCount]=\"true\"\n [hideSearch]=\"true\"\n (selected)=\"handleSelectSession($event)\"\n (contextMenu)=\"handleRowContextMenu($event)\"\n (scheduleIndicatorClicked)=\"handleScheduleIndicatorClick($event)\"\n (coordinatorIndicatorClicked)=\"handleCoordinatorIndicatorClick($event)\" />\n }\n</div>\n\n<app-s-modal [isOpen]=\"isCreateDialogOpen_$()\"\n [title]=\"'New CA session'\"\n [maxWidth]=\"'lg'\"\n [bodyFlexColumn]=\"true\"\n [closeOnBackdropClick]=\"false\"\n (closed)=\"handleCloseCreateDialog()\">\n <div class=\"flex flex-col flex-1 min-h-0 gap-3\">\n <div class=\"shrink-0\">\n <label class=\"text-xs text-neutral-400 block mb-1\">Workspace Path *</label>\n @if (newAgentSessionWorkspace_DS.workspacePathPickerOptions_$().length) {\n <select\n class=\"w-full bg-neutral-900 text-neutral-300 text-xs rounded px-2 py-1.5 border border-neonDefault focus:border-neonCyan focus:outline-none mb-1.5\"\n [ngModel]=\"selectedPathOption_$()\"\n (ngModelChange)=\"handlePathOptionChange($event)\">\n <option value=\"\" disabled>Select a path...</option>\n @for (opt of newAgentSessionWorkspace_DS.workspacePathPickerOptions_$(); track opt.path) {\n <option [value]=\"opt.path\">{{ opt.label }} — {{ opt.path }}</option>\n }\n <option value=\"custom\">Custom path...</option>\n </select>\n }\n <input\n type=\"text\"\n class=\"w-full bg-neutral-900 text-neutral-200 text-sm rounded px-2 py-1.5 border border-neonDefault focus:border-neonCyan focus:outline-none\"\n placeholder=\"/path/to/workspace\"\n [ngModel]=\"newSessionWorkspacePath_$()\"\n (ngModelChange)=\"newSessionWorkspacePath_$.set($event)\" />\n </div>\n\n <div class=\"shrink-0\">\n <label class=\"text-xs text-neutral-400 block mb-1\">Label (optional)</label>\n <input\n type=\"text\"\n class=\"w-full bg-neutral-900 text-neutral-200 text-sm rounded px-2 py-1.5 border border-neonDefault focus:border-neonCyan focus:outline-none\"\n placeholder=\"My session\"\n [ngModel]=\"newSessionLabel_$()\"\n (ngModelChange)=\"newSessionLabel_$.set($event)\" />\n </div>\n\n @if (createSessionError_$()) {\n <div class=\"flex-1 min-h-0 overflow-y-auto overscroll-contain rounded-md border border-neonRed/30 pr-0.5\">\n <app-ccap-error-display\n [error]=\"createSessionError_$()\"\n sourceLabelOverride=\"New CA session\"\n class=\"block min-h-0\" />\n </div>\n }\n\n <div class=\"shrink-0 flex justify-end gap-2 pt-2 border-t border-neutral-700/80\">\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs border border-neonDefault text-neutral-300 hover:bg-neutral-700 rounded transition-colors\"\n [disabled]=\"isCreating_$()\"\n (click)=\"handleCloseCreateDialog()\">\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs border border-ccapAccent text-ccapAccent hover:bg-ccapAccent hover:text-white disabled:opacity-50 rounded transition-colors\"\n [disabled]=\"isCreating_$() || !newSessionWorkspacePath_$()\"\n (click)=\"handleConfirmCreate()\">\n {{ isCreating_$() ? 'Creating...' : 'Create' }}\n </button>\n </div>\n </div>\n</app-s-modal>\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. -->\n<app-crd-info-popup\n [sessionId]=\"coordinatorPopupSessionId_$()\"\n [isOpen]=\"coordinatorPopupSessionId_$() !== null\"\n (closed)=\"handleCloseCoordinatorPopup()\" />\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-[140px] bg-neutral-900 border border-neutral-700 rounded-lg shadow-xl py-1 text-xs\"\n [style.left.px]=\"ctxMenuPos_$().x\"\n [style.top.px]=\"ctxMenuPos_$().y\">\n <!-- REQ-SES-CTX-COPY-LINK-001: Copy link — session deep-link a clipboard-ra\n (`${origin}/ca-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 <button\n class=\"w-full text-left px-3 py-1.5 text-neutral-300 hover:bg-neutral-800 transition-colors\"\n (click)=\"handleCtxToggleArchive()\">\n {{ ctxSession.isArchived ? 'Unarchive' : 'Archive' }}\n </button>\n </div>\n}\n", "import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * CA session status → Tailwind badge class.\n */\n@Pipe({ name: 'caSessionStatusColor' })\nexport class CA_StatusColor_Pipe implements PipeTransform {\n\n transform(status: string | undefined): string {\n switch (status ?? '') {\n case 'running':\n return 'bg-yellow-500';\n case 'waiting-input':\n return 'bg-green-500';\n case 'connecting':\n return 'bg-yellow-500';\n case 'creating':\n return 'bg-yellow-400';\n case 'completed':\n return 'bg-blue-500';\n case 'errored':\n return 'bg-red-500';\n case 'terminated':\n return 'bg-red-700';\n case 'disconnected':\n return 'bg-amber-700';\n default:\n return 'bg-neutral-600';\n }\n }\n}\n", "import { Component, computed, inject, OnInit, signal, Signal } from '@angular/core';\n\nimport { CA_ListItem_Interface } from '../../_models/interfaces/ca-view.interface';\nimport { CursorAcp_DataService } from '../../_services/cursor-acp.data-service';\nimport { CA_DetailUi_DataService } from '../../_services/ca-detail-ui.data-service';\nimport { CA_InputStorage_Util } from '../../_collections/ca-input-storage.util';\nimport {\n SESSION_SHELL_MOBILE_BREAKPOINT_PX,\n SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX,\n SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX,\n SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX,\n} from '../../../../../shared/_collections/consts/session-detail-panel-layout.const';\nimport { SHR_DocumentPointerDrag_Util } from '../../../../../shared/_collections/utils/shr-document-pointer-drag.util';\n\ninterface CCAP_CaSessionShellTopBar_Interface {\n title: string;\n session: CA_ListItem_Interface | null;\n isLoading: boolean;\n showActions: boolean;\n isLive: boolean;\n}\n\n/**\n * CA session shell — sidebar lista + router detail.\n */\n@Component({\n selector: 'app-ccap-ca-shell',\n templateUrl: './ca-shell.component.html',\n host: { class: 'flex min-h-0 w-full flex-1 flex-col overflow-hidden' },\n})\n/** CA_Shell_Component class. */\nexport class CA_Shell_Component implements OnInit {\n\n readonly ca_DS: CursorAcp_DataService = inject(CursorAcp_DataService);\n\n readonly detailUi_DS: CA_DetailUi_DataService =\n inject(CA_DetailUi_DataService);\n\n readonly caTopBar_$: Signal<CCAP_CaSessionShellTopBar_Interface | null> = computed(\n (): CCAP_CaSessionShellTopBar_Interface | null => {\n const activeId: string = this.ca_DS.activeSessionId_$();\n if (!activeId) {\n return null;\n }\n const loading: boolean = this.ca_DS.selectedSessionLoading_$();\n const sel: CA_ListItem_Interface | null = this.ca_DS.selectedSession_$();\n const list: CA_ListItem_Interface[] = this.ca_DS.sessions_$();\n const fromList: CA_ListItem_Interface | undefined = list.find(\n (s: CA_ListItem_Interface): boolean => s.sessionId === activeId,\n );\n const detailMatches: boolean = sel?.sessionId === activeId;\n const session: CA_ListItem_Interface | null = detailMatches ? sel : fromList ?? null;\n const title: string = session\n ? (session.label || session.sessionId || activeId)\n : activeId;\n const st: string = session?.status ?? '';\n const isLive: boolean = st === 'running' || st === 'waiting-input';\n return {\n title: title,\n session: session,\n isLoading: loading,\n showActions: detailMatches && !loading,\n isLive: isLive,\n };\n },\n );\n\n readonly sidebarWidth_$ = signal<number>(SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX);\n readonly isSidebarOpen_$ = signal<boolean>(true);\n readonly isResizing_$ = signal<boolean>(false);\n\n ngOnInit(): void {\n const stored: number = CA_InputStorage_Util.loadPanelWidth(\n 'sidebar',\n SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX,\n );\n this.sidebarWidth_$.set(\n Math.max(SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX, Math.min(SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX, stored)),\n );\n this.isSidebarOpen_$.set(CA_InputStorage_Util.loadPanelOpen('sidebar', true));\n }\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 CA_InputStorage_Util.savePanelWidth('sidebar', this.sidebarWidth_$());\n },\n });\n }\n\n handleToggleSidebar(): void {\n this.isSidebarOpen_$.update((v: boolean): boolean => !v);\n CA_InputStorage_Util.savePanelOpen('sidebar', this.isSidebarOpen_$());\n }\n\n /**\n * Session kiválasztás a dashboard-ból — mobil nézeten auto-close sidebar.\n * Nem mentjük localStorage-ba: a felhasználó manuális preferenciáját nem írjuk felül.\n */\n handleSessionSelectedFromDashboard(): void {\n if (window.innerWidth < SESSION_SHELL_MOBILE_BREAKPOINT_PX) {\n this.isSidebarOpen_$.set(false);\n }\n }\n}\n", "<div class=\"flex min-h-0 w-full flex-1 flex-col overflow-hidden\" [class.select-none]=\"isResizing_$()\">\n @let ctx = caTopBar_$();\n <app-s-session-shell-toolbar>\n <div sSessionToolbarLeft class=\"flex items-center gap-1 min-w-0\">\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border border-neonDefault text-neutral-300 hover:bg-neutral-700 rounded flex items-center gap-1 shrink-0\"\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 CA Sessions\n </button>\n @if (ctx) {\n <div class=\"w-px h-4 bg-neutral-700 shrink-0 self-center mx-0.5\"></div>\n }\n @if (ctx && ctx.showActions) {\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border rounded transition-colors shrink-0\"\n [class]=\"detailUi_DS.isMetadataPanelOpen_$()\n ? 'border-neonCyan/50 text-neonCyan bg-neonCyan/10'\n : 'border-neutral-700 text-neutral-500 hover:text-neutral-300'\"\n (click)=\"detailUi_DS.handleToggleMetadata()\">\n Info\n </button>\n }\n </div>\n <div sSessionToolbarCenter class=\"flex items-center justify-center gap-2 min-w-0 max-w-[min(100vw-10rem,48rem)]\">\n @if (ctx) {\n <span class=\"text-sm font-semibold text-neutral-200 truncate text-center min-w-0 max-w-[min(240px,35vw)]\"\n [title]=\"ctx.title\">\n {{ ctx.title }}\n </span>\n @if (ctx.session) {\n <span\n class=\"w-2 h-2 rounded-full shrink-0\"\n [ngClass]=\"ctx.session.status | caSessionStatusColor\"\n [title]=\"ctx.session.status\">\n </span>\n @if (ctx.isLive) {\n <span class=\"w-2 h-2 rounded-full bg-green-500 animate-pulse shrink-0\" title=\"Live\"></span>\n }\n }\n @if (ctx.isLoading && !ctx.session) {\n <span class=\"text-[10px] text-neutral-500 shrink-0\">Loading…</span>\n }\n }\n </div>\n <div sSessionToolbarRight class=\"flex items-center gap-1 min-w-0 flex-wrap justify-end\">\n @if (ctx && ctx.showActions) {\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border rounded transition-colors\"\n [class]=\"detailUi_DS.isTimelinePanelOpen_$()\n ? 'border-neonCyan/50 text-neonCyan bg-neonCyan/10'\n : 'border-neutral-700 text-neutral-500 hover:text-neutral-300'\"\n (click)=\"detailUi_DS.handleToggleTimeline()\">\n Timeline\n </button>\n @if (ctx.isLive) {\n <div class=\"hidden sm:block w-px h-4 bg-neutral-700 shrink-0 self-center\"></div>\n <button\n type=\"button\"\n class=\"px-2 py-1 text-xs border border-neonRed/50 text-red-300 hover:bg-red-950/40 rounded transition-colors shrink-0 disabled:opacity-40\"\n [disabled]=\"detailUi_DS.isStopping_$()\"\n (click)=\"detailUi_DS.handleStopExecution()\">\n {{ detailUi_DS.isStopping_$() ? 'Stopping…' : 'Stop' }}\n </button>\n }\n }\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 (sidebarResizeStart)=\"handleSidebarResizeStart($event)\">\n <div sSessionShellSidebar class=\"flex flex-col overflow-hidden h-full\">\n <app-ccap-ca-dashboard (sessionSelected)=\"handleSessionSelectedFromDashboard()\" />\n </div>\n <div sSessionShellMain class=\"flex min-h-0 flex-1 flex-col overflow-hidden [&>router-outlet]:contents\">\n <router-outlet />\n </div>\n </app-s-resizable-session-shell-layout>\n</div>\n", "import { CA_ListItem_Interface } from '../_models/interfaces/ca-view.interface';\n\n/**\n * CA session lista — üres route esetén melyik business sessionId nyíljon meg (localStorage + frissesség).\n */\nexport class CA_DefaultSelection_Util {\n\n /**\n * Alapértelmezett session id: utolsó mentett, ha a listában és archív szűrővel kompatibilis; különben első nem archivált.\n */\n static pickDefaultSessionId(params: {\n sessions: CA_ListItem_Interface[];\n lastSavedSessionId: string;\n includeArchived: boolean;\n }): string {\n const sessions: CA_ListItem_Interface[] = params.sessions;\n if (!sessions.length) {\n return '';\n }\n const lastId: string = params.lastSavedSessionId.trim();\n if (lastId.length > 0) {\n const hit: CA_ListItem_Interface | undefined = sessions.find(\n (s: CA_ListItem_Interface): boolean => s.sessionId === lastId,\n );\n if (hit?.sessionId) {\n if (params.includeArchived || hit.isArchived !== true) {\n return hit.sessionId;\n }\n }\n }\n const firstNonArchived: CA_ListItem_Interface | undefined = sessions.find(\n (s: CA_ListItem_Interface): boolean =>\n Boolean(s.sessionId) && s.isArchived !== true,\n );\n if (firstNonArchived?.sessionId) {\n return firstNonArchived.sessionId;\n }\n if (params.includeArchived) {\n const anyRow: CA_ListItem_Interface | undefined = sessions.find(\n (s: CA_ListItem_Interface): boolean => Boolean(s.sessionId),\n );\n return anyRow?.sessionId ?? '';\n }\n return '';\n }\n}\n", "import { CaSessionConsoleMessage_Interface } from '../../../_services/ca.data-service.interface';\n\n/**\n * CA konzol megjelenítés — Agent update / tool_call_update sorok szűrése (toolbar toggle + „csak utolsó” szabály).\n */\nexport class CA_ConsoleDisplayFilter_Util {\n\n /** `tool_call_update` progress sor `briefSubtype` — data-service és szűrő SSOT string. */\n static readonly toolCallUpdateBriefSubtype: string = 'tool_call_update';\n\n /**\n * @param isShowAgentUpdates false → minden `status-update` rejtve (mint CC Session toggle ki).\n * Ha true: egyéb `status-update` megmarad; `tool_call_update` csak ha a lista **utolsó** eleme.\n */\n static filterForAgentUpdatesVisibility(params: {\n messages: CaSessionConsoleMessage_Interface[];\n isShowAgentUpdates: boolean;\n }): CaSessionConsoleMessage_Interface[] {\n const list: CaSessionConsoleMessage_Interface[] = params.messages;\n const lastIndex: number = list.length - 1;\n const out: CaSessionConsoleMessage_Interface[] = [];\n for (let i: number = 0; i < list.length; i++) {\n const m: CaSessionConsoleMessage_Interface = list[i];\n if (m.type !== 'status-update') {\n out.push(m);\n continue;\n }\n if (!params.isShowAgentUpdates) {\n continue;\n }\n const isToolProgress: boolean =\n m.briefSubtype === CA_ConsoleDisplayFilter_Util.toolCallUpdateBriefSubtype;\n if (isToolProgress && i !== lastIndex) {\n continue;\n }\n out.push(m);\n }\n return out;\n }\n}\n", "import { CCAP_AgentConsoleBubblePairedResult_Interface } from '../../../../../../../_models/interfaces/shared/ccap-agent-console-bubble-view.interface';\nimport { CaSessionConsoleMessage_Interface } from '../../../_services/ca.data-service.interface';\nimport { SHR_JsonSnippetFormat_Util } from '../../../../../../shared/_collections/utils/shr-json-snippet-format.util';\nimport { CA_ToolCallMirrorParse_Util } from './ca-tool-call-mirror-parse.util';\n\n/**\n * CA console — ACP `tool_call` + későbbi `tool_call_update` completed egy buborékba (CC Session pairing minta).\n * Sikeres `rawOutput` → `tool-result` sor; `rawOutput.error` → `error` sor — mindkettő beolvad.\n * Köztes Agent update / más sorok nem zavarják az ID alapú párosítást.\n */\nexport class CA_ConsolePairToolLifecycle_Util {\n\n /**\n * `tool-result` vagy `error` (`tool_call_update` completed) → megfelelő `tool` (`tool_call`) `pairedResult`-jába;\n * a külön sor törlődik a megjelenítési listából.\n */\n static pairToolResultsIntoToolStarts(\n messages: CaSessionConsoleMessage_Interface[],\n ): CaSessionConsoleMessage_Interface[] {\n const toolIdToIndex: Map<string, number> = new Map();\n for (let i: number = 0; i < messages.length; i++) {\n const m: CaSessionConsoleMessage_Interface = messages[i];\n if (m.type !== 'tool' || m.briefSubtype !== 'tool_call') {\n continue;\n }\n const startParsed = CA_ToolCallMirrorParse_Util.tryParseStableListKey(m.listKey);\n if (startParsed === null || startParsed.role !== 'start') {\n continue;\n }\n toolIdToIndex.set(startParsed.toolCallId, i);\n }\n if (!toolIdToIndex.size) {\n return messages;\n }\n const pairedRowIndices: Set<number> = new Set();\n const next: CaSessionConsoleMessage_Interface[] = messages.map(\n (m: CaSessionConsoleMessage_Interface): CaSessionConsoleMessage_Interface => ({ ...m }),\n );\n for (let i: number = 0; i < next.length; i++) {\n const m: CaSessionConsoleMessage_Interface = next[i];\n if (m.briefSubtype !== 'tool_call_update') {\n continue;\n }\n const keyParsed = CA_ToolCallMirrorParse_Util.tryParseStableListKey(m.listKey);\n if (keyParsed === null) {\n continue;\n }\n const isSuccessRow: boolean = m.type === 'tool-result' && keyParsed.role === 'result';\n const isErrorRow: boolean = m.type === 'error' && keyParsed.role === 'error';\n if (!isSuccessRow && !isErrorRow) {\n continue;\n }\n const toolIndex: number | undefined = toolIdToIndex.get(keyParsed.toolCallId);\n if (toolIndex === undefined) {\n continue;\n }\n const expandable: string = CA_ConsolePairToolLifecycle_Util.buildPairedExpandableRawOutput({\n rawData: m.rawData,\n fallbackText: m.text,\n });\n const paired: CCAP_AgentConsoleBubblePairedResult_Interface = {\n text: m.text,\n expandableContent: expandable.length ? expandable : m.text,\n rawData: m.rawData,\n isError: isErrorRow ? true : undefined,\n };\n next[toolIndex] = {\n ...next[toolIndex],\n pairedResult: paired,\n isToolCallFailedIndicator: isErrorRow ? true : next[toolIndex].isToolCallFailedIndicator,\n };\n pairedRowIndices.add(i);\n }\n if (!pairedRowIndices.size) {\n return next;\n }\n return next.filter(\n (_: CaSessionConsoleMessage_Interface, idx: number): boolean => !pairedRowIndices.has(idx),\n );\n }\n\n /**\n * `update.rawOutput` + `update.content` → expandable Result blokk.\n * ACP content (diffs, terminal, text) elsődleges; rawOutput fallback.\n */\n private static buildPairedExpandableRawOutput(params: {\n rawData: Record<string, unknown> | undefined;\n fallbackText: string;\n }): string {\n const rawData: Record<string, unknown> | undefined = params.rawData;\n if (rawData === undefined) {\n return params.fallbackText;\n }\n const upd: unknown = rawData.update;\n if (upd === null || typeof upd !== 'object' || Array.isArray(upd)) {\n return CA_ConsolePairToolLifecycle_Util.stringifyRecordOrFallback({\n value: rawData,\n fallbackText: params.fallbackText,\n });\n }\n const sections: string[] = [];\n\n // ACP structured content — diffs, terminal, text blokkok.\n const contentArr: unknown = Reflect.get(upd, 'content');\n if (Array.isArray(contentArr) && contentArr.length) {\n const contentStr: string = CA_ToolCallMirrorParse_Util.formatContent(contentArr);\n if (contentStr.length) {\n sections.push(contentStr);\n }\n }\n\n // rawOutput — részletes eredmény.\n const rawOut: unknown = Reflect.get(upd, 'rawOutput');\n if (rawOut !== undefined) {\n try {\n const s: string = JSON.stringify(rawOut, null, 2);\n if (SHR_JsonSnippetFormat_Util.looksLikeJson(s)) {\n sections.push(SHR_JsonSnippetFormat_Util.formatJson(s));\n } else {\n sections.push(s);\n }\n } catch {\n // rawOutput nem szerializálható — skip.\n }\n }\n\n if (sections.length) {\n return sections.join('\\n\\n');\n }\n\n return CA_ConsolePairToolLifecycle_Util.stringifyRecordOrFallback({\n value: rawData,\n fallbackText: params.fallbackText,\n });\n }\n\n private static stringifyRecordOrFallback(params: {\n value: Record<string, unknown>;\n fallbackText: string;\n }): string {\n try {\n return JSON.stringify(params.value, null, 2);\n } catch {\n return params.fallbackText;\n }\n }\n}\n", "import { CCAP_AgentConsoleBubbleKind_Type } from '../../../../../../../_enums/shared/ccap-agent-console-bubble-kind.enum';\nimport { CCAP_AgentConsoleBubbleView_Interface } from '../../../../../../../_models/interfaces/shared/ccap-agent-console-bubble-view.interface';\nimport { CaSessionConsoleMessage_Interface } from '../../../_services/ca.data-service.interface';\n\n/**\n * CA session console üzenet → közös buborék view-model.\n */\nexport class CA_ConsoleToBubbleView_Util {\n\n static fromConsoleMessage(msg: CaSessionConsoleMessage_Interface): CCAP_AgentConsoleBubbleView_Interface {\n let kind: CCAP_AgentConsoleBubbleKind_Type =\n CA_ConsoleToBubbleView_Util.mapTypeToKind(msg.type);\n if (msg.useRawBubbleKind === true) {\n kind = CCAP_AgentConsoleBubbleKind_Type.raw;\n }\n if (\n msg.streamTextRole === 'user'\n && msg.type === 'assistant'\n && msg.useRawBubbleKind !== true\n ) {\n kind = CCAP_AgentConsoleBubbleKind_Type.userPrompt;\n }\n const isUserAligned: boolean =\n msg.streamTextRole === 'user'\n || (msg.type === 'prompt' && msg.useRawBubbleKind !== true);\n const subtype: string | undefined =\n msg.briefSubtype !== undefined && msg.briefSubtype.length > 0\n ? msg.briefSubtype\n : msg.mirrorEventType;\n const toolNameForView: string | undefined =\n msg.type === 'tool' && msg.toolDisplayName !== undefined && msg.toolDisplayName.length > 0\n ? msg.toolDisplayName\n : undefined;\n const headerDot: 'error' | undefined =\n msg.type === 'error' || msg.isToolCallFailedIndicator === true ? 'error' : undefined;\n const paired =\n msg.pairedResult !== undefined\n ? {\n text: msg.pairedResult.text,\n expandableContent: msg.pairedResult.expandableContent,\n rawData: msg.pairedResult.rawData,\n isError: msg.pairedResult.isError,\n }\n : undefined;\n return {\n listKey: msg.listKey,\n kind: kind,\n bodyText: msg.text,\n timestampIso: msg.timestamp,\n expandableContent: undefined,\n rawData: msg.rawData,\n pairedResult: paired,\n isUserAligned: isUserAligned,\n subtype: subtype,\n toolName: toolNameForView,\n headerStatusDot: headerDot,\n flags: {\n showCopy: true,\n showRawInfo: true,\n useEditDiffForExpandable: false,\n },\n };\n }\n\n private static mapTypeToKind(\n type: CaSessionConsoleMessage_Interface['type'],\n ): CCAP_AgentConsoleBubbleKind_Type {\n switch (type) {\n case 'prompt':\n return CCAP_AgentConsoleBubbleKind_Type.userPrompt;\n case 'assistant':\n return CCAP_AgentConsoleBubbleKind_Type.assistant;\n case 'thinking':\n return CCAP_AgentConsoleBubbleKind_Type.thinking;\n case 'tool':\n return CCAP_AgentConsoleBubbleKind_Type.tool;\n case 'tool-result':\n return CCAP_AgentConsoleBubbleKind_Type.toolResult;\n case 'error':\n return CCAP_AgentConsoleBubbleKind_Type.error;\n case 'info':\n return CCAP_AgentConsoleBubbleKind_Type.info;\n case 'status':\n return CCAP_AgentConsoleBubbleKind_Type.status;\n case 'status-update':\n return CCAP_AgentConsoleBubbleKind_Type.statusUpdate;\n default:\n return CCAP_AgentConsoleBubbleKind_Type.info;\n }\n }\n}\n", "import {\n AfterViewChecked,\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n inject,\n OnInit,\n signal,\n Signal,\n ViewChild,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CCAP_AgentConsoleBubbleKind_Type } from '../../../../../../_enums/shared/ccap-agent-console-bubble-kind.enum';\nimport { CCAP_AgentConsoleBubbleView_Interface } from '../../../../../../_models/interfaces/shared/ccap-agent-console-bubble-view.interface';\nimport { CCAP_ExtSessionMessage_Response } from '../../../../../../_models/interfaces/shared/ccap-ext-message.interface';\nimport { CursorAcp_DataService } from '../../_services/cursor-acp.data-service';\nimport { CaSessionConsoleMessage_Interface } from '../../_services/ca.data-service.interface';\nimport { CA_DetailUi_DataService } from '../../_services/ca-detail-ui.data-service';\nimport { CA_ConsoleDisplayFilter_Util } from '../../_collections/utils/console-display/ca-console-display-filter.util';\nimport { CA_ConsolePairToolLifecycle_Util } from '../../_collections/utils/console-display/ca-console-pair-tool-lifecycle.util';\nimport { CA_ConsoleToBubbleView_Util } from '../../_collections/utils/console-display/ca-console-to-bubble-view.util';\nimport { CA_InputStorage_Util } from '../../_collections/ca-input-storage.util';\nimport { SHR_BubbleViewGrouping_Util } from '../../../../../shared/_collections/utils/shr-bubble-view-grouping.util';\nimport { SHR_ExtSessionMsgToBubbleView_Util } from '../../../../../shared/_collections/utils/shr-ext-message-to-bubble-view.util';\nimport { VNP_InputUi_DataService } from '../../../../../dev/_modules/poc/_modules/voice-notes-poc/_services/vnp-input-ui.data-service';\nimport { ExS_Queue_DataService } from '../../../../_services/exs-queue.data-service';\n\n/**\n * CA session console — prompt composer + buborékok.\n */\n@Component({\n selector: 'app-ccap-ca-console',\n templateUrl: './ca-console.component.html',\n host: { class: 'flex flex-col flex-1 min-h-0 overflow-hidden w-full min-w-0' },\n})\n/** CA_Console_Component class. */\nexport class CA_Console_Component\n implements OnInit, AfterViewInit, AfterViewChecked {\n\n @ViewChild('messagesEnd') private messagesEndRef?: ElementRef<HTMLElement>;\n\n readonly ca_DS: CursorAcp_DataService = inject(CursorAcp_DataService);\n\n readonly detailUi_DS: CA_DetailUi_DataService =\n inject(CA_DetailUi_DataService);\n\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\n private readonly route: ActivatedRoute = inject(ActivatedRoute);\n\n readonly promptInput_$ = signal<string>('');\n readonly isSending_$ = signal<boolean>(false);\n\n /** Agent fut-e (running státusz → stop gomb megjelenítés). */\n readonly isExecuting_$: Signal<boolean> = computed(\n (): boolean => this.ca_DS.selectedSession_$()?.status === 'running',\n );\n\n readonly messages_$: Signal<CaSessionConsoleMessage_Interface[]> = computed(\n (): CaSessionConsoleMessage_Interface[] => this.ca_DS.consoleMessages_$(),\n );\n\n /** TTS cache: lejátszott üzenetek messageKey-jei (audio player megjelenítéshez). */\n readonly ttsCachedKeys_$ = signal<Set<string>>(new Set());\n\n /**\n * TTS cache jelzés a shared bubble-ből.\n */\n handleTtsCached(messageKey: string): void {\n this.ttsCachedKeys_$.update(\n (s: Set<string>): Set<string> => new Set([...s, messageKey]),\n );\n }\n\n /**\n * Buborék nézet: assembled messages (SSOT, szerveren párosított) → bubble view.\n * Ha nincsenek assembled message-ek (régi session, átmeneti állapot),\n * fallback a kliens-oldali event pipeline-ra.\n */\n readonly bubbleViews_$ = computed((): CCAP_AgentConsoleBubbleView_Interface[] => {\n // Assembled messages SSOT path — tool pairing, stream merge szerveren történt\n const assembled: CCAP_ExtSessionMessage_Response[] =\n this.ca_DS.assembledMessages_$();\n if (assembled.length > 0) {\n const sid: string = this.sessionId;\n const cached: Set<string> = this.ttsCachedKeys_$();\n let views: CCAP_AgentConsoleBubbleView_Interface[] = assembled.map(\n (msg: CCAP_ExtSessionMessage_Response): CCAP_AgentConsoleBubbleView_Interface =>\n SHR_ExtSessionMsgToBubbleView_Util.fromAssembledMessage(\n msg, { sessionId: sid, cachedKeys: cached },\n ),\n );\n // Sub-agent és consecutive tool csoportosítás (shared util)\n views = SHR_BubbleViewGrouping_Util.groupSubAgentItems(views);\n views = SHR_BubbleViewGrouping_Util.groupConsecutiveToolItems(views);\n return views;\n }\n\n // Fallback: kliens-oldali event pipeline (régi session-ökhöz)\n const show: boolean = this.detailUi_DS.isShowAgentUpdates_$();\n const filtered: CaSessionConsoleMessage_Interface[] =\n CA_ConsoleDisplayFilter_Util.filterForAgentUpdatesVisibility({\n messages: this.messages_$(),\n isShowAgentUpdates: show,\n });\n const paired: CaSessionConsoleMessage_Interface[] =\n CA_ConsolePairToolLifecycle_Util.pairToolResultsIntoToolStarts(filtered);\n return paired.map(\n (msg: CaSessionConsoleMessage_Interface): CCAP_AgentConsoleBubbleView_Interface =>\n CA_ConsoleToBubbleView_Util.fromConsoleMessage(msg),\n );\n });\n\n readonly bubbleKind = CCAP_AgentConsoleBubbleKind_Type;\n\n readonly isComposerSendDisabled_$ = computed((): boolean => !this.promptInput_$().trim().length);\n\n private previousConsoleMessageCount: number = 0;\n\n private get sessionId(): string {\n return this.ca_DS.activeSessionId_$();\n }\n\n ngAfterViewInit(): void {\n this.scheduleScrollToBottom();\n }\n\n ngAfterViewChecked(): void {\n const currentCount: number = this.ca_DS.consoleMessages_$().length;\n if (currentCount > this.previousConsoleMessageCount) {\n this.scheduleScrollToBottom();\n }\n this.previousConsoleMessageCount = currentCount;\n }\n\n ngOnInit(): void {\n const sessionId: string = this.route.snapshot.paramMap.get('sessionId') ?? '';\n if (sessionId) {\n this.promptInput_$.set(CA_InputStorage_Util.loadPromptDraft(sessionId));\n this.sessionQueue_DS.subscribeToSession({\n sessionId: sessionId,\n baseRoute: 'ca-session',\n });\n }\n }\n\n async handleSendPrompt(): Promise<void> {\n const content: string = this.promptInput_$().trim();\n if (!content || !this.sessionId || this.isSending_$()) {\n return;\n }\n CA_InputStorage_Util.clearPromptDraft(this.sessionId);\n this.promptInput_$.set('');\n this.isSending_$.set(true);\n try {\n await this.ca_DS.sendPrompt({\n sessionId: this.sessionId,\n content: content,\n });\n } catch {\n // error path: data service\n } finally {\n this.isSending_$.set(false);\n }\n }\n\n handleComposerDraftChange(value: string): void {\n this.promptInput_$.set(value);\n const sid: string = this.sessionId;\n if (sid) {\n CA_InputStorage_Util.savePromptDraft(sid, value);\n }\n }\n\n /**\n * Voice szegmens transcribe: akkumuláció + auto-send csak isFinal=true esetén.\n */\n handleVoiceSegment(event: { text: string; isFinal: boolean }): void {\n const t: string = event.text.trim();\n if (!t.length) {\n return;\n }\n const current: string = this.promptInput_$().trim();\n const next: string = current.length > 0 ? `${current} ${t}` : t;\n this.handleComposerDraftChange(next);\n if (this.voiceInputUi_DS.autoSendAfterVoice_$() && event.isFinal) {\n void this.handleSendPrompt();\n }\n }\n\n private scheduleScrollToBottom(): void {\n setTimeout((): void => {\n const el: HTMLElement | undefined = this.messagesEndRef?.nativeElement;\n if (el) {\n el.scrollIntoView({ block: 'end', inline: 'nearest' });\n }\n }, 0);\n }\n}\n", "<app-s-session-chat-column-layout>\n <div sChatColumnHeader class=\"flex shrink-0 flex-col\">\n <div class=\"flex shrink-0 items-center gap-2 border-b border-neonDefault bg-ccapSurface px-3 py-1.5\">\n <span class=\"flex-1 truncate font-mono text-xs text-neutral-400\">\n {{ ca_DS.activeSessionId_$() || 'No session' }}\n </span>\n @if (ca_DS.selectedSession_$(); as row) {\n <span\n class=\"rounded px-1.5 py-0.5 text-[10px] font-medium text-black\"\n [class]=\"row.status | caSessionStatusColor\">\n {{ row.status }}\n </span>\n }\n </div>\n </div>\n\n <div sChatColumnScroll class=\"space-y-3 px-3 py-3 text-xs\">\n @if (ca_DS.selectedSessionLoading_$()) {\n <div class=\"flex h-full items-center justify-center text-xs text-neutral-600\">\n Loading…\n </div>\n } @else if (!bubbleViews_$().length) {\n <div class=\"flex h-full items-center justify-center text-xs text-neutral-600\">\n No messages yet — send a prompt\n </div>\n }\n @for (row of bubbleViews_$(); track row.listKey) {\n <div [class]=\"row.isUserAligned ? 'flex justify-end' : 'flex justify-start'\">\n <div\n class=\"max-w-full\"\n [ngClass]=\"row.kind === bubbleKind.tool ? { 'w-[90%]': true, 'ml-4': true } : { 'w-[85%]': true }\">\n <app-s-agent-console-message-bubble [view]=\"row\" (ttsCached)=\"handleTtsCached($event)\" />\n </div>\n </div>\n }\n <div #messagesEnd></div>\n </div>\n\n <div sChatColumnComposer>\n <app-s-session-input\n [draftText]=\"promptInput_$()\"\n (draftTextChange)=\"handleComposerDraftChange($event)\"\n [isExecuting]=\"isExecuting_$()\"\n [isSending]=\"isSending_$()\"\n [isStopping]=\"detailUi_DS.isStopping_$()\"\n [enableAttachments]=\"true\"\n placeholder=\"Send a prompt…\"\n [textareaRows]=\"3\"\n (sendRequested)=\"handleSendPrompt()\"\n (queueRequested)=\"handleSendPrompt()\"\n (stopRequested)=\"detailUi_DS.handleStopExecution()\"\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-ccap-voice-record-button\n sInputTextareaAccessory\n [compactLayout]=\"true\"\n (transcriptSegmentReady)=\"handleVoiceSegment($event)\">\n </app-ccap-voice-record-button>\n </app-s-session-input>\n </div>\n</app-s-session-chat-column-layout>\n", "import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * CA session event type → Tailwind badge class.\n */\n@Pipe({ name: 'caSessionEventTypeColor' })\nexport class CA_EventTypeColor_Pipe implements PipeTransform {\n\n transform(eventType: string | undefined): string {\n switch (eventType ?? '') {\n case 'lifecycle':\n return 'bg-cyan-600';\n case 'ca-session-update':\n return 'bg-green-600';\n case 'prompt-sent':\n return 'bg-blue-600';\n case 'prompt-completed':\n return 'bg-green-500';\n case 'error':\n return 'bg-red-600';\n case 'sync-list':\n return 'bg-purple-600';\n case 'hydrate-from-agent':\n return 'bg-indigo-600';\n default:\n return 'bg-neutral-600';\n }\n }\n}\n", "import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * Record → syntax-highlighted JSON HTML.\n */\n@Pipe({ name: 'caSessionJsonFormat' })\nexport class CA_JsonFormat_Pipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(data: Record<string, unknown> | null | undefined): SafeHtml {\n if (!data) {\n return this.sanitizer.bypassSecurityTrustHtml('<span class=\"text-neutral-500\">{}</span>');\n }\n try {\n const json: string = JSON.stringify(data, null, 2);\n const highlighted: string = this.highlightJson(json);\n return this.sanitizer.bypassSecurityTrustHtml(highlighted);\n } catch {\n return this.sanitizer.bypassSecurityTrustHtml('<span class=\"text-neutral-500\">{}</span>');\n }\n }\n\n private readonly MULTILINE_THRESHOLD: number = 150;\n\n private highlightJson(json: string): string {\n const escaped: string = json\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n return escaped.replace(\n /(\"(\\\\u[\\da-fA-F]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/g,\n (match: string): string => {\n if (/^\"/.test(match)) {\n if (/:$/.test(match)) {\n return `<span style=\"color:#7dd3fc\">${match}</span>`;\n }\n if (match.length > this.MULTILINE_THRESHOLD && match.includes('\\\\n')) {\n return this.formatMultilineString(match);\n }\n return `<span style=\"color:#86efac\">${match}</span>`;\n }\n if (/true|false/.test(match)) {\n return `<span style=\"color:#fbbf24\">${match}</span>`;\n }\n if (/null/.test(match)) {\n return `<span style=\"color:#a78bfa\">${match}</span>`;\n }\n return `<span style=\"color:#fb923c\">${match}</span>`;\n },\n );\n }\n\n private formatMultilineString(match: string): string {\n const inner: string = match\n .slice(1, -1)\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\t/g, ' ')\n .replace(/\\\\r/g, '')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\\\\\/g, '\\\\');\n return '<span style=\"color:#86efac\">\"</span>'\n + '<span style=\"display:block;margin:2px 0;padding:4px 8px;border-left:2px solid rgba(134,239,172,0.25);'\n + 'background:rgba(134,239,172,0.04);border-radius:0 4px 4px 0;color:#86efac;opacity:0.85;'\n + 'white-space:pre-wrap;word-break:break-word;font-size:0.9em;line-height:1.5\">'\n + inner\n + '</span>'\n + '<span style=\"color:#86efac\">\"</span>';\n }\n}\n", "import {\n CA_EventItem_Interface,\n CA_TimelineStreamRow_Interface,\n} from '../../../_models/interfaces/ca-view.interface';\nimport { CA_MirrorStreamMerge_Util } from './ca-mirror-stream-merge.util';\nimport { SHR_UnknownValuePrettyJson_Util } from '../../../../../../shared/_collections/utils/shr-unknown-value-pretty-json.util';\n\n/**\n * CA timeline sor megjelenítés — brief preview, sequence címke, vágólap JSON.\n */\nexport class CA_TimelineRowDisplay_Util {\n\n /**\n * Egy mirror esemény rövid szövege (egyedi sor vagy összevont csoport első eleme).\n */\n static eventBrief(ev: CA_EventItem_Interface): string {\n const data: Record<string, unknown> = ev.data ?? {};\n switch (ev.eventType) {\n case 'prompt-sent': {\n const raw: unknown = data.content;\n if (typeof raw === 'string' && raw.length) {\n const preview: string = raw.length > 80 ? `${raw.substring(0, 80)}…` : raw;\n return `prompt: ${preview}`;\n }\n const len: unknown = data.contentLength;\n return typeof len === 'number' ? `prompt length ${len}` : 'prompt';\n }\n case 'lifecycle': {\n const phase: unknown = data.phase;\n if (phase === 'acpSessionRebound') {\n const prev: unknown = data.previousAcpSessionId;\n const next: unknown = data.newAcpSessionId;\n const p: string = typeof prev === 'string' ? prev.substring(0, 8) : '?';\n const n: string = typeof next === 'string' ? next.substring(0, 8) : '?';\n return `ACP rebound ${p}… → ${n}…`;\n }\n return typeof phase === 'string' ? phase : 'lifecycle';\n }\n case 'ca-session-update': {\n return 'session update';\n }\n case 'hydrate-from-agent': {\n const fp: unknown = data.acpLoadFingerprint;\n return typeof fp === 'string' && fp.length > 12\n ? `session/load · ${fp.substring(0, 12)}…`\n : 'session/load snapshot';\n }\n default: {\n const json: string = JSON.stringify(data);\n return json.length > 60 ? json.substring(0, 60) + '…' : json;\n }\n }\n }\n\n /**\n * Összevont chunk sor vagy egy esemény — lista preview.\n */\n static streamRowBrief(row: CA_TimelineStreamRow_Interface): string {\n if (row.events.length === 1) {\n return CA_TimelineRowDisplay_Util.eventBrief(row.events[0]);\n }\n const parts: string[] = [];\n for (const ev of row.events) {\n const p = CA_MirrorStreamMerge_Util.parseStreamChunkFromMirrorData(ev.data ?? {});\n if (p !== null) {\n parts.push(p.text);\n }\n }\n const full: string = parts.join('');\n return full.length > 80 ? `${full.substring(0, 80)}…` : full;\n }\n\n /**\n * Sor fejléc sequence — `#12` vagy `#12–#18` összevonásnál.\n */\n static streamRowSequenceLabel(row: CA_TimelineStreamRow_Interface): string {\n if (!row.events.length) {\n return '';\n }\n if (row.events.length === 1) {\n return `#${String(row.events[0].sequence ?? '')}`;\n }\n const firstSeq: number = row.events[0].sequence ?? 0;\n const lastSeq: number = row.events[row.events.length - 1].sequence ?? 0;\n return `#${String(firstSeq)}–#${String(lastSeq)}`;\n }\n\n /**\n * Copy gomb — sor eseménye(i) pretty JSON.\n */\n static streamRowClipboardText(row: CA_TimelineStreamRow_Interface): string {\n return SHR_UnknownValuePrettyJson_Util.prettyStringifyUnknown({\n merged: row.events.length > 1,\n events: row.events.map(\n (e: CA_EventItem_Interface): Record<string, unknown> => ({\n eventType: e.eventType,\n sequence: e.sequence,\n timestamp: e.timestamp,\n sessionId: e.sessionId,\n data: e.data ?? {},\n }),\n ),\n });\n }\n}\n", "import { Pipe, PipeTransform } from '@angular/core';\n\nimport { CA_TimelineStreamRow_Interface } from '../_models/interfaces/ca-view.interface';\nimport { CA_TimelineRowDisplay_Util } from '../_collections/utils/console-display/ca-timeline-row-display.util';\n\n/**\n * Timeline összevont sor — preview szöveg.\n */\n@Pipe({ name: 'caSessionTimelineStreamRowBrief' })\nexport class CA_TimelineStreamRowBrief_Pipe implements PipeTransform {\n\n transform(row: CA_TimelineStreamRow_Interface | null | undefined): string {\n if (row === null || row === undefined) {\n return '';\n }\n return CA_TimelineRowDisplay_Util.streamRowBrief(row);\n }\n}\n", "import { Pipe, PipeTransform } from '@angular/core';\n\nimport { CA_TimelineStreamRow_Interface } from '../_models/interfaces/ca-view.interface';\nimport { CA_TimelineRowDisplay_Util } from '../_collections/utils/console-display/ca-timeline-row-display.util';\n\n/**\n * Timeline sor — copy gomb tartalom (JSON).\n */\n@Pipe({ name: 'caSessionTimelineStreamRowClipboardText' })\nexport class CA_TimelineStreamRowClipboardText_Pipe implements PipeTransform {\n\n transform(row: CA_TimelineStreamRow_Interface | null | undefined): string {\n if (row === null || row === undefined) {\n return '';\n }\n return CA_TimelineRowDisplay_Util.streamRowClipboardText(row);\n }\n}\n", "import { Pipe, PipeTransform } from '@angular/core';\n\nimport { CA_TimelineStreamRow_Interface } from '../_models/interfaces/ca-view.interface';\nimport { CA_TimelineRowDisplay_Util } from '../_collections/utils/console-display/ca-timeline-row-display.util';\n\n/**\n * Timeline sor sequence címke (`#5` vagy `#5–#9`).\n */\n@Pipe({ name: 'caSessionTimelineStreamRowSequenceLabel' })\nexport class CA_TimelineStreamRowSequenceLabel_Pipe implements PipeTransform {\n\n transform(row: CA_TimelineStreamRow_Interface | null | undefined): string {\n if (row === null || row === undefined) {\n return '';\n }\n return CA_TimelineRowDisplay_Util.streamRowSequenceLabel(row);\n }\n}\n", "import {\n AfterViewChecked,\n Component,\n computed,\n ElementRef,\n inject,\n signal,\n Signal,\n ViewChild,\n} from '@angular/core';\n\nimport { CA_EventItem_Interface } from '../../_models/interfaces/ca-view.interface';\nimport { CA_TimelineStreamRow_Interface } from '../../_models/interfaces/ca-view.interface';\nimport { CA_EventChronologicalSort_Util } from '../../_collections/ca-event-chronological-sort.util';\nimport { CA_MirrorStreamMerge_Util } from '../../_collections/utils/console-display/ca-mirror-stream-merge.util';\nimport { CA_DetailUi_DataService } from '../../_services/ca-detail-ui.data-service';\nimport { CursorAcp_DataService } from '../../_services/cursor-acp.data-service';\n\n/**\n * CA session event timeline — stream chunk sorok összevonva (ugyanazon üzenet).\n * Auto-scroll + header event count-tal (CC Session timeline minta).\n */\n@Component({\n selector: 'app-ccap-ca-timeline',\n templateUrl: './ca-timeline.component.html',\n host: { class: 'flex flex-col h-full min-h-0 overflow-hidden' },\n})\n/** CA_Timeline_Component class. */\nexport class CA_Timeline_Component implements AfterViewChecked {\n\n readonly ca_DS: CursorAcp_DataService = inject(CursorAcp_DataService);\n\n /** Console filter toggle-ok (session status / agent updates) — shell headerből ide költözve. */\n readonly detailUi_DS: CA_DetailUi_DataService =\n inject(CA_DetailUi_DataService);\n\n readonly selectedRowKey_$ = signal<string | null>(null);\n\n readonly isLoadingMore_$ = signal<boolean>(false);\n\n /** Auto-scroll engedélyezve az event listához — CC Session minta. */\n readonly isAutoScroll_$ = signal<boolean>(true);\n\n @ViewChild('eventList') eventListRef?: ElementRef<HTMLDivElement>;\n\n /** Előző event szám a scroll detektáláshoz. */\n private previousRowCount: number = 0;\n\n /** Legfrissebb felül — fold asc után reverse. */\n readonly displayRows_$: Signal<CA_TimelineStreamRow_Interface[]> = computed(\n (): CA_TimelineStreamRow_Interface[] => {\n const asc: CA_EventItem_Interface[] = [...this.ca_DS.selectedSessionEvents_$()].sort(\n CA_EventChronologicalSort_Util.compareMirrorEventsAsc,\n );\n const folded: CA_TimelineStreamRow_Interface[] =\n CA_MirrorStreamMerge_Util.foldEventsToTimelineRows(asc);\n return [...folded].reverse();\n },\n );\n\n /** Auto-scroll ha engedélyezve és új event érkezett. */\n ngAfterViewChecked(): void {\n const currentCount: number = this.displayRows_$().length;\n if (this.isAutoScroll_$() && currentCount > this.previousRowCount) {\n this.scrollToTop();\n }\n this.previousRowCount = currentCount;\n }\n\n /** Auto-scroll toggle. */\n handleToggleAutoScroll(): void {\n this.isAutoScroll_$.update((v: boolean): boolean => !v);\n }\n\n handleSelectRow(row: CA_TimelineStreamRow_Interface): void {\n const key: string = row.rowKey;\n const current: string | null = this.selectedRowKey_$();\n if (current === key) {\n this.selectedRowKey_$.set(null);\n } else {\n this.selectedRowKey_$.set(key);\n }\n }\n\n async handleLoadMoreEvents(): Promise<void> {\n const sid: string = this.ca_DS.activeSessionId_$();\n if (!sid) {\n return;\n }\n this.isLoadingMore_$.set(true);\n try {\n await this.ca_DS.loadMoreSessionEvents({ sessionId: sid });\n } finally {\n this.isLoadingMore_$.set(false);\n }\n }\n\n /** Legfrissebb felül → scroll top-ra (reversed lista). */\n private scrollToTop(): void {\n const element: HTMLDivElement | undefined = this.eventListRef?.nativeElement;\n if (element) {\n element.scrollTop = 0;\n }\n }\n}\n", "<!-- Timeline header — CC Session minta: event count + auto-scroll toggle. -->\n<div class=\"flex items-center justify-between p-2 border-b border-neonDefault shrink-0\">\n <div class=\"flex items-center gap-1\">\n <span class=\"text-xs text-neutral-400 font-medium\">Event Timeline</span>\n <span class=\"text-xs text-neutral-500\">\n ({{ ca_DS.selectedSessionEvents_$().length }})\n </span>\n </div>\n <button\n type=\"button\"\n class=\"text-[10px] px-1.5 py-0.5 border rounded transition-colors\"\n [class]=\"isAutoScroll_$() ? 'border-neonCyan text-neonCyan shadow-neon-glow-cyan' : 'border-neonDefault text-neutral-400'\"\n (click)=\"handleToggleAutoScroll()\">\n Auto-scroll\n </button>\n</div>\n\n<!-- Console filter toggles — shell headerből ide költözve. -->\n<div class=\"flex items-center gap-1 px-2 py-1.5 border-b border-neonDefault shrink-0\">\n <button\n type=\"button\"\n class=\"px-2 py-0.5 text-[10px] border rounded transition-colors\"\n [class]=\"detailUi_DS.isShowSessionStatus_$()\n ? 'border-purple-500/50 text-purple-400 bg-purple-500/10'\n : 'border-neutral-700 text-neutral-500 hover:text-neutral-300'\"\n (click)=\"detailUi_DS.handleToggleSessionStatus()\"\n title=\"Session lifecycle status changes\">\n Session status\n </button>\n <button\n type=\"button\"\n class=\"px-2 py-0.5 text-[10px] border rounded transition-colors\"\n [class]=\"detailUi_DS.isShowAgentUpdates_$()\n ? 'border-teal-500/50 text-teal-400 bg-teal-500/10'\n : 'border-neutral-700 text-neutral-500 hover:text-neutral-300 hover:border-neutral-600'\"\n (click)=\"detailUi_DS.handleToggleAgentUpdates()\"\n title=\"Tool call progress / agent updates (in_progress)\">\n Agent updates\n </button>\n</div>\n\n@if (ca_DS.sessionEventsHasMore_$()) {\n <div class=\"shrink-0 px-2 py-0.5 border-b border-neutral-800\">\n <button\n type=\"button\"\n class=\"w-full px-2 py-0.5 text-[9px] border border-neutral-600 text-neutral-300 rounded disabled:opacity-40\"\n [disabled]=\"isLoadingMore_$()\"\n (click)=\"handleLoadMoreEvents()\">\n {{ isLoadingMore_$() ? 'Loading…' : 'Load more events' }}\n </button>\n </div>\n}\n\n<div #eventList class=\"flex-1 min-h-0 overflow-y-auto\">\n @if (!displayRows_$().length) {\n <div class=\"flex items-center justify-center py-4 text-[10px] text-neutral-600\">\n No events yet\n </div>\n } @else {\n @for (row of displayRows_$(); track row.rowKey) {\n <div\n class=\"px-2 py-1 border-b border-neutral-700/30 cursor-pointer hover:bg-neutral-800/30 transition-colors\"\n [ngClass]=\"{'bg-neutral-800/30': selectedRowKey_$() === row.rowKey}\"\n (click)=\"handleSelectRow(row)\">\n <!-- Egy sor: badge + sequence + brief + time + copy (CC / OC session timeline minta). -->\n <div class=\"flex items-center gap-1.5 min-w-0\">\n <span\n class=\"text-[9px] px-1 py-0.5 rounded font-medium text-black shrink-0 leading-none whitespace-nowrap\"\n [class]=\"row.events[0].eventType | caSessionEventTypeColor\">\n {{ row.events[0].eventType }}\n @if (row.events.length > 1) {\n <span class=\"text-neutral-600 font-normal\"> ×{{ row.events.length }}</span>\n }\n </span>\n <span class=\"text-[10px] text-neutral-600 shrink-0 leading-none font-mono\">\n {{ row | caSessionTimelineStreamRowSequenceLabel }}\n </span>\n <span\n class=\"text-[10px] text-neutral-400 truncate font-mono min-w-0 flex-1 leading-none\"\n [title]=\"row | caSessionTimelineStreamRowBrief\">\n {{ row | caSessionTimelineStreamRowBrief }}\n </span>\n <!-- Timestamp — REQ-SES-EVT-TS-002 cycle 471: text-neutral-400 + [title] absolute ISO. -->\n <span class=\"text-[10px] text-neutral-400 shrink-0 leading-none\"\n [title]=\"(row.events[0].timestamp ?? '') | sAbsoluteTime\">\n {{ (row.events[0].timestamp ?? '') | sTimeAgo }}\n </span>\n <span class=\"inline-flex shrink-0\" (click)=\"$event.stopPropagation()\">\n <app-s-copy-button\n [content]=\"row | caSessionTimelineStreamRowClipboardText\"\n buttonTitle=\"Copy event (JSON)\"\n size=\"sm\" />\n </span>\n </div>\n @if (selectedRowKey_$() === row.rowKey) {\n <div class=\"mt-1 px-0 pt-1 border-t border-neutral-800/80\">\n <div class=\"text-[10px] text-neutral-500 mb-1\">Event data:</div>\n <pre\n class=\"p-2 bg-neutral-900 border border-neutral-700/50 rounded text-[10px] font-mono text-neonCyan/70 overflow-x-auto whitespace-pre-wrap break-words max-h-60\"\n [innerHTML]=\"row.events[0].data | caSessionJsonFormat\"></pre>\n </div>\n }\n </div>\n }\n }\n</div>\n", "import { Component, computed, inject, signal, Signal } from '@angular/core';\n\nimport { CA_ListItem_Interface } from '../../_models/interfaces/ca-view.interface';\nimport { CursorAcp_DataService } from '../../_services/cursor-acp.data-service';\nimport { CA_DetailUi_DataService } from '../../_services/ca-detail-ui.data-service';\n\n/**\n * CA session metadata panel — terminate a detailUi_DS-en keresztül (SSOT, toolbar is használja).\n */\n@Component({\n selector: 'app-ccap-ca-metadata',\n templateUrl: './ca-metadata.component.html',\n host: { class: 'flex flex-col' },\n})\n/** CA_Metadata_Component class. */\nexport class CA_Metadata_Component {\n\n private readonly ca_DS: CursorAcp_DataService = inject(CursorAcp_DataService);\n\n readonly detailUi_DS: CA_DetailUi_DataService =\n inject(CA_DetailUi_DataService);\n\n readonly session_$: Signal<CA_ListItem_Interface | null> = computed(\n (): CA_ListItem_Interface | null => this.ca_DS.selectedSession_$(),\n );\n\n readonly isLoading_$: Signal<boolean> = computed(\n (): boolean => this.ca_DS.selectedSessionLoading_$(),\n );\n\n readonly isArchiving_$ = signal<boolean>(false);\n readonly isHydrating_$ = signal<boolean>(false);\n\n /**\n * ACP session/load hydrate — mirror event + részlet refresh a data-service-ben.\n */\n async handleHydrate(force: boolean): Promise<void> {\n const s: CA_ListItem_Interface | null = this.session_$();\n const sid: string = s?.sessionId ?? '';\n if (!sid) {\n return;\n }\n this.isHydrating_$.set(true);\n try {\n await this.ca_DS.hydrateFromAgent({ sessionId: sid, force: force });\n } catch {\n // global error\n } finally {\n this.isHydrating_$.set(false);\n }\n }\n\n /**\n * Terminate — detailUi_DS SSOT-ra delegálva (toolbar is ugyanazt a signal-t használja).\n */\n handleTerminate(): void {\n void this.detailUi_DS.handleTerminate();\n }\n\n async handleArchiveToggle(): Promise<void> {\n const s: CA_ListItem_Interface | null = this.session_$();\n const sid: string = s?.sessionId ?? '';\n if (!sid || !s) {\n return;\n }\n this.isArchiving_$.set(true);\n try {\n const nextArchived: boolean = !(s.isArchived === true);\n await this.ca_DS.setSessionArchived({\n sessionId: sid,\n isArchived: nextArchived,\n });\n } catch {\n // global error\n } finally {\n this.isArchiving_$.set(false);\n }\n }\n}\n", "@if (isLoading_$()) {\n <div class=\"flex items-center justify-center py-6 text-[10px] text-neutral-600\">Loading…</div>\n} @else if (!session_$()) {\n <div class=\"flex items-center justify-center py-6 text-[10px] text-neutral-600\">No session</div>\n} @else {\n @let s = session_$()!;\n <div class=\"p-2 space-y-3 text-xs\">\n <div class=\"flex items-center gap-2\">\n <span\n class=\"px-2 py-0.5 rounded text-[10px] font-medium text-black\"\n [class]=\"s.status | caSessionStatusColor\">\n {{ s.status }}\n </span>\n </div>\n <div class=\"space-y-1.5\">\n <div class=\"text-[10px] font-semibold text-neutral-500 uppercase tracking-wide\">Session</div>\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-600\">Business ID</span>\n <span class=\"font-mono text-[10px] text-neutral-300 break-all\">{{ s.sessionId }}</span>\n </div>\n @if (s.acpSessionId) {\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-600\">ACP sessionId</span>\n <span class=\"font-mono text-[10px] text-neutral-300 break-all\">{{ s.acpSessionId }}</span>\n </div>\n }\n @if (s.label) {\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-600\">Label</span>\n <span class=\"text-[10px] text-neutral-300\">{{ s.label }}</span>\n </div>\n }\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-600\">Workspace</span>\n <span class=\"font-mono text-[10px] text-neutral-300 break-all\">{{ s.workspacePath }}</span>\n </div>\n @if (s.parentSessionId) {\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-600\">Parent CCAP session</span>\n <span class=\"font-mono text-[10px] text-neutral-300 break-all\">{{ s.parentSessionId }}</span>\n </div>\n }\n </div>\n @if (s.agentInfoName || s.agentInfoVersion) {\n <div class=\"space-y-1.5\">\n <div class=\"text-[10px] font-semibold text-neutral-500 uppercase tracking-wide\">Agent</div>\n <div class=\"text-[10px] text-neutral-300\">{{ s.agentInfoName }} {{ s.agentInfoVersion }}</div>\n </div>\n }\n <div class=\"space-y-1.5 pt-2 border-t border-neutral-800\">\n <div class=\"text-[10px] font-semibold text-neutral-500 uppercase tracking-wide\">Mirror / ACP</div>\n @if (s.isAcpConnected === true || s.isAcpConnected === false) {\n <div class=\"text-[10px] text-neutral-400\">\n ACP: {{ s.isAcpConnected ? 'connected' : 'offline' }}\n </div>\n }\n @if (s.loadSessionSupported === true || s.loadSessionSupported === false) {\n <div class=\"text-[10px] text-neutral-400\">\n session/load: {{ s.loadSessionSupported ? 'supported' : 'not advertised' }}\n </div>\n }\n @if (s.isTerminalMode === true || s.isTerminalMode === false) {\n <div class=\"text-[10px] text-neutral-400\">\n mode: {{ s.isTerminalMode ? 'terminal' : 'direct' }}\n </div>\n }\n @if (s.isTerminalMode === true) {\n <div class=\"text-[10px]\" [class]=\"s.isTerminalRunnerConnected ? 'text-green-400' : 'text-amber-400'\">\n runner: {{ s.isTerminalRunnerConnected ? 'connected' : 'disconnected' }}\n </div>\n }\n @if (s.lastSyncAt) {\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"text-[10px] text-neutral-600\">lastSyncAt</span>\n <span class=\"font-mono text-[10px] text-neutral-300\">{{ s.lastSyncAt }}</span>\n </div>\n }\n @if (s.lastSyncError) {\n <div class=\"text-[10px] text-amber-400/90 border border-amber-600/30 rounded px-1.5 py-1\">\n {{ s.lastSyncError }}\n </div>\n }\n <button\n type=\"button\"\n class=\"w-full px-2 py-1 text-[10px] border border-sky-700 text-sky-300 rounded disabled:opacity-40\"\n [disabled]=\"isHydrating_$() || s.loadSessionSupported !== true\"\n (click)=\"handleHydrate(false)\"\n title=\"ACP session/load → mirror hydrate event\">\n Hydrate from agent\n </button>\n <button\n type=\"button\"\n class=\"w-full px-2 py-1 text-[10px] border border-neutral-600 text-neutral-400 rounded disabled:opacity-40\"\n [disabled]=\"isHydrating_$() || s.loadSessionSupported !== true\"\n (click)=\"handleHydrate(true)\">\n Force re-hydrate\n </button>\n </div>\n <div class=\"flex flex-col gap-2 pt-2 border-t border-neutral-800\">\n <button\n type=\"button\"\n class=\"px-2 py-1 text-[10px] border border-red-800 text-red-300 rounded disabled:opacity-40\"\n [disabled]=\"detailUi_DS.isTerminating_$()\"\n (click)=\"handleTerminate()\">\n {{ detailUi_DS.isTerminating_$() ? 'Terminating…' : 'Terminate' }}\n </button>\n <button\n type=\"button\"\n class=\"px-2 py-1 text-[10px] border border-neutral-600 text-neutral-300 rounded disabled:opacity-40\"\n [disabled]=\"isArchiving_$()\"\n (click)=\"handleArchiveToggle()\">\n {{ s.isArchived ? 'Unarchive' : 'Archive' }}\n </button>\n </div>\n </div>\n}\n", "import { Component, inject, OnDestroy, OnInit, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { combineLatest, distinctUntilChanged, map, Observable } from 'rxjs';\n\nimport { DyNX_SubscriptionControl } from '@futdevpro/ngx-dynamo';\n\nimport { CA_ListItem_Interface } from '../../_models/interfaces/ca-view.interface';\nimport { CursorAcp_DataService } from '../../_services/cursor-acp.data-service';\nimport { ExS_InstanceContext_DataService } from '../../../../_services/exs-instance-context.data-service';\nimport { CA_DefaultSelection_Util } from '../../_collections/ca-default-selection.util';\nimport { CA_InputStorage_Util } from '../../_collections/ca-input-storage.util';\nimport {\n SESSION_DETAIL_METADATA_DEFAULT_WIDTH_PX,\n SESSION_DETAIL_METADATA_MAX_WIDTH_PX,\n SESSION_DETAIL_METADATA_MIN_WIDTH_PX,\n SESSION_DETAIL_TIMELINE_DEFAULT_WIDTH_PX,\n SESSION_DETAIL_TIMELINE_MAX_WIDTH_PX,\n SESSION_DETAIL_TIMELINE_MIN_WIDTH_PX,\n} from '../../../../../shared/_collections/consts/session-detail-panel-layout.const';\nimport { SHR_DocumentPointerDrag_Util } from '../../../../../shared/_collections/utils/shr-document-pointer-drag.util';\nimport { CA_DetailUi_DataService } from '../../_services/ca-detail-ui.data-service';\n\n/**\n * CA session detail — három oszlop layout (metadata, console, timeline).\n * Megjegyzés: `toObservable` belül `inject()` fut — konstruktor body-ban hívjuk (biztos injection context),\n * nem mező-inicializálóban (NG0203-at dobhat NgModule deklarált komponensnél).\n */\n@Component({\n selector: 'app-ccap-ca-detail',\n templateUrl: './ca-detail.component.html',\n host: { class: 'flex flex-col flex-1 min-h-0 overflow-hidden' },\n})\n/** CA_Detail_Component class. */\nexport class CA_Detail_Component extends DyNX_SubscriptionControl implements OnInit, OnDestroy {\n\n readonly ca_DS: CursorAcp_DataService = inject(CursorAcp_DataService);\n\n readonly detailUi_DS: CA_DetailUi_DataService =\n inject(CA_DetailUi_DataService);\n\n /**\n * BUG-INST-SES-REFRESH-001 (cycle 434): cross-instance refresh-re a\n * loadSessionDetail-be a peiContext sessionStorage restore előtt eshetne\n * vissza, mert a CA api-service a query-ben az activeCcapId-t fűzi —\n * `ensureInitialized()` await-tel garantáljuk a helyes ccapId-t.\n */\n private readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n\n private readonly route: ActivatedRoute = inject(ActivatedRoute);\n\n private readonly router: Router = inject(Router);\n\n /**\n * `combineLatest` forrásai — `toObservable` a konstruktorban inicializálva (injection context).\n */\n private readonly sessionsListObs$: Observable<CA_ListItem_Interface[]>;\n\n private readonly sessionsLoadingObs$: Observable<boolean>;\n\n readonly sessionId_$ = signal<string>('');\n readonly metadataWidth_$ = signal<number>(SESSION_DETAIL_METADATA_DEFAULT_WIDTH_PX);\n readonly timelineWidth_$ = signal<number>(SESSION_DETAIL_TIMELINE_DEFAULT_WIDTH_PX);\n readonly isResizing_$ = signal<boolean>(false);\n\n\n /** Üres route-hoz: egyetlen automatikus lista fetch, hogy ne loopoljunk. */\n private isEmptyRouteListFetchRequested: boolean = false;\n\n constructor() {\n super();\n this.sessionsListObs$ = toObservable(this.ca_DS.sessions_$);\n this.sessionsLoadingObs$ = toObservable(this.ca_DS.sessionsLoading_$);\n }\n\n ngOnInit(): void {\n this.metadataWidth_$.set(\n Math.max(\n SESSION_DETAIL_METADATA_MIN_WIDTH_PX,\n Math.min(\n SESSION_DETAIL_METADATA_MAX_WIDTH_PX,\n CA_InputStorage_Util.loadPanelWidth(\n 'metadata',\n SESSION_DETAIL_METADATA_DEFAULT_WIDTH_PX,\n ),\n ),\n ),\n );\n this.timelineWidth_$.set(\n Math.max(\n SESSION_DETAIL_TIMELINE_MIN_WIDTH_PX,\n Math.min(\n SESSION_DETAIL_TIMELINE_MAX_WIDTH_PX,\n CA_InputStorage_Util.loadPanelWidth(\n 'timeline',\n SESSION_DETAIL_TIMELINE_DEFAULT_WIDTH_PX,\n ),\n ),\n ),\n );\n\n // Cycle 785c (REQ-INST-SES-URL-001 Slice D): mind a sessionId, mind a\n // ccapId param-ot kiolvassuk a route-ból. Ha az URL-ben szerepel\n // ccapId → selectInstance MIELŐTT a load fut.\n const paramSessionId$: Observable<{ sessionId: string; ccapId: string }> =\n this.route.paramMap.pipe(\n map((params): { sessionId: string; ccapId: string } => ({\n sessionId: params.get('sessionId') ?? '',\n ccapId: params.get('ccapId') ?? '',\n })),\n distinctUntilChanged(\n (a, b) => a.sessionId === b.sessionId && a.ccapId === b.ccapId,\n ),\n );\n\n this.addSubscription(combineLatest([\n paramSessionId$,\n this.sessionsListObs$,\n this.sessionsLoadingObs$,\n ]).subscribe(\n ([routeParams, sessions, loading]: [{ sessionId: string; ccapId: string }, CA_ListItem_Interface[], boolean]): void => {\n const sessionId: string = routeParams.sessionId;\n if (routeParams.ccapId && this.peiContext_DS.activeCcapId_$() !== routeParams.ccapId) {\n this.peiContext_DS.selectInstance(routeParams.ccapId);\n }\n if (sessionId.length > 0) {\n this.isEmptyRouteListFetchRequested = false;\n if (sessionId !== this.sessionId_$()) {\n this.loadSession(sessionId);\n }\n return;\n }\n\n if (loading) {\n return;\n }\n\n if (!sessions.length && !this.isEmptyRouteListFetchRequested) {\n this.isEmptyRouteListFetchRequested = true;\n void this.ca_DS.loadSessions({\n includeArchived: CA_InputStorage_Util.loadShowArchived(),\n });\n return;\n }\n\n if (!sessions.length) {\n this.sessionId_$.set('');\n this.ca_DS.stopOpenSessionPolling();\n this.ca_DS.setActiveSessionId('');\n return;\n }\n\n const chosen: string = CA_DefaultSelection_Util.pickDefaultSessionId({\n sessions: sessions,\n lastSavedSessionId: CA_InputStorage_Util.loadLastSessionId(),\n includeArchived: CA_InputStorage_Util.loadShowArchived(),\n });\n if (chosen.length > 0) {\n // Cycle 785c: instance kontextus a route-ban.\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n const target: string[] = ccapId\n ? ['/ca-session', ccapId, chosen]\n : ['/ca-session', chosen];\n void this.router.navigate(target, { replaceUrl: true });\n return;\n }\n\n this.sessionId_$.set('');\n this.ca_DS.stopOpenSessionPolling();\n this.ca_DS.setActiveSessionId('');\n },\n ));\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.ca_DS.stopOpenSessionPolling();\n this.ca_DS.setActiveSessionId('');\n }\n\n /**\n * Részlet újrapróbálás — user gomb a hiba után.\n */\n handleRetryLoadDetail(): void {\n const sid: string = this.sessionId_$();\n if (!sid.length) {\n return;\n }\n this.loadSession(sid);\n }\n\n /**\n * Lista újrapróbálás — sidebar adatok + alapértelmezett navigáció.\n */\n handleRetryLoadList(): void {\n void this.ca_DS.loadSessions({\n includeArchived: CA_InputStorage_Util.loadShowArchived(),\n });\n }\n\n handleMetadataResizeStart(event: PointerEvent): void {\n const startWidth: number = this.metadataWidth_$();\n const startX: number = event.clientX;\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_DETAIL_METADATA_MIN_WIDTH_PX,\n Math.min(SESSION_DETAIL_METADATA_MAX_WIDTH_PX, startWidth + delta),\n );\n this.metadataWidth_$.set(newWidth);\n },\n onEnd: (): void => {\n this.isResizing_$.set(false);\n CA_InputStorage_Util.savePanelWidth('metadata', this.metadataWidth_$());\n },\n });\n }\n\n handleTimelineResizeStart(event: PointerEvent): void {\n const startWidth: number = this.timelineWidth_$();\n const startX: number = event.clientX;\n this.isResizing_$.set(true);\n SHR_DocumentPointerDrag_Util.attachUntilPointerUp({\n startEvent: event,\n onMove: (e: PointerEvent): void => {\n const delta: number = startX - e.clientX;\n const newWidth: number = Math.max(\n SESSION_DETAIL_TIMELINE_MIN_WIDTH_PX,\n Math.min(SESSION_DETAIL_TIMELINE_MAX_WIDTH_PX, startWidth + delta),\n );\n this.timelineWidth_$.set(newWidth);\n },\n onEnd: (): void => {\n this.isResizing_$.set(false);\n CA_InputStorage_Util.savePanelWidth('timeline', this.timelineWidth_$());\n },\n });\n }\n\n private loadSession(sessionId: string): void {\n this.sessionId_$.set(sessionId);\n this.ca_DS.clearLiveOutput();\n this.ca_DS.setActiveSessionId(sessionId);\n CA_InputStorage_Util.saveLastSessionId(sessionId);\n // BUG-INST-SES-REFRESH-001 (cycle 434): a peiContext sessionStorage restore\n // után indul a fetch — különben a CA api-service a query-ben rossz\n // (lokális fallback) ccapId-t küldene cross-instance refresh esetén.\n void this.peiContext_DS.ensureInitialized().then((): void => {\n void this.runLoadSessionDetailWithPoll(sessionId);\n });\n }\n\n /**\n * Sikeres részlet után indul a poll; hiba esetén `loadSessionDetail` `false` + globális error + `sessionDetailError_$`.\n */\n private async runLoadSessionDetailWithPoll(sessionId: string): Promise<void> {\n const ok: boolean = await this.ca_DS.loadSessionDetail({ sessionId: sessionId });\n if (ok && sessionId === this.sessionId_$()) {\n this.ca_DS.startOpenSessionPolling(sessionId);\n }\n }\n}\n", "@if (sessionId_$() && ca_DS.sessionDetailError_$()) {\n <div class=\"flex flex-col items-center justify-center h-full gap-3 px-4 py-6 overflow-y-auto\">\n <p class=\"text-xs text-neutral-400 text-center\">Could not load this session.</p>\n <app-ccap-error-display\n [error]=\"ca_DS.sessionDetailError_$()\"\n sourceLabelOverride=\"CA session detail\"\n class=\"block w-full max-w-lg\" />\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs border border-neonDefault text-neutral-300 rounded hover:bg-neutral-700\"\n (click)=\"handleRetryLoadDetail()\">\n Retry\n </button>\n </div>\n} @else if (sessionId_$() && ca_DS.selectedSessionLoading_$()) {\n <div class=\"flex flex-col items-center justify-center h-full gap-2 text-neutral-500 text-sm\">\n <span>Loading session…</span>\n <span class=\"text-xs text-neutral-600 font-mono truncate max-w-[90%]\">{{ sessionId_$() }}</span>\n </div>\n} @else if (sessionId_$()) {\n <app-s-session-detail-three-column-layout\n [isStartOpen]=\"detailUi_DS.isMetadataPanelOpen_$()\"\n [isEndOpen]=\"detailUi_DS.isTimelinePanelOpen_$()\"\n [startWidthPx]=\"metadataWidth_$()\"\n [endWidthPx]=\"timelineWidth_$()\"\n [isResizing]=\"isResizing_$()\"\n (startResizeStart)=\"handleMetadataResizeStart($event)\"\n (endResizeStart)=\"handleTimelineResizeStart($event)\">\n <div sDetailColumnStart>\n <app-ccap-ca-metadata />\n </div>\n <div sDetailColumnMain>\n <app-ccap-ca-console />\n </div>\n <div sDetailColumnEnd>\n <app-ccap-ca-timeline />\n </div>\n </app-s-session-detail-three-column-layout>\n} @else if (ca_DS.sessionsLoadError_$()) {\n <div class=\"flex flex-col items-center justify-center h-full gap-3 px-4 py-6 overflow-y-auto\">\n <p class=\"text-xs text-neutral-400 text-center\">Could not load CA session list.</p>\n <app-ccap-error-display\n [error]=\"ca_DS.sessionsLoadError_$()\"\n sourceLabelOverride=\"CA session list\"\n class=\"block w-full max-w-lg\" />\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs border border-neonDefault text-neutral-300 rounded hover:bg-neutral-700\"\n (click)=\"handleRetryLoadList()\">\n Retry list\n </button>\n </div>\n} @else if (ca_DS.sessionsLoading_$()) {\n <div class=\"flex flex-col items-center justify-center h-full gap-2 text-neutral-500 text-sm\">\n <span>Loading sessions…</span>\n </div>\n} @else if (!ca_DS.sessions_$().length) {\n <div class=\"flex flex-col items-center justify-center h-full gap-2 text-neutral-500 text-sm px-4 text-center\">\n <span>No CA sessions yet.</span>\n <span class=\"text-xs text-neutral-600\">Create one from the sidebar or check the server connection.</span>\n </div>\n} @else {\n <div class=\"flex flex-col items-center justify-center h-full gap-2 text-neutral-500 text-sm px-4 text-center\">\n <span>Select a session from the sidebar</span>\n <span class=\"text-xs text-neutral-600\">Opening the default session…</span>\n </div>\n}\n", "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { CCAP_ErrorDisplay_Component } from '../../../../_components/ccap-error-display/ccap-error-display.component';\nimport { CCAP_VoiceRecordButton_Component } from '../../../../_components/ccap-voice-record-button/ccap-voice-record-button.component';\nimport { CRD_InfoPopup_Component } from '../../../coordinator/_components/crd-info-popup/crd-info-popup.component';\nimport { SCH_SchedulePopup_Component } from '../../../scheduler/_components/sch-schedule-popup/sch-schedule-popup.component';\nimport { S_Modal_Component } from '../../../shared/_components/s-modal/s-modal.component';\nimport { Shared_Module } from '../../../shared/shared.module';\nimport { CA_Shell_Component } from './_components/ccap-ca-shell/ca-shell.component';\nimport { CA_Dashboard_Component } from './_components/ccap-ca-dashboard/ca-dashboard.component';\nimport { CA_Detail_Component } from './_components/ccap-ca-detail/ca-detail.component';\nimport { CA_Console_Component } from './_components/ccap-ca-console/ca-console.component';\nimport { CA_Timeline_Component } from './_components/ccap-ca-timeline/ca-timeline.component';\nimport { CA_Metadata_Component } from './_components/ccap-ca-metadata/ca-metadata.component';\nimport { CA_StatusColor_Pipe } from './_pipes/ca-status-color.pipe';\nimport { CA_EventTypeColor_Pipe } from './_pipes/ca-event-type-color.pipe';\nimport { CA_JsonFormat_Pipe } from './_pipes/ca-json-format.pipe';\nimport { CA_EventClipboardText_Pipe } from './_pipes/ca-event-clipboard-text.pipe';\nimport { CA_TimelineStreamRowBrief_Pipe } from './_pipes/ca-timeline-stream-row-brief.pipe';\nimport { CA_TimelineStreamRowClipboardText_Pipe } from './_pipes/ca-timeline-stream-row-clipboard-text.pipe';\nimport { CA_TimelineStreamRowSequenceLabel_Pipe } from './_pipes/ca-timeline-stream-row-sequence-label.pipe';\n\n/**\n * CA session modul route-ok — OC Session minta.\n */\nconst caSessionRoutes: Routes = [\n {\n path: '',\n component: CA_Shell_Component,\n children: [\n {\n path: '',\n pathMatch: 'full',\n component: CA_Detail_Component,\n },\n // Cycle 785c (REQ-INST-SES-URL-001 Slice D): új `:ccapId/:sessionId` route\n // a legacy `:sessionId` ELŐTT — more-specific-first.\n {\n path: ':ccapId/:sessionId',\n component: CA_Detail_Component,\n },\n {\n path: ':sessionId',\n component: CA_Detail_Component,\n },\n ],\n },\n];\n\n/**\n * CA session (Agent Client Protocol) feature modul — mirror lista, detail, console, timeline.\n */\n@NgModule({\n declarations: [\n CA_Shell_Component,\n CA_Dashboard_Component,\n CA_Detail_Component,\n CA_Console_Component,\n CA_Timeline_Component,\n CA_Metadata_Component,\n CA_StatusColor_Pipe,\n CA_EventTypeColor_Pipe,\n CA_JsonFormat_Pipe,\n CA_EventClipboardText_Pipe,\n CA_TimelineStreamRowBrief_Pipe,\n CA_TimelineStreamRowClipboardText_Pipe,\n CA_TimelineStreamRowSequenceLabel_Pipe,\n ],\n imports: [\n CommonModule,\n FormsModule,\n RouterModule.forChild(caSessionRoutes),\n CCAP_ErrorDisplay_Component,\n CCAP_VoiceRecordButton_Component,\n S_Modal_Component,\n SCH_SchedulePopup_Component,\n CRD_InfoPopup_Component,\n Shared_Module,\n ],\n})\n/** CaSession_Module class. */\nexport class CaSession_Module {}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["STORAGE_PREFIX", "CA_InputStorage_Util", "saveStatusFilter", "value", "Shr_LocalStoragePersistence_Util", "writeString", "loadStatusFilter", "readString", "saveShowArchived", "isArchived", "writeBoolean", "loadShowArchived", "readBoolean", "saveLastWorkspacePath", "loadLastWorkspacePath", "saveLastLabel", "loadLastLabel", "savePromptDraft", "sessionId", "content", "SHR_PromptDraftStorage_Util", "saveDraft", "loadPromptDraft", "loadDraft", "clearPromptDraft", "clearDraft", "hasPromptDraft", "hasDraft", "savePanelOpen", "panelKey", "isOpen", "loadPanelOpen", "defaultOpen", "savePanelWidth", "width", "writeNumber", "loadPanelWidth", "defaultWidth", "readNumber", "saveLastSessionId", "loadLastSessionId", "saveShowAgentUpdates", "loadShowAgentUpdates", "saveShowSessionStatus", "loadShowSessionStatus", "CA_DetailUi_DataService", "ca_DS", "inject", "CursorAcp_DataService", "isTimelinePanelOpen_$", "signal", "CA_InputStorage_Util", "loadPanelOpen", "isMetadataPanelOpen_$", "isTerminating_$", "isStopping_$", "isShowSessionStatus_$", "loadShowSessionStatus", "isShowAgentUpdates_$", "loadShowAgentUpdates", "handleToggleTimeline", "newValue", "set", "savePanelOpen", "handleToggleMetadata", "handleToggleSessionStatus", "saveShowSessionStatus", "handleToggleAgentUpdates", "saveShowAgentUpdates", "handleStopExecution", "__async", "selected", "selectedSession_$", "sessionId", "stopExecution", "handleTerminate", "terminateSession", "factory", "\u0275fac", "providedIn", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275classProp", "rt_r1", "isAcpConnected", "\u0275\u0275textInterpolate1", "loadSessionSupported", "\u0275\u0275element", "\u0275\u0275property", "ctx_r1", "ca_DS", "sessionsLoadError_$", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r3", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleOpenCreateDialog", "$event", "_r4", "handleSelectSession", "handleRowContextMenu", "handleScheduleIndicatorClick", "handleCoordinatorIndicatorClick", "sessionRowViews_$", "activeSessionId_$", "opt_r6", "path", "\u0275\u0275textInterpolate2", "label", "_r5", "handlePathOptionChange", "\u0275\u0275repeaterCreate", "CA_Dashboard_Component_Conditional_41_For_4_Template", "_forTrack0", "selectedPathOption_$", "\u0275\u0275repeater", "newAgentSessionWorkspace_DS", "workspacePathPickerOptions_$", "createSessionError_$", "_r7", "handleCloseCtxMenu", "handleCtxCopyLink", "\u0275\u0275template", "CA_Dashboard_Component_Conditional_55_Case_3_Template", "CA_Dashboard_Component_Conditional_55_Case_4_Template", "CA_Dashboard_Component_Conditional_55_Case_5_Template", "handleCtxToggleArchive", "\u0275\u0275styleProp", "ctxMenuPos_$", "x", "y", "linkCopyState_$", "\u0275\u0275conditional", "tmp_5_0", "ctx", "isArchived", "CA_Dashboard_Component", "inject", "CursorAcp_DataService", "ExS_NewAgentWorkspace_DataService", "peiContext_DS", "ExS_InstanceContext_DataService", "scheduledJobs_DS", "SCH_ScheduledJobs_DataService", "coordinator_DS", "Coordinator_DataService", "router", "Router", "globalError_CS", "CCAP_GlobalError_ControlService", "instanceChangeEffect", "effect", "ccapId", "activeCcapId_$", "includeArchived", "showArchived_$", "untracked", "loadSessions", "undefined", "statusFilter_$", "signal", "searchQuery_$", "isCreateDialogOpen_$", "newSessionWorkspacePath_$", "newSessionLabel_$", "isCreating_$", "isSyncing_$", "sessionSelected", "output", "ngOnInit", "savedFilter", "CA_InputStorage_Util", "loadStatusFilter", "set", "loadShowArchived", "ensureInitialized", "then", "loadAll", "loadAllCoordinatorsForManagementPage", "handleStatusFilterChange", "value", "saveStatusFilter", "handleToggleShowArchived", "newValue", "saveShowArchived", "filteredSessions_$", "computed", "q", "st", "trim", "sessions_$", "filter", "s", "sessionId", "status", "CCAP_TextSearch_Util", "includesText", "workspacePath", "lastPrompt", "sort", "a", "b", "listFreshnessSortMs", "row", "iso", "lastActivityAt", "length", "t", "Date", "parse", "isNaN", "scheduledIds", "scheduledSessionIds_$", "coordinatedIds", "coordinatedSessionIds_$", "map", "id", "statusColorClass", "S_SessionStatusColor_Util", "resolve", "promptCount", "isRunning", "hasSchedule", "has", "hasCoordinator", "hasDraft", "hasPromptDraft", "target", "navigate", "emit", "__async", "refreshWorkspacePathPickerOptions", "fallback", "resolveInitialWorkspacePath", "lastWorkspacePath", "loadLastWorkspacePath", "savedLabel", "loadLastLabel", "handleCloseCreateDialog", "handleConfirmCreate", "ws", "saveLastWorkspacePath", "saveLastLabel", "newId", "createSession", "err", "ctxMenuSession_$", "payload", "session", "find", "event", "clientX", "clientY", "url", "window", "location", "origin", "result", "copyToClipboard", "ok", "setTimeout", "schedulePopupSessionId_$", "handleCloseSchedulePopup", "coordinatorPopupSessionId_$", "handleCloseCoordinatorPopup", "handleArchiveRow", "handleSyncFromAgent", "syncFromAgent", "wasActive", "nextArchived", "setSessionArchived", "selectors", "hostAttrs", "outputs", "decls", "vars", "consts", "template", "rf", "CA_Dashboard_Component_Conditional_8_Template", "CA_Dashboard_Component_Conditional_31_Template", "CA_Dashboard_Component_Conditional_33_Template", "CA_Dashboard_Component_Conditional_34_Template", "CA_Dashboard_Component_Conditional_35_Template", "CA_Dashboard_Component_Conditional_41_Template", "CA_Dashboard_Component_Conditional_47_Template", "CA_Dashboard_Component_Conditional_55_Template", "tmp_1_0", "mirrorRuntime_$", "\u0275\u0275classMap", "sessionsLoading_$", "tmp_23_0", "CA_StatusColor_Pipe", "transform", "status", "pure", "\u0275\u0275element", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r2", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "detailUi_DS", "handleToggleMetadata", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275classMap", "isMetadataPanelOpen_$", "\u0275\u0275template", "CA_Shell_Component_Conditional_11_Conditional_2_Conditional_2_Template", "\u0275\u0275property", "\u0275\u0275pipeBind1", "ctx_ir4", "session", "status", "\u0275\u0275advance", "\u0275\u0275conditional", "isLive", "CA_Shell_Component_Conditional_11_Conditional_2_Template", "CA_Shell_Component_Conditional_11_Conditional_3_Template", "title", "\u0275\u0275textInterpolate1", "isLoading", "_r6", "handleStopExecution", "isStopping_$", "_r5", "handleToggleTimeline", "CA_Shell_Component_Conditional_13_Conditional_2_Template", "isTimelinePanelOpen_$", "CA_Shell_Component", "ca_DS", "inject", "CursorAcp_DataService", "CA_DetailUi_DataService", "caTopBar_$", "computed", "activeId", "activeSessionId_$", "loading", "selectedSessionLoading_$", "sel", "selectedSession_$", "fromList", "sessions_$", "find", "s", "sessionId", "detailMatches", "label", "st", "showActions", "sidebarWidth_$", "signal", "SESSION_SHELL_SIDEBAR_DEFAULT_WIDTH_PX", "isSidebarOpen_$", "isResizing_$", "ngOnInit", "stored", "CA_InputStorage_Util", "loadPanelWidth", "set", "Math", "max", "SESSION_SHELL_SIDEBAR_MIN_WIDTH_PX", "min", "SESSION_SHELL_SIDEBAR_MAX_WIDTH_PX", "loadPanelOpen", "handleSidebarResizeStart", "event", "startX", "clientX", "startWidth", "SHR_DocumentPointerDrag_Util", "attachUntilPointerUp", "startEvent", "onMove", "e", "delta", "newWidth", "onEnd", "savePanelWidth", "handleToggleSidebar", "update", "v", "savePanelOpen", "handleSessionSelectedFromDashboard", "window", "innerWidth", "SESSION_SHELL_MOBILE_BREAKPOINT_PX", "selectors", "hostAttrs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275declareLet", "i0", "_r1", "CA_Shell_Component_Conditional_8_Template", "CA_Shell_Component_Conditional_9_Template", "CA_Shell_Component_Conditional_11_Template", "CA_Shell_Component_Conditional_13_Template", "$event", "\u0275\u0275classProp", "\u0275\u0275storeLet", "ctx_ir7", "CA_DefaultSelection_Util", "pickDefaultSessionId", "params", "sessions", "length", "lastId", "lastSavedSessionId", "trim", "hit", "find", "s", "sessionId", "includeArchived", "isArchived", "firstNonArchived", "Boolean", "CA_ConsoleDisplayFilter_Util", "toolCallUpdateBriefSubtype", "filterForAgentUpdatesVisibility", "params", "list", "messages", "lastIndex", "length", "out", "i", "m", "type", "push", "isShowAgentUpdates", "briefSubtype", "CA_ConsolePairToolLifecycle_Util", "pairToolResultsIntoToolStarts", "messages", "toolIdToIndex", "Map", "i", "length", "m", "type", "briefSubtype", "startParsed", "CA_ToolCallMirrorParse_Util", "tryParseStableListKey", "listKey", "role", "set", "toolCallId", "size", "pairedRowIndices", "Set", "next", "map", "__spreadValues", "keyParsed", "isSuccessRow", "isErrorRow", "toolIndex", "get", "undefined", "expandable", "buildPairedExpandableRawOutput", "rawData", "fallbackText", "text", "paired", "expandableContent", "isError", "__spreadProps", "pairedResult", "isToolCallFailedIndicator", "add", "filter", "_", "idx", "has", "params", "upd", "update", "Array", "isArray", "stringifyRecordOrFallback", "value", "sections", "contentArr", "Reflect", "contentStr", "formatContent", "push", "rawOut", "s", "JSON", "stringify", "SHR_JsonSnippetFormat_Util", "looksLikeJson", "formatJson", "join", "CA_ConsoleToBubbleView_Util", "fromConsoleMessage", "msg", "kind", "mapTypeToKind", "type", "useRawBubbleKind", "CCAP_AgentConsoleBubbleKind_Type", "raw", "streamTextRole", "userPrompt", "isUserAligned", "subtype", "briefSubtype", "undefined", "length", "mirrorEventType", "toolNameForView", "toolDisplayName", "headerDot", "isToolCallFailedIndicator", "paired", "pairedResult", "text", "expandableContent", "rawData", "isError", "listKey", "bodyText", "timestampIso", "timestamp", "toolName", "headerStatusDot", "flags", "showCopy", "showRawInfo", "useEditDiffForExpandable", "assistant", "thinking", "tool", "toolResult", "error", "info", "status", "statusUpdate", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275classMap", "\u0275\u0275pipeBind1", "row_r2", "status", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r3", "ctx_r3", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleTtsCached", "row_r5", "isUserAligned", "\u0275\u0275property", "kind", "bubbleKind", "tool", "\u0275\u0275pureFunction0", "_c1", "_c2", "CA_Console_Component", "messagesEndRef", "ca_DS", "inject", "CursorAcp_DataService", "detailUi_DS", "CA_DetailUi_DataService", "voiceInputUi_DS", "VNP_InputUi_DataService", "sessionQueue_DS", "ExS_Queue_DataService", "route", "ActivatedRoute", "promptInput_$", "signal", "isSending_$", "isExecuting_$", "computed", "selectedSession_$", "messages_$", "consoleMessages_$", "ttsCachedKeys_$", "Set", "messageKey", "update", "s", "bubbleViews_$", "assembled", "assembledMessages_$", "length", "sid", "sessionId", "cached", "views", "map", "msg", "SHR_ExtSessionMsgToBubbleView_Util", "fromAssembledMessage", "cachedKeys", "SHR_BubbleViewGrouping_Util", "groupSubAgentItems", "groupConsecutiveToolItems", "show", "isShowAgentUpdates_$", "filtered", "CA_ConsoleDisplayFilter_Util", "filterForAgentUpdatesVisibility", "messages", "isShowAgentUpdates", "CA_ConsolePairToolLifecycle_Util", "pairToolResultsIntoToolStarts", "CA_ConsoleToBubbleView_Util", "fromConsoleMessage", "CCAP_AgentConsoleBubbleKind_Type", "isComposerSendDisabled_$", "trim", "previousConsoleMessageCount", "activeSessionId_$", "ngAfterViewInit", "scheduleScrollToBottom", "ngAfterViewChecked", "currentCount", "ngOnInit", "snapshot", "paramMap", "get", "set", "CA_InputStorage_Util", "loadPromptDraft", "subscribeToSession", "baseRoute", "handleSendPrompt", "__async", "content", "clearPromptDraft", "sendPrompt", "handleComposerDraftChange", "value", "savePromptDraft", "handleVoiceSegment", "event", "t", "text", "current", "next", "autoSendAfterVoice_$", "isFinal", "setTimeout", "el", "nativeElement", "scrollIntoView", "block", "inline", "selectors", "viewQuery", "rf", "ctx", "\u0275\u0275template", "CA_Console_Component_Conditional_5_Template", "CA_Console_Component_Conditional_7_Template", "CA_Console_Component_Conditional_8_Template", "\u0275\u0275repeaterCreate", "CA_Console_Component_For_10_Template", "_forTrack0", "\u0275\u0275element", "i0", "_r1", "handleStopExecution", "startEditing", "editingText_$", "saveEdit", "cancelEdit", "removeItem", "sendNow", "reorderItem", "queueItemId", "direction", "\u0275\u0275conditional", "tmp_2_0", "selectedSessionLoading_$", "\u0275\u0275repeater", "isStopping_$", "items_$", "isLocked_$", "editingItemId_$", "CA_EventTypeColor_Pipe", "transform", "eventType", "pure", "CA_JsonFormat_Pipe", "sanitizer", "constructor", "transform", "data", "bypassSecurityTrustHtml", "json", "JSON", "stringify", "highlighted", "highlightJson", "MULTILINE_THRESHOLD", "replace", "match", "test", "length", "includes", "formatMultilineString", "slice", "\u0275\u0275directiveInject", "DomSanitizer", "pure", "CA_TimelineRowDisplay_Util", "eventBrief", "ev", "data", "eventType", "raw", "content", "length", "substring", "len", "contentLength", "phase", "prev", "previousAcpSessionId", "next", "newAcpSessionId", "p", "n", "fp", "acpLoadFingerprint", "json", "JSON", "stringify", "streamRowBrief", "row", "events", "parts", "CA_MirrorStreamMerge_Util", "parseStreamChunkFromMirrorData", "push", "text", "full", "join", "streamRowSequenceLabel", "String", "sequence", "firstSeq", "lastSeq", "streamRowClipboardText", "SHR_UnknownValuePrettyJson_Util", "prettyStringifyUnknown", "merged", "map", "e", "timestamp", "sessionId", "CA_TimelineStreamRowBrief_Pipe", "transform", "row", "CA_TimelineRowDisplay_Util", "streamRowBrief", "pure", "CA_TimelineStreamRowClipboardText_Pipe", "transform", "row", "CA_TimelineRowDisplay_Util", "streamRowClipboardText", "pure", "CA_TimelineStreamRowSequenceLabel_Pipe", "transform", "row", "CA_TimelineRowDisplay_Util", "streamRowSequenceLabel", "pure", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r2", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleLoadMoreEvents", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275property", "isLoadingMore_$", "\u0275\u0275textInterpolate1", "row_r5", "events", "length", "\u0275\u0275element", "\u0275\u0275pipeBind1", "data", "\u0275\u0275sanitizeHtml", "_r4", "$implicit", "handleSelectRow", "\u0275\u0275template", "CA_Timeline_Component_Conditional_17_For_1_Conditional_5_Template", "$event", "i0", "stopPropagation", "CA_Timeline_Component_Conditional_17_For_1_Conditional_20_Template", "\u0275\u0275pureFunction1", "_c1", "selectedRowKey_$", "rowKey", "\u0275\u0275classMap", "eventType", "\u0275\u0275conditional", "tmp_19_0", "timestamp", "undefined", "tmp_20_0", "\u0275\u0275repeaterCreate", "CA_Timeline_Component_Conditional_17_For_1_Template", "_forTrack0", "\u0275\u0275repeater", "displayRows_$", "CA_Timeline_Component", "ca_DS", "inject", "CursorAcp_DataService", "detailUi_DS", "CA_DetailUi_DataService", "signal", "isAutoScroll_$", "eventListRef", "previousRowCount", "computed", "asc", "selectedSessionEvents_$", "sort", "CA_EventChronologicalSort_Util", "compareMirrorEventsAsc", "CA_MirrorStreamMerge_Util", "foldEventsToTimelineRows", "reverse", "ngAfterViewChecked", "currentCount", "scrollToTop", "handleToggleAutoScroll", "update", "v", "row", "key", "set", "__async", "sid", "activeSessionId_$", "loadMoreSessionEvents", "sessionId", "element", "nativeElement", "scrollTop", "selectors", "viewQuery", "rf", "ctx", "_r1", "handleToggleSessionStatus", "handleToggleAgentUpdates", "CA_Timeline_Component_Conditional_13_Template", "CA_Timeline_Component_Conditional_16_Template", "CA_Timeline_Component_Conditional_17_Template", "isShowSessionStatus_$", "isShowAgentUpdates_$", "sessionEventsHasMore_$", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "s_r2", "acpSessionId", "label", "parentSessionId", "\u0275\u0275textInterpolate2", "agentInfoName", "agentInfoVersion", "\u0275\u0275textInterpolate1", "isAcpConnected", "loadSessionSupported", "isTerminalMode", "\u0275\u0275classMap", "isTerminalRunnerConnected", "lastSyncAt", "lastSyncError", "\u0275\u0275declareLet", "\u0275\u0275template", "CA_Metadata_Component_Conditional_2_Conditional_14_Template", "CA_Metadata_Component_Conditional_2_Conditional_15_Template", "CA_Metadata_Component_Conditional_2_Conditional_21_Template", "CA_Metadata_Component_Conditional_2_Conditional_22_Template", "CA_Metadata_Component_Conditional_2_Conditional_26_Template", "CA_Metadata_Component_Conditional_2_Conditional_27_Template", "CA_Metadata_Component_Conditional_2_Conditional_28_Template", "CA_Metadata_Component_Conditional_2_Conditional_29_Template", "CA_Metadata_Component_Conditional_2_Conditional_30_Template", "CA_Metadata_Component_Conditional_2_Conditional_31_Template", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleHydrate", "handleTerminate", "handleArchiveToggle", "\u0275\u0275storeLet", "session_$", "\u0275\u0275pipeBind1", "s_r4", "status", "sessionId", "\u0275\u0275conditional", "workspacePath", "\u0275\u0275property", "isHydrating_$", "detailUi_DS", "isTerminating_$", "isArchiving_$", "isArchived", "CA_Metadata_Component", "ca_DS", "inject", "CursorAcp_DataService", "CA_DetailUi_DataService", "computed", "selectedSession_$", "isLoading_$", "selectedSessionLoading_$", "signal", "force", "__async", "sid", "set", "hydrateFromAgent", "s", "nextArchived", "setSessionArchived", "selectors", "hostAttrs", "decls", "vars", "consts", "template", "rf", "ctx", "CA_Metadata_Component_Conditional_0_Template", "CA_Metadata_Component_Conditional_1_Template", "CA_Metadata_Component_Conditional_2_Template", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275element", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleRetryLoadDetail", "\u0275\u0275advance", "\u0275\u0275property", "ca_DS", "sessionDetailError_$", "\u0275\u0275textInterpolate", "sessionId_$", "$event", "_r3", "handleMetadataResizeStart", "handleTimelineResizeStart", "detailUi_DS", "isMetadataPanelOpen_$", "isTimelinePanelOpen_$", "metadataWidth_$", "timelineWidth_$", "isResizing_$", "_r4", "handleRetryLoadList", "sessionsLoadError_$", "CA_Detail_Component", "DyNX_SubscriptionControl", "inject", "CursorAcp_DataService", "CA_DetailUi_DataService", "peiContext_DS", "ExS_InstanceContext_DataService", "route", "ActivatedRoute", "router", "Router", "sessionsListObs$", "sessionsLoadingObs$", "signal", "SESSION_DETAIL_METADATA_DEFAULT_WIDTH_PX", "SESSION_DETAIL_TIMELINE_DEFAULT_WIDTH_PX", "isEmptyRouteListFetchRequested", "constructor", "toObservable", "sessions_$", "sessionsLoading_$", "ngOnInit", "set", "Math", "max", "SESSION_DETAIL_METADATA_MIN_WIDTH_PX", "min", "SESSION_DETAIL_METADATA_MAX_WIDTH_PX", "CA_InputStorage_Util", "loadPanelWidth", "SESSION_DETAIL_TIMELINE_MIN_WIDTH_PX", "SESSION_DETAIL_TIMELINE_MAX_WIDTH_PX", "paramSessionId$", "paramMap", "pipe", "map", "params", "sessionId", "get", "ccapId", "distinctUntilChanged", "a", "b", "addSubscription", "combineLatest", "subscribe", "routeParams", "sessions", "loading", "activeCcapId_$", "selectInstance", "length", "loadSession", "loadSessions", "includeArchived", "loadShowArchived", "stopOpenSessionPolling", "setActiveSessionId", "chosen", "CA_DefaultSelection_Util", "pickDefaultSessionId", "lastSavedSessionId", "loadLastSessionId", "target", "navigate", "replaceUrl", "ngOnDestroy", "sid", "event", "startWidth", "startX", "clientX", "SHR_DocumentPointerDrag_Util", "attachUntilPointerUp", "startEvent", "onMove", "e", "delta", "newWidth", "onEnd", "savePanelWidth", "clearLiveOutput", "saveLastSessionId", "ensureInitialized", "then", "runLoadSessionDetailWithPoll", "__async", "loadSessionDetail", "startOpenSessionPolling", "selectors", "hostAttrs", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "CA_Detail_Component_Conditional_0_Template", "CA_Detail_Component_Conditional_1_Template", "CA_Detail_Component_Conditional_2_Template", "CA_Detail_Component_Conditional_3_Template", "CA_Detail_Component_Conditional_4_Template", "CA_Detail_Component_Conditional_5_Template", "CA_Detail_Component_Conditional_6_Template", "\u0275\u0275conditional", "selectedSessionLoading_$", "caSessionRoutes", "path", "component", "CA_Shell_Component", "children", "pathMatch", "CA_Detail_Component", "CaSession_Module", "CommonModule", "FormsModule", "RouterModule", "forChild", "CCAP_ErrorDisplay_Component", "CCAP_VoiceRecordButton_Component", "S_Modal_Component", "SCH_SchedulePopup_Component", "CRD_InfoPopup_Component", "Shared_Module"]
|
|
7
|
+
}
|