@futdevpro/ccap 1.1.3102 → 1.1.3125
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/cli/build/_commands/update.spec.d.ts +17 -0
- package/cli/build/_commands/update.spec.d.ts.map +1 -0
- package/cli/build/_commands/update.spec.js +147 -0
- package/cli/build/_commands/update.spec.js.map +1 -0
- package/client-dist/{agent-instances.module-IAMOEVNL.js → agent-instances.module-3N6ANN67.js} +2 -2
- package/client-dist/ca.module-VKQKP6JP.js +5 -0
- package/client-dist/{ca.module-DC5VMK5Y.js.map → ca.module-VKQKP6JP.js.map} +3 -3
- package/client-dist/{cc-usage-dashboard.component-5JM6S64F.js → cc-usage-dashboard.component-65FF5SWE.js} +2 -2
- package/client-dist/{cc.module-U26365SI.js → cc.module-BKTAO4S7.js} +2 -2
- package/client-dist/{chunk-NY3HJA4F.js → chunk-34ASVWQQ.js} +2 -2
- package/client-dist/{chunk-JYWGTCQS.js → chunk-3BIY7XPG.js} +2 -2
- package/client-dist/{chunk-JKBO6HPX.js → chunk-3EWLYCQY.js} +2 -2
- package/client-dist/{chunk-VFHT4OYM.js → chunk-45RYGYWU.js} +2 -2
- package/client-dist/{chunk-SOTVAGPA.js → chunk-46VCON6Y.js} +2 -2
- package/client-dist/{chunk-67IPTVUW.js → chunk-4EPTK7TX.js} +2 -2
- package/client-dist/{chunk-3MWOLKTF.js → chunk-57RF5FWV.js} +2 -2
- package/client-dist/{chunk-JB74RJ77.js → chunk-6NAFJLV5.js} +2 -2
- package/client-dist/{chunk-AAEHV4SQ.js → chunk-7ELFOHXT.js} +2 -2
- package/client-dist/{chunk-7SYCAQ3W.js → chunk-7UGLDNS5.js} +2 -2
- package/client-dist/{chunk-F77OUK5E.js → chunk-A7WV3WRL.js} +2 -2
- package/client-dist/{chunk-DJDDRV36.js → chunk-AELBVLTQ.js} +2 -2
- package/client-dist/{chunk-ZKO4XWH5.js → chunk-ALT4GOBR.js} +2 -2
- package/client-dist/{chunk-ZD7RXMQQ.js → chunk-BSZUQJTF.js} +2 -2
- package/client-dist/{chunk-7DTPD5LC.js → chunk-C5SDBZ5G.js} +2 -2
- package/client-dist/{chunk-6B7RLLBU.js → chunk-C5WLCPTP.js} +2 -2
- package/client-dist/{chunk-UM3J2Z34.js → chunk-DBF3SSPS.js} +2 -2
- package/client-dist/{chunk-7V4RNM4Q.js → chunk-EHNLVVAY.js} +2 -2
- package/client-dist/{chunk-XV426GB5.js → chunk-ES7OKROB.js} +2 -2
- package/client-dist/{chunk-2PS4UZPR.js → chunk-EUAB5X46.js} +2 -2
- package/client-dist/{chunk-XAYLCDHO.js → chunk-FIPZN6Q5.js} +2 -2
- package/client-dist/{chunk-LFZQANWS.js → chunk-FXN33EYC.js} +2 -2
- package/client-dist/chunk-HTF2IFDS.js +9 -0
- package/client-dist/chunk-HTF2IFDS.js.map +7 -0
- package/client-dist/{chunk-OZWGRRQJ.js → chunk-IA2MKRM5.js} +2 -2
- package/client-dist/{chunk-UA2X6KM6.js → chunk-IRCYROGT.js} +2 -2
- package/client-dist/{chunk-OKG4QBWE.js → chunk-KBLPP6PQ.js} +2 -2
- package/client-dist/{chunk-53PQHPA7.js → chunk-MANX3UTJ.js} +2 -2
- package/client-dist/{chunk-Z3BYKPE4.js → chunk-NAHXFBXE.js} +2 -2
- package/client-dist/{chunk-PPKBA66S.js → chunk-NJPJYDH6.js} +2 -2
- package/client-dist/{chunk-5I65O626.js → chunk-NK4RLW4D.js} +2 -2
- package/client-dist/{chunk-W3DWFUQD.js → chunk-OZHMTJQJ.js} +2 -2
- package/client-dist/{chunk-LVN7UVJS.js → chunk-PATTK77E.js} +2 -2
- package/client-dist/{chunk-UACFECPK.js → chunk-PN5J6JP2.js} +2 -2
- package/client-dist/{chunk-7MGY4Z6C.js → chunk-Q4Z4WTJ3.js} +2 -2
- package/client-dist/{chunk-CFPTAUCU.js → chunk-QXM45TNB.js} +2 -2
- package/client-dist/{chunk-CFPTAUCU.js.map → chunk-QXM45TNB.js.map} +1 -1
- package/client-dist/{chunk-7I2XVKTK.js → chunk-R5DCGGN5.js} +2 -2
- package/client-dist/{chunk-EIHYMXLV.js → chunk-RO7BDRAB.js} +2 -2
- package/client-dist/{chunk-T4KV43VE.js → chunk-RVZXTBBM.js} +2 -2
- package/client-dist/{chunk-OJHFALFZ.js → chunk-SC33BNLI.js} +2 -2
- package/client-dist/{chunk-K4HTQXPA.js → chunk-TCJ6WHLQ.js} +2 -2
- package/client-dist/{chunk-FX2IX5QH.js → chunk-TDVYMNCA.js} +2 -2
- package/client-dist/{chunk-EO3HTELG.js → chunk-TU3VH4LZ.js} +2 -2
- package/client-dist/{chunk-BFTQRL6H.js → chunk-TWWHZRZD.js} +2 -2
- package/client-dist/{chunk-JT4QERQZ.js → chunk-UCATC7Y7.js} +2 -2
- package/client-dist/{chunk-PMJFXD5Y.js → chunk-UOOILECA.js} +2 -2
- package/client-dist/{chunk-LUM4O4EP.js → chunk-V46EMM4L.js} +2 -2
- package/client-dist/{chunk-TSVUULFD.js → chunk-VM6JI2LV.js} +2 -2
- package/client-dist/{chunk-IXRSAIZI.js → chunk-WJTUNKFF.js} +2 -2
- package/client-dist/{chunk-PL27V3FQ.js → chunk-WV4WOPQF.js} +2 -2
- package/client-dist/{chunk-JU2L5GD6.js → chunk-WWJB3AHB.js} +2 -2
- package/client-dist/{chunk-FT6CK74E.js → chunk-XEGOHOPX.js} +2 -2
- package/client-dist/{chunk-KNFABSWN.js → chunk-XRPVTKIP.js} +2 -2
- package/client-dist/{chunk-HTKVFYOK.js → chunk-YIVWQSH4.js} +2 -2
- package/client-dist/{chunk-D5CTQY3J.js → chunk-YPFW4KUX.js} +7 -7
- package/client-dist/chunk-YPFW4KUX.js.map +7 -0
- package/client-dist/{chunk-CMBU47YJ.js → chunk-ZGNVQEFP.js} +2 -2
- package/client-dist/{chunk-U75T3UCV.js → chunk-ZLSL5N3C.js} +2 -2
- package/client-dist/{consultant.module-PYA6DSZV.js → consultant.module-5G73QF4O.js} +2 -2
- package/client-dist/{crd.module-3YGC7EWW.js → crd.module-PF5ZYSFN.js} +2 -2
- package/client-dist/{dashboard.module-HMCFQDZL.js → dashboard.module-QIH6EALQ.js} +2 -2
- package/client-dist/{do.module-5YSCN5V5.js → do.module-IZT2TG65.js} +2 -2
- package/client-dist/{document-library.module-Y4EZKOAF.js → document-library.module-OC3PF44G.js} +2 -2
- package/client-dist/{embedding-eval.module-47RTIIH5.js → embedding-eval.module-FXSI4XED.js} +2 -2
- package/client-dist/{embedding-registry.module-HYQ4UJFK.js → embedding-registry.module-W65CI3YZ.js} +2 -2
- package/client-dist/{err.module-QVOUZKJ2.js → err.module-34QTGFAO.js} +2 -2
- package/client-dist/{feedback.module-A3OR6GVO.js → feedback.module-LWOMLYP2.js} +2 -2
- package/client-dist/{host-runtime-mcp.module-5ZSU54NK.js → host-runtime-mcp.module-4GXDHVJV.js} +2 -2
- package/client-dist/index.html +1 -1
- package/client-dist/{live-dev-pipeline.module-EGZL6S75.js → live-dev-pipeline.module-KB44IF3A.js} +2 -2
- package/client-dist/{logs.module-BHYYAZKF.js → logs.module-S6JGYNTG.js} +2 -2
- package/client-dist/{main-YT72UH4P.js → main-KV4C3EP5.js} +3 -3
- package/client-dist/{master-control-remote-poc.module-FYJMCGQ3.js → master-control-remote-poc.module-HSWDJ7AR.js} +2 -2
- package/client-dist/{mobile-app.module-NHPMG7QY.js → mobile-app.module-CPULBFKG.js} +2 -2
- package/client-dist/{model-registry.module-U63UCPM5.js → model-registry.module-SCIPNUN7.js} +2 -2
- package/client-dist/{oc.module-YN66ETIL.js → oc.module-7SUQHFMM.js} +3 -3
- package/client-dist/{oc.module-YN66ETIL.js.map → oc.module-7SUQHFMM.js.map} +3 -3
- package/client-dist/{orc.module-SIS3R6KN.js → orc.module-UOTIRJKH.js} +2 -2
- package/client-dist/{project-management.module-AVROF6ET.js → project-management.module-SXG557HP.js} +2 -2
- package/client-dist/project-source-routed.module-JLUP6FXQ.js +2 -0
- package/client-dist/{scheduler.module-CTLPRXAO.js → scheduler.module-EED4H4OV.js} +2 -2
- package/client-dist/{session.module-CKSSKD2Q.js → session.module-R4NYRIWY.js} +2 -2
- package/client-dist/{set.module-HXGUR23B.js → set.module-ZWXJCTIC.js} +2 -2
- package/client-dist/{setup.module-Z7HR42LN.js → setup.module-STH35LIH.js} +2 -2
- package/client-dist/{terminals.module-7WK3CG5M.js → terminals.module-SZPN4HFG.js} +2 -2
- package/client-dist/{voice-notes-poc.module-DSEQIKLK.js → voice-notes-poc.module-DSCGKJMG.js} +2 -2
- package/client-dist/{wfs.module-GW3M5DEY.js → wfs.module-CNAZGEUO.js} +2 -2
- package/package.json +1 -1
- package/client-dist/ca.module-DC5VMK5Y.js +0 -5
- package/client-dist/chunk-6AWNXPVM.js +0 -9
- package/client-dist/chunk-6AWNXPVM.js.map +0 -7
- package/client-dist/chunk-D5CTQY3J.js.map +0 -7
- package/client-dist/project-source-routed.module-J6RM73IW.js +0 -2
- /package/client-dist/{agent-instances.module-IAMOEVNL.js.map → agent-instances.module-3N6ANN67.js.map} +0 -0
- /package/client-dist/{cc-usage-dashboard.component-5JM6S64F.js.map → cc-usage-dashboard.component-65FF5SWE.js.map} +0 -0
- /package/client-dist/{cc.module-U26365SI.js.map → cc.module-BKTAO4S7.js.map} +0 -0
- /package/client-dist/{chunk-NY3HJA4F.js.map → chunk-34ASVWQQ.js.map} +0 -0
- /package/client-dist/{chunk-JYWGTCQS.js.map → chunk-3BIY7XPG.js.map} +0 -0
- /package/client-dist/{chunk-JKBO6HPX.js.map → chunk-3EWLYCQY.js.map} +0 -0
- /package/client-dist/{chunk-VFHT4OYM.js.map → chunk-45RYGYWU.js.map} +0 -0
- /package/client-dist/{chunk-SOTVAGPA.js.map → chunk-46VCON6Y.js.map} +0 -0
- /package/client-dist/{chunk-67IPTVUW.js.map → chunk-4EPTK7TX.js.map} +0 -0
- /package/client-dist/{chunk-3MWOLKTF.js.map → chunk-57RF5FWV.js.map} +0 -0
- /package/client-dist/{chunk-JB74RJ77.js.map → chunk-6NAFJLV5.js.map} +0 -0
- /package/client-dist/{chunk-AAEHV4SQ.js.map → chunk-7ELFOHXT.js.map} +0 -0
- /package/client-dist/{chunk-7SYCAQ3W.js.map → chunk-7UGLDNS5.js.map} +0 -0
- /package/client-dist/{chunk-F77OUK5E.js.map → chunk-A7WV3WRL.js.map} +0 -0
- /package/client-dist/{chunk-DJDDRV36.js.map → chunk-AELBVLTQ.js.map} +0 -0
- /package/client-dist/{chunk-ZKO4XWH5.js.map → chunk-ALT4GOBR.js.map} +0 -0
- /package/client-dist/{chunk-ZD7RXMQQ.js.map → chunk-BSZUQJTF.js.map} +0 -0
- /package/client-dist/{chunk-7DTPD5LC.js.map → chunk-C5SDBZ5G.js.map} +0 -0
- /package/client-dist/{chunk-6B7RLLBU.js.map → chunk-C5WLCPTP.js.map} +0 -0
- /package/client-dist/{chunk-UM3J2Z34.js.map → chunk-DBF3SSPS.js.map} +0 -0
- /package/client-dist/{chunk-7V4RNM4Q.js.map → chunk-EHNLVVAY.js.map} +0 -0
- /package/client-dist/{chunk-XV426GB5.js.map → chunk-ES7OKROB.js.map} +0 -0
- /package/client-dist/{chunk-2PS4UZPR.js.map → chunk-EUAB5X46.js.map} +0 -0
- /package/client-dist/{chunk-XAYLCDHO.js.map → chunk-FIPZN6Q5.js.map} +0 -0
- /package/client-dist/{chunk-LFZQANWS.js.map → chunk-FXN33EYC.js.map} +0 -0
- /package/client-dist/{chunk-OZWGRRQJ.js.map → chunk-IA2MKRM5.js.map} +0 -0
- /package/client-dist/{chunk-UA2X6KM6.js.map → chunk-IRCYROGT.js.map} +0 -0
- /package/client-dist/{chunk-OKG4QBWE.js.map → chunk-KBLPP6PQ.js.map} +0 -0
- /package/client-dist/{chunk-53PQHPA7.js.map → chunk-MANX3UTJ.js.map} +0 -0
- /package/client-dist/{chunk-Z3BYKPE4.js.map → chunk-NAHXFBXE.js.map} +0 -0
- /package/client-dist/{chunk-PPKBA66S.js.map → chunk-NJPJYDH6.js.map} +0 -0
- /package/client-dist/{chunk-5I65O626.js.map → chunk-NK4RLW4D.js.map} +0 -0
- /package/client-dist/{chunk-W3DWFUQD.js.map → chunk-OZHMTJQJ.js.map} +0 -0
- /package/client-dist/{chunk-LVN7UVJS.js.map → chunk-PATTK77E.js.map} +0 -0
- /package/client-dist/{chunk-UACFECPK.js.map → chunk-PN5J6JP2.js.map} +0 -0
- /package/client-dist/{chunk-7MGY4Z6C.js.map → chunk-Q4Z4WTJ3.js.map} +0 -0
- /package/client-dist/{chunk-7I2XVKTK.js.map → chunk-R5DCGGN5.js.map} +0 -0
- /package/client-dist/{chunk-EIHYMXLV.js.map → chunk-RO7BDRAB.js.map} +0 -0
- /package/client-dist/{chunk-T4KV43VE.js.map → chunk-RVZXTBBM.js.map} +0 -0
- /package/client-dist/{chunk-OJHFALFZ.js.map → chunk-SC33BNLI.js.map} +0 -0
- /package/client-dist/{chunk-K4HTQXPA.js.map → chunk-TCJ6WHLQ.js.map} +0 -0
- /package/client-dist/{chunk-FX2IX5QH.js.map → chunk-TDVYMNCA.js.map} +0 -0
- /package/client-dist/{chunk-EO3HTELG.js.map → chunk-TU3VH4LZ.js.map} +0 -0
- /package/client-dist/{chunk-BFTQRL6H.js.map → chunk-TWWHZRZD.js.map} +0 -0
- /package/client-dist/{chunk-JT4QERQZ.js.map → chunk-UCATC7Y7.js.map} +0 -0
- /package/client-dist/{chunk-PMJFXD5Y.js.map → chunk-UOOILECA.js.map} +0 -0
- /package/client-dist/{chunk-LUM4O4EP.js.map → chunk-V46EMM4L.js.map} +0 -0
- /package/client-dist/{chunk-TSVUULFD.js.map → chunk-VM6JI2LV.js.map} +0 -0
- /package/client-dist/{chunk-IXRSAIZI.js.map → chunk-WJTUNKFF.js.map} +0 -0
- /package/client-dist/{chunk-PL27V3FQ.js.map → chunk-WV4WOPQF.js.map} +0 -0
- /package/client-dist/{chunk-JU2L5GD6.js.map → chunk-WWJB3AHB.js.map} +0 -0
- /package/client-dist/{chunk-FT6CK74E.js.map → chunk-XEGOHOPX.js.map} +0 -0
- /package/client-dist/{chunk-KNFABSWN.js.map → chunk-XRPVTKIP.js.map} +0 -0
- /package/client-dist/{chunk-HTKVFYOK.js.map → chunk-YIVWQSH4.js.map} +0 -0
- /package/client-dist/{chunk-CMBU47YJ.js.map → chunk-ZGNVQEFP.js.map} +0 -0
- /package/client-dist/{chunk-U75T3UCV.js.map → chunk-ZLSL5N3C.js.map} +0 -0
- /package/client-dist/{consultant.module-PYA6DSZV.js.map → consultant.module-5G73QF4O.js.map} +0 -0
- /package/client-dist/{crd.module-3YGC7EWW.js.map → crd.module-PF5ZYSFN.js.map} +0 -0
- /package/client-dist/{dashboard.module-HMCFQDZL.js.map → dashboard.module-QIH6EALQ.js.map} +0 -0
- /package/client-dist/{do.module-5YSCN5V5.js.map → do.module-IZT2TG65.js.map} +0 -0
- /package/client-dist/{document-library.module-Y4EZKOAF.js.map → document-library.module-OC3PF44G.js.map} +0 -0
- /package/client-dist/{embedding-eval.module-47RTIIH5.js.map → embedding-eval.module-FXSI4XED.js.map} +0 -0
- /package/client-dist/{embedding-registry.module-HYQ4UJFK.js.map → embedding-registry.module-W65CI3YZ.js.map} +0 -0
- /package/client-dist/{err.module-QVOUZKJ2.js.map → err.module-34QTGFAO.js.map} +0 -0
- /package/client-dist/{feedback.module-A3OR6GVO.js.map → feedback.module-LWOMLYP2.js.map} +0 -0
- /package/client-dist/{host-runtime-mcp.module-5ZSU54NK.js.map → host-runtime-mcp.module-4GXDHVJV.js.map} +0 -0
- /package/client-dist/{live-dev-pipeline.module-EGZL6S75.js.map → live-dev-pipeline.module-KB44IF3A.js.map} +0 -0
- /package/client-dist/{logs.module-BHYYAZKF.js.map → logs.module-S6JGYNTG.js.map} +0 -0
- /package/client-dist/{main-YT72UH4P.js.map → main-KV4C3EP5.js.map} +0 -0
- /package/client-dist/{master-control-remote-poc.module-FYJMCGQ3.js.map → master-control-remote-poc.module-HSWDJ7AR.js.map} +0 -0
- /package/client-dist/{mobile-app.module-NHPMG7QY.js.map → mobile-app.module-CPULBFKG.js.map} +0 -0
- /package/client-dist/{model-registry.module-U63UCPM5.js.map → model-registry.module-SCIPNUN7.js.map} +0 -0
- /package/client-dist/{orc.module-SIS3R6KN.js.map → orc.module-UOTIRJKH.js.map} +0 -0
- /package/client-dist/{project-management.module-AVROF6ET.js.map → project-management.module-SXG557HP.js.map} +0 -0
- /package/client-dist/{project-source-routed.module-J6RM73IW.js.map → project-source-routed.module-JLUP6FXQ.js.map} +0 -0
- /package/client-dist/{scheduler.module-CTLPRXAO.js.map → scheduler.module-EED4H4OV.js.map} +0 -0
- /package/client-dist/{session.module-CKSSKD2Q.js.map → session.module-R4NYRIWY.js.map} +0 -0
- /package/client-dist/{set.module-HXGUR23B.js.map → set.module-ZWXJCTIC.js.map} +0 -0
- /package/client-dist/{setup.module-Z7HR42LN.js.map → setup.module-STH35LIH.js.map} +0 -0
- /package/client-dist/{terminals.module-7WK3CG5M.js.map → terminals.module-SZPN4HFG.js.map} +0 -0
- /package/client-dist/{voice-notes-poc.module-DSEQIKLK.js.map → voice-notes-poc.module-DSCGKJMG.js.map} +0 -0
- /package/client-dist/{wfs.module-GW3M5DEY.js.map → wfs.module-CNAZGEUO.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["src/app/_modules/external-sessions/_modules/openclaw/_services/openclaw.data-service.ts", "src/app/_collections/oc/ccap-oc-gateway-timestamp.util.ts", "src/app/_collections/oc/ccap-oc-gateway-list.util.ts", "src/app/_modules/external-sessions/_modules/openclaw/_services/openclaw.api-service.ts"],
|
|
4
|
-
"sourcesContent": ["import { inject, Injectable, NgZone, OnDestroy, signal } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { DyFM_Log, second } from '@futdevpro/fsm-dynamo';\n\nimport { CCAP_OcGatewaySessionList_Util } from '../../../../../_collections/oc/ccap-oc-gateway-list.util';\nimport { CCAP_OcGatewayTimestamp_Util } from '../../../../../_collections/oc/ccap-oc-gateway-timestamp.util';\nimport {\n Oc_GatewaySessionsFetch_Interface,\n Oc_ListItem_Interface,\n Oc_EventItem_Interface,\n Oc_Detail_Response,\n} from '../_models/interfaces/oc-list-item.interface';\nimport { CCAP_ErrorDisplay_Util } from '../../../../../_collections/error/error-display.util';\nimport { Openclaw_ApiService } from './openclaw.api-service';\nimport { ExS_Message_ApiService } from '../../../_services/exs-message.api-service';\nimport { CCAP_GlobalError_ControlService } from '../../../../../_services/control-services/ccap-global-error.control-service';\nimport { CCAP_Socket_ControlService } from '../../../../../_services/control-services/ccap-socket.control-service';\nimport { CCAP_ExtSessionMessage_Response } from '../../../../../_models/interfaces/shared/ccap-ext-message.interface';\nimport {\n OcSessionConsoleMessage_Interface,\n OcSessionUsage_Interface,\n} from './oc.data-service.interface';\n\n/**\n * OpenClaw Session Toolkit data service (SSOT).\n * Reactive state management: session lista, detail, events, live output.\n * Socket.io event subscription a real-time push-hoz.\n */\n@Injectable({ providedIn: 'root' })\nexport class Openclaw_DataService implements OnDestroy {\n\n /** Session lista. */\n readonly sessions_$ = signal<Oc_ListItem_Interface[]>([]);\n\n /** Session lista betöltés folyamatban. */\n readonly sessionsLoading_$ = signal<boolean>(false);\n\n /** Session lista hiba. */\n readonly sessionsLoadError_$ = signal<unknown | null>(null);\n\n /** Kiválasztott session részletek. */\n readonly selectedSession_$ = signal<Oc_Detail_Response | null>(null);\n\n /** Kiválasztott session betöltés. */\n readonly selectedSessionLoading_$ = signal<boolean>(false);\n\n /** Kiválasztott session event log. */\n readonly selectedSessionEvents_$ = signal<Oc_EventItem_Interface[]>([]);\n\n /** Console rendszer-üzenetek (prompt echo, status change, error feedback). */\n readonly consoleMessages_$ = signal<OcSessionConsoleMessage_Interface[]>([]);\n\n /** Szerver-oldali assembled messages (SSOT). */\n readonly assembledMessages_$ = signal<CCAP_ExtSessionMessage_Response[]>([]);\n\n /** Utolsó status update a socket-ről. */\n readonly lastStatusUpdate_$ = signal<{\n sessionId: string;\n status: string;\n statusMessage?: string;\n } | null>(null);\n\n /** Kumulatív token usage az aktív session-höz. */\n readonly sessionUsage_$ = signal<OcSessionUsage_Interface>({\n inputTokens: 0,\n outputTokens: 0,\n costUsd: 0,\n });\n\n /** Aktuálisan kiválasztott session ID (a detail nézet állítja be). */\n readonly activeSessionId_$ = signal<string>('');\n\n /** Aktuálisan kiválasztott OpenClaw instance ID (a dashboard állítja be). */\n readonly activeInstanceId_$ = signal<string>('');\n\n /** Aktív gateway szűrő: csak az adott gatewayUrl-hez tartozó session-ök (null = összes). */\n readonly gatewayFilter_$ = signal<string | null>(null);\n\n private readonly extSessionMsg_AS: ExS_Message_ApiService =\n inject(ExS_Message_ApiService);\n private readonly ocSession_AS: Openclaw_ApiService =\n inject(Openclaw_ApiService);\n\n private readonly globalError_CS: CCAP_GlobalError_ControlService =\n inject(CCAP_GlobalError_ControlService);\n\n private readonly socket_CS: CCAP_Socket_ControlService =\n inject(CCAP_Socket_ControlService);\n\n private readonly ngZone: NgZone = inject(NgZone);\n\n private eventSubscription: Subscription | null = null;\n\n /** Socket reconnect subscription (backfill trigger). */\n private reconnectSubscription: Subscription | null = null;\n\n /** Legutolsó ismert event sequence szám (duplikáció elkerüléséhez). */\n private lastKnownEventSequence: number = -1;\n\n /** Chat history polling timer handle. */\n private chatPollHandle: ReturnType<typeof setInterval> | null = null;\n\n /** Session detail (REST) polling — metadata panel frissítése gateway mód mellett. */\n private detailPollHandle: ReturnType<typeof setInterval> | null = null;\n\n /**\n * Gateway history fingerprint az utolsó poll / initial load után (tartalom + méret változás\n * detektálása, nem csak üzenetszám).\n */\n private lastPolledHistoryFingerprint: string = '';\n\n constructor() {\n // Socket event-ek feliratkozása\n this.eventSubscription = this.socket_CS.event$.subscribe(\n (envelope: { event: string; payload: Record<string, unknown> }): void => {\n this.handleSocketEvent(envelope);\n },\n );\n\n // Socket reconnect → resubscribe + backfill\n this.reconnectSubscription = this.socket_CS.connected$.subscribe(\n (isConnected: boolean): void => {\n if (isConnected) {\n const activeId: string = this.activeSessionId_$();\n if (activeId) {\n this.socket_CS.emit('oc-session:subscribe', { sessionId: activeId });\n // Assembled messages újratöltése — a disconnect alatt érkezett socket push-ok\n // (ext-session-msg:message/update) elvesztek; a REST reload pótolja őket.\n this.loadAssembledMessages({ sessionId: activeId }).catch((): void => {});\n }\n this.backfillMissedEvents();\n }\n },\n );\n }\n\n ngOnDestroy(): void {\n this.stopChatPolling();\n if (this.eventSubscription) {\n this.eventSubscription.unsubscribe();\n this.eventSubscription = null;\n }\n if (this.reconnectSubscription) {\n this.reconnectSubscription.unsubscribe();\n this.reconnectSubscription = null;\n }\n }\n\n // ── Session Lista ───────────────────────────────────────────\n\n /**\n * Session lista betöltése a szerverről.\n */\n /**\n * Gateway szűrő beállítása — frissíti a session listát.\n */\n setGatewayFilter(gatewayUrl: string | null): void {\n this.gatewayFilter_$.set(gatewayUrl);\n this.loadSessions().catch((): void => {});\n }\n\n /**\n * Gateway szűrő beállítása session lista újratöltés nélkül.\n * A hívó felelős a loadSessions explicit hívásáért (dupla load elkerülése).\n */\n setGatewayFilterOnly(gatewayUrl: string | null): void {\n this.gatewayFilter_$.set(gatewayUrl);\n }\n\n async loadSessions(params?: {\n status?: string;\n workspacePath?: string;\n includeArchived?: boolean;\n }): Promise<void> {\n this.sessionsLoading_$.set(true);\n this.sessionsLoadError_$.set(null);\n\n try {\n const response = await this.ocSession_AS.listSessions({\n status: params?.status,\n workspacePath: params?.workspacePath,\n gatewayUrl: this.gatewayFilter_$() ?? undefined,\n includeArchived: params?.includeArchived,\n });\n\n // Rendezés: legfrissebb session legfelül (lastActivityAt desc)\n const sorted: Oc_ListItem_Interface[] = [...response.sessions].sort(\n (a: Oc_ListItem_Interface, b: Oc_ListItem_Interface): number => {\n const dateA: number = a.lastActivityAt ? new Date(a.lastActivityAt).getTime() : 0;\n const dateB: number = b.lastActivityAt ? new Date(b.lastActivityAt).getTime() : 0;\n return dateB - dateA;\n },\n );\n this.sessions_$.set(sorted);\n } catch (err: unknown) {\n this.sessionsLoadError_$.set(err);\n this.pushConsoleMessage({\n type: 'error',\n text: `Load sessions failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n } finally {\n this.sessionsLoading_$.set(false);\n }\n }\n\n /**\n * Gateway session lista lekérése — nincs loading/console mellékhatás (Dark Office OCI enrich, tesztek).\n * A normalizált lista és a nyers sorok ugyanabból a válaszból készülnek (mapper SSOT).\n */\n async fetchGatewaySessionsForInstance(params: {\n instanceId: string;\n }): Promise<Oc_GatewaySessionsFetch_Interface> {\n const response = await this.ocSession_AS.listGatewaySessions({\n instanceId: params.instanceId,\n });\n return CCAP_OcGatewaySessionList_Util.buildGatewaySessionsFetch({ response: response });\n }\n\n /**\n * Session lista betöltése közvetlenül a gateway-ről (SSOT).\n * Az OpenClaw gateway a sessions_list RPC-n adja vissza az aktív session-öket.\n */\n async loadGatewaySessions(params: { instanceId: string }): Promise<void> {\n this.sessionsLoading_$.set(true);\n this.sessionsLoadError_$.set(null);\n\n try {\n const fetchResult: Oc_GatewaySessionsFetch_Interface =\n await this.fetchGatewaySessionsForInstance({ instanceId: params.instanceId });\n\n // Ha nincs session, diagnosztika\n if (!fetchResult.listItems.length && fetchResult.rawSessions.length > 0) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Gateway returned ${fetchResult.rawSessions.length} sessions but mapping produced 0.\\n`\n + `First session keys: ${fetchResult.firstSessionKeys.join(', ')}`,\n });\n }\n\n this.sessions_$.set(fetchResult.listItems);\n } catch (err: unknown) {\n this.sessionsLoadError_$.set(err);\n this.pushConsoleMessage({\n type: 'error',\n text: `Load gateway sessions failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n } finally {\n this.sessionsLoading_$.set(false);\n }\n }\n\n // ── Session Detail ──────────────────────────────────────────\n\n /**\n * Session részletek betöltése (CCAP REST).\n * `isSilent`: nincs loading flag és poll / háttér-frissítés hibája nem törli a state-et.\n */\n async loadSessionDetail(params: { sessionId: string; isSilent?: boolean }): Promise<void> {\n const isSilent: boolean = params.isSilent === true;\n\n if (!isSilent) {\n this.selectedSessionLoading_$.set(true);\n }\n\n try {\n const response: Oc_Detail_Response =\n await this.ocSession_AS.getSession({\n sessionId: params.sessionId,\n });\n\n this.selectedSession_$.set(response);\n\n // Assembled messages betöltése (SSOT — fire-and-forget)\n this.loadAssembledMessages({ sessionId: params.sessionId })\n .catch((): void => {});\n } catch (err: unknown) {\n if (!isSilent) {\n this.selectedSession_$.set(null);\n const errorMessage: string = err instanceof Error\n ? err.message\n : 'Failed to load session details';\n this.pushConsoleMessage({\n type: 'error',\n text: `Load session failed: ${errorMessage}`,\n });\n }\n } finally {\n if (!isSilent) {\n this.selectedSessionLoading_$.set(false);\n }\n }\n }\n\n /**\n * Session history betöltése közvetlenül a gateway-ről (SSOT).\n * A gateway a chat.history RPC-n adja vissza az üzeneteket.\n */\n async loadGatewaySessionHistory(params: {\n sessionId: string;\n instanceId: string;\n }): Promise<void> {\n this.selectedSessionLoading_$.set(true);\n this.consoleMessages_$.set([]);\n\n try {\n const response = await this.ocSession_AS.getGatewaySessionHistory({\n sessionId: params.sessionId,\n instanceId: params.instanceId,\n });\n\n // Gateway response feldolgozás — a _rawKeys diagnosztikát ad ha a mapping nem talál üzeneteket\n const rawResponse: Record<string, unknown> = response as Record<string, unknown>;\n const rawKeys: string[] = Array.isArray(rawResponse._rawKeys)\n ? rawResponse._rawKeys as string[] : [];\n\n // History üzeneteket console message-ekké alakítjuk a közös parser-rel\n const history: Record<string, unknown>[] = Array.isArray(response.history)\n ? response.history : [];\n const messages: OcSessionConsoleMessage_Interface[] = this.parseGatewayHistory(history);\n\n const gatewayMessageCount: number = typeof rawResponse.messageCount === 'number'\n ? rawResponse.messageCount as number : 0;\n const firstMessageKeys: string[] = Array.isArray(rawResponse._firstMessageKeys)\n ? rawResponse._firstMessageKeys as string[] : [];\n\n if (messages.length) {\n this.consoleMessages_$.set(messages);\n } else if (gatewayMessageCount > 0) {\n // A gateway-nek van üzenete, de a mapping nem tudta feldolgozni\n this.consoleMessages_$.set([{\n listKey: this.allocateConsoleListKey(),\n type: 'error',\n text: `Gateway session has ${gatewayMessageCount} messages, but mapping failed.\\n`\n + `Message keys: ${firstMessageKeys.join(', ') || 'unknown'}\\n`\n + `Gateway response keys: ${rawKeys.join(', ') || 'none'}`,\n timestamp: new Date().toISOString(),\n }]);\n } else {\n this.consoleMessages_$.set([{\n listKey: this.allocateConsoleListKey(),\n type: 'info',\n text: `Gateway session loaded — session has no messages yet.`,\n timestamp: new Date().toISOString(),\n }]);\n }\n\n // Minimális selectedSession beállítás a UI-nak\n this.selectedSession_$.set({\n session: {\n sessionId: params.sessionId,\n workspacePath: '',\n status: 'unknown',\n promptCount: 0,\n toolCallCount: 0,\n isArchived: false,\n },\n runtime: {\n isLive: false,\n runtimeStatus: null,\n outputBufferLength: 0,\n },\n });\n\n // Chat polling indítása — a gateway SSOT, periodikusan frissítjük a history-t\n this.lastPolledHistoryFingerprint = this.computeGatewayHistoryFingerprint(history);\n this.startChatPolling();\n } catch (err: unknown) {\n this.selectedSession_$.set(null);\n this.pushConsoleMessage({\n type: 'error',\n text: `Load gateway session history failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n } finally {\n this.selectedSessionLoading_$.set(false);\n }\n }\n\n /**\n * Session event log betöltése.\n */\n async loadSessionEvents(params: {\n sessionId: string;\n eventType?: string;\n limit?: number;\n }): Promise<void> {\n try {\n const response = await this.ocSession_AS.getSessionEvents({\n sessionId: params.sessionId,\n eventType: params.eventType,\n limit: params.limit ?? 500,\n latest: true,\n });\n\n this.selectedSessionEvents_$.set(response.events);\n this.updateLastKnownSequence(response.events);\n\n // Historikus event-ek konvertálása console üzenetekké\n for (const event of response.events) {\n this.pushConsoleMessageFromEvent(event);\n }\n } catch (err: unknown) {\n this.selectedSessionEvents_$.set([]);\n this.pushConsoleMessage({\n type: 'error',\n text: `Load events failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n }\n }\n\n // ── Actions ─────────────────────────────────────────────────\n\n /**\n * Új session létrehozása.\n */\n async createSession(params: {\n workspacePath: string;\n label?: string;\n gatewayUrl?: string;\n openclawAgentName?: string;\n initialPrompt?: string;\n mode?: string;\n reasoningEffort?: string;\n }): Promise<string> {\n try {\n const result: { session: Record<string, unknown> } =\n await this.ocSession_AS.createSession(params);\n const sessionId: string = String(result.session.sessionId || '');\n await this.loadSessions();\n return sessionId;\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Create session failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Prompt küldése.\n */\n async sendPrompt(params: {\n sessionId: string;\n content: string;\n }): Promise<void> {\n // Azonnali prompt echo a chat-be\n this.pushConsoleMessage({\n type: 'prompt',\n text: params.content,\n });\n\n try {\n // Gateway SSOT: ha van aktív instanceId, a gateway-re küldjük\n const instanceId: string = this.activeInstanceId_$();\n if (instanceId) {\n await this.ocSession_AS.sendGatewayPrompt({\n sessionId: params.sessionId,\n instanceId: instanceId,\n content: params.content,\n });\n } else {\n await this.ocSession_AS.sendPrompt(params);\n }\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Send failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Session reconnect (gateway reconnect).\n */\n async reconnectSession(params: { sessionId: string }): Promise<void> {\n try {\n await this.ocSession_AS.reconnectSession(params);\n await this.loadSessions();\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Reconnect failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Futó execution leállítása (gateway sessions.abort).\n */\n async stopExecution(params: { sessionId: string }): Promise<void> {\n try {\n await this.ocSession_AS.stopExecution(params);\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Stop execution failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Session terminate.\n */\n async terminateSession(params: { sessionId: string }): Promise<void> {\n try {\n await this.ocSession_AS.terminateSession(params);\n await this.loadSessions();\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Terminate failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Session archiválás állapot beállítása.\n */\n async setSessionArchived(params: {\n sessionId: string;\n isArchived: boolean;\n }): Promise<void> {\n try {\n await this.ocSession_AS.setSessionArchived(params);\n await this.loadSessions();\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Archive failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Session config frissítése (mode, effort, agentName).\n */\n async updateSessionConfig(params: {\n sessionId: string;\n mode?: string;\n reasoningEffort?: string;\n openclawAgentName?: string;\n }): Promise<void> {\n try {\n await this.ocSession_AS.updateSessionConfig(params);\n\n // Lokális state frissítése (selectedSession detail-ban)\n const currentDetail: Oc_Detail_Response | null =\n this.selectedSession_$();\n if (currentDetail?.session.sessionId === params.sessionId) {\n const updatedSession: Oc_ListItem_Interface = {\n ...currentDetail.session,\n };\n if (params.mode != null) {\n updatedSession.mode = params.mode;\n }\n if (params.reasoningEffort != null) {\n updatedSession.reasoningEffort = params.reasoningEffort;\n }\n if (params.openclawAgentName != null) {\n updatedSession.openclawAgentName = params.openclawAgentName;\n }\n this.selectedSession_$.set({\n ...currentDetail,\n session: updatedSession,\n });\n }\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Config update failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Aktív session ID beállítása (detail nézet hívja navigáláskor).\n * Socket subscribe/unsubscribe: a monitoring service célzott push-hoz.\n */\n setActiveSessionId(sessionId: string): void {\n const previousId: string = this.activeSessionId_$();\n\n if (previousId && previousId !== sessionId) {\n this.socket_CS.emit('oc-session:unsubscribe', { sessionId: previousId });\n }\n\n this.activeSessionId_$.set(sessionId);\n\n if (sessionId) {\n this.socket_CS.emit('oc-session:subscribe', { sessionId: sessionId });\n }\n }\n\n /**\n * Live output és console törlése (pl. új session-re navigáláskor).\n */\n clearLiveOutput(): void {\n this.stopChatPolling();\n this.consoleMessages_$.set([]);\n this.sessionUsage_$.set({\n inputTokens: 0,\n outputTokens: 0,\n costUsd: 0,\n });\n this.lastKnownEventSequence = -1;\n }\n\n /**\n * Egyedi console üzenet kulcs — @for track és stabil diff.\n */\n private allocateConsoleListKey(): string {\n return globalThis.crypto.randomUUID();\n }\n\n /**\n * Console rendszer-üzenet hozzáadása.\n */\n pushConsoleMessage(params: {\n listKey?: string;\n type: OcSessionConsoleMessage_Interface['type'];\n text: string;\n timestamp?: string;\n expandableContent?: string;\n rawData?: Record<string, unknown>;\n }): void {\n const trimmedText: string = (params.type === 'assistant' || params.type === 'prompt')\n ? params.text.trim()\n : params.text;\n const message: OcSessionConsoleMessage_Interface = {\n listKey: params.listKey ?? this.allocateConsoleListKey(),\n type: params.type,\n text: trimmedText,\n timestamp: params.timestamp ?? new Date().toISOString(),\n expandableContent: params.expandableContent,\n rawData: params.rawData,\n };\n const current: OcSessionConsoleMessage_Interface[] = this.consoleMessages_$();\n this.consoleMessages_$.set([...current, message]);\n }\n\n // ── Private: Chat History Polling ────────────────────────────\n\n /** Chat poll intervallum (5 másodperc). */\n private static readonly CHAT_POLL_INTERVAL_MS: number = 5 * second;\n\n /** REST session detail poll intervallum (10 másodperc) — metadata SSOT kiegészítés. */\n private static readonly DETAIL_POLL_INTERVAL_MS: number = 10 * second;\n\n /**\n * Chat history polling indítása.\n * Periodikusan lekérdezi a gateway history-t és frissíti a console-t ha változott a fingerprint.\n * REST detail poll párhuzamosan fut a metadata panelhez.\n */\n startChatPolling(): void {\n this.stopChatPolling();\n this.chatPollHandle = setInterval((): void => {\n void this.pollChatHistory();\n }, Openclaw_DataService.CHAT_POLL_INTERVAL_MS);\n this.detailPollHandle = setInterval((): void => {\n const sid: string = this.activeSessionId_$();\n if (sid) {\n void this.loadSessionDetail({ sessionId: sid, isSilent: true });\n }\n }, Openclaw_DataService.DETAIL_POLL_INTERVAL_MS);\n }\n\n /**\n * Chat history polling leállítása.\n */\n stopChatPolling(): void {\n if (this.chatPollHandle) {\n clearInterval(this.chatPollHandle);\n this.chatPollHandle = null;\n }\n if (this.detailPollHandle) {\n clearInterval(this.detailPollHandle);\n this.detailPollHandle = null;\n }\n this.lastPolledHistoryFingerprint = '';\n }\n\n /**\n * Gateway history snapshot fingerprint — hossz, utolsó üzenet idő / id, tartalom slice.\n * Ugyanannyi üzenet mellett is észleli az utolsó elem tartalom-változását (pl. stream).\n */\n private computeGatewayHistoryFingerprint(history: Record<string, unknown>[]): string {\n const length: number = history.length;\n if (!length) {\n return '0';\n }\n const last: Record<string, unknown> = history[length - 1];\n const idPart: string = typeof last.id === 'string' ? last.id\n : typeof last.messageId === 'string' ? last.messageId : '';\n const tsPart: string = Openclaw_DataService.extractGatewayChatMessageTimestamp(last);\n const body: string = this.extractTextFromMessage(last);\n const sliceMax: number = 400;\n const contentSlice: string = body.length > sliceMax ? body.slice(0, sliceMax) : body;\n return `${length}\\u001f${idPart}\\u001f${tsPart}\\u001f${contentSlice}`;\n }\n\n /**\n * Egyetlen poll ciklus: gateway history lekérdezés + frissítés ha a fingerprint változott.\n */\n private async pollChatHistory(): Promise<void> {\n const sessionId: string = this.activeSessionId_$();\n const instanceId: string = this.activeInstanceId_$();\n if (!sessionId || !instanceId) {\n return;\n }\n\n try {\n const response = await this.ocSession_AS.getGatewaySessionHistory({\n sessionId: sessionId,\n instanceId: instanceId,\n });\n\n const history: Record<string, unknown>[] = Array.isArray(response.history)\n ? response.history : [];\n\n const fingerprint: string = this.computeGatewayHistoryFingerprint(history);\n if (fingerprint === this.lastPolledHistoryFingerprint) {\n return;\n }\n\n this.lastPolledHistoryFingerprint = fingerprint;\n const messages: OcSessionConsoleMessage_Interface[] = this.parseGatewayHistory(history);\n\n this.ngZone.run((): void => {\n this.consoleMessages_$.set(messages);\n });\n } catch {\n // Poll hiba: csendes — nem terhelünk a console-t ismétlődő hibaüzenetekkel\n }\n }\n\n /**\n * Gateway history feldolgozása console message-ekké.\n * Content blocks szétbontás + tool call / tool result párosítás.\n * Két formátum támogatott:\n * 1. Anthropic: content block {type: \"tool_result\", tool_use_id: \"...\"} + content\n * 2. OpenClaw: top-level message {role: \"toolResult\"} — a content-ben text blokkok\n */\n private parseGatewayHistory(\n history: Record<string, unknown>[],\n ): OcSessionConsoleMessage_Interface[] {\n const messages: OcSessionConsoleMessage_Interface[] = [];\n const toolResultMap = new Map<string, string>();\n\n // Gyűjtsük össze a toolCall id-ket sorrendben, hogy a toolResult-okat párosíthassuk\n const toolCallIds: string[] = [];\n for (const msg of history) {\n const rawContent: unknown = msg.content;\n if (!Array.isArray(rawContent)) {\n continue;\n }\n for (const block of rawContent as Record<string, unknown>[]) {\n const btype: string = typeof block.type === 'string' ? block.type : '';\n if (btype === 'tool_use' || btype === 'toolCall') {\n const toolId: string = typeof block.id === 'string' ? block.id : '';\n if (toolId) {\n toolCallIds.push(toolId);\n }\n }\n if (btype === 'tool_result') {\n const toolUseId: string = typeof block.tool_use_id === 'string'\n ? block.tool_use_id : '';\n if (toolUseId) {\n toolResultMap.set(toolUseId, this.extractTextFromContentBlock(block));\n }\n }\n }\n }\n\n // OpenClaw toolResult messages: role alapú párosítás az előző toolCall id-jével\n let toolCallIdIndex: number = 0;\n for (const msg of history) {\n const role: string = typeof msg.role === 'string' ? msg.role : '';\n if (role === 'toolResult' || role === 'tool_result') {\n const resultText: string = this.extractTextFromMessage(msg);\n if (toolCallIdIndex < toolCallIds.length) {\n toolResultMap.set(toolCallIds[toolCallIdIndex], resultText);\n toolCallIdIndex++;\n }\n }\n }\n\n // Második pass: üzenetek építése, tool_use + tool_result párosítva\n for (const msg of history) {\n const role: string = typeof msg.role === 'string' ? msg.role : 'unknown';\n const rawContent: unknown = msg.content;\n const timestamp: string = Openclaw_DataService.extractGatewayChatMessageTimestamp(msg);\n\n // toolResult role-ú üzenet: kihagyjuk (párosítva a toolCall-hoz)\n if (role === 'toolResult' || role === 'tool_result') {\n continue;\n }\n\n // String content → egyetlen üzenet\n if (typeof rawContent === 'string') {\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: role === 'user' || role === 'human' ? 'prompt' : role === 'assistant' ? 'assistant' : 'info',\n text: rawContent,\n timestamp: timestamp,\n rawData: msg,\n });\n continue;\n }\n\n // Content blocks array → szétbontás típusonként\n if (Array.isArray(rawContent)) {\n for (const block of rawContent as Record<string, unknown>[]) {\n const blockType: string = typeof block.type === 'string' ? block.type : '';\n\n if (blockType === 'text') {\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: role === 'user' || role === 'human' ? 'prompt' : 'assistant',\n text: typeof block.text === 'string' ? block.text : '',\n timestamp: timestamp,\n rawData: {\n _block: block,\n _message: {\n role: role,\n timestamp: timestamp,\n contentBlockCount: (rawContent as unknown[]).length,\n },\n },\n });\n } else if (blockType === 'tool_use' || blockType === 'toolCall') {\n const toolName: string = typeof block.name === 'string' ? block.name : 'unknown tool';\n const toolId: string = typeof block.id === 'string' ? block.id : '';\n const toolInput: unknown = block.input ?? block.arguments;\n const pairedResult: string | undefined = toolResultMap.get(toolId);\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: 'tool',\n text: `${toolName}\\n${JSON.stringify(toolInput, null, 2)}`,\n timestamp: timestamp,\n expandableContent: pairedResult,\n rawData: { _block: block, _pairedResultLength: pairedResult?.length ?? 0 },\n });\n } else if (blockType === 'tool_result') {\n const toolUseId: string = typeof block.tool_use_id === 'string'\n ? block.tool_use_id : '';\n const hasMatch: boolean = !!toolUseId && [...messages].some(\n (m: OcSessionConsoleMessage_Interface): boolean =>\n m.type === 'tool' && m.expandableContent === toolResultMap.get(toolUseId),\n );\n if (!hasMatch) {\n const resultContent: unknown = block.content;\n let resultText: string = '';\n if (typeof resultContent === 'string') {\n resultText = resultContent;\n } else if (Array.isArray(resultContent)) {\n resultText = (resultContent as Record<string, unknown>[])\n .map((rc: Record<string, unknown>): string =>\n typeof rc.text === 'string' ? rc.text : JSON.stringify(rc, null, 2),\n ).join('\\n');\n } else {\n resultText = JSON.stringify(block, null, 2);\n }\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: 'tool-result',\n text: resultText,\n timestamp: timestamp,\n rawData: { _block: block },\n });\n }\n } else if (blockType === 'thinking') {\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: 'info',\n text: typeof block.thinking === 'string'\n ? block.thinking : JSON.stringify(block, null, 2),\n timestamp: timestamp,\n rawData: { _block: block },\n });\n } else {\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: 'info',\n text: JSON.stringify(block, null, 2),\n timestamp: timestamp,\n rawData: { _block: block },\n });\n }\n }\n continue;\n }\n\n // Egyéb: text/message mező vagy teljes msg JSON\n const fallbackContent: string = typeof msg.text === 'string'\n ? msg.text\n : typeof msg.message === 'string'\n ? msg.message\n : JSON.stringify(msg, null, 2);\n\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: role === 'user' || role === 'human' ? 'prompt'\n : role === 'assistant' ? 'assistant'\n : role === 'tool' || role === 'tool_result' || role === 'tool_use' ? 'tool' : 'info',\n text: fallbackContent,\n timestamp: timestamp,\n rawData: msg,\n });\n }\n\n return messages;\n }\n\n // ── Private: Socket Reconnect Backfill ──────────────────────\n\n /**\n * Socket reconnect utáni hiányzó event-ek pótlása.\n */\n private async backfillMissedEvents(): Promise<void> {\n const sessionId: string = this.activeSessionId_$();\n if (!sessionId || this.lastKnownEventSequence < 0) {\n return;\n }\n\n try {\n const response = await this.ocSession_AS.getSessionEvents({\n sessionId: sessionId,\n sinceSequence: this.lastKnownEventSequence,\n });\n\n const newEvents: Oc_EventItem_Interface[] = response.events;\n\n if (!newEvents.length) {\n return;\n }\n\n this.ngZone.run((): void => {\n const currentEvents: Oc_EventItem_Interface[] =\n this.selectedSessionEvents_$();\n this.selectedSessionEvents_$.set([...currentEvents, ...newEvents]);\n\n for (const event of newEvents) {\n this.pushConsoleMessageFromEvent(event);\n }\n\n this.updateLastKnownSequence(newEvents);\n });\n } catch (err: unknown) {\n DyFM_Log.warn('CCAP_OcSession_DS | backfill failed', err);\n }\n }\n\n /**\n * LastKnownEventSequence frissítése az event lista legmagasabb sequence-éből.\n */\n private updateLastKnownSequence(events: Oc_EventItem_Interface[]): void {\n for (const event of events) {\n if (event.sequence > this.lastKnownEventSequence) {\n this.lastKnownEventSequence = event.sequence;\n }\n }\n }\n\n // ── Private: Socket event handling ──────────────────────────\n\n /**\n * Socket.io event feldolgozása.\n * oc-session:* event-ekre reagál.\n */\n private handleSocketEvent(envelope: {\n event: string;\n payload: Record<string, unknown>;\n }): void {\n const eventName: string = envelope.event;\n const payload: Record<string, unknown> = envelope.payload;\n\n try {\n this.ngZone.run((): void => {\n switch (eventName) {\n case 'oc-session:status':\n this.handleStatusUpdate(payload);\n break;\n case 'oc-session:output':\n this.handleOutputChunk(payload);\n break;\n case 'oc-session:event':\n this.handleSessionEvent(payload);\n break;\n case 'oc-session:list-update':\n this.handleListUpdate(payload);\n break;\n case 'ext-session-msg:message':\n this.handleAssembledMessage(payload);\n break;\n case 'ext-session-msg:update':\n this.handleAssembledMessageUpdate(payload);\n break;\n }\n });\n } catch (err: unknown) {\n DyFM_Log.error(`CCAP_OcSession_DS | socket event error | event: ${eventName}`, err);\n }\n }\n\n /**\n * Status update feldolgozása.\n */\n private handleStatusUpdate(payload: Record<string, unknown>): void {\n const sessionId: string = (payload.sessionId as string) ?? '';\n const status: string = (payload.status as string) ?? '';\n const statusMessage: string | undefined = payload.statusMessage as string | undefined;\n\n this.lastStatusUpdate_$.set({\n sessionId: sessionId,\n status: status,\n statusMessage: statusMessage,\n });\n\n // Session lista frissítése\n const currentSessions: Oc_ListItem_Interface[] = this.sessions_$();\n const updated: Oc_ListItem_Interface[] = currentSessions.map(\n (s: Oc_ListItem_Interface): Oc_ListItem_Interface => {\n if (s.sessionId === sessionId) {\n return { ...s, status: status, statusMessage: statusMessage };\n }\n return s;\n },\n );\n this.sessions_$.set(updated);\n\n // Kiválasztott session detail frissítése\n const currentDetail: Oc_Detail_Response | null =\n this.selectedSession_$();\n if (currentDetail?.session.sessionId === sessionId) {\n const isLive: boolean = status === 'running' || status === 'waiting-input';\n this.selectedSession_$.set({\n ...currentDetail,\n session: {\n ...currentDetail.session,\n status: status,\n statusMessage: statusMessage,\n },\n runtime: {\n ...currentDetail.runtime,\n isLive: isLive,\n runtimeStatus: status,\n },\n });\n }\n\n // Errored státusz → globális error kezelés\n if (status === 'errored') {\n const errorMessage: string = statusMessage\n ? `OC Session error (${sessionId}): ${statusMessage}`\n : `OC Session error (${sessionId}): session entered errored state`;\n this.globalError_CS.showError(\n new Error(errorMessage),\n 'oc-session-status',\n );\n }\n }\n\n /**\n * Output chunk feldolgozása (live console-hoz).\n * Csak az aktív session output-ját fogadjuk.\n */\n private handleOutputChunk(payload: Record<string, unknown>): void {\n const sessionId: string = (payload.sessionId as string) ?? '';\n\n if (sessionId && sessionId !== this.activeSessionId_$()) {\n return;\n }\n\n const content: string = (payload.content as string) ?? '';\n const outputType: string = (payload.type as string) ?? 'response';\n\n if (content) {\n this.pushConsoleMessage({\n type: outputType === 'error' ? 'error' : 'assistant',\n text: content,\n });\n }\n }\n\n /**\n * Session event feldolgozása (timeline-hoz + console-hoz).\n */\n private handleSessionEvent(payload: Record<string, unknown>): void {\n const sessionId: string = (payload.sessionId as string) ?? '';\n\n if (sessionId && sessionId !== this.activeSessionId_$()) {\n return;\n }\n\n const event: Record<string, unknown> =\n (payload.event as Record<string, unknown>) ?? {};\n\n const eventItem: Oc_EventItem_Interface = {\n sessionId: sessionId,\n eventType: (event.eventType as string) ?? '',\n timestamp: (event.timestamp as string) ?? '',\n data: (event.data as Record<string, unknown>) ?? {},\n sequence: (event.sequence as number) ?? 0,\n };\n\n // Duplikáció védelem\n if (eventItem.sequence <= this.lastKnownEventSequence) {\n return;\n }\n\n this.lastKnownEventSequence = eventItem.sequence;\n\n // Timeline-ba hozzáadás\n const currentEvents: Oc_EventItem_Interface[] =\n this.selectedSessionEvents_$();\n this.selectedSessionEvents_$.set([...currentEvents, eventItem]);\n\n // Console-ba: parsolt event-ekből olvasható üzenetek\n this.pushConsoleMessageFromEvent(eventItem);\n }\n\n /**\n * Session lista frissítése (broadcast: session létrehozás / state change).\n */\n private handleListUpdate(_payload: Record<string, unknown>): void {\n // Lista újratöltése (nem blokkoló, hibatoleráns)\n this.loadSessions().catch((): void => {});\n }\n\n /**\n * Parsolt session event-ből olvasható console message generálás.\n */\n /**\n * Szöveg kinyerése egy content block-ból (tool_result, text, stb.).\n */\n private extractTextFromContentBlock(block: Record<string, unknown>): string {\n const resultContent: unknown = block.content;\n if (typeof resultContent === 'string') {\n return resultContent;\n }\n if (Array.isArray(resultContent)) {\n return (resultContent as Record<string, unknown>[])\n .map((rc: Record<string, unknown>): string =>\n typeof rc.text === 'string' ? rc.text : JSON.stringify(rc, null, 2),\n ).join('\\n');\n }\n if (typeof block.text === 'string') {\n return block.text;\n }\n return JSON.stringify(block, null, 2);\n }\n\n /**\n * Szöveg kinyerése egy top-level message-ből (content: string | array).\n */\n private extractTextFromMessage(msg: Record<string, unknown>): string {\n const rawContent: unknown = msg.content;\n if (typeof rawContent === 'string') {\n return rawContent;\n }\n if (Array.isArray(rawContent)) {\n return (rawContent as Record<string, unknown>[])\n .map((block: Record<string, unknown>): string => {\n if (typeof block.text === 'string') {\n return block.text;\n }\n return JSON.stringify(block, null, 2);\n }).join('\\n');\n }\n return JSON.stringify(msg, null, 2);\n }\n\n private pushConsoleMessageFromEvent(event: Oc_EventItem_Interface): void {\n const data: Record<string, unknown> = event.data;\n\n switch (event.eventType) {\n case 'response-chunk': {\n const content: string = typeof data.content === 'string' ? data.content : '';\n if (content) {\n this.pushConsoleMessage({ type: 'assistant', text: content });\n }\n break;\n }\n\n case 'response-complete': {\n // Usage update a tokenek összesítéséhez\n const usage: unknown = data.usage;\n if (usage && typeof usage === 'object') {\n const usageObj: Record<string, unknown> = usage as Record<string, unknown>;\n const current: OcSessionUsage_Interface = this.sessionUsage_$();\n this.sessionUsage_$.set({\n inputTokens: current.inputTokens + (typeof usageObj.inputTokens === 'number' ? usageObj.inputTokens : 0),\n outputTokens: current.outputTokens + (typeof usageObj.outputTokens === 'number' ? usageObj.outputTokens : 0),\n costUsd: current.costUsd + (typeof usageObj.costUsd === 'number' ? usageObj.costUsd : 0),\n });\n }\n break;\n }\n\n case 'tool-call-start': {\n const toolName: string = typeof data.name === 'string' ? data.name : 'unknown';\n const toolInput: unknown = data.input;\n const inputSummary: string = toolInput ? this.summarizeToolInput(toolInput) : '';\n const toolText: string = inputSummary ? `${toolName}: ${inputSummary}` : toolName;\n this.pushConsoleMessage({\n type: 'tool',\n text: toolText,\n rawData: data,\n });\n break;\n }\n\n case 'tool-call-end': {\n const content: unknown = data.content ?? data.output;\n const text: string = typeof content === 'string' ? content : JSON.stringify(content ?? {});\n this.pushConsoleMessage({\n type: 'tool-result',\n text: text.length > 200 ? text.substring(0, 200) + '…' : text,\n expandableContent: text.length > 200 ? text : undefined,\n rawData: data,\n });\n break;\n }\n\n case 'error': {\n const message: unknown = data.message ?? data.content;\n if (typeof message === 'string' && message) {\n this.pushConsoleMessage({ type: 'error', text: message });\n }\n break;\n }\n\n case 'connection-change': {\n const connectionState: string = typeof data.state === 'string' ? data.state : '';\n if (connectionState) {\n this.pushConsoleMessage({\n type: 'info',\n text: `Gateway connection: ${connectionState}`,\n rawData: data,\n });\n }\n break;\n }\n\n default:\n break;\n }\n }\n\n /**\n * Tool input rövid összefoglaló (console megjelenítéshez).\n */\n private summarizeToolInput(input: unknown): string {\n if (typeof input === 'string') {\n return input.length > 80 ? input.substring(0, 80) + '…' : input;\n }\n if (typeof input === 'object' && input !== null) {\n const json: string = JSON.stringify(input);\n return json.length > 80 ? json.substring(0, 80) + '…' : json;\n }\n return '';\n }\n\n // ── Private Static: Gateway field mapping helpers ──────────\n\n /**\n * Egy gateway history elem ideje — nincs parse-pillanat fallback; üres ha nincs ismert mező.\n */\n private static extractGatewayChatMessageTimestamp(raw: Record<string, unknown>): string {\n const iso: string | undefined = CCAP_OcGatewayTimestamp_Util.extractTimestamp(\n raw,\n CCAP_OcGatewayTimestamp_Util.GATEWAY_CHAT_MESSAGE_TIMESTAMP_FIELD_NAMES,\n );\n return iso ?? '';\n }\n\n // ── Assembled messages (SSOT) ──────────────────────────────\n\n /**\n * Assembled message-ek betöltése REST-en.\n */\n async loadAssembledMessages(params: {\n sessionId: string;\n }): Promise<void> {\n try {\n const result = await this.extSessionMsg_AS.getMessages({\n sessionId: params.sessionId,\n latest: true,\n });\n this.assembledMessages_$.set(result.messages);\n } catch (err: unknown) {\n DyFM_Log.error(\n `CCAP_OcSession_DS | loadAssembledMessages failed`\n + ` | sessionId: ${params.sessionId}`,\n err,\n );\n }\n }\n\n /** Új assembled message socket-en. */\n private handleAssembledMessage(\n payload: Record<string, unknown>,\n ): void {\n const sessionId: string =\n typeof payload.sessionId === 'string'\n ? payload.sessionId\n : '';\n if (!sessionId || sessionId !== this.activeSessionId_$()) {\n return;\n }\n const msgData: unknown = payload.message;\n if (!msgData || typeof msgData !== 'object') {\n return;\n }\n const msg: CCAP_ExtSessionMessage_Response =\n msgData as CCAP_ExtSessionMessage_Response;\n const current: CCAP_ExtSessionMessage_Response[] =\n this.assembledMessages_$();\n this.assembledMessages_$.set([...current, msg]);\n }\n\n /** Assembled message frissítés socket-en. */\n private handleAssembledMessageUpdate(\n payload: Record<string, unknown>,\n ): void {\n const sessionId: string =\n typeof payload.sessionId === 'string'\n ? payload.sessionId\n : '';\n if (!sessionId || sessionId !== this.activeSessionId_$()) {\n return;\n }\n const messageKey: string =\n typeof payload.messageKey === 'string'\n ? payload.messageKey\n : '';\n if (!messageKey) {\n return;\n }\n const updateData: unknown = payload.update;\n if (!updateData || typeof updateData !== 'object') {\n return;\n }\n const updateRec: Record<string, unknown> =\n updateData as Record<string, unknown>;\n const current: CCAP_ExtSessionMessage_Response[] =\n this.assembledMessages_$();\n const idx: number = current.findIndex(\n (m: CCAP_ExtSessionMessage_Response): boolean =>\n m.messageKey === messageKey,\n );\n if (idx < 0) {\n return;\n }\n const updated: CCAP_ExtSessionMessage_Response = {\n ...current[idx],\n };\n if (typeof updateRec.bodyText === 'string') {\n updated.bodyText = updateRec.bodyText;\n }\n if (updateRec.toolResult !== undefined) {\n updated.toolResult =\n updateRec.toolResult as CCAP_ExtSessionMessage_Response['toolResult'];\n }\n if (typeof updateRec.toolStatus === 'string') {\n updated.toolStatus = updateRec.toolStatus;\n }\n if (updateRec.headerStatusDot !== undefined) {\n updated.headerStatusDot =\n typeof updateRec.headerStatusDot === 'string'\n ? updateRec.headerStatusDot\n : undefined;\n }\n const next: CCAP_ExtSessionMessage_Response[] = [...current];\n next[idx] = updated;\n this.assembledMessages_$.set(next);\n }\n}\n", "/**\n * Gateway RPC objektumok timestamp kinyerése — közös OC Session lista és Dark Office OCI mapping SSOT.\n */\nexport class CCAP_OcGatewayTimestamp_Util {\n\n /**\n * Gateway chatHistory üzenet timestamp mező prioritás — session lista / Dark Office mapping-gel összhangban.\n * Az `extractTimestamp` string (ISO) és pozitív szám (epoch s/ms) értéket is kezel.\n */\n static readonly GATEWAY_CHAT_MESSAGE_TIMESTAMP_FIELD_NAMES: string[] = [\n 'timestamp',\n 'createdAt',\n 'updatedAt',\n 'ts',\n 'time',\n 'sentAt',\n 'messageTimestamp',\n 'created_at',\n 'updated_at',\n 'lastMessageAt',\n 'last_message_at',\n 'startedAt',\n 'started_at',\n 'lastActivityAt',\n 'last_activity_at',\n ];\n\n /**\n * Session lista `lastActivityAt` — több gateway mezőnév, lifecycle és üzenet idő együtt.\n */\n static readonly GATEWAY_SESSION_LAST_ACTIVITY_FIELD_NAMES: string[] = [\n 'lastActivityAt',\n 'updatedAt',\n 'lastMessageAt',\n 'updated_at',\n 'last_activity_at',\n 'last_message_at',\n 'startedAt',\n 'started_at',\n 'createdAt',\n 'created_at',\n ];\n\n /** Session lista `startedAt` fallback lánc. */\n static readonly GATEWAY_SESSION_STARTED_FIELD_NAMES: string[] = [\n 'startedAt',\n 'started_at',\n 'createdAt',\n 'created_at',\n ];\n\n /**\n * Csak üzenet/output időbélyegek — Dark Office workstation `working` ablak (lifecycle nélkül).\n */\n static readonly GATEWAY_OUTPUT_ONLY_TIMESTAMP_FIELD_NAMES: string[] = [\n 'lastMessageAt',\n 'last_message_at',\n 'lastOutputAt',\n 'last_output_at',\n ];\n\n /**\n * Timestamp kinyerése raw gateway objektumból — több mező nevet és típust is kezel.\n * String (ISO) és szám (epoch ms) típusú értékeket fogad; prioritás a felsorolás sorrendje.\n */\n static extractTimestamp(\n raw: Record<string, unknown>,\n fieldNames: string[],\n ): string | undefined {\n for (const field of fieldNames) {\n const value: unknown = raw[field];\n if (typeof value === 'string' && value) {\n return value;\n }\n if (typeof value === 'number' && value > 0) {\n // Epoch másodperc vs. milliszekundum heurisztika (2001-09-09 előtti epoch ms nem fordul elő)\n const ms: number = value < 1e12 ? value * 1000 : value;\n return new Date(ms).toISOString();\n }\n }\n return undefined;\n }\n}\n", "import {\n Oc_GatewaySessionsFetch_Interface,\n Oc_ListItem_Interface,\n} from '../../_modules/external-sessions/_modules/openclaw/_models/interfaces/oc-list-item.interface';\nimport { CCAP_OcGatewayTimestamp_Util } from './ccap-oc-gateway-timestamp.util';\n\n/**\n * OpenClaw gateway `sessions.list` válasz → normalizált OC session lista elemek (mapper SSOT).\n */\nexport class CCAP_OcGatewaySessionList_Util {\n\n /**\n * API válasz feldolgozása: lista map + lastActivity rendezés + nyers tömb megőrzése.\n */\n static buildGatewaySessionsFetch(params: {\n response: {\n sessions: Record<string, unknown>[];\n source: string;\n instanceId: string;\n gatewayUrl: string;\n /** Opcionális diagnosztika — szerver/gateway válasz kiterjesztése. */\n _firstSessionKeys?: string[];\n };\n }): Oc_GatewaySessionsFetch_Interface {\n const optionalKeys: string[] | undefined = params.response._firstSessionKeys;\n const firstSessionKeys: string[] = Array.isArray(optionalKeys) ? optionalKeys : [];\n\n const rawSessions: Record<string, unknown>[] = Array.isArray(params.response.sessions)\n ? params.response.sessions\n : [];\n\n const listItems: Oc_ListItem_Interface[] = rawSessions.map(\n (raw: Record<string, unknown>): Oc_ListItem_Interface =>\n CCAP_OcGatewaySessionList_Util.mapRawSessionToListItem({\n raw: raw,\n gatewayUrl: params.response.gatewayUrl,\n }),\n );\n\n const sorted: Oc_ListItem_Interface[] =\n CCAP_OcGatewaySessionList_Util.sortListItemsByLastActivityDesc({ items: listItems });\n\n return {\n listItems: sorted,\n rawSessions: rawSessions,\n gatewayUrl: params.response.gatewayUrl,\n source: params.response.source,\n instanceId: params.response.instanceId,\n firstSessionKeys: firstSessionKeys,\n };\n }\n\n /**\n * Egy nyers gateway session sor → lista elem.\n */\n private static mapRawSessionToListItem(params: {\n raw: Record<string, unknown>;\n gatewayUrl: string;\n }): Oc_ListItem_Interface {\n const raw: Record<string, unknown> = params.raw;\n return {\n sessionId: typeof raw['key'] === 'string'\n ? raw['key']\n : typeof raw['sessionId'] === 'string'\n ? raw['sessionId']\n : typeof raw['id'] === 'string'\n ? raw['id']\n : String(raw['key'] ?? raw['sessionId'] ?? raw['id'] ?? ''),\n label: typeof raw['label'] === 'string'\n ? raw['label']\n : typeof raw['name'] === 'string'\n ? raw['name']\n : typeof raw['title'] === 'string' ? raw['title'] : undefined,\n workspacePath: typeof raw['workspacePath'] === 'string'\n ? raw['workspacePath']\n : typeof raw['cwd'] === 'string' ? raw['cwd'] : '',\n status: typeof raw['status'] === 'string' ? raw['status'] : 'unknown',\n statusMessage: typeof raw['statusMessage'] === 'string' ? raw['statusMessage'] : undefined,\n gatewayUrl: params.gatewayUrl,\n openclawAgentName: typeof raw['agentName'] === 'string'\n ? raw['agentName']\n : typeof raw['agent'] === 'string' ? raw['agent'] : undefined,\n promptCount: typeof raw['promptCount'] === 'number'\n ? raw['promptCount']\n : typeof raw['messageCount'] === 'number' ? raw['messageCount'] : 0,\n toolCallCount: typeof raw['toolCallCount'] === 'number' ? raw['toolCallCount'] : 0,\n lastActivityAt: CCAP_OcGatewayTimestamp_Util.extractTimestamp(\n raw,\n CCAP_OcGatewayTimestamp_Util.GATEWAY_SESSION_LAST_ACTIVITY_FIELD_NAMES,\n ),\n startedAt: CCAP_OcGatewayTimestamp_Util.extractTimestamp(\n raw,\n CCAP_OcGatewayTimestamp_Util.GATEWAY_SESSION_STARTED_FIELD_NAMES,\n ),\n lastPrompt: typeof raw['lastPrompt'] === 'string' ? raw['lastPrompt'] : undefined,\n mode: typeof raw['mode'] === 'string' ? raw['mode'] : undefined,\n reasoningEffort: typeof raw['reasoningEffort'] === 'string'\n ? raw['reasoningEffort']\n : typeof raw['thinking'] === 'string' ? raw['thinking'] : undefined,\n isArchived: typeof raw['isArchived'] === 'boolean' ? raw['isArchived'] : false,\n };\n }\n\n /**\n * Legfrissebb `lastActivityAt` felül (gateway lista megjelenítés).\n */\n private static sortListItemsByLastActivityDesc(params: {\n items: Oc_ListItem_Interface[];\n }): Oc_ListItem_Interface[] {\n return [...params.items].sort(\n (a: Oc_ListItem_Interface, b: Oc_ListItem_Interface): number => {\n const dateA: number = a.lastActivityAt ? new Date(a.lastActivityAt).getTime() : 0;\n const dateB: number = b.lastActivityAt ? new Date(b.lastActivityAt).getTime() : 0;\n return dateB - dateA;\n },\n );\n }\n}\n", "import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { firstValueFrom } from 'rxjs';\n\nimport { environment } from '../../../../../../environments/environment';\nimport {\n Oc_List_Response,\n Oc_Detail_Response,\n Oc_Event_Response,\n} from '../_models/interfaces/oc-list-item.interface';\nimport { ExS_InstanceContext_DataService } from '../../../_services/exs-instance-context.data-service';\n\n/**\n * OpenClaw Session Toolkit API service.\n * REST API hívások a session lifecycle kezeléséhez és monitorozáshoz.\n * Minden hívás `?ccapId=<current>` paramot küld — a ccapId forrása\n * az instance-szelektor (`ExS_InstanceContext_DataService.activeCcapId_$`).\n */\n@Injectable({ providedIn: 'root' })\nexport class Openclaw_ApiService {\n\n private readonly baseUrl: string = `${environment.api.baseUrl}/oc-session`;\n\n private readonly http: HttpClient = inject(HttpClient);\n\n private readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n\n /**\n * ccapId hozzáfűzése egy meglévő HttpParams-hoz.\n */\n private withCcapId(params: HttpParams): HttpParams {\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n if (!ccapId) {\n return params;\n }\n return params.set('ccapId', ccapId);\n }\n\n /**\n * Új session létrehozása.\n */\n createSession(params: {\n workspacePath: string;\n label?: string;\n gatewayUrl?: string;\n openclawAgentName?: string;\n initialPrompt?: string;\n actorId?: string;\n actorLabel?: string;\n mode?: string;\n reasoningEffort?: string;\n }): Promise<{ session: Record<string, unknown> }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ session: Record<string, unknown> }>(\n this.baseUrl,\n params,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session lista lekérdezése.\n */\n listSessions(params?: {\n status?: string;\n workspacePath?: string;\n gatewayUrl?: string;\n includeArchived?: boolean;\n limit?: number;\n offset?: number;\n }): Promise<Oc_List_Response> {\n let httpParams: HttpParams = this.withCcapId(new HttpParams());\n\n if (params?.status) {\n httpParams = httpParams.set('status', params.status);\n }\n if (params?.workspacePath) {\n httpParams = httpParams.set('workspacePath', params.workspacePath);\n }\n if (params?.gatewayUrl) {\n httpParams = httpParams.set('gatewayUrl', params.gatewayUrl);\n }\n if (params?.includeArchived) {\n httpParams = httpParams.set('includeArchived', '1');\n }\n if (params?.limit != null) {\n httpParams = httpParams.set('limit', String(params.limit));\n }\n if (params?.offset != null) {\n httpParams = httpParams.set('offset', String(params.offset));\n }\n\n return firstValueFrom(\n this.http.get<Oc_List_Response>(\n this.baseUrl,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session lista lekérdezése közvetlenül a gateway-ről (SSOT).\n * A szerver a sessions_list RPC-t hívja a megadott instance gateway-jén.\n */\n listGatewaySessions(params: {\n instanceId: string;\n }): Promise<{ sessions: Record<string, unknown>[]; source: string; instanceId: string; gatewayUrl: string }> {\n const httpParams: HttpParams = new HttpParams()\n .set('instanceId', params.instanceId);\n\n return firstValueFrom(\n this.http.get<{ sessions: Record<string, unknown>[]; source: string; instanceId: string; gatewayUrl: string }>(\n `${this.baseUrl}/gateway-sessions`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session history lekérdezése közvetlenül a gateway-ről (SSOT).\n */\n getGatewaySessionHistory(params: {\n sessionId: string;\n instanceId: string;\n }): Promise<{ sessionId: string; history: Record<string, unknown>[]; source: string }> {\n const httpParams: HttpParams = new HttpParams()\n .set('instanceId', params.instanceId);\n return firstValueFrom(\n this.http.get<{ sessionId: string; history: Record<string, unknown>[]; source: string }>(\n `${this.baseUrl}/gateway-sessions/${params.sessionId}/history`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Prompt küldése a gateway-re (SSOT).\n */\n sendGatewayPrompt(params: {\n sessionId: string;\n instanceId: string;\n content: string;\n agentName?: string;\n }): Promise<{ success: boolean; result: Record<string, unknown>; source: string }> {\n return firstValueFrom(\n this.http.post<{ success: boolean; result: Record<string, unknown>; source: string }>(\n `${this.baseUrl}/gateway-sessions/${params.sessionId}/send`,\n {\n instanceId: params.instanceId,\n content: params.content,\n agentName: params.agentName,\n },\n ),\n );\n }\n\n /**\n * Session megszakítás a gateway-en (SSOT).\n */\n abortGatewaySession(params: {\n sessionId: string;\n instanceId: string;\n }): Promise<{ success: boolean }> {\n return firstValueFrom(\n this.http.post<{ success: boolean }>(\n `${this.baseUrl}/gateway-sessions/${params.sessionId}/abort`,\n { instanceId: params.instanceId },\n ),\n );\n }\n\n /**\n * Session törlése a gateway-en (SSOT).\n */\n deleteGatewaySession(params: {\n sessionId: string;\n instanceId: string;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = new HttpParams()\n .set('instanceId', params.instanceId);\n return firstValueFrom(\n this.http.delete<{ success: boolean }>(\n `${this.baseUrl}/gateway-sessions/${params.sessionId}`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session részletek lekérdezése.\n */\n getSession(params: {\n sessionId: string;\n }): Promise<Oc_Detail_Response> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.get<Oc_Detail_Response>(\n `${this.baseUrl}/${params.sessionId}`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Prompt küldése egy session-nek.\n */\n sendPrompt(params: {\n sessionId: string;\n content: string;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean }>(\n `${this.baseUrl}/${params.sessionId}/prompt`,\n { content: params.content },\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session újracsatlakoztatás (gateway reconnect).\n */\n reconnectSession(params: {\n sessionId: string;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean }>(\n `${this.baseUrl}/${params.sessionId}/reconnect`,\n {},\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Futó execution leállítása (gateway sessions.abort RPC).\n */\n stopExecution(params: {\n sessionId: string;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean }>(\n `${this.baseUrl}/${params.sessionId}/stop-execution`,\n {},\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session leállítása (terminate).\n */\n terminateSession(params: {\n sessionId: string;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean }>(\n `${this.baseUrl}/${params.sessionId}/terminate`,\n {},\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session config frissítése (mode, effort, agentName).\n */\n updateSessionConfig(params: {\n sessionId: string;\n mode?: string;\n reasoningEffort?: string;\n openclawAgentName?: string;\n }): Promise<{ success: boolean }> {\n const { sessionId, ...body } = params;\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.patch<{ success: boolean }>(\n `${this.baseUrl}/${sessionId}/config`,\n body,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session archiválás állapot beállítása.\n */\n setSessionArchived(params: {\n sessionId: string;\n isArchived: boolean;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.patch<{ success: boolean }>(\n `${this.baseUrl}/${params.sessionId}/archive`,\n { isArchived: params.isArchived },\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session event log lekérdezése.\n */\n getSessionEvents(params: {\n sessionId: string;\n eventType?: string;\n since?: string;\n sinceSequence?: number;\n limit?: number;\n offset?: number;\n latest?: boolean;\n }): Promise<Oc_Event_Response> {\n let httpParams: HttpParams = this.withCcapId(new HttpParams());\n\n if (params.eventType) {\n httpParams = httpParams.set('eventType', params.eventType);\n }\n if (params.since) {\n httpParams = httpParams.set('since', params.since);\n }\n if (params.sinceSequence != null) {\n httpParams = httpParams.set('sinceSequence', String(params.sinceSequence));\n }\n if (params.limit != null) {\n httpParams = httpParams.set('limit', String(params.limit));\n }\n if (params.offset != null) {\n httpParams = httpParams.set('offset', String(params.offset));\n }\n if (params.latest) {\n httpParams = httpParams.set('latest', '1');\n }\n\n return firstValueFrom(\n this.http.get<Oc_Event_Response>(\n `${this.baseUrl}/${params.sessionId}/events`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * SSE event stream URL generálása (EventSource-hoz).\n */\n getSessionEventStreamUrl(params: { sessionId: string }): string {\n const baseStreamUrl: string = `${this.baseUrl}/${params.sessionId}/events/stream`;\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n if (!ccapId) {\n return baseStreamUrl;\n }\n return `${baseStreamUrl}?ccapId=${encodeURIComponent(ccapId)}`;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_fsm_dynamo", "CCAP_OcGatewayTimestamp_Util", "GATEWAY_CHAT_MESSAGE_TIMESTAMP_FIELD_NAMES", "GATEWAY_SESSION_LAST_ACTIVITY_FIELD_NAMES", "GATEWAY_SESSION_STARTED_FIELD_NAMES", "GATEWAY_OUTPUT_ONLY_TIMESTAMP_FIELD_NAMES", "extractTimestamp", "raw", "fieldNames", "field", "value", "ms", "Date", "toISOString", "CCAP_OcGatewaySessionList_Util", "buildGatewaySessionsFetch", "params", "optionalKeys", "response", "_firstSessionKeys", "firstSessionKeys", "Array", "isArray", "rawSessions", "sessions", "listItems", "map", "raw", "mapRawSessionToListItem", "gatewayUrl", "sortListItemsByLastActivityDesc", "items", "source", "instanceId", "sessionId", "String", "label", "undefined", "workspacePath", "status", "statusMessage", "openclawAgentName", "promptCount", "toolCallCount", "lastActivityAt", "CCAP_OcGatewayTimestamp_Util", "extractTimestamp", "GATEWAY_SESSION_LAST_ACTIVITY_FIELD_NAMES", "startedAt", "GATEWAY_SESSION_STARTED_FIELD_NAMES", "lastPrompt", "mode", "reasoningEffort", "isArchived", "sort", "a", "b", "dateA", "Date", "getTime", "Openclaw_ApiService", "baseUrl", "environment", "api", "http", "inject", "HttpClient", "peiContext_DS", "ExS_InstanceContext_DataService", "withCcapId", "params", "ccapId", "activeCcapId_$", "set", "createSession", "httpParams", "HttpParams", "firstValueFrom", "post", "listSessions", "status", "workspacePath", "gatewayUrl", "includeArchived", "limit", "String", "offset", "get", "listGatewaySessions", "instanceId", "getGatewaySessionHistory", "sessionId", "sendGatewayPrompt", "content", "agentName", "abortGatewaySession", "deleteGatewaySession", "delete", "getSession", "sendPrompt", "reconnectSession", "stopExecution", "terminateSession", "updateSessionConfig", "body", "patch", "setSessionArchived", "isArchived", "getSessionEvents", "eventType", "since", "sinceSequence", "latest", "getSessionEventStreamUrl", "baseStreamUrl", "encodeURIComponent", "factory", "\u0275fac", "providedIn", "Openclaw_DataService", "sessions_$", "signal", "sessionsLoading_$", "sessionsLoadError_$", "selectedSession_$", "selectedSessionLoading_$", "selectedSessionEvents_$", "consoleMessages_$", "assembledMessages_$", "lastStatusUpdate_$", "sessionUsage_$", "inputTokens", "outputTokens", "costUsd", "activeSessionId_$", "activeInstanceId_$", "gatewayFilter_$", "extSessionMsg_AS", "inject", "ExS_Message_ApiService", "ocSession_AS", "Openclaw_ApiService", "globalError_CS", "CCAP_GlobalError_ControlService", "socket_CS", "CCAP_Socket_ControlService", "ngZone", "NgZone", "eventSubscription", "reconnectSubscription", "lastKnownEventSequence", "chatPollHandle", "detailPollHandle", "lastPolledHistoryFingerprint", "constructor", "event$", "subscribe", "envelope", "handleSocketEvent", "connected$", "isConnected", "activeId", "emit", "sessionId", "loadAssembledMessages", "catch", "backfillMissedEvents", "ngOnDestroy", "stopChatPolling", "unsubscribe", "setGatewayFilter", "gatewayUrl", "set", "loadSessions", "setGatewayFilterOnly", "params", "__async", "sorted", "listSessions", "status", "workspacePath", "undefined", "includeArchived", "sessions", "sort", "a", "b", "dateA", "lastActivityAt", "Date", "getTime", "err", "pushConsoleMessage", "type", "text", "CCAP_ErrorDisplay_Util", "getErrorMessageForDisplay", "fetchGatewaySessionsForInstance", "response", "listGatewaySessions", "instanceId", "CCAP_OcGatewaySessionList_Util", "buildGatewaySessionsFetch", "loadGatewaySessions", "fetchResult", "listItems", "length", "rawSessions", "firstSessionKeys", "join", "loadSessionDetail", "isSilent", "getSession", "errorMessage", "Error", "message", "loadGatewaySessionHistory", "getGatewaySessionHistory", "rawResponse", "rawKeys", "Array", "isArray", "_rawKeys", "history", "messages", "parseGatewayHistory", "gatewayMessageCount", "messageCount", "firstMessageKeys", "_firstMessageKeys", "listKey", "allocateConsoleListKey", "timestamp", "toISOString", "session", "promptCount", "toolCallCount", "isArchived", "runtime", "isLive", "runtimeStatus", "outputBufferLength", "computeGatewayHistoryFingerprint", "startChatPolling", "loadSessionEvents", "getSessionEvents", "eventType", "limit", "latest", "events", "updateLastKnownSequence", "event", "pushConsoleMessageFromEvent", "createSession", "result", "String", "sendPrompt", "content", "sendGatewayPrompt", "reconnectSession", "stopExecution", "terminateSession", "setSessionArchived", "updateSessionConfig", "currentDetail", "updatedSession", "__spreadValues", "mode", "reasoningEffort", "openclawAgentName", "__spreadProps", "setActiveSessionId", "previousId", "clearLiveOutput", "globalThis", "crypto", "randomUUID", "trimmedText", "trim", "expandableContent", "rawData", "current", "CHAT_POLL_INTERVAL_MS", "second", "DETAIL_POLL_INTERVAL_MS", "setInterval", "pollChatHistory", "sid", "clearInterval", "last", "idPart", "id", "messageId", "tsPart", "extractGatewayChatMessageTimestamp", "body", "extractTextFromMessage", "sliceMax", "contentSlice", "slice", "fingerprint", "run", "toolResultMap", "Map", "toolCallIds", "msg", "rawContent", "block", "btype", "toolId", "push", "toolUseId", "tool_use_id", "extractTextFromContentBlock", "toolCallIdIndex", "role", "resultText", "blockType", "_block", "_message", "contentBlockCount", "toolName", "name", "toolInput", "input", "arguments", "pairedResult", "get", "JSON", "stringify", "_pairedResultLength", "some", "m", "resultContent", "map", "rc", "thinking", "fallbackContent", "newEvents", "sinceSequence", "currentEvents", "DyFM_Log", "warn", "sequence", "eventName", "payload", "handleStatusUpdate", "handleOutputChunk", "handleSessionEvent", "handleListUpdate", "handleAssembledMessage", "handleAssembledMessageUpdate", "error", "statusMessage", "updated", "s", "showError", "outputType", "eventItem", "data", "_payload", "usage", "usageObj", "inputSummary", "summarizeToolInput", "toolText", "output", "substring", "connectionState", "state", "json", "raw", "CCAP_OcGatewayTimestamp_Util", "extractTimestamp", "GATEWAY_CHAT_MESSAGE_TIMESTAMP_FIELD_NAMES", "getMessages", "msgData", "messageKey", "updateData", "update", "updateRec", "idx", "findIndex", "bodyText", "toolResult", "toolStatus", "headerStatusDot", "next", "factory", "\u0275fac", "providedIn"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["src/app/_modules/external-sessions/_modules/cursor-acp/_collections/ca-event-chronological-sort.util.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_collections/utils/console-display/ca-mirror-stream-merge.util.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_services/cursor-acp.data-service.ts", "src/app/_modules/shared/_collections/utils/shr-unknown-value-pretty-json.util.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_collections/utils/console-display/ca-mirror-event-brief.util.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_collections/utils/console-display/ca-tool-call-mirror-parse.util.ts", "src/app/_modules/external-sessions/_modules/cursor-acp/_services/cursor-acp.api-service.ts"],
|
|
4
|
-
"sourcesContent": ["import { CA_EventItem_Interface } from '../_models/interfaces/ca-view.interface';\n\n/**\n * Mirror timeline / konzol — események sorrendje: `sequence` ASC, tie-break `timestamp` (azonos sequence DB hiba / régi adat).\n */\nexport class CA_EventChronologicalSort_Util {\n\n /**\n * Növekvő időrend — user prompt és assistant chunk helyes váltakozása duplikált sequence mellett is.\n */\n static compareMirrorEventsAsc(\n a: CA_EventItem_Interface,\n b: CA_EventItem_Interface,\n ): number {\n const dq: number = (a.sequence ?? 0) - (b.sequence ?? 0);\n if (dq !== 0) {\n return dq;\n }\n const ta: string = typeof a.timestamp === 'string' ? a.timestamp : '';\n const tb: string = typeof b.timestamp === 'string' ? b.timestamp : '';\n const tc: number = ta.localeCompare(tb);\n if (tc !== 0) {\n return tc;\n }\n const ea: string = typeof a.eventType === 'string' ? a.eventType : '';\n const eb: string = typeof b.eventType === 'string' ? b.eventType : '';\n return ea.localeCompare(eb);\n }\n}\n", "import {\n CA_ConsoleStreamTail_Interface,\n CA_EventItem_Interface,\n CA_MirrorStreamChunkParsed_Interface,\n CA_TimelineStreamRow_Interface,\n} from '../../../_models/interfaces/ca-view.interface';\n\n/**\n * ACP stream chunk-ok összefűzése — console buborék és timeline sor SSOT szabályok.\n */\nexport class CA_MirrorStreamMerge_Util {\n\n /**\n * Ugyanazon logikai üzenet chunk-jai: mindkét messageId kitöltve és különböző → külön stream.\n * Ha csak az egyik oldalon van id, az ACP gyakori mintája (későn érkező messageId) — még fűzünk.\n */\n private static messageIdsCompatibleForStreamMerge(\n prevMid: string | undefined,\n nextMid: string | undefined,\n ): boolean {\n const p: string = (prevMid ?? '').trim();\n const n: string = (nextMid ?? '').trim();\n if (p.length > 0 && n.length > 0) {\n return p === n;\n }\n return true;\n }\n\n /**\n * Mirror `data` (sessionId + update) → chunk parse vagy null.\n */\n static parseStreamChunkFromMirrorData(\n data: Record<string, unknown>,\n ): CA_MirrorStreamChunkParsed_Interface | null {\n const upd: unknown = data.update;\n if (upd === null || typeof upd !== 'object' || Array.isArray(upd)) {\n return null;\n }\n const rec: Record<string, unknown> = CA_MirrorStreamMerge_Util.toPlainRecord(upd);\n const kind: unknown = rec.sessionUpdate;\n let role: 'agent' | 'user' | 'thought' | null = null;\n if (kind === 'agent_message_chunk') {\n role = 'agent';\n }\n if (kind === 'user_message_chunk') {\n role = 'user';\n }\n if (kind === 'agent_thought_chunk') {\n role = 'thought';\n }\n if (role === null) {\n return null;\n }\n const content: unknown = rec.content;\n if (content === null || typeof content !== 'object' || Array.isArray(content)) {\n return null;\n }\n const crec: Record<string, unknown> = CA_MirrorStreamMerge_Util.toPlainRecord(content);\n const text: unknown = crec.text;\n if (typeof text !== 'string' || !text.length) {\n return null;\n }\n const midRaw: unknown = rec.messageId;\n const messageId: string | undefined =\n typeof midRaw === 'string' && midRaw.length > 0 ? midRaw : undefined;\n return { role: role, text: text, messageId: messageId };\n }\n\n /**\n * Console stream sor + új chunk — ugyanaz a stream: role egyezik, messageId kompatibilis,\n * sequence szigorúan növekvő (a szerver minden ACP notification-re léptet, közte lehet tool / info).\n */\n static canMergeConsoleTailWithChunk(params: {\n prev: CA_ConsoleStreamTail_Interface;\n ev: CA_EventItem_Interface;\n parsed: CA_MirrorStreamChunkParsed_Interface;\n }): boolean {\n const prev: CA_ConsoleStreamTail_Interface = params.prev;\n if (prev.streamTextRole === undefined || prev.streamTextRole !== params.parsed.role) {\n return false;\n }\n const prevMid: string | undefined = prev.streamMessageId;\n const nextMid: string | undefined = params.parsed.messageId;\n if (!CA_MirrorStreamMerge_Util.messageIdsCompatibleForStreamMerge(prevMid, nextMid)) {\n return false;\n }\n const nSeq: number = params.ev.sequence ?? 0;\n const pSeq: number = prev.streamLastSequence ?? 0;\n if (nSeq <= pSeq) {\n return false;\n }\n return true;\n }\n\n /**\n * Timeline: előző esemény + következő chunk ugyanabból a streamből.\n */\n static canMergeMirrorChunkEvents(\n prevEv: CA_EventItem_Interface,\n nextEv: CA_EventItem_Interface,\n nextParsed: CA_MirrorStreamChunkParsed_Interface,\n ): boolean {\n const prevParsed: CA_MirrorStreamChunkParsed_Interface | null =\n CA_MirrorStreamMerge_Util.parseStreamChunkFromMirrorData(prevEv.data ?? {});\n if (prevParsed === null) {\n return false;\n }\n if (prevParsed.role !== nextParsed.role) {\n return false;\n }\n const prevMid: string | undefined = prevParsed.messageId;\n const nextMid: string | undefined = nextParsed.messageId;\n if (!CA_MirrorStreamMerge_Util.messageIdsCompatibleForStreamMerge(prevMid, nextMid)) {\n return false;\n }\n const pSeq: number = prevEv.sequence ?? 0;\n const nSeq: number = nextEv.sequence ?? 0;\n if (nSeq <= pSeq) {\n return false;\n }\n return true;\n }\n\n /**\n * Növekvő sequence szerinti események → timeline sorok (chunk run összevonva).\n */\n static foldEventsToTimelineRows(\n sortedAsc: CA_EventItem_Interface[],\n ): CA_TimelineStreamRow_Interface[] {\n const rows: CA_TimelineStreamRow_Interface[] = [];\n for (const ev of sortedAsc) {\n const nextParsed: CA_MirrorStreamChunkParsed_Interface | null =\n CA_MirrorStreamMerge_Util.parseStreamChunkFromMirrorData(ev.data ?? {});\n if (nextParsed !== null) {\n const tail: CA_TimelineStreamRow_Interface | undefined =\n rows.length > 0 ? rows[rows.length - 1] : undefined;\n const tailLast: CA_EventItem_Interface | undefined =\n tail !== undefined && tail.events.length > 0 ? tail.events[tail.events.length - 1] : undefined;\n if (\n tail !== undefined\n && tailLast !== undefined\n && CA_MirrorStreamMerge_Util.canMergeMirrorChunkEvents(tailLast, ev, nextParsed)\n ) {\n const nextEvents: CA_EventItem_Interface[] = [...tail.events, ev];\n rows[rows.length - 1] = {\n rowKey: CA_MirrorStreamMerge_Util.mergedTimelineRowKey(nextEvents),\n events: nextEvents,\n };\n } else {\n rows.push({\n rowKey: `evt-${String(ev.sequence ?? 0)}`,\n events: [ev],\n });\n }\n } else {\n rows.push({\n rowKey: `evt-${String(ev.sequence ?? 0)}`,\n events: [ev],\n });\n }\n }\n return rows;\n }\n\n /**\n * Összevont chunk sor stabil track kulcsa.\n */\n static mergedTimelineRowKey(events: CA_EventItem_Interface[]): string {\n if (!events.length) {\n return 'evt-empty';\n }\n const first: number = events[0].sequence ?? 0;\n const last: number = events[events.length - 1].sequence ?? 0;\n return `merged-chunk-${String(first)}-${String(last)}`;\n }\n\n private static toPlainRecord(value: object): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n out[key] = Reflect.get(value, key);\n }\n return out;\n }\n}\n", "import { inject, Injectable, NgZone, OnDestroy, signal } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { DyFM_Log, second } from '@futdevpro/fsm-dynamo';\n\nimport {\n CA_EventItem_Interface,\n CA_ListItem_Interface,\n CA_MirrorRuntime_Interface,\n} from '../_models/interfaces/ca-view.interface';\nimport { CA_MirrorBrief_Result_Interface } from '../_models/interfaces/ca-mirror-brief-result.interface';\nimport { CCAP_ErrorDisplay_Util } from '../../../../../_collections/error/error-display.util';\nimport { CA_EventChronologicalSort_Util } from '../_collections/ca-event-chronological-sort.util';\nimport { CA_MirrorEventBrief_Util } from '../_collections/utils/console-display/ca-mirror-event-brief.util';\nimport { CA_MirrorStreamMerge_Util } from '../_collections/utils/console-display/ca-mirror-stream-merge.util';\nimport { CA_ToolCallMirrorParse_Util } from '../_collections/utils/console-display/ca-tool-call-mirror-parse.util';\nimport { CA_ToolCallMirrorParseResult_Interface } from '../_models/interfaces/ca-tool-call-mirror-parse-result.interface';\nimport { CursorAcp_ApiService } from './cursor-acp.api-service';\nimport { ExS_Message_ApiService } from '../../../_services/exs-message.api-service';\nimport { CCAP_GlobalError_ControlService } from '../../../../../_services/control-services/ccap-global-error.control-service';\nimport { CCAP_Socket_ControlService } from '../../../../../_services/control-services/ccap-socket.control-service';\nimport { CCAP_ExtSessionMessage_Response } from '../../../../../_models/interfaces/shared/ccap-ext-message.interface';\nimport { CaSessionConsoleMessage_Interface } from './ca.data-service.interface';\n\n/**\n * CA session kliens SSOT — mirror lista, részlet, események, socket push.\n */\n@Injectable({ providedIn: 'root' })\nexport class CursorAcp_DataService implements OnDestroy {\n\n readonly sessions_$ = signal<CA_ListItem_Interface[]>([]);\n readonly sessionsLoading_$ = signal<boolean>(false);\n readonly sessionsLoadError_$ = signal<unknown | null>(null);\n\n readonly selectedSession_$ = signal<CA_ListItem_Interface | null>(null);\n readonly selectedSessionLoading_$ = signal<boolean>(false);\n\n readonly selectedSessionEvents_$ = signal<CA_EventItem_Interface[]>([]);\n\n /** Timeline pagination — mirror GET /events `hasMore`. */\n readonly sessionEventsHasMore_$ = signal<boolean>(false);\n\n /** Lista API `mirrorRuntime` — dashboard ACP / loadSession badge. */\n readonly mirrorRuntime_$ = signal<CA_MirrorRuntime_Interface | null>(null);\n\n readonly consoleMessages_$ = signal<CaSessionConsoleMessage_Interface[]>([]);\n\n /** Szerver-oldali assembled messages (SSOT — tool pairing, stream merge szerveren). */\n readonly assembledMessages_$ = signal<CCAP_ExtSessionMessage_Response[]>([]);\n\n readonly lastStatusUpdate_$ = signal<{\n sessionId: string;\n status: string;\n statusMessage?: string;\n } | null>(null);\n\n readonly activeSessionId_$ = signal<string>('');\n\n /** GET session / events hiba — detail panel inline + globális error mellett. */\n readonly sessionDetailError_$ = signal<unknown | null>(null);\n\n private readonly caSession_AS: CursorAcp_ApiService = inject(CursorAcp_ApiService);\n private readonly extSessionMsg_AS: ExS_Message_ApiService =\n inject(ExS_Message_ApiService);\n private readonly globalError_CS: CCAP_GlobalError_ControlService =\n inject(CCAP_GlobalError_ControlService);\n private readonly socket_CS: CCAP_Socket_ControlService = inject(CCAP_Socket_ControlService);\n private readonly ngZone: NgZone = inject(NgZone);\n\n private eventSubscription: Subscription | null = null;\n private reconnectSubscription: Subscription | null = null;\n private lastKnownEventSequence: number = -1;\n\n private openSessionPollTimer: ReturnType<typeof setInterval> | null = null;\n\n private openSessionPollTargetId: string = '';\n\n /**\n * Optimista prompt buborék `listKey` + nyers szöveg — mirror `prompt-sent` érkezésekor egy buborék marad.\n */\n private readonly pendingOptimisticPrompts: { listKey: string; text: string }[] = [];\n\n /** Következő GET /events `sinceSequence` (exclusive) — utolsó betöltött sor `sequence`. */\n private sessionEventsNextSince: number | null = null;\n\n constructor() {\n this.eventSubscription = this.socket_CS.event$.subscribe(\n (envelope: { event: string; payload: Record<string, unknown> }): void => {\n this.handleSocketEvent(envelope);\n },\n );\n this.reconnectSubscription = this.socket_CS.connected$.subscribe(\n (isConnected: boolean): void => {\n if (isConnected) {\n const activeId: string = this.activeSessionId_$();\n if (activeId) {\n this.socket_CS.emit('ca-session:subscribe', { sessionId: activeId });\n // Assembled messages újratöltése — a disconnect alatt érkezett socket push-ok\n // (ext-session-msg:message/update) elvesztek; a REST reload pótolja őket.\n this.loadAssembledMessages({ sessionId: activeId }).catch((): void => {});\n }\n }\n },\n );\n }\n\n ngOnDestroy(): void {\n this.stopOpenSessionPolling();\n this.eventSubscription?.unsubscribe();\n this.reconnectSubscription?.unsubscribe();\n }\n\n /**\n * Mirror lista betöltése.\n */\n async loadSessions(params?: { includeArchived?: boolean }): Promise<void> {\n this.sessionsLoading_$.set(true);\n this.sessionsLoadError_$.set(null);\n try {\n const res = await this.caSession_AS.listSessions({\n includeArchived: params?.includeArchived,\n });\n const rawUnknown: unknown = res.sessions;\n const rawList: unknown[] = Array.isArray(rawUnknown) ? rawUnknown : [];\n const mapped: CA_ListItem_Interface[] = rawList.map(\n (s: unknown): CA_ListItem_Interface =>\n this.mapSessionRecord(this.toRecord(s)),\n );\n this.sessions_$.set(mapped);\n const rtUnknown: unknown = res.mirrorRuntime;\n const rtRec: Record<string, unknown> = this.toRecord(rtUnknown);\n const ic: unknown = rtRec.isAcpConnected;\n const ls: unknown = rtRec.loadSessionSupported;\n const tm: unknown = rtRec.isTerminalMode;\n const trc: unknown = rtRec.isTerminalRunnerConnected;\n if (typeof ic === 'boolean' && typeof ls === 'boolean') {\n this.mirrorRuntime_$.set({\n isAcpConnected: ic,\n loadSessionSupported: ls,\n isTerminalMode: tm === true,\n isTerminalRunnerConnected: trc === true,\n });\n } else {\n this.mirrorRuntime_$.set(null);\n }\n } catch (err: unknown) {\n this.sessionsLoadError_$.set(err);\n this.globalError_CS.showError(err, 'ca-session-list');\n } finally {\n this.sessionsLoading_$.set(false);\n }\n }\n\n /**\n * Agent session/list → mirror.\n */\n async syncFromAgent(params?: { cwd?: string }): Promise<void> {\n try {\n await this.caSession_AS.syncFromAgent({ cwd: params?.cwd });\n await this.loadSessions();\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ca-session-sync');\n throw err;\n }\n }\n\n /**\n * Részlet + események. `false` = hiba (`sessionDetailError_$` + globális error); nem dob, hogy ne duplázzunk hydrate catch-ben.\n */\n async loadSessionDetail(params: { sessionId: string }): Promise<boolean> {\n this.sessionDetailError_$.set(null);\n this.selectedSessionLoading_$.set(true);\n try {\n const res = await this.caSession_AS.getSession(params.sessionId);\n const row: Record<string, unknown> = res.session;\n this.selectedSession_$.set(this.mapSessionRecord(row));\n this.sessionEventsNextSince = null;\n this.sessionEventsHasMore_$.set(false);\n const ev = await this.caSession_AS.getSessionEvents({\n sessionId: params.sessionId,\n limit: 200,\n });\n const mapped: CA_EventItem_Interface[] = ev.events.map(\n (e: Record<string, unknown>): CA_EventItem_Interface => ({\n sessionId: typeof e.sessionId === 'string' ? e.sessionId : params.sessionId,\n eventType: typeof e.eventType === 'string' ? e.eventType : '',\n timestamp: typeof e.timestamp === 'string' ? e.timestamp : '',\n data: this.asRecord(e.data),\n sequence: typeof e.sequence === 'number' ? e.sequence : 0,\n }),\n );\n this.selectedSessionEvents_$.set(mapped);\n this.sessionEventsHasMore_$.set(ev.hasMore === true);\n const ns: unknown = ev.nextSinceSequence;\n this.sessionEventsNextSince = typeof ns === 'number' ? ns : null;\n this.lastKnownEventSequence = Math.max(\n -1,\n ...this.selectedSessionEvents_$().map((x: CA_EventItem_Interface): number =>\n x.sequence ?? 0),\n );\n this.seedConsoleFromMirrorEvents(mapped);\n\n // Assembled messages betöltése (SSOT — fire-and-forget, nem blokkolja a detail load-ot)\n this.loadAssembledMessages({ sessionId: params.sessionId }).catch((): void => {});\n\n return true;\n } catch (err: unknown) {\n this.sessionDetailError_$.set(err);\n this.selectedSession_$.set(null);\n this.selectedSessionEvents_$.set([]);\n this.globalError_CS.showError(err, 'ca-session-detail');\n return false;\n } finally {\n this.selectedSessionLoading_$.set(false);\n }\n }\n\n /**\n * Mirror timeline következő oldal — `sinceSequence` lánc.\n */\n async loadMoreSessionEvents(params: { sessionId: string }): Promise<void> {\n const since: number | null = this.sessionEventsNextSince;\n if (since == null) {\n return;\n }\n try {\n const ev = await this.caSession_AS.getSessionEvents({\n sessionId: params.sessionId,\n sinceSequence: since,\n limit: 200,\n });\n const mapped: CA_EventItem_Interface[] = ev.events.map(\n (e: Record<string, unknown>): CA_EventItem_Interface => ({\n sessionId: typeof e.sessionId === 'string' ? e.sessionId : params.sessionId,\n eventType: typeof e.eventType === 'string' ? e.eventType : '',\n timestamp: typeof e.timestamp === 'string' ? e.timestamp : '',\n data: this.asRecord(e.data),\n sequence: typeof e.sequence === 'number' ? e.sequence : 0,\n }),\n );\n const merged: CA_EventItem_Interface[] = [\n ...this.selectedSessionEvents_$(),\n ...mapped,\n ];\n merged.sort(CA_EventChronologicalSort_Util.compareMirrorEventsAsc);\n this.selectedSessionEvents_$.set(merged);\n this.sessionEventsHasMore_$.set(ev.hasMore === true);\n const ns: unknown = ev.nextSinceSequence;\n this.sessionEventsNextSince = typeof ns === 'number' ? ns : null;\n this.lastKnownEventSequence = Math.max(\n this.lastKnownEventSequence,\n ...mapped.map((x: CA_EventItem_Interface): number => x.sequence ?? 0),\n );\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ca-session-events-page');\n }\n }\n\n /**\n * ACP session/load → mirror hydrate (explicit gomb / tool).\n */\n async hydrateFromAgent(params: { sessionId: string; force?: boolean }): Promise<void> {\n try {\n await this.caSession_AS.hydrateSession({\n sessionId: params.sessionId,\n force: params.force,\n });\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ca-session-hydrate');\n throw err;\n }\n const detailOk: boolean = await this.loadSessionDetail({ sessionId: params.sessionId });\n if (!detailOk) {\n const err: unknown = this.sessionDetailError_$();\n throw err instanceof Error ? err : new Error('CA session detail reload after hydrate failed');\n }\n }\n\n /**\n * Aktív session + socket subscribe.\n */\n setActiveSessionId(sessionId: string): void {\n const previousId: string = this.activeSessionId_$();\n if (previousId && previousId !== sessionId) {\n this.socket_CS.emit('ca-session:unsubscribe', { sessionId: previousId });\n }\n this.activeSessionId_$.set(sessionId);\n if (sessionId) {\n this.socket_CS.emit('ca-session:subscribe', { sessionId: sessionId });\n }\n }\n\n clearLiveOutput(): void {\n this.consoleMessages_$.set([]);\n this.lastKnownEventSequence = -1;\n this.pendingOptimisticPrompts.length = 0;\n }\n\n async createSession(params: {\n workspacePath: string;\n label?: string;\n }): Promise<string> {\n try {\n const res: { session: Record<string, unknown> } = await this.caSession_AS.createSession({\n workspacePath: params.workspacePath,\n label: params.label,\n });\n const row: Record<string, unknown> = this.toRecord(res.session);\n const newIdRaw: unknown = row.sessionId;\n const newId: string = typeof newIdRaw === 'string' ? newIdRaw : '';\n await this.loadSessions();\n return newId;\n } catch (err: unknown) {\n // HTTP hibát az error interceptor már showError + report; itt csak továbbdobjuk —\n // a CA dashboard modalban inline app-ccap-error-display (globális bubble a modal mögé kerülhet).\n throw err;\n }\n }\n\n async sendPrompt(params: { sessionId: string; content: string }): Promise<void> {\n const optimisticListKey: string = `optimistic-prompt-${globalThis.crypto.randomUUID()}`;\n this.pendingOptimisticPrompts.push({ listKey: optimisticListKey, text: params.content });\n this.pushConsoleMessage({\n listKey: optimisticListKey,\n type: 'prompt',\n text: params.content,\n });\n try {\n await this.caSession_AS.sendPrompt(params);\n } catch (err: unknown) {\n const pendingIdx: number = this.pendingOptimisticPrompts.findIndex(\n (p: { listKey: string; text: string }): boolean => p.listKey === optimisticListKey,\n );\n if (pendingIdx >= 0) {\n this.pendingOptimisticPrompts.splice(pendingIdx, 1);\n }\n this.pushConsoleMessage({\n type: 'error',\n text: CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err),\n });\n this.globalError_CS.showError(err, 'ca-session-prompt');\n throw err;\n }\n }\n\n /**\n * Futó execution leállítása (session megmarad, újra promptolható).\n */\n async stopExecution(sessionId: string): Promise<void> {\n try {\n await this.caSession_AS.stopExecution(sessionId);\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ca-session-stop-execution');\n throw err;\n }\n }\n\n async terminateSession(sessionId: string): Promise<void> {\n try {\n await this.caSession_AS.terminateSession(sessionId);\n await this.loadSessions();\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ca-session-terminate');\n throw err;\n }\n }\n\n async setSessionArchived(params: { sessionId: string; isArchived: boolean }): Promise<void> {\n try {\n const res: { success: boolean; session: Record<string, unknown> | null } =\n await this.caSession_AS.setSessionArchived(params);\n await this.loadSessions();\n const sel: CA_ListItem_Interface | null = this.selectedSession_$();\n if (\n sel?.sessionId === params.sessionId\n && res.session !== null\n && typeof res.session === 'object'\n ) {\n this.selectedSession_$.set(this.mapSessionRecord(this.toRecord(res.session)));\n }\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ca-session-archive');\n throw err;\n }\n }\n\n /**\n * Nyitott session REST poll — socket kiesés ellen; detail lifecycle indítja / állítja.\n */\n startOpenSessionPolling(sessionId: string): void {\n this.stopOpenSessionPolling();\n if (!sessionId) {\n return;\n }\n this.openSessionPollTargetId = sessionId;\n const intervalMs: number = 10 * second;\n this.openSessionPollTimer = globalThis.setInterval((): void => {\n void this.runOpenSessionPollTick(sessionId);\n }, intervalMs);\n }\n\n /**\n * Poll timer leállítása (navigáció / destroy).\n */\n stopOpenSessionPolling(): void {\n if (this.openSessionPollTimer !== null) {\n globalThis.clearInterval(this.openSessionPollTimer);\n this.openSessionPollTimer = null;\n }\n this.openSessionPollTargetId = '';\n }\n\n pushConsoleMessage(params: {\n listKey?: string;\n type: CaSessionConsoleMessage_Interface['type'];\n text: string;\n timestamp?: string;\n rawData?: Record<string, unknown>;\n mirrorEventType?: string;\n briefSubtype?: string;\n useRawBubbleKind?: boolean;\n streamTextRole?: 'agent' | 'user' | 'thought';\n streamLastSequence?: number;\n streamMessageId?: string;\n streamPartData?: Record<string, unknown>[];\n toolDisplayName?: string;\n isToolCallFailedIndicator?: boolean;\n }): void {\n const message: CaSessionConsoleMessage_Interface = this.materializeConsoleLineFromPushParams({\n listKey: params.listKey,\n type: params.type,\n text: params.text,\n timestamp: params.timestamp ?? new Date().toISOString(),\n rawData: params.rawData,\n mirrorEventType: params.mirrorEventType,\n briefSubtype: params.briefSubtype,\n useRawBubbleKind: params.useRawBubbleKind,\n streamTextRole: params.streamTextRole,\n streamLastSequence: params.streamLastSequence,\n streamMessageId: params.streamMessageId,\n streamPartData: params.streamPartData,\n toolDisplayName: params.toolDisplayName,\n isToolCallFailedIndicator: params.isToolCallFailedIndicator,\n });\n const current: CaSessionConsoleMessage_Interface[] = this.consoleMessages_$();\n this.consoleMessages_$.set([...current, message]);\n }\n\n /**\n * Egy mirror esemény → konzol append (poll / inkrementális sync).\n */\n private appendConsoleMirrorEventOne(ev: CA_EventItem_Interface): void {\n if (ev.eventType === 'ca-session-update') {\n const toolParsed: CA_ToolCallMirrorParseResult_Interface | null =\n CA_ToolCallMirrorParse_Util.tryParseMirrorData(ev.data ?? {});\n if (toolParsed !== null) {\n const consumed: boolean = this.applyToolCallMirrorEventToLiveConsole({\n ev: ev,\n parsed: toolParsed,\n });\n if (consumed) {\n return;\n }\n }\n }\n\n const brief = CA_MirrorEventBrief_Util.buildFromMirrorEvent(ev);\n if (brief === null) {\n return;\n }\n if (ev.eventType === 'prompt-sent' && brief.consoleType === 'prompt') {\n this.removePendingOptimisticPromptBubbleIfTextMatchesMirror(brief.bodyText);\n }\n const alreadyHasLine: boolean = this.consoleMessages_$().some(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === brief.listKey,\n );\n if (alreadyHasLine) {\n return;\n }\n if (brief.isStreamingTextChunk === true) {\n const merged: boolean = this.tryMergeStreamingMirrorChunkIntoConsole({ ev: ev, brief: brief });\n if (merged) {\n return;\n }\n }\n const ts: string =\n typeof ev.timestamp === 'string' && ev.timestamp.length ? ev.timestamp : new Date().toISOString();\n this.pushConsoleMessage(this.buildConsolePushParamsFromBrief({ ev: ev, brief: brief, timestampIso: ts }));\n }\n\n /**\n * Utolsó stream-buborék szövegének bővítése — poll / mirror append.\n */\n private tryMergeStreamingMirrorChunkIntoConsole(params: {\n ev: CA_EventItem_Interface;\n brief: CA_MirrorBrief_Result_Interface;\n }): boolean {\n const current: CaSessionConsoleMessage_Interface[] = this.consoleMessages_$();\n if (current.length === 0) {\n return false;\n }\n const prev: CaSessionConsoleMessage_Interface = current[current.length - 1];\n const parsed = CA_MirrorStreamMerge_Util.parseStreamChunkFromMirrorData(params.ev.data ?? {});\n if (parsed === null) {\n return false;\n }\n if (\n !CA_MirrorStreamMerge_Util.canMergeConsoleTailWithChunk({\n prev: prev,\n ev: params.ev,\n parsed: parsed,\n })\n ) {\n return false;\n }\n const parts: Record<string, unknown>[] =\n prev.streamPartData !== undefined ? [...prev.streamPartData] : [];\n parts.push(params.ev.data ?? {});\n const nextMsgId: string | undefined = params.brief.streamMessageId;\n const mergedMsgId: string | undefined =\n nextMsgId !== undefined && nextMsgId.trim().length > 0\n ? nextMsgId.trim()\n : prev.streamMessageId;\n const updated: CaSessionConsoleMessage_Interface = {\n ...prev,\n text: prev.text + params.brief.bodyText,\n streamLastSequence: params.ev.sequence ?? prev.streamLastSequence,\n streamMessageId: mergedMsgId,\n streamPartData: parts,\n rawData: {\n streamMerged: true,\n partCount: parts.length,\n lastChunkSequence: params.ev.sequence,\n chunkSnapshots: parts,\n },\n };\n const next: CaSessionConsoleMessage_Interface[] = [...current];\n next[next.length - 1] = updated;\n this.consoleMessages_$.set(next);\n return true;\n }\n\n /**\n * Mirror brief → `pushConsoleMessage` paraméterek + stream meta.\n */\n private buildConsolePushParamsFromBrief(params: {\n ev: CA_EventItem_Interface;\n brief: CA_MirrorBrief_Result_Interface;\n timestampIso: string;\n }): {\n listKey: string;\n type: CaSessionConsoleMessage_Interface['type'];\n text: string;\n timestamp: string;\n rawData?: Record<string, unknown>;\n mirrorEventType?: string;\n briefSubtype?: string;\n useRawBubbleKind?: boolean;\n streamTextRole?: 'agent' | 'user' | 'thought';\n streamLastSequence?: number;\n streamMessageId?: string;\n streamPartData?: Record<string, unknown>[];\n } {\n const b: CA_MirrorBrief_Result_Interface = params.brief;\n if (b.isStreamingTextChunk === true) {\n return {\n listKey: b.listKey,\n type: b.consoleType,\n text: b.bodyText,\n timestamp: params.timestampIso,\n rawData: b.rawData,\n mirrorEventType: b.mirrorEventType,\n briefSubtype: b.briefSubtype,\n useRawBubbleKind: b.useRawBubbleKind,\n streamTextRole: b.streamTextRole,\n streamLastSequence: params.ev.sequence,\n streamMessageId: b.streamMessageId,\n streamPartData: [params.ev.data ?? {}],\n };\n }\n return {\n listKey: b.listKey,\n type: b.consoleType,\n text: b.bodyText,\n timestamp: params.timestampIso,\n rawData: b.rawData,\n mirrorEventType: b.mirrorEventType,\n briefSubtype: b.briefSubtype,\n useRawBubbleKind: b.useRawBubbleKind,\n };\n }\n\n /**\n * Mirror eseménylista (növekvő sequence) → összehajtott console sorok (stream chunk merge).\n */\n private buildFoldedConsoleMessagesFromMirrorEvents(\n sortedAsc: CA_EventItem_Interface[],\n ): CaSessionConsoleMessage_Interface[] {\n const out: CaSessionConsoleMessage_Interface[] = [];\n for (const ev of sortedAsc) {\n const foldedTool: boolean = this.tryFoldToolCallMirrorEventIntoOut(out, ev);\n if (foldedTool) {\n continue;\n }\n const brief: CA_MirrorBrief_Result_Interface | null =\n CA_MirrorEventBrief_Util.buildFromMirrorEvent(ev);\n if (brief === null) {\n continue;\n }\n const ts: string =\n typeof ev.timestamp === 'string' && ev.timestamp.length ? ev.timestamp : new Date().toISOString();\n if (brief.isStreamingTextChunk === true) {\n const parsed = CA_MirrorStreamMerge_Util.parseStreamChunkFromMirrorData(ev.data ?? {});\n if (parsed === null) {\n continue;\n }\n const last: CaSessionConsoleMessage_Interface | undefined =\n out.length > 0 ? out[out.length - 1] : undefined;\n if (\n last !== undefined\n && CA_MirrorStreamMerge_Util.canMergeConsoleTailWithChunk({\n prev: last,\n ev: ev,\n parsed: parsed,\n })\n ) {\n const parts: Record<string, unknown>[] =\n last.streamPartData !== undefined ? [...last.streamPartData] : [];\n parts.push(ev.data ?? {});\n const nextMsgId: string | undefined = brief.streamMessageId;\n const mergedMsgId: string | undefined =\n nextMsgId !== undefined && nextMsgId.trim().length > 0\n ? nextMsgId.trim()\n : last.streamMessageId;\n out[out.length - 1] = {\n ...last,\n text: last.text + brief.bodyText,\n streamLastSequence: ev.sequence ?? last.streamLastSequence,\n streamMessageId: mergedMsgId,\n streamPartData: parts,\n rawData: {\n streamMerged: true,\n partCount: parts.length,\n lastChunkSequence: ev.sequence,\n chunkSnapshots: parts,\n },\n };\n } else {\n out.push(\n this.materializeConsoleLineFromPushParams(\n this.buildConsolePushParamsFromBrief({ ev: ev, brief: brief, timestampIso: ts }),\n ),\n );\n }\n } else {\n out.push(\n this.materializeConsoleLineFromPushParams(\n this.buildConsolePushParamsFromBrief({ ev: ev, brief: brief, timestampIso: ts }),\n ),\n );\n }\n }\n return out;\n }\n\n /**\n * `pushConsoleMessage` paraméterek → stabil `CaSessionConsoleMessage_Interface` (listKey fallback).\n */\n private materializeConsoleLineFromPushParams(params: {\n listKey?: string;\n type: CaSessionConsoleMessage_Interface['type'];\n text: string;\n timestamp: string;\n rawData?: Record<string, unknown>;\n mirrorEventType?: string;\n briefSubtype?: string;\n useRawBubbleKind?: boolean;\n streamTextRole?: 'agent' | 'user' | 'thought';\n streamLastSequence?: number;\n streamMessageId?: string;\n streamPartData?: Record<string, unknown>[];\n toolDisplayName?: string;\n isToolCallFailedIndicator?: boolean;\n }): CaSessionConsoleMessage_Interface {\n return {\n listKey: params.listKey ?? globalThis.crypto.randomUUID(),\n type: params.type,\n text: params.text,\n timestamp: params.timestamp,\n rawData: params.rawData,\n mirrorEventType: params.mirrorEventType,\n briefSubtype: params.briefSubtype,\n useRawBubbleKind: params.useRawBubbleKind,\n streamTextRole: params.streamTextRole,\n streamLastSequence: params.streamLastSequence,\n streamMessageId: params.streamMessageId,\n streamPartData: params.streamPartData,\n toolDisplayName: params.toolDisplayName,\n isToolCallFailedIndicator: params.isToolCallFailedIndicator,\n };\n }\n\n /**\n * ACP tool_call / tool_call_update → élő `consoleMessages_$` (dedup, progress sor replace, error patch).\n * @returns true ha nem fut le utána a generic mirror brief ugyanerre az eseményre.\n */\n private applyToolCallMirrorEventToLiveConsole(params: {\n ev: CA_EventItem_Interface;\n parsed: CA_ToolCallMirrorParseResult_Interface;\n }): boolean {\n const p: CA_ToolCallMirrorParseResult_Interface = params.parsed;\n const id: string = p.toolCallId;\n const ts: string =\n typeof params.ev.timestamp === 'string' && params.ev.timestamp.length\n ? params.ev.timestamp\n : new Date().toISOString();\n const dataPayload: Record<string, unknown> = params.ev.data ?? {};\n\n if (p.sessionUpdate === 'tool_call') {\n const startKey: string = CA_ToolCallMirrorParse_Util.listKeyStart(id);\n const exists: boolean = this.consoleMessages_$().some(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === startKey,\n );\n if (exists) {\n return true;\n }\n const display: string = CursorAcp_DataService.toolCallDisplayName(p);\n const bodyText: string = CursorAcp_DataService.buildToolCallBodyText({\n displayName: display,\n parsed: p,\n });\n this.pushConsoleMessage({\n listKey: startKey,\n type: 'tool',\n text: bodyText,\n timestamp: ts,\n rawData: dataPayload,\n mirrorEventType: 'ca-session-update',\n briefSubtype: 'tool_call',\n toolDisplayName: display,\n });\n return true;\n }\n\n if (p.sessionUpdate === 'tool_call_update' && p.status === 'in_progress') {\n // Ha az update rawInput-ot hoz, patch-eljük a start bubble bodyText-jét.\n if (p.rawInput !== undefined) {\n this.patchLiveToolCallStartInput({ toolCallId: id, parsed: p });\n }\n const progressKey: string = CA_ToolCallMirrorParse_Util.listKeyProgress(id);\n const line: string = 'in_progress';\n const current: CaSessionConsoleMessage_Interface[] = this.consoleMessages_$();\n const idx: number = current.findIndex(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === progressKey,\n );\n const nextLine: CaSessionConsoleMessage_Interface = this.materializeConsoleLineFromPushParams({\n listKey: progressKey,\n type: 'status-update',\n text: line,\n timestamp: ts,\n rawData: dataPayload,\n mirrorEventType: 'ca-session-update',\n briefSubtype: 'tool_call_update',\n });\n if (idx >= 0) {\n const next: CaSessionConsoleMessage_Interface[] = [...current];\n next[idx] = nextLine;\n this.consoleMessages_$.set(next);\n } else {\n this.consoleMessages_$.set([...current, nextLine]);\n }\n return true;\n }\n\n if (p.sessionUpdate === 'tool_call_update' && p.status === 'completed') {\n const hasErr: boolean = CA_ToolCallMirrorParse_Util.hasRawOutputError(p.rawOutput);\n if (hasErr) {\n const errKey: string = CA_ToolCallMirrorParse_Util.listKeyError(id);\n const dupErr: boolean = this.consoleMessages_$().some(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === errKey,\n );\n if (!dupErr) {\n const errText: string = CA_ToolCallMirrorParse_Util.summarizeRawOutputError(\n p.rawOutput,\n );\n this.pushConsoleMessage({\n listKey: errKey,\n type: 'error',\n text: errText,\n timestamp: ts,\n rawData: dataPayload,\n mirrorEventType: 'ca-session-update',\n briefSubtype: 'tool_call_update',\n });\n this.patchLiveConsoleToolCallStartFailed({ toolCallId: id });\n }\n return true;\n }\n const resKey: string = CA_ToolCallMirrorParse_Util.listKeyResult(id);\n const dupRes: boolean = this.consoleMessages_$().some(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === resKey,\n );\n if (!dupRes) {\n const summary: string = CA_ToolCallMirrorParse_Util.summarizeRawOutputSuccess(\n p.rawOutput,\n );\n this.pushConsoleMessage({\n listKey: resKey,\n type: 'tool-result',\n text: summary,\n timestamp: ts,\n rawData: dataPayload,\n mirrorEventType: 'ca-session-update',\n briefSubtype: 'tool_call_update',\n });\n }\n return true;\n }\n\n return false;\n }\n\n /**\n * Historikus mirror lista fold — tool lifecycle sorok beillesztése / frissítése az `out` tömbbe.\n */\n private tryFoldToolCallMirrorEventIntoOut(\n out: CaSessionConsoleMessage_Interface[],\n ev: CA_EventItem_Interface,\n ): boolean {\n if (ev.eventType !== 'ca-session-update') {\n return false;\n }\n const p: CA_ToolCallMirrorParseResult_Interface | null =\n CA_ToolCallMirrorParse_Util.tryParseMirrorData(ev.data ?? {});\n if (p === null) {\n return false;\n }\n const ts: string =\n typeof ev.timestamp === 'string' && ev.timestamp.length ? ev.timestamp : new Date().toISOString();\n const dataPayload: Record<string, unknown> = ev.data ?? {};\n\n if (p.sessionUpdate === 'tool_call') {\n const startKey: string = CA_ToolCallMirrorParse_Util.listKeyStart(p.toolCallId);\n const exists: boolean = out.some(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === startKey,\n );\n if (!exists) {\n const display: string = CursorAcp_DataService.toolCallDisplayName(p);\n const bodyText: string = CursorAcp_DataService.buildToolCallBodyText({\n displayName: display,\n parsed: p,\n });\n out.push(\n this.materializeConsoleLineFromPushParams({\n listKey: startKey,\n type: 'tool',\n text: bodyText,\n timestamp: ts,\n rawData: dataPayload,\n mirrorEventType: 'ca-session-update',\n briefSubtype: 'tool_call',\n toolDisplayName: display,\n }),\n );\n }\n return true;\n }\n\n if (p.sessionUpdate === 'tool_call_update' && p.status === 'in_progress') {\n // Ha rawInput jön az update-ben, patch-eljük a start buborék bodyText-jét.\n if (p.rawInput !== undefined) {\n CursorAcp_DataService.patchOutArrayToolCallStartInput(out, p);\n }\n const progressKey: string = CA_ToolCallMirrorParse_Util.listKeyProgress(p.toolCallId);\n const nextLine: CaSessionConsoleMessage_Interface = this.materializeConsoleLineFromPushParams({\n listKey: progressKey,\n type: 'status-update',\n text: 'in_progress',\n timestamp: ts,\n rawData: dataPayload,\n mirrorEventType: 'ca-session-update',\n briefSubtype: 'tool_call_update',\n });\n const idx: number = out.findIndex(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === progressKey,\n );\n if (idx >= 0) {\n out[idx] = nextLine;\n } else {\n out.push(nextLine);\n }\n return true;\n }\n\n if (p.sessionUpdate === 'tool_call_update' && p.status === 'completed') {\n const hasErr: boolean = CA_ToolCallMirrorParse_Util.hasRawOutputError(p.rawOutput);\n if (hasErr) {\n const errKey: string = CA_ToolCallMirrorParse_Util.listKeyError(p.toolCallId);\n const dupErr: boolean = out.some(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === errKey,\n );\n if (!dupErr) {\n const errText: string = CA_ToolCallMirrorParse_Util.summarizeRawOutputError(\n p.rawOutput,\n );\n out.push(\n this.materializeConsoleLineFromPushParams({\n listKey: errKey,\n type: 'error',\n text: errText,\n timestamp: ts,\n rawData: dataPayload,\n mirrorEventType: 'ca-session-update',\n briefSubtype: 'tool_call_update',\n }),\n );\n CursorAcp_DataService.patchOutArrayToolCallStartFailed(out, p.toolCallId);\n }\n return true;\n }\n const resKey: string = CA_ToolCallMirrorParse_Util.listKeyResult(p.toolCallId);\n const dupRes: boolean = out.some(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === resKey,\n );\n if (!dupRes) {\n const summary: string = CA_ToolCallMirrorParse_Util.summarizeRawOutputSuccess(\n p.rawOutput,\n );\n out.push(\n this.materializeConsoleLineFromPushParams({\n listKey: resKey,\n type: 'tool-result',\n text: summary,\n timestamp: ts,\n rawData: dataPayload,\n mirrorEventType: 'ca-session-update',\n briefSubtype: 'tool_call_update',\n }),\n );\n }\n return true;\n }\n\n return false;\n }\n\n /**\n * In_progress update rawInput-ot hozott — frissítjük a start buborék bodyText-jét.\n * Ha a start bubble-nek eddig nem volt input, most megkapja.\n */\n private patchLiveToolCallStartInput(params: {\n toolCallId: string;\n parsed: CA_ToolCallMirrorParseResult_Interface;\n }): void {\n const startKey: string = CA_ToolCallMirrorParse_Util.listKeyStart(params.toolCallId);\n const cur: CaSessionConsoleMessage_Interface[] = this.consoleMessages_$();\n const idx: number = cur.findIndex(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === startKey,\n );\n if (idx < 0) {\n return;\n }\n const display: string = cur[idx].toolDisplayName ?? 'Tool call';\n const bodyText: string = CursorAcp_DataService.buildToolCallBodyText({\n displayName: display,\n parsed: params.parsed,\n });\n const next: CaSessionConsoleMessage_Interface[] = [...cur];\n next[idx] = {\n ...next[idx],\n text: bodyText,\n };\n this.consoleMessages_$.set(next);\n }\n\n /** Completed error után a megfelelő start sor `isToolCallFailedIndicator` beállítása. */\n private patchLiveConsoleToolCallStartFailed(params: { toolCallId: string }): void {\n const startKey: string = CA_ToolCallMirrorParse_Util.listKeyStart(params.toolCallId);\n const cur: CaSessionConsoleMessage_Interface[] = this.consoleMessages_$();\n const idx: number = cur.findIndex(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === startKey,\n );\n if (idx < 0) {\n return;\n }\n const next: CaSessionConsoleMessage_Interface[] = [...cur];\n next[idx] = {\n ...next[idx],\n isToolCallFailedIndicator: true,\n };\n this.consoleMessages_$.set(next);\n }\n\n /** Fold tömbben start sor failed flag — replay error path. */\n private static patchOutArrayToolCallStartFailed(\n out: CaSessionConsoleMessage_Interface[],\n toolCallId: string,\n ): void {\n const startKey: string = CA_ToolCallMirrorParse_Util.listKeyStart(toolCallId);\n const idx: number = out.findIndex(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === startKey,\n );\n if (idx < 0) {\n return;\n }\n out[idx] = {\n ...out[idx],\n isToolCallFailedIndicator: true,\n };\n }\n\n /** Fold tömbben start sor bodyText frissítése — in_progress rawInput patch. */\n private static patchOutArrayToolCallStartInput(\n out: CaSessionConsoleMessage_Interface[],\n parsed: CA_ToolCallMirrorParseResult_Interface,\n ): void {\n const startKey: string = CA_ToolCallMirrorParse_Util.listKeyStart(parsed.toolCallId);\n const idx: number = out.findIndex(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey === startKey,\n );\n if (idx < 0) {\n return;\n }\n const display: string = out[idx].toolDisplayName ?? 'Tool call';\n const bodyText: string = CursorAcp_DataService.buildToolCallBodyText({\n displayName: display,\n parsed: parsed,\n });\n out[idx] = {\n ...out[idx],\n text: bodyText,\n };\n }\n\n /** Tool start buborék cím — `title`, majd `toolKind`, fallback. */\n private static toolCallDisplayName(p: CA_ToolCallMirrorParseResult_Interface): string {\n if (p.title !== undefined && p.title.length) {\n return p.title;\n }\n if (p.toolKind !== undefined && p.toolKind.length) {\n return p.toolKind;\n }\n return 'Tool call';\n }\n\n /**\n * Tool start buborék bodyText — display name első sor + rawInput + locations.\n * A bubble component `toolInputFormatted_$()` a 2+ sorból olvassa az inputot.\n */\n private static buildToolCallBodyText(params: {\n displayName: string;\n parsed: CA_ToolCallMirrorParseResult_Interface;\n }): string {\n const lines: string[] = [params.displayName];\n const inputStr: string = CA_ToolCallMirrorParse_Util.formatRawInput(params.parsed.rawInput);\n if (inputStr.length) {\n lines.push(inputStr);\n }\n const locStr: string = CA_ToolCallMirrorParse_Util.formatLocations(params.parsed.locations);\n if (locStr.length) {\n lines.push(`[locations]\\n${locStr}`);\n }\n return lines.join('\\n');\n }\n\n /**\n * REST poll tick — selected row + új események (sequence dedup).\n */\n private async runOpenSessionPollTick(sessionId: string): Promise<void> {\n if (\n sessionId !== this.activeSessionId_$()\n || sessionId !== this.openSessionPollTargetId\n ) {\n return;\n }\n try {\n const detail: { session: Record<string, unknown> } = await this.caSession_AS.getSession(sessionId);\n this.ngZone.run((): void => {\n if (sessionId !== this.activeSessionId_$()) {\n return;\n }\n this.selectedSession_$.set(this.mapSessionRecord(this.toRecord(detail.session)));\n });\n\n const prevMax: number = this.lastKnownEventSequence;\n const ev = await this.caSession_AS.getSessionEvents({\n sessionId: sessionId,\n sinceSequence: prevMax >= 0 ? prevMax : undefined,\n limit: 200,\n });\n const mapped: CA_EventItem_Interface[] = ev.events.map(\n (e: Record<string, unknown>): CA_EventItem_Interface => ({\n sessionId: typeof e.sessionId === 'string' ? e.sessionId : sessionId,\n eventType: typeof e.eventType === 'string' ? e.eventType : '',\n timestamp: typeof e.timestamp === 'string' ? e.timestamp : '',\n data: this.asRecord(e.data),\n sequence: typeof e.sequence === 'number' ? e.sequence : 0,\n }),\n );\n if (!mapped.length) {\n return;\n }\n this.ngZone.run((): void => {\n if (sessionId !== this.activeSessionId_$()) {\n return;\n }\n const bySeq: Map<number, CA_EventItem_Interface> = new Map();\n for (const item of this.selectedSessionEvents_$()) {\n bySeq.set(item.sequence ?? 0, item);\n }\n for (const item of mapped) {\n bySeq.set(item.sequence ?? 0, item);\n }\n const merged: CA_EventItem_Interface[] = [...bySeq.values()].sort(\n CA_EventChronologicalSort_Util.compareMirrorEventsAsc,\n );\n this.selectedSessionEvents_$.set(merged);\n for (const item of mapped) {\n if ((item.sequence ?? 0) > prevMax) {\n this.appendConsoleMirrorEventOne(item);\n }\n }\n this.lastKnownEventSequence = Math.max(\n prevMax,\n ...mapped.map((x: CA_EventItem_Interface): number => x.sequence ?? 0),\n );\n });\n } catch {\n // Poll hiba — nem spam-elünk globális errorral tick-enként.\n }\n }\n\n private handleSocketEvent(envelope: { event: string; payload: Record<string, unknown> }): void {\n const eventName: string = envelope.event;\n const payload: Record<string, unknown> = envelope.payload;\n try {\n this.ngZone.run((): void => {\n switch (eventName) {\n case 'ca-session:status':\n this.handleStatusUpdate(payload);\n break;\n case 'ca-session:output':\n this.handleOutputChunk(payload);\n break;\n case 'ca-session:event':\n this.handleSessionEvent(payload);\n break;\n case 'ca-session:list-update':\n this.loadSessions().catch((): void => {});\n break;\n case 'ext-session-msg:message':\n this.handleAssembledMessage(payload);\n break;\n case 'ext-session-msg:update':\n this.handleAssembledMessageUpdate(payload);\n break;\n default:\n break;\n }\n });\n } catch (err: unknown) {\n DyFM_Log.error(`CCAP_CaSession_DS | socket error | ${eventName}`, err);\n }\n }\n\n private handleStatusUpdate(payload: Record<string, unknown>): void {\n const sessionId: string = typeof payload.sessionId === 'string' ? payload.sessionId : '';\n const status: string = typeof payload.status === 'string' ? payload.status : '';\n const statusMessage: string | undefined =\n typeof payload.statusMessage === 'string' ? payload.statusMessage : undefined;\n this.lastStatusUpdate_$.set({ sessionId: sessionId, status: status, statusMessage: statusMessage });\n\n const currentSessions: CA_ListItem_Interface[] = this.sessions_$();\n this.sessions_$.set(\n currentSessions.map(\n (s: CA_ListItem_Interface): CA_ListItem_Interface => {\n if (s.sessionId === sessionId) {\n return { ...s, status: status, statusMessage: statusMessage };\n }\n return s;\n },\n ),\n );\n\n const sel: CA_ListItem_Interface | null = this.selectedSession_$();\n if (sel?.sessionId === sessionId) {\n this.selectedSession_$.set({ ...sel, status: status, statusMessage: statusMessage });\n }\n\n if (status === 'errored') {\n this.globalError_CS.showError(\n new Error(statusMessage ? `CA session error: ${statusMessage}` : 'CA session errored'),\n 'ca-session-status',\n );\n }\n }\n\n private handleOutputChunk(payload: Record<string, unknown>): void {\n const sessionId: string = typeof payload.sessionId === 'string' ? payload.sessionId : '';\n if (sessionId && sessionId !== this.activeSessionId_$()) {\n return;\n }\n const content: string = typeof payload.content === 'string' ? payload.content : '';\n const outputType: string = typeof payload.type === 'string' ? payload.type : 'response';\n if (content) {\n const rawPayload: Record<string, unknown> = {};\n for (const key of Object.keys(payload)) {\n rawPayload[key] = Reflect.get(payload, key);\n }\n this.pushConsoleMessage({\n type: outputType === 'error' ? 'error' : 'assistant',\n text: content,\n rawData: rawPayload,\n mirrorEventType: 'ca-session:output',\n });\n }\n }\n\n private handleSessionEvent(payload: Record<string, unknown>): void {\n const sessionId: string = typeof payload.sessionId === 'string' ? payload.sessionId : '';\n if (sessionId && sessionId !== this.activeSessionId_$()) {\n return;\n }\n const event: Record<string, unknown> = this.asRecord(payload.event);\n const seq: number = typeof event.sequence === 'number' ? event.sequence : 0;\n if (seq <= this.lastKnownEventSequence) {\n return;\n }\n this.lastKnownEventSequence = seq;\n const tsFromEvent: unknown = event.timestamp;\n const item: CA_EventItem_Interface = {\n sessionId: sessionId,\n eventType: typeof event.eventType === 'string' ? event.eventType : '',\n timestamp: typeof tsFromEvent === 'string' && tsFromEvent.length ? tsFromEvent : new Date().toISOString(),\n data: this.asRecord(event.data),\n sequence: seq,\n };\n const evs: CA_EventItem_Interface[] = this.selectedSessionEvents_$();\n this.selectedSessionEvents_$.set([...evs, item]);\n this.appendConsoleMirrorEventOne(item);\n }\n\n /**\n * Oldal frissítés / részlet betöltés — konzol buborékok a Mongo mirror eseményekből (live socket mellett).\n */\n private seedConsoleFromMirrorEvents(events: CA_EventItem_Interface[]): void {\n this.pendingOptimisticPrompts.length = 0;\n const sorted: CA_EventItem_Interface[] = [...events].sort(\n CA_EventChronologicalSort_Util.compareMirrorEventsAsc,\n );\n this.consoleMessages_$.set(this.buildFoldedConsoleMessagesFromMirrorEvents(sorted));\n }\n\n /**\n * Poll / socket mirror `prompt-sent` előtt: ugyanazzal a szöveggel lévő optimista buborék törlése (ne legyen dupla user sor).\n */\n private removePendingOptimisticPromptBubbleIfTextMatchesMirror(mirrorContent: string): void {\n const pendingIndex: number = this.pendingOptimisticPrompts.findIndex(\n (p: { listKey: string; text: string }): boolean =>\n p.text === mirrorContent || p.text.trim() === mirrorContent.trim(),\n );\n if (pendingIndex < 0) {\n return;\n }\n const removed: { listKey: string; text: string } = this.pendingOptimisticPrompts[pendingIndex];\n this.pendingOptimisticPrompts.splice(pendingIndex, 1);\n const next: CaSessionConsoleMessage_Interface[] = this.consoleMessages_$().filter(\n (m: CaSessionConsoleMessage_Interface): boolean => m.listKey !== removed.listKey,\n );\n this.consoleMessages_$.set(next);\n }\n\n private mapSessionRecord(raw: Record<string, unknown>): CA_ListItem_Interface {\n return {\n sessionId: typeof raw['sessionId'] === 'string' ? raw['sessionId'] : undefined,\n acpSessionId: typeof raw['acpSessionId'] === 'string' ? raw['acpSessionId'] : undefined,\n label: typeof raw['label'] === 'string' ? raw['label'] : undefined,\n workspacePath: typeof raw['workspacePath'] === 'string' ? raw['workspacePath'] : undefined,\n status: typeof raw['status'] === 'string' ? raw['status'] : undefined,\n statusMessage: typeof raw['statusMessage'] === 'string' ? raw['statusMessage'] : undefined,\n promptCount: typeof raw['promptCount'] === 'number' ? raw['promptCount'] : undefined,\n lastPrompt: typeof raw['lastPrompt'] === 'string' ? raw['lastPrompt'] : undefined,\n lastActivityAt: typeof raw['lastActivityAt'] === 'string' ? raw['lastActivityAt'] : undefined,\n isArchived: raw['isArchived'] === true,\n parentSessionId: typeof raw['parentSessionId'] === 'string' ? raw['parentSessionId'] : undefined,\n lastSyncAt: typeof raw['lastSyncAt'] === 'string' ? raw['lastSyncAt'] : undefined,\n lastSyncError: typeof raw['lastSyncError'] === 'string' ? raw['lastSyncError'] : undefined,\n agentInfoName: typeof raw['agentInfoName'] === 'string' ? raw['agentInfoName'] : undefined,\n agentInfoVersion: typeof raw['agentInfoVersion'] === 'string' ? raw['agentInfoVersion'] : undefined,\n isAcpConnected: typeof raw['isAcpConnected'] === 'boolean' ? raw['isAcpConnected'] : undefined,\n loadSessionSupported:\n typeof raw['loadSessionSupported'] === 'boolean' ? raw['loadSessionSupported'] : undefined,\n isTerminalMode: typeof raw['isTerminalMode'] === 'boolean' ? raw['isTerminalMode'] : undefined,\n isTerminalRunnerConnected:\n typeof raw['isTerminalRunnerConnected'] === 'boolean' ? raw['isTerminalRunnerConnected'] : undefined,\n };\n }\n\n private asRecord(value: unknown): Record<string, unknown> {\n return this.toRecord(value);\n }\n\n private toRecord(value: unknown): Record<string, unknown> {\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n out[key] = Reflect.get(value, key);\n }\n return out;\n }\n return {};\n }\n\n // ── Assembled messages (SSOT) ──────────────────────────────\n\n /**\n * Assembled message-ek betöltése REST-en.\n */\n async loadAssembledMessages(params: {\n sessionId: string;\n }): Promise<void> {\n try {\n const result = await this.extSessionMsg_AS.getMessages({\n sessionId: params.sessionId,\n latest: true,\n });\n this.assembledMessages_$.set(result.messages);\n } catch (err: unknown) {\n DyFM_Log.error(\n `CCAP_CaSession_DS | loadAssembledMessages failed`\n + ` | sessionId: ${params.sessionId}`,\n err,\n );\n }\n }\n\n /**\n * Új assembled message socket-en — aktív session szűréssel.\n */\n private handleAssembledMessage(\n payload: Record<string, unknown>,\n ): void {\n const sessionId: string =\n typeof payload.sessionId === 'string'\n ? payload.sessionId\n : '';\n if (!sessionId || sessionId !== this.activeSessionId_$()) {\n return;\n }\n const msgData: unknown = payload.message;\n if (!msgData || typeof msgData !== 'object') {\n return;\n }\n const msg: CCAP_ExtSessionMessage_Response =\n msgData as CCAP_ExtSessionMessage_Response;\n const current: CCAP_ExtSessionMessage_Response[] =\n this.assembledMessages_$();\n this.assembledMessages_$.set([...current, msg]);\n }\n\n /**\n * Assembled message frissítés socket-en (stream append, tool result).\n */\n private handleAssembledMessageUpdate(\n payload: Record<string, unknown>,\n ): void {\n const sessionId: string =\n typeof payload.sessionId === 'string'\n ? payload.sessionId\n : '';\n if (!sessionId || sessionId !== this.activeSessionId_$()) {\n return;\n }\n const messageKey: string =\n typeof payload.messageKey === 'string'\n ? payload.messageKey\n : '';\n if (!messageKey) {\n return;\n }\n const updateData: unknown = payload.update;\n if (!updateData || typeof updateData !== 'object') {\n return;\n }\n const updateRec: Record<string, unknown> =\n updateData as Record<string, unknown>;\n const current: CCAP_ExtSessionMessage_Response[] =\n this.assembledMessages_$();\n const idx: number = current.findIndex(\n (m: CCAP_ExtSessionMessage_Response): boolean =>\n m.messageKey === messageKey,\n );\n if (idx < 0) {\n return;\n }\n const updated: CCAP_ExtSessionMessage_Response = {\n ...current[idx],\n };\n if (typeof updateRec.bodyText === 'string') {\n updated.bodyText = updateRec.bodyText;\n }\n if (updateRec.toolResult !== undefined) {\n updated.toolResult =\n updateRec.toolResult as CCAP_ExtSessionMessage_Response['toolResult'];\n }\n if (typeof updateRec.toolStatus === 'string') {\n updated.toolStatus = updateRec.toolStatus;\n }\n if (updateRec.headerStatusDot !== undefined) {\n updated.headerStatusDot =\n typeof updateRec.headerStatusDot === 'string'\n ? updateRec.headerStatusDot\n : undefined;\n }\n const next: CCAP_ExtSessionMessage_Response[] = [...current];\n next[idx] = updated;\n this.assembledMessages_$.set(next);\n }\n}\n", "import { SHR_JsonSnippetFormat_Util } from './shr-json-snippet-format.util';\n\n/**\n * Ismeretlen / nested érték pretty-print — beágyazott JSON string mezők rekurzív kibontása, majd JSON.stringify indent.\n */\nexport class SHR_UnknownValuePrettyJson_Util {\n\n /**\n * `unknown` érték 2 space indent JSON szöveggé; beágyazott stringekben lévő JSON parse + beillesztés.\n */\n static prettyStringifyUnknown(value: unknown): string {\n try {\n const expanded: unknown = SHR_UnknownValuePrettyJson_Util.expandEmbeddedJsonStrings(value);\n return JSON.stringify(expanded, null, 2);\n } catch {\n if (value === null || value === undefined) {\n return String(value);\n }\n if (typeof value === 'object') {\n return '[Object stringify failed]';\n }\n return String(value);\n }\n }\n\n /**\n * String leaf-eknél: ha JSON-nak tűnik, parse és rekurzív expand; különben primitív / objektum / tömb rekurzió.\n */\n private static expandEmbeddedJsonStrings(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value === 'string') {\n const s: string = value;\n if (!SHR_JsonSnippetFormat_Util.looksLikeJson(s)) {\n return s;\n }\n try {\n const parsed: unknown = JSON.parse(s.trim());\n return SHR_UnknownValuePrettyJson_Util.expandEmbeddedJsonStrings(parsed);\n } catch {\n return s;\n }\n }\n if (typeof value !== 'object') {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((item: unknown): unknown =>\n SHR_UnknownValuePrettyJson_Util.expandEmbeddedJsonStrings(item),\n );\n }\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n const v: unknown = Reflect.get(value, key);\n out[key] = SHR_UnknownValuePrettyJson_Util.expandEmbeddedJsonStrings(v);\n }\n return out;\n }\n}\n", "import { CA_MirrorBrief_Result_Interface } from '../../../_models/interfaces/ca-mirror-brief-result.interface';\nimport { CA_EventItem_Interface } 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 mirror timeline esemény → console brief (known ágak + pretty JSON fallback).\n */\nexport class CA_MirrorEventBrief_Util {\n\n /**\n * Egy mirror sor → egy console buborék leírása; üres / érvénytelen prompt → null.\n */\n static buildFromMirrorEvent(item: CA_EventItem_Interface): CA_MirrorBrief_Result_Interface | null {\n const seq: number = item.sequence ?? 0;\n const data: Record<string, unknown> = item.data !== undefined ? item.data : {};\n const eventType: string = typeof item.eventType === 'string' ? item.eventType : '';\n\n if (eventType === 'prompt-sent') {\n return CA_MirrorEventBrief_Util.buildPromptSentBrief(seq, data);\n }\n if (eventType === 'ca-session-update') {\n return CA_MirrorEventBrief_Util.buildCaSessionUpdateBrief(seq, data);\n }\n return CA_MirrorEventBrief_Util.buildGenericBrief(eventType, seq, data);\n }\n\n /**\n * Belső `sessionUpdate` érték — opcionális subtype címkéhez.\n */\n static extractSessionUpdateKind(data: Record<string, unknown>): string | undefined {\n const upd: unknown = data.update;\n if (upd === null || typeof upd !== 'object' || Array.isArray(upd)) {\n return undefined;\n }\n const rec: Record<string, unknown> = CA_MirrorEventBrief_Util.toPlainRecord(upd);\n const kind: unknown = rec.sessionUpdate;\n return typeof kind === 'string' && kind.length ? kind : undefined;\n }\n\n private static buildPromptSentBrief(\n seq: number,\n data: Record<string, unknown>,\n ): CA_MirrorBrief_Result_Interface | null {\n const contentRaw: unknown = data.content;\n if (typeof contentRaw !== 'string' || !contentRaw.length) {\n return null;\n }\n return {\n listKey: `mirror-prompt-${String(seq)}`,\n consoleType: 'prompt',\n bodyText: contentRaw,\n mirrorEventType: 'prompt-sent',\n useRawBubbleKind: false,\n rawData: data,\n };\n }\n\n private static buildCaSessionUpdateBrief(\n seq: number,\n data: Record<string, unknown>,\n ): CA_MirrorBrief_Result_Interface | null {\n const parsed = CA_MirrorStreamMerge_Util.parseStreamChunkFromMirrorData(data);\n if (parsed !== null) {\n const sub: string | undefined = CA_MirrorEventBrief_Util.extractSessionUpdateKind(data);\n const isThoughtStream: boolean = parsed.role === 'thought';\n return {\n listKey: `mirror-chunk-${String(seq)}`,\n consoleType: isThoughtStream ? 'thinking' : 'assistant',\n bodyText: parsed.text,\n mirrorEventType: 'ca-session-update',\n briefSubtype: sub,\n useRawBubbleKind: false,\n rawData: data,\n isStreamingTextChunk: true,\n streamTextRole: parsed.role,\n streamMessageId: parsed.messageId,\n };\n }\n const pretty: string = SHR_UnknownValuePrettyJson_Util.prettyStringifyUnknown(data);\n return {\n listKey: `mirror-ca-session-update-${String(seq)}`,\n consoleType: 'info',\n bodyText: pretty,\n mirrorEventType: 'ca-session-update',\n useRawBubbleKind: true,\n rawData: data,\n };\n }\n\n private static buildGenericBrief(\n eventType: string,\n seq: number,\n data: Record<string, unknown>,\n ): CA_MirrorBrief_Result_Interface {\n const segment: string = CA_MirrorEventBrief_Util.safeListKeySegment(eventType);\n const payload: Record<string, unknown> = {\n eventType: eventType.length ? eventType : 'unknown',\n sequence: seq,\n data: data,\n };\n const pretty: string = SHR_UnknownValuePrettyJson_Util.prettyStringifyUnknown(payload);\n return {\n listKey: `mirror-${segment}-${String(seq)}`,\n consoleType: 'info',\n bodyText: pretty,\n mirrorEventType: eventType.length ? eventType : 'unknown',\n useRawBubbleKind: true,\n rawData: data,\n };\n }\n\n private static safeListKeySegment(eventType: string): string {\n const cleaned: string = eventType.replace(/[^a-zA-Z0-9_-]+/g, '_').replace(/^_+|_+$/g, '');\n return cleaned.length ? cleaned : 'event';\n }\n\n private static toPlainRecord(value: object): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n out[key] = Reflect.get(value, key);\n }\n return out;\n }\n}\n", "import { CA_ToolCallMirrorParseResult_Interface } from '../../../_models/interfaces/ca-tool-call-mirror-parse-result.interface';\n\n/**\n * CA mirror `ca-session-update` `data` objektumából tool_call / tool_call_update mezők kiolvasása (ACP).\n */\nexport class CA_ToolCallMirrorParse_Util {\n\n /**\n * Stabil listKey — tool indulás buborék + failed patch cél.\n */\n static listKeyStart(toolCallId: string): string {\n return `ca-tc-${toolCallId}-start`;\n }\n\n /**\n * Stabil listKey — in_progress agent update sor (replace).\n */\n static listKeyProgress(toolCallId: string): string {\n return `ca-tc-${toolCallId}-progress`;\n }\n\n /**\n * Stabil listKey — sikeres tool result.\n */\n static listKeyResult(toolCallId: string): string {\n return `ca-tc-${toolCallId}-result`;\n }\n\n /**\n * Stabil listKey — completed error buborék.\n */\n static listKeyError(toolCallId: string): string {\n return `ca-tc-${toolCallId}-error`;\n }\n\n /**\n * Stabil `listKey` → `toolCallId` + szerep (console pairing, dedup ellenőrzés).\n * `-progress` előbb, hogy ne legyen ütközés más suffix-szel.\n */\n static tryParseStableListKey(listKey: string): {\n toolCallId: string;\n role: 'start' | 'progress' | 'result' | 'error';\n } | null {\n const prefix: string = 'ca-tc-';\n if (!listKey.startsWith(prefix)) {\n return null;\n }\n const suffixSpecs: { suffix: string; role: 'start' | 'progress' | 'result' | 'error' }[] = [\n { suffix: '-progress', role: 'progress' },\n { suffix: '-start', role: 'start' },\n { suffix: '-result', role: 'result' },\n { suffix: '-error', role: 'error' },\n ];\n for (const spec of suffixSpecs) {\n if (!listKey.endsWith(spec.suffix)) {\n continue;\n }\n const id: string = listKey.slice(prefix.length, listKey.length - spec.suffix.length);\n if (!id.length) {\n return null;\n }\n return {\n toolCallId: id,\n role: spec.role,\n };\n }\n return null;\n }\n\n /**\n * Ha `data.update` tool_call vagy tool_call_update, visszaadja a mezőket; egyébként null.\n */\n static tryParseMirrorData(\n data: Record<string, unknown>,\n ): CA_ToolCallMirrorParseResult_Interface | null {\n const upd: unknown = data.update;\n if (upd === null || typeof upd !== 'object' || Array.isArray(upd)) {\n return null;\n }\n const rec: Record<string, unknown> = CA_ToolCallMirrorParse_Util.toPlainRecord(upd);\n const su: unknown = rec.sessionUpdate;\n if (su !== 'tool_call' && su !== 'tool_call_update') {\n return null;\n }\n const toolCallIdRaw: unknown = rec.toolCallId;\n if (typeof toolCallIdRaw !== 'string' || !toolCallIdRaw.trim().length) {\n return null;\n }\n const statusRaw: unknown = rec.status;\n const status: string = typeof statusRaw === 'string' ? statusRaw : '';\n const titleRaw: unknown = rec.title;\n const title: string | undefined =\n typeof titleRaw === 'string' && titleRaw.trim().length ? titleRaw.trim() : undefined;\n const kindRaw: unknown = rec.kind;\n const toolKind: string | undefined =\n typeof kindRaw === 'string' && kindRaw.trim().length ? kindRaw.trim() : undefined;\n const rawOut: unknown = rec.rawOutput;\n const rawIn: unknown = rec.rawInput;\n const contentRaw: unknown = rec.content;\n const locationsRaw: unknown = rec.locations;\n return {\n sessionUpdate: su,\n toolCallId: toolCallIdRaw.trim(),\n status: status,\n title: title,\n toolKind: toolKind,\n rawOutput: rawOut !== undefined ? rawOut : undefined,\n rawInput: rawIn !== undefined ? rawIn : undefined,\n content: Array.isArray(contentRaw) && contentRaw.length ? contentRaw : undefined,\n locations: Array.isArray(locationsRaw) && locationsRaw.length ? locationsRaw : undefined,\n };\n }\n\n /**\n * `rawOutput` tartalmaz-e értelmezhető error mezőt (completed error ág).\n */\n static hasRawOutputError(rawOutput: unknown): boolean {\n if (rawOutput === null || typeof rawOutput !== 'object' || Array.isArray(rawOutput)) {\n return false;\n }\n const rec: Record<string, unknown> = CA_ToolCallMirrorParse_Util.toPlainRecord(rawOutput);\n return Object.prototype.hasOwnProperty.call(rec, 'error');\n }\n\n /**\n * Error szöveg összefoglaló user buborékhoz.\n */\n static summarizeRawOutputError(rawOutput: unknown): string {\n if (rawOutput === null || typeof rawOutput !== 'object' || Array.isArray(rawOutput)) {\n return 'Tool call failed';\n }\n const rec: Record<string, unknown> = CA_ToolCallMirrorParse_Util.toPlainRecord(rawOutput);\n const err: unknown = rec.error;\n if (typeof err === 'string' && err.trim().length) {\n return err.trim();\n }\n try {\n return JSON.stringify(rawOutput);\n } catch {\n return 'Tool call failed';\n }\n }\n\n /**\n * Sikeres completed — rövid result szöveg (nem error ág).\n */\n static summarizeRawOutputSuccess(rawOutput: unknown): string {\n if (rawOutput === undefined) {\n return 'Completed';\n }\n try {\n const s: string = JSON.stringify(rawOutput);\n const max: number = 400;\n return s.length > max ? `${s.substring(0, max)}…` : s;\n } catch {\n return 'Completed';\n }\n }\n\n /**\n * `rawInput` → formázott body szöveg (tool name után).\n * Üres/undefined → üres string.\n */\n static formatRawInput(rawInput: unknown): string {\n if (rawInput === undefined || rawInput === null) {\n return '';\n }\n try {\n return JSON.stringify(rawInput, null, 2);\n } catch {\n return String(rawInput);\n }\n }\n\n /**\n * ACP `locations` → olvasható fájl-lokáció lista (pl. \"src/foo.ts:42\").\n */\n static formatLocations(locations: unknown[] | undefined): string {\n if (!locations?.length) {\n return '';\n }\n const lines: string[] = [];\n for (const loc of locations) {\n if (loc === null || typeof loc !== 'object' || Array.isArray(loc)) {\n continue;\n }\n const rec: Record<string, unknown> = CA_ToolCallMirrorParse_Util.toPlainRecord(loc);\n const path: unknown = rec.path;\n if (typeof path !== 'string' || !path.length) {\n continue;\n }\n const line: unknown = rec.line;\n const lineStr: string = typeof line === 'number' ? `:${line}` : '';\n lines.push(`${path}${lineStr}`);\n }\n return lines.join('\\n');\n }\n\n /**\n * ACP `content` (ToolCallContent[]) → szöveges összefoglaló (diffs, terminal, text).\n */\n static formatContent(content: unknown[] | undefined): string {\n if (!content?.length) {\n return '';\n }\n const parts: string[] = [];\n for (const item of content) {\n if (item === null || typeof item !== 'object' || Array.isArray(item)) {\n continue;\n }\n const rec: Record<string, unknown> = CA_ToolCallMirrorParse_Util.toPlainRecord(item);\n const type: unknown = rec.type;\n if (type === 'diff') {\n const path: unknown = rec.path;\n const oldText: unknown = rec.oldText;\n const newText: unknown = rec.newText;\n const pathStr: string = typeof path === 'string' ? path : '(unknown)';\n const parts2: string[] = [`--- ${pathStr}`];\n if (typeof oldText === 'string' && oldText.length) {\n parts2.push(`- ${oldText.substring(0, 500)}${oldText.length > 500 ? '…' : ''}`);\n }\n if (typeof newText === 'string' && newText.length) {\n parts2.push(`+ ${newText.substring(0, 500)}${newText.length > 500 ? '…' : ''}`);\n }\n parts.push(parts2.join('\\n'));\n } else if (type === 'terminal') {\n try {\n parts.push(`[terminal] ${JSON.stringify(rec, null, 2)}`);\n } catch {\n parts.push('[terminal output]');\n }\n } else if (type === 'content') {\n const innerParts: unknown = rec.parts;\n if (Array.isArray(innerParts)) {\n for (const part of innerParts) {\n if (part !== null && typeof part === 'object' && !Array.isArray(part)) {\n const pRec: Record<string, unknown> =\n CA_ToolCallMirrorParse_Util.toPlainRecord(part);\n if (typeof pRec.text === 'string') {\n parts.push(pRec.text as string);\n }\n }\n }\n }\n }\n }\n return parts.join('\\n\\n');\n }\n\n private static toPlainRecord(value: object): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n out[key] = Reflect.get(value, key);\n }\n return out;\n }\n}\n", "import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { firstValueFrom } from 'rxjs';\n\nimport { environment } from '../../../../../../environments/environment';\nimport {\n CA_List_Response,\n} from '../_models/interfaces/ca-view.interface';\nimport { ExS_InstanceContext_DataService } from '../../../_services/exs-instance-context.data-service';\n\n/**\n * CA session REST API.\n * Minden hívás `?ccapId=<current>` paramot küld — a ccapId forrása\n * az instance-szelektor (`ExS_InstanceContext_DataService.activeCcapId_$`).\n */\n@Injectable({ providedIn: 'root' })\nexport class CursorAcp_ApiService {\n\n private readonly baseUrl: string = `${environment.api.baseUrl}/ca-session`;\n\n private readonly http: HttpClient = inject(HttpClient);\n\n private readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n\n /**\n * ccapId hozzáfűzése egy meglévő HttpParams-hoz.\n */\n private withCcapId(params: HttpParams): HttpParams {\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n if (!ccapId) {\n return params;\n }\n return params.set('ccapId', ccapId);\n }\n\n createSession(params: {\n workspacePath: string;\n label?: string;\n parentSessionId?: string;\n actorId?: string;\n actorLabel?: string;\n }): Promise<{ session: Record<string, unknown> }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ session: Record<string, unknown> }>(this.baseUrl, params, { params: httpParams }),\n );\n }\n\n listSessions(params?: {\n status?: string;\n workspacePath?: string;\n includeArchived?: boolean;\n }): Promise<CA_List_Response> {\n let httpParams: HttpParams = this.withCcapId(new HttpParams());\n if (params?.status) {\n httpParams = httpParams.set('status', params.status);\n }\n if (params?.workspacePath) {\n httpParams = httpParams.set('workspacePath', params.workspacePath);\n }\n if (params?.includeArchived) {\n httpParams = httpParams.set('includeArchived', '1');\n }\n return firstValueFrom(\n this.http.get<CA_List_Response>(this.baseUrl, { params: httpParams }),\n );\n }\n\n syncFromAgent(params?: { cwd?: string }): Promise<{ success: boolean; mergedCount: number }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean; mergedCount: number }>(`${this.baseUrl}/sync`, {\n cwd: params?.cwd,\n }, { params: httpParams }),\n );\n }\n\n getSession(sessionId: string): Promise<{ session: Record<string, unknown> }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.get<{ session: Record<string, unknown> }>(`${this.baseUrl}/${sessionId}`, { params: httpParams }),\n );\n }\n\n sendPrompt(params: { sessionId: string; content: string }): Promise<{\n success: boolean;\n stopReason?: string;\n raw?: Record<string, unknown>;\n }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean; stopReason?: string; raw?: Record<string, unknown> }>(\n `${this.baseUrl}/${params.sessionId}/prompt`,\n { content: params.content },\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Futó execution leállítása (stop gomb; session megmarad).\n */\n stopExecution(sessionId: string): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean }>(`${this.baseUrl}/${sessionId}/stop-execution`, {}, { params: httpParams }),\n );\n }\n\n terminateSession(sessionId: string): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean }>(`${this.baseUrl}/${sessionId}/terminate`, {}, { params: httpParams }),\n );\n }\n\n setSessionArchived(params: { sessionId: string; isArchived: boolean }): Promise<{\n success: boolean;\n session: Record<string, unknown> | null;\n }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.patch<{ success: boolean; session: Record<string, unknown> | null }>(\n `${this.baseUrl}/${params.sessionId}/archive`,\n { isArchived: params.isArchived },\n { params: httpParams },\n ),\n );\n }\n\n getSessionEvents(params: {\n sessionId: string;\n sinceSequence?: number;\n limit?: number;\n }): Promise<{\n events: Record<string, unknown>[];\n hasMore: boolean;\n nextSinceSequence: number | null;\n }> {\n let httpParams: HttpParams = this.withCcapId(new HttpParams());\n if (params.sinceSequence != null) {\n httpParams = httpParams.set('sinceSequence', String(params.sinceSequence));\n }\n if (params.limit != null) {\n httpParams = httpParams.set('limit', String(params.limit));\n }\n return firstValueFrom(\n this.http.get<{\n events: Record<string, unknown>[];\n hasMore: boolean;\n nextSinceSequence: number | null;\n }>(`${this.baseUrl}/${params.sessionId}/events`, { params: httpParams }),\n );\n }\n\n hydrateSession(params: { sessionId: string; force?: boolean }): Promise<{\n success: boolean;\n appended: boolean;\n skippedDuplicate: boolean;\n fingerprint: string;\n sequence: number;\n }> {\n return firstValueFrom(\n this.http.post<{\n success: boolean;\n appended: boolean;\n skippedDuplicate: boolean;\n fingerprint: string;\n sequence: number;\n }>(`${this.baseUrl}/${params.sessionId}/hydrate`, { force: params.force === true },\n { params: this.withCcapId(new HttpParams()) }),\n );\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["CA_EventChronologicalSort_Util", "compareMirrorEventsAsc", "a", "b", "dq", "sequence", "ta", "timestamp", "tb", "tc", "localeCompare", "ea", "eventType", "eb", "CA_MirrorStreamMerge_Util", "messageIdsCompatibleForStreamMerge", "prevMid", "nextMid", "p", "trim", "n", "length", "parseStreamChunkFromMirrorData", "data", "upd", "update", "Array", "isArray", "rec", "toPlainRecord", "kind", "sessionUpdate", "role", "content", "text", "midRaw", "messageId", "undefined", "canMergeConsoleTailWithChunk", "params", "prev", "streamTextRole", "parsed", "streamMessageId", "nSeq", "ev", "sequence", "pSeq", "streamLastSequence", "canMergeMirrorChunkEvents", "prevEv", "nextEv", "nextParsed", "prevParsed", "foldEventsToTimelineRows", "sortedAsc", "rows", "tail", "tailLast", "events", "nextEvents", "rowKey", "mergedTimelineRowKey", "push", "String", "first", "last", "value", "out", "key", "Object", "keys", "Reflect", "get", "import_fsm_dynamo", "SHR_UnknownValuePrettyJson_Util", "prettyStringifyUnknown", "value", "expanded", "expandEmbeddedJsonStrings", "JSON", "stringify", "String", "s", "SHR_JsonSnippetFormat_Util", "looksLikeJson", "parsed", "parse", "trim", "Array", "isArray", "map", "item", "out", "key", "Object", "keys", "v", "Reflect", "get", "CA_MirrorEventBrief_Util", "buildFromMirrorEvent", "item", "seq", "sequence", "data", "undefined", "eventType", "buildPromptSentBrief", "buildCaSessionUpdateBrief", "buildGenericBrief", "extractSessionUpdateKind", "upd", "update", "Array", "isArray", "kind", "toPlainRecord", "sessionUpdate", "length", "contentRaw", "content", "listKey", "String", "consoleType", "bodyText", "mirrorEventType", "useRawBubbleKind", "rawData", "parsed", "CA_MirrorStreamMerge_Util", "parseStreamChunkFromMirrorData", "sub", "isThoughtStream", "role", "text", "briefSubtype", "isStreamingTextChunk", "streamTextRole", "streamMessageId", "messageId", "pretty", "SHR_UnknownValuePrettyJson_Util", "prettyStringifyUnknown", "segment", "safeListKeySegment", "payload", "cleaned", "replace", "value", "out", "key", "Object", "keys", "Reflect", "get", "CA_ToolCallMirrorParse_Util", "listKeyStart", "toolCallId", "listKeyProgress", "listKeyResult", "listKeyError", "tryParseStableListKey", "listKey", "prefix", "startsWith", "suffixSpecs", "suffix", "role", "spec", "endsWith", "id", "slice", "length", "tryParseMirrorData", "data", "upd", "update", "Array", "isArray", "rec", "toPlainRecord", "su", "sessionUpdate", "toolCallIdRaw", "trim", "statusRaw", "status", "titleRaw", "title", "undefined", "kindRaw", "kind", "toolKind", "rawOut", "rawOutput", "rawIn", "rawInput", "contentRaw", "content", "locationsRaw", "locations", "hasRawOutputError", "Object", "prototype", "hasOwnProperty", "call", "summarizeRawOutputError", "err", "error", "JSON", "stringify", "summarizeRawOutputSuccess", "s", "max", "substring", "formatRawInput", "String", "formatLocations", "lines", "loc", "path", "line", "lineStr", "push", "join", "formatContent", "parts", "item", "type", "oldText", "newText", "parts2", "innerParts", "part", "pRec", "text", "value", "out", "key", "keys", "Reflect", "get", "CursorAcp_ApiService", "baseUrl", "environment", "api", "http", "inject", "HttpClient", "peiContext_DS", "ExS_InstanceContext_DataService", "withCcapId", "params", "ccapId", "activeCcapId_$", "set", "createSession", "httpParams", "HttpParams", "firstValueFrom", "post", "listSessions", "status", "workspacePath", "includeArchived", "get", "syncFromAgent", "cwd", "getSession", "sessionId", "sendPrompt", "content", "stopExecution", "terminateSession", "setSessionArchived", "patch", "isArchived", "getSessionEvents", "sinceSequence", "String", "limit", "hydrateSession", "force", "factory", "\u0275fac", "providedIn", "CursorAcp_DataService", "sessions_$", "signal", "sessionsLoading_$", "sessionsLoadError_$", "selectedSession_$", "selectedSessionLoading_$", "selectedSessionEvents_$", "sessionEventsHasMore_$", "mirrorRuntime_$", "consoleMessages_$", "assembledMessages_$", "lastStatusUpdate_$", "activeSessionId_$", "sessionDetailError_$", "caSession_AS", "inject", "CursorAcp_ApiService", "extSessionMsg_AS", "ExS_Message_ApiService", "globalError_CS", "CCAP_GlobalError_ControlService", "socket_CS", "CCAP_Socket_ControlService", "ngZone", "NgZone", "eventSubscription", "reconnectSubscription", "lastKnownEventSequence", "openSessionPollTimer", "openSessionPollTargetId", "pendingOptimisticPrompts", "sessionEventsNextSince", "constructor", "event$", "subscribe", "envelope", "handleSocketEvent", "connected$", "isConnected", "activeId", "emit", "sessionId", "loadAssembledMessages", "catch", "ngOnDestroy", "stopOpenSessionPolling", "unsubscribe", "loadSessions", "params", "__async", "set", "res", "listSessions", "includeArchived", "rawUnknown", "sessions", "mapped", "Array", "isArray", "map", "s", "mapSessionRecord", "toRecord", "rtUnknown", "mirrorRuntime", "rtRec", "ic", "isAcpConnected", "ls", "loadSessionSupported", "tm", "isTerminalMode", "trc", "isTerminalRunnerConnected", "err", "showError", "syncFromAgent", "cwd", "loadSessionDetail", "row", "getSession", "session", "ev", "getSessionEvents", "limit", "events", "e", "eventType", "timestamp", "data", "asRecord", "sequence", "hasMore", "ns", "nextSinceSequence", "Math", "max", "x", "seedConsoleFromMirrorEvents", "loadMoreSessionEvents", "since", "sinceSequence", "merged", "sort", "CA_EventChronologicalSort_Util", "compareMirrorEventsAsc", "hydrateFromAgent", "hydrateSession", "force", "Error", "setActiveSessionId", "previousId", "clearLiveOutput", "length", "createSession", "workspacePath", "label", "newIdRaw", "newId", "sendPrompt", "optimisticListKey", "globalThis", "crypto", "randomUUID", "push", "listKey", "text", "content", "pushConsoleMessage", "type", "pendingIdx", "findIndex", "p", "splice", "CCAP_ErrorDisplay_Util", "getErrorMessageForDisplay", "stopExecution", "terminateSession", "setSessionArchived", "startOpenSessionPolling", "intervalMs", "second", "setInterval", "runOpenSessionPollTick", "clearInterval", "message", "materializeConsoleLineFromPushParams", "Date", "toISOString", "rawData", "mirrorEventType", "briefSubtype", "useRawBubbleKind", "streamTextRole", "streamLastSequence", "streamMessageId", "streamPartData", "toolDisplayName", "isToolCallFailedIndicator", "current", "appendConsoleMirrorEventOne", "toolParsed", "CA_ToolCallMirrorParse_Util", "tryParseMirrorData", "applyToolCallMirrorEventToLiveConsole", "parsed", "brief", "CA_MirrorEventBrief_Util", "buildFromMirrorEvent", "consoleType", "removePendingOptimisticPromptBubbleIfTextMatchesMirror", "bodyText", "some", "m", "isStreamingTextChunk", "tryMergeStreamingMirrorChunkIntoConsole", "ts", "buildConsolePushParamsFromBrief", "timestampIso", "prev", "CA_MirrorStreamMerge_Util", "parseStreamChunkFromMirrorData", "canMergeConsoleTailWithChunk", "parts", "undefined", "nextMsgId", "mergedMsgId", "trim", "updated", "__spreadProps", "__spreadValues", "streamMerged", "partCount", "lastChunkSequence", "chunkSnapshots", "next", "b", "buildFoldedConsoleMessagesFromMirrorEvents", "sortedAsc", "out", "tryFoldToolCallMirrorEventIntoOut", "last", "id", "toolCallId", "dataPayload", "sessionUpdate", "startKey", "listKeyStart", "display", "toolCallDisplayName", "buildToolCallBodyText", "displayName", "status", "rawInput", "patchLiveToolCallStartInput", "progressKey", "listKeyProgress", "line", "idx", "nextLine", "hasRawOutputError", "rawOutput", "errKey", "listKeyError", "errText", "summarizeRawOutputError", "patchLiveConsoleToolCallStartFailed", "resKey", "listKeyResult", "summary", "summarizeRawOutputSuccess", "patchOutArrayToolCallStartInput", "patchOutArrayToolCallStartFailed", "cur", "title", "toolKind", "lines", "inputStr", "formatRawInput", "locStr", "formatLocations", "locations", "join", "detail", "run", "prevMax", "bySeq", "Map", "item", "values", "eventName", "event", "payload", "handleStatusUpdate", "handleOutputChunk", "handleSessionEvent", "handleAssembledMessage", "handleAssembledMessageUpdate", "DyFM_Log", "error", "statusMessage", "currentSessions", "sel", "outputType", "rawPayload", "key", "Object", "keys", "Reflect", "get", "seq", "tsFromEvent", "evs", "sorted", "mirrorContent", "pendingIndex", "removed", "filter", "raw", "acpSessionId", "promptCount", "lastPrompt", "lastActivityAt", "isArchived", "parentSessionId", "lastSyncAt", "lastSyncError", "agentInfoName", "agentInfoVersion", "value", "result", "getMessages", "latest", "messages", "msgData", "msg", "messageKey", "updateData", "update", "updateRec", "toolResult", "toolStatus", "headerStatusDot", "factory", "\u0275fac", "providedIn"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as i,b as c}from"./chunk-LVN7UVJS.js";import"./chunk-Q2PKIGLB.js";import"./chunk-5I65O626.js";import"./chunk-7MGY4Z6C.js";import"./chunk-7JUIBZEE.js";import"./chunk-C7XPBJTG.js";import"./chunk-IXRSAIZI.js";import"./chunk-WPHEQXWB.js";import"./chunk-JU2L5GD6.js";import"./chunk-FX2IX5QH.js";import"./chunk-NY3HJA4F.js";import"./chunk-JKBO6HPX.js";import"./chunk-Q2NVIOCY.js";import"./chunk-OJHFALFZ.js";import"./chunk-W3DWFUQD.js";import"./chunk-ZD7RXMQQ.js";import"./chunk-V3VQWJQL.js";import"./chunk-JT4QERQZ.js";import"./chunk-ZBTWQZNB.js";import"./chunk-FLAJXIYW.js";import"./chunk-EO4DNTT4.js";import"./chunk-K4HTQXPA.js";import"./chunk-5UPNU54P.js";import"./chunk-FT6CK74E.js";import"./chunk-CFPTAUCU.js";import{E as e,Kb as r,z as t}from"./chunk-TBMJSIBB.js";var n=[{path:"",component:i}],s=(()=>{class o{static \u0275fac=function(m){return new(m||o)};static \u0275mod=e({type:o});static \u0275inj=t({imports:[c,r.forChild(n)]})}return o})();export{s as ProjectSource_RoutedModule};
|
|
2
|
-
//# sourceMappingURL=project-source-routed.module-J6RM73IW.js.map
|
|
File without changes
|