@futdevpro/ccap 1.1.2509 → 1.1.2585
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client-dist/{agent-instances.module-QQHSIHVZ.js → agent-instances.module-UDY5QZWB.js} +2 -2
- package/client-dist/ca.module-HZKGDMWQ.js +5 -0
- package/client-dist/ca.module-HZKGDMWQ.js.map +7 -0
- package/client-dist/cc.module-XHPUHCTY.js +4 -0
- package/client-dist/cc.module-XHPUHCTY.js.map +7 -0
- package/client-dist/{chunk-Q4YAQFNP.js → chunk-2ITU6ZUM.js} +2 -2
- package/client-dist/{chunk-Y6PUQHIU.js → chunk-2N7NQG7Q.js} +2 -2
- package/client-dist/{chunk-NJUY7I3Y.js → chunk-3HX37L3J.js} +2 -2
- package/client-dist/{chunk-GNW4X5RC.js → chunk-3YPBVIDJ.js} +2 -2
- package/client-dist/{chunk-OG33J4ZD.js → chunk-42VB5ZQS.js} +2 -2
- package/client-dist/{chunk-TJENOBO6.js → chunk-4EUKDX2B.js} +2 -2
- package/client-dist/{chunk-2HIXFHTS.js → chunk-4PKNY4PJ.js} +3 -3
- package/client-dist/chunk-4PKNY4PJ.js.map +1 -0
- package/client-dist/{chunk-5MNGROTB.js → chunk-56EQDG6E.js} +2 -2
- package/client-dist/{chunk-CJVTAHYF.js → chunk-5SKL5HHO.js} +2 -2
- package/client-dist/{chunk-72FQNGJO.js → chunk-6BOUODAT.js} +2 -2
- package/client-dist/{chunk-AQ72GJMX.js → chunk-6C4HMIS6.js} +2 -2
- package/client-dist/{chunk-KFS5VDDV.js → chunk-6D6XCLGK.js} +2 -2
- package/client-dist/{chunk-CKR2NA35.js → chunk-77UMON5X.js} +2 -2
- package/client-dist/{chunk-JUWOVLJL.js → chunk-7ZVD6LZ4.js} +2 -2
- package/client-dist/{chunk-KTAWOOUI.js → chunk-A36RZJWH.js} +2 -2
- package/client-dist/{chunk-RRV4AJML.js → chunk-AVI22QZM.js} +2 -2
- package/client-dist/{chunk-AM2JGX23.js → chunk-BORMYQ7S.js} +2 -2
- package/client-dist/{chunk-XQKHUGZW.js → chunk-CJ62X7WV.js} +2 -2
- package/client-dist/{chunk-M7Z2O4RG.js → chunk-CKF63TFV.js} +2 -2
- package/client-dist/chunk-CPK4BL7O.js +3 -0
- package/client-dist/{chunk-6XRGBDSK.js.map → chunk-CPK4BL7O.js.map} +4 -4
- package/client-dist/{chunk-PYVQEDEW.js → chunk-CWR6ZNEU.js} +2 -2
- package/client-dist/{chunk-VW3WQQBF.js → chunk-DOZSMA4R.js} +2 -2
- package/client-dist/{chunk-PUFVETM4.js → chunk-EWK657JH.js} +2 -2
- package/client-dist/{chunk-QHUBJGWS.js → chunk-F5B46GLI.js} +2 -2
- package/client-dist/{chunk-AY3XK6RS.js → chunk-FKCRNYZY.js} +2 -2
- package/client-dist/{chunk-V4X7URSF.js → chunk-FUWU5SAR.js} +2 -2
- package/client-dist/{chunk-F46E5KZ3.js → chunk-HBEZNISK.js} +2 -2
- package/client-dist/{chunk-FOUQZW4D.js → chunk-HZBU5O3R.js} +2 -2
- package/client-dist/{chunk-OQ24BGZJ.js → chunk-IUMRUKS2.js} +2 -2
- package/client-dist/{chunk-U5VAWMNB.js → chunk-IZOE47W6.js} +2 -2
- package/client-dist/{chunk-NTUVOM4B.js → chunk-KXFHNZNW.js} +2 -2
- package/client-dist/{chunk-JIZE3HXP.js → chunk-MCZ3PLTT.js} +2 -2
- package/client-dist/{chunk-5L4G3C5C.js → chunk-MY5WQ7QW.js} +2 -2
- package/client-dist/{chunk-WX6TVKDG.js → chunk-NUSZLWO3.js} +2 -2
- package/client-dist/{chunk-H7BIO73O.js → chunk-NZUTHRBY.js} +2 -2
- package/client-dist/chunk-O34GKTSF.js +2 -0
- package/client-dist/chunk-O34GKTSF.js.map +7 -0
- package/client-dist/{chunk-4FSRDTZN.js → chunk-OH353S6Q.js} +2 -2
- package/client-dist/{chunk-2E6OA2KT.js → chunk-OYMJ57PL.js} +2 -2
- package/client-dist/{chunk-KZUKSPQS.js → chunk-QCLHEBFF.js} +2 -2
- package/client-dist/{chunk-APXVQISJ.js → chunk-QELAISH5.js} +2 -2
- package/client-dist/{chunk-3R7FDMZ3.js → chunk-QVO7D6MW.js} +2 -2
- package/client-dist/{chunk-EMTKUTBC.js → chunk-QY6EVZQP.js} +2 -2
- package/client-dist/{chunk-YWWHFCS3.js → chunk-SP5BICPA.js} +2 -2
- package/client-dist/{chunk-MSY74RUJ.js → chunk-U5UHHTNY.js} +2 -2
- package/client-dist/{chunk-TM2SED26.js → chunk-VS3OABTD.js} +2 -2
- package/client-dist/{chunk-G7FLLFQV.js → chunk-W3FGHB4J.js} +2 -2
- package/client-dist/{chunk-FVJHSIII.js → chunk-WBXAI6KX.js} +2 -2
- package/client-dist/{chunk-O65C5CZH.js → chunk-XGPVYITU.js} +2 -2
- package/client-dist/{chunk-G44KM4TW.js → chunk-XOEIV7DM.js} +2 -2
- package/client-dist/{chunk-JAUNNZJN.js → chunk-XPV2NH7Y.js} +2 -2
- package/client-dist/{chunk-VM45PE3J.js → chunk-XQT4GCPA.js} +2 -2
- package/client-dist/{chunk-4RFLGW5L.js → chunk-XWP33UZH.js} +2 -2
- package/client-dist/{chunk-SQDIXJP2.js → chunk-Y2O26C3U.js} +2 -2
- package/client-dist/{chunk-XNHRRX4L.js → chunk-Z3J6BRQE.js} +2 -2
- package/client-dist/{chunk-ZQCAHEXF.js → chunk-ZB4SFHZ2.js} +2 -2
- package/client-dist/{chunk-LTRCLVM3.js → chunk-ZUD5BM5I.js} +2 -2
- package/client-dist/{consultant.module-HFZCP4N4.js → consultant.module-UPUHCJAY.js} +2 -2
- package/client-dist/{crd.module-6R37JW4V.js → crd.module-MPOKEY25.js} +2 -2
- package/client-dist/{dashboard.module-YAZCCU26.js → dashboard.module-AMV7M5BJ.js} +2 -2
- package/client-dist/do-chat-popup.component-3NJKFEEW.css.map +7 -0
- package/client-dist/{do-instance-panel.component-K5IGXVCT.css.map → do-instance-panel.component-MDYTDDAF.css.map} +2 -2
- package/client-dist/do-office-scene.component-Z3ULZ7BC.css.map +7 -0
- package/client-dist/do.module-DFPZJO7Y.js +18 -0
- package/client-dist/do.module-DFPZJO7Y.js.map +7 -0
- package/client-dist/{document-library.module-EFTFUIXJ.js → document-library.module-RCFAEWTG.js} +2 -2
- package/client-dist/{embedding-eval.module-NIPCFFWB.js → embedding-eval.module-3BIHIVAY.js} +2 -2
- package/client-dist/{embedding-registry.module-4GLSQNAT.js → embedding-registry.module-MNMESFZ7.js} +2 -2
- package/client-dist/{err.module-2RPVCWXD.js → err.module-X4XSLFQF.js} +2 -2
- package/client-dist/{feedback.module-WVLKZ533.js → feedback.module-ATVDBFBO.js} +2 -2
- package/client-dist/{host-runtime-mcp.module-GRW6RSCA.js → host-runtime-mcp.module-XLJ77OB6.js} +2 -2
- package/client-dist/index.html +2 -2
- package/client-dist/{live-dev-pipeline.module-P3DEM6CE.js → live-dev-pipeline.module-OJ3TMQDS.js} +2 -2
- package/client-dist/{logs.module-U6KCQYDU.js → logs.module-LDSPCIZG.js} +2 -2
- package/client-dist/main-HAEPQDF4.js +7 -0
- package/client-dist/main-HAEPQDF4.js.map +7 -0
- package/client-dist/{master-control-remote-poc.module-RYSKRGXU.js → master-control-remote-poc.module-PIYVV2O4.js} +2 -2
- package/client-dist/{mobile-app.module-EBMTWXS2.js → mobile-app.module-HXOEINEU.js} +2 -2
- package/client-dist/{model-registry.module-F6R5MSBB.js → model-registry.module-7XR7DQF3.js} +2 -2
- package/client-dist/oc.module-PXRALG3J.js +3 -0
- package/client-dist/oc.module-PXRALG3J.js.map +7 -0
- package/client-dist/{orc.module-NJQ6XGPN.js → orc.module-XWPMT7MP.js} +2 -2
- package/client-dist/{project-management.module-JQEQIHL2.js → project-management.module-3DVAUZYJ.js} +11 -11
- package/client-dist/project-management.module-3DVAUZYJ.js.map +7 -0
- package/client-dist/project-source-routed.module-LXOFGFZ3.js +2 -0
- package/client-dist/{scheduler.module-WWPV25AU.js → scheduler.module-BIR62G32.js} +2 -2
- package/client-dist/session.module-2YDJ35IR.js +12 -0
- package/client-dist/session.module-2YDJ35IR.js.map +7 -0
- package/client-dist/set.module-Q4D7USFX.js +11 -0
- package/client-dist/{set.module-IKSASSWS.js.map → set.module-Q4D7USFX.js.map} +3 -3
- package/client-dist/{setup.module-RVTO6I3R.js → setup.module-ECA6XRR5.js} +2 -2
- package/client-dist/styles-JBAOFG2I.css +2 -0
- package/client-dist/styles-JBAOFG2I.css.map +7 -0
- package/client-dist/{terminals.module-AZEN47GZ.js → terminals.module-PT2ISO2T.js} +2 -2
- package/client-dist/{voice-notes-poc.module-5JUTNIBP.js → voice-notes-poc.module-OCX735WY.js} +2 -2
- package/client-dist/{wfs.module-5MMNXIRW.js → wfs.module-ADTI4XGV.js} +2 -2
- package/package.json +1 -1
- package/server/build/src/_collections/core/ccap-post-services-bootstrap.util.js +1 -1
- package/server/build/src/_collections/core/ccap-post-services-bootstrap.util.js.map +1 -1
- package/server/build/src/_modules/ai-systems/_modules/model-registry/_models/data-models/mrg-instance-registry.data-model.d.ts +7 -0
- package/server/build/src/_modules/ai-systems/_modules/model-registry/_models/data-models/mrg-instance-registry.data-model.d.ts.map +1 -1
- package/server/build/src/_modules/ai-systems/_modules/model-registry/_models/data-models/mrg-instance-registry.data-model.js +8 -0
- package/server/build/src/_modules/ai-systems/_modules/model-registry/_models/data-models/mrg-instance-registry.data-model.js.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/agent-path/_modules/default-path/default-path.util.d.ts +5 -0
- package/server/build/src/_modules/ccap-agent/_modules/agent-path/_modules/default-path/default-path.util.d.ts.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/agent-path/_modules/default-path/default-path.util.js +19 -2
- package/server/build/src/_modules/ccap-agent/_modules/agent-path/_modules/default-path/default-path.util.js.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/agent-path/_modules/default-path/default-path.util.spec.js +12 -0
- package/server/build/src/_modules/ccap-agent/_modules/agent-path/_modules/default-path/default-path.util.spec.js.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/tools/_modules/fixed-tools/_modules/self/_collections/utils/self.util.spec.js +37 -0
- package/server/build/src/_modules/ccap-agent/_modules/tools/_modules/fixed-tools/_modules/self/_collections/utils/self.util.spec.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.d.ts +31 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.d.ts.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.js +29 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.js.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-transient-terminal-error.util.d.ts +28 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-transient-terminal-error.util.d.ts.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-transient-terminal-error.util.js +40 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-transient-terminal-error.util.js.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-transient-terminal-error.util.spec.d.ts +6 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-transient-terminal-error.util.spec.d.ts.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-transient-terminal-error.util.spec.js +39 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-transient-terminal-error.util.spec.js.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.d.ts +13 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.js +13 -3
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.spec.js +40 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.spec.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.d.ts +21 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.js +45 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.js +48 -11
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.js +35 -7
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal-grace-period.control-service.spec.js +41 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal-grace-period.control-service.spec.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal-runner-versions.control-service.spec.d.ts +12 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal-runner-versions.control-service.spec.d.ts.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal-runner-versions.control-service.spec.js +62 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal-runner-versions.control-service.spec.js.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.d.ts +33 -53
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js +93 -90
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_services/exs-instance-registry.data-service.d.ts +1 -0
- package/server/build/src/_modules/external-sessions/_services/exs-instance-registry.data-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_services/exs-instance-registry.data-service.js +6 -0
- package/server/build/src/_modules/external-sessions/_services/exs-instance-registry.data-service.js.map +1 -1
- package/server/build/src/_modules/peer-instance/_models/interfaces/pei-bootstrap-attempt.interface.d.ts +33 -0
- package/server/build/src/_modules/peer-instance/_models/interfaces/pei-bootstrap-attempt.interface.d.ts.map +1 -0
- package/server/build/src/_modules/peer-instance/_models/interfaces/pei-bootstrap-attempt.interface.js +3 -0
- package/server/build/src/_modules/peer-instance/_models/interfaces/pei-bootstrap-attempt.interface.js.map +1 -0
- package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.d.ts +33 -0
- package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.js +78 -1
- package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.js.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.spec.js +60 -0
- package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.spec.js.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.js +3 -0
- package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.js.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.spec.d.ts +9 -0
- package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.spec.d.ts.map +1 -0
- package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.spec.js +43 -0
- package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.spec.js.map +1 -0
- package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.d.ts +44 -0
- package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.js +94 -0
- package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.js.map +1 -1
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-diagnostics-result.interface.d.ts +39 -2
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-diagnostics-result.interface.d.ts.map +1 -1
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-diagnostics-result.interface.js +0 -7
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-diagnostics-result.interface.js.map +1 -1
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-reconnect-peer-result.interface.d.ts +13 -0
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-reconnect-peer-result.interface.d.ts.map +1 -0
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-reconnect-peer-result.interface.js +3 -0
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-reconnect-peer-result.interface.js.map +1 -0
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-reconnect-ws-result.interface.d.ts +23 -0
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-reconnect-ws-result.interface.d.ts.map +1 -0
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-reconnect-ws-result.interface.js +3 -0
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-reconnect-ws-result.interface.js.map +1 -0
- package/server/build/src/_modules/setup-config/_routes/setup-config.controller.d.ts.map +1 -1
- package/server/build/src/_modules/setup-config/_routes/setup-config.controller.js +24 -0
- package/server/build/src/_modules/setup-config/_routes/setup-config.controller.js.map +1 -1
- package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.d.ts +43 -5
- package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.js +156 -7
- package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.js.map +1 -1
- package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.spec.d.ts +4 -3
- package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.spec.d.ts.map +1 -1
- package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.spec.js +91 -3
- package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.spec.js.map +1 -1
- package/server/build/src/_modules/setup-config/_services/setup-config.control-service.js +1 -1
- package/server/build/src/_modules/setup-config/_services/setup-config.control-service.js.map +1 -1
- package/client-dist/ca.module-FTQALPNM.js +0 -5
- package/client-dist/ca.module-FTQALPNM.js.map +0 -7
- package/client-dist/cc.module-UPCFEGEY.js +0 -4
- package/client-dist/cc.module-UPCFEGEY.js.map +0 -7
- package/client-dist/chunk-2HIXFHTS.js.map +0 -1
- package/client-dist/chunk-3UDLOQR2.js +0 -2
- package/client-dist/chunk-3UDLOQR2.js.map +0 -7
- package/client-dist/chunk-6XRGBDSK.js +0 -3
- package/client-dist/do-character.component-PZHI3KZL.css.map +0 -7
- package/client-dist/do-chat-popup.component-FXZ46EHV.css.map +0 -7
- package/client-dist/do-office-scene.component-ILYUPFGH.css.map +0 -7
- package/client-dist/do.module-QV56KZQO.js +0 -18
- package/client-dist/do.module-QV56KZQO.js.map +0 -7
- package/client-dist/main-F4G6PI7V.js +0 -7
- package/client-dist/main-F4G6PI7V.js.map +0 -7
- package/client-dist/oc.module-VIBOASVG.js +0 -3
- package/client-dist/oc.module-VIBOASVG.js.map +0 -7
- package/client-dist/project-management.module-JQEQIHL2.js.map +0 -7
- package/client-dist/project-source-routed.module-LZCPWG6J.js +0 -2
- package/client-dist/session.module-YYFJ6B5X.js +0 -12
- package/client-dist/session.module-YYFJ6B5X.js.map +0 -7
- package/client-dist/set.module-IKSASSWS.js +0 -11
- package/client-dist/styles-ILB5HBSL.css +0 -2
- package/client-dist/styles-ILB5HBSL.css.map +0 -7
- /package/client-dist/{agent-instances.module-QQHSIHVZ.js.map → agent-instances.module-UDY5QZWB.js.map} +0 -0
- /package/client-dist/{chunk-Q4YAQFNP.js.map → chunk-2ITU6ZUM.js.map} +0 -0
- /package/client-dist/{chunk-Y6PUQHIU.js.map → chunk-2N7NQG7Q.js.map} +0 -0
- /package/client-dist/{chunk-NJUY7I3Y.js.map → chunk-3HX37L3J.js.map} +0 -0
- /package/client-dist/{chunk-GNW4X5RC.js.map → chunk-3YPBVIDJ.js.map} +0 -0
- /package/client-dist/{chunk-OG33J4ZD.js.map → chunk-42VB5ZQS.js.map} +0 -0
- /package/client-dist/{chunk-TJENOBO6.js.map → chunk-4EUKDX2B.js.map} +0 -0
- /package/client-dist/{chunk-5MNGROTB.js.map → chunk-56EQDG6E.js.map} +0 -0
- /package/client-dist/{chunk-CJVTAHYF.js.map → chunk-5SKL5HHO.js.map} +0 -0
- /package/client-dist/{chunk-72FQNGJO.js.map → chunk-6BOUODAT.js.map} +0 -0
- /package/client-dist/{chunk-AQ72GJMX.js.map → chunk-6C4HMIS6.js.map} +0 -0
- /package/client-dist/{chunk-KFS5VDDV.js.map → chunk-6D6XCLGK.js.map} +0 -0
- /package/client-dist/{chunk-CKR2NA35.js.map → chunk-77UMON5X.js.map} +0 -0
- /package/client-dist/{chunk-JUWOVLJL.js.map → chunk-7ZVD6LZ4.js.map} +0 -0
- /package/client-dist/{chunk-KTAWOOUI.js.map → chunk-A36RZJWH.js.map} +0 -0
- /package/client-dist/{chunk-RRV4AJML.js.map → chunk-AVI22QZM.js.map} +0 -0
- /package/client-dist/{chunk-AM2JGX23.js.map → chunk-BORMYQ7S.js.map} +0 -0
- /package/client-dist/{chunk-XQKHUGZW.js.map → chunk-CJ62X7WV.js.map} +0 -0
- /package/client-dist/{chunk-M7Z2O4RG.js.map → chunk-CKF63TFV.js.map} +0 -0
- /package/client-dist/{chunk-PYVQEDEW.js.map → chunk-CWR6ZNEU.js.map} +0 -0
- /package/client-dist/{chunk-VW3WQQBF.js.map → chunk-DOZSMA4R.js.map} +0 -0
- /package/client-dist/{chunk-PUFVETM4.js.map → chunk-EWK657JH.js.map} +0 -0
- /package/client-dist/{chunk-QHUBJGWS.js.map → chunk-F5B46GLI.js.map} +0 -0
- /package/client-dist/{chunk-AY3XK6RS.js.map → chunk-FKCRNYZY.js.map} +0 -0
- /package/client-dist/{chunk-V4X7URSF.js.map → chunk-FUWU5SAR.js.map} +0 -0
- /package/client-dist/{chunk-F46E5KZ3.js.map → chunk-HBEZNISK.js.map} +0 -0
- /package/client-dist/{chunk-FOUQZW4D.js.map → chunk-HZBU5O3R.js.map} +0 -0
- /package/client-dist/{chunk-OQ24BGZJ.js.map → chunk-IUMRUKS2.js.map} +0 -0
- /package/client-dist/{chunk-U5VAWMNB.js.map → chunk-IZOE47W6.js.map} +0 -0
- /package/client-dist/{chunk-NTUVOM4B.js.map → chunk-KXFHNZNW.js.map} +0 -0
- /package/client-dist/{chunk-JIZE3HXP.js.map → chunk-MCZ3PLTT.js.map} +0 -0
- /package/client-dist/{chunk-5L4G3C5C.js.map → chunk-MY5WQ7QW.js.map} +0 -0
- /package/client-dist/{chunk-WX6TVKDG.js.map → chunk-NUSZLWO3.js.map} +0 -0
- /package/client-dist/{chunk-H7BIO73O.js.map → chunk-NZUTHRBY.js.map} +0 -0
- /package/client-dist/{chunk-4FSRDTZN.js.map → chunk-OH353S6Q.js.map} +0 -0
- /package/client-dist/{chunk-2E6OA2KT.js.map → chunk-OYMJ57PL.js.map} +0 -0
- /package/client-dist/{chunk-KZUKSPQS.js.map → chunk-QCLHEBFF.js.map} +0 -0
- /package/client-dist/{chunk-APXVQISJ.js.map → chunk-QELAISH5.js.map} +0 -0
- /package/client-dist/{chunk-3R7FDMZ3.js.map → chunk-QVO7D6MW.js.map} +0 -0
- /package/client-dist/{chunk-EMTKUTBC.js.map → chunk-QY6EVZQP.js.map} +0 -0
- /package/client-dist/{chunk-YWWHFCS3.js.map → chunk-SP5BICPA.js.map} +0 -0
- /package/client-dist/{chunk-MSY74RUJ.js.map → chunk-U5UHHTNY.js.map} +0 -0
- /package/client-dist/{chunk-TM2SED26.js.map → chunk-VS3OABTD.js.map} +0 -0
- /package/client-dist/{chunk-G7FLLFQV.js.map → chunk-W3FGHB4J.js.map} +0 -0
- /package/client-dist/{chunk-FVJHSIII.js.map → chunk-WBXAI6KX.js.map} +0 -0
- /package/client-dist/{chunk-O65C5CZH.js.map → chunk-XGPVYITU.js.map} +0 -0
- /package/client-dist/{chunk-G44KM4TW.js.map → chunk-XOEIV7DM.js.map} +0 -0
- /package/client-dist/{chunk-JAUNNZJN.js.map → chunk-XPV2NH7Y.js.map} +0 -0
- /package/client-dist/{chunk-VM45PE3J.js.map → chunk-XQT4GCPA.js.map} +0 -0
- /package/client-dist/{chunk-4RFLGW5L.js.map → chunk-XWP33UZH.js.map} +0 -0
- /package/client-dist/{chunk-SQDIXJP2.js.map → chunk-Y2O26C3U.js.map} +0 -0
- /package/client-dist/{chunk-XNHRRX4L.js.map → chunk-Z3J6BRQE.js.map} +0 -0
- /package/client-dist/{chunk-ZQCAHEXF.js.map → chunk-ZB4SFHZ2.js.map} +0 -0
- /package/client-dist/{chunk-LTRCLVM3.js.map → chunk-ZUD5BM5I.js.map} +0 -0
- /package/client-dist/{consultant.module-HFZCP4N4.js.map → consultant.module-UPUHCJAY.js.map} +0 -0
- /package/client-dist/{crd.module-6R37JW4V.js.map → crd.module-MPOKEY25.js.map} +0 -0
- /package/client-dist/{dashboard.module-YAZCCU26.js.map → dashboard.module-AMV7M5BJ.js.map} +0 -0
- /package/client-dist/{document-library.module-EFTFUIXJ.js.map → document-library.module-RCFAEWTG.js.map} +0 -0
- /package/client-dist/{embedding-eval.module-NIPCFFWB.js.map → embedding-eval.module-3BIHIVAY.js.map} +0 -0
- /package/client-dist/{embedding-registry.module-4GLSQNAT.js.map → embedding-registry.module-MNMESFZ7.js.map} +0 -0
- /package/client-dist/{err.module-2RPVCWXD.js.map → err.module-X4XSLFQF.js.map} +0 -0
- /package/client-dist/{feedback.module-WVLKZ533.js.map → feedback.module-ATVDBFBO.js.map} +0 -0
- /package/client-dist/{host-runtime-mcp.module-GRW6RSCA.js.map → host-runtime-mcp.module-XLJ77OB6.js.map} +0 -0
- /package/client-dist/{live-dev-pipeline.module-P3DEM6CE.js.map → live-dev-pipeline.module-OJ3TMQDS.js.map} +0 -0
- /package/client-dist/{logs.module-U6KCQYDU.js.map → logs.module-LDSPCIZG.js.map} +0 -0
- /package/client-dist/{master-control-remote-poc.module-RYSKRGXU.js.map → master-control-remote-poc.module-PIYVV2O4.js.map} +0 -0
- /package/client-dist/{mobile-app.module-EBMTWXS2.js.map → mobile-app.module-HXOEINEU.js.map} +0 -0
- /package/client-dist/{model-registry.module-F6R5MSBB.js.map → model-registry.module-7XR7DQF3.js.map} +0 -0
- /package/client-dist/{orc.module-NJQ6XGPN.js.map → orc.module-XWPMT7MP.js.map} +0 -0
- /package/client-dist/{project-source-routed.module-LZCPWG6J.js.map → project-source-routed.module-LXOFGFZ3.js.map} +0 -0
- /package/client-dist/{scheduler.module-WWPV25AU.js.map → scheduler.module-BIR62G32.js.map} +0 -0
- /package/client-dist/{setup.module-RVTO6I3R.js.map → setup.module-ECA6XRR5.js.map} +0 -0
- /package/client-dist/{terminals.module-AZEN47GZ.js.map → terminals.module-PT2ISO2T.js.map} +0 -0
- /package/client-dist/{voice-notes-poc.module-5JUTNIBP.js.map → voice-notes-poc.module-OCX735WY.js.map} +0 -0
- /package/client-dist/{wfs.module-5MMNXIRW.js.map → wfs.module-ADTI4XGV.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["src/app/_modules/shared/_components/s-cc-rate-limit-info/s-cc-rate-limit-info.component.ts", "src/app/_modules/shared/_components/s-cc-rate-limit-info/s-cc-rate-limit-info.component.html", "src/app/_modules/external-sessions/_modules/claude-code/_collections/cc-rate-limit-display.util.ts", "src/app/_modules/shared/_components/s-instance-detail-view/s-instance-detail-view.component.ts", "src/app/_modules/shared/_components/s-instance-detail-view/s-instance-detail-view.component.html", "src/app/_modules/shared/_components/s-instance-selector/s-instance-selector.component.ts", "src/app/_modules/shared/_components/s-instance-selector/s-instance-selector.component.html", "src/app/_modules/shared/_components/s-instance-chip-row-with-info/s-instance-chip-row-with-info.component.ts", "src/app/_modules/shared/_components/s-instance-chip-row-with-info/s-instance-chip-row-with-info.component.html", "src/app/_modules/shared/_components/session-ui/s-session-schedule-overlay/s-session-schedule-overlay.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-schedule-overlay/s-session-schedule-overlay.component.html", "src/app/_modules/shared/_components/session-ui/s-session-quickcast-overlay/s-session-quickcast-overlay.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-quickcast-overlay/s-session-quickcast-overlay.component.html"],
|
|
4
|
-
"sourcesContent": ["import { Component, computed, inject, Input, Signal, signal, WritableSignal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DyFM_Log } from '@futdevpro/fsm-dynamo';\n\nimport { CcSessionRateLimitInfo_Interface }\n from '../../../external-sessions/_modules/claude-code/_services/cc.data-service.interface';\nimport { CC_RateLimitDisplay_Util }\n from '../../../external-sessions/_modules/claude-code/_collections/cc-rate-limit-display.util';\nimport { CC_RateLimitStateMapper_Util }\n from '../../../external-sessions/_modules/claude-code/_collections/cc-rate-limit-state-mapper.util';\nimport { CC_RateLimitStateServerItem_Response }\n from '../../../external-sessions/_modules/claude-code/_models/interfaces/cc-rate-limit-state-server-item.interface';\nimport { ClaudeCode_ApiService }\n from '../../../external-sessions/_modules/claude-code/_services/claude-code.api-service';\n\n/**\n * REQ-CC-USAGE-001 Slice 1 (cycle 258) — shared CC Session rate-limit info component.\n *\n * Egyetlen forrásból mutatja a per-CCAP-instance rate-limit állapotot, amit korábban\n * a `S_InstanceDetailView_Component` belső blokkja kezelt. A komponens elérhető\n * minden CC Sessions felületről (settings instance popup, session detail metadata,\n * dashboard popup), egyetlen prezentációval — REQ-CC-USAGE-001 fő architecture\n * decision: ne legyen duplikált rate-limit-fetch + display logika.\n *\n * Inputs:\n * - `ccapId` (required) — a célzott CCAP instance kulcsa. Ha üres / undefined,\n * silent skip (nincs blokk).\n *\n * Internal state:\n * - `rateLimitInfo_$` — perzisztált állapot a `GET /cc-session/rate-limit-state/:ccapId`-ról.\n * - Computed signal-ok a CC_RateLimitDisplay_Util formatter-jeiből.\n *\n * Hibakezelés: silent-fail a fetch hibájára (DyFM_Log.warn diagnosztikához), a komponens\n * üres marad — analóg az eredeti `S_InstanceDetailView_Component` viselkedéssel.\n */\n@Component({\n selector: 'app-s-cc-rate-limit-info',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './s-cc-rate-limit-info.component.html',\n})\n/** S_CcRateLimitInfo_Component class — REQ-CC-USAGE-001 Slice 1. */\nexport class S_CcRateLimitInfo_Component {\n\n readonly claudeCode_AS: ClaudeCode_ApiService = inject(ClaudeCode_ApiService);\n\n private _ccapId: string = '';\n\n /** A célzott CCAP instance kulcsa (`ccapId`). Üres → nincs fetch, blokk rejtve. */\n @Input({ required: true })\n set ccapId(value: string) {\n this._ccapId = value?.trim() ?? '';\n this.refreshRateLimitState();\n }\n get ccapId(): string {\n return this._ccapId;\n }\n\n /**\n * Perzisztált rate-limit állapot. `null` ha nincs adat / fetch hibázott.\n */\n readonly rateLimitInfo_$: WritableSignal<CcSessionRateLimitInfo_Interface | null> =\n signal<CcSessionRateLimitInfo_Interface | null>(null);\n\n /** Utilization százalék (computed a rateLimitInfo_$-ból). */\n readonly utilizationPercent_$: Signal<number> = computed((): number => {\n return CC_RateLimitDisplay_Util.computeUtilizationPercent(this.rateLimitInfo_$());\n });\n\n /** Reset countdown szöveg (pl. \"2h 15m\" / \"expired\"). */\n readonly resetText_$: Signal<string> = computed((): string => {\n return CC_RateLimitDisplay_Util.formatResetText(this.rateLimitInfo_$());\n });\n\n /** Limit scope címke (\"Session\" / \"Weekly\" / raw). */\n readonly limitScopeLabel_$: Signal<string> = computed((): string => {\n return CC_RateLimitDisplay_Util.formatLimitScopeLabel(this.rateLimitInfo_$());\n });\n\n /**\n * Rate-limit state frissítése a jelenlegi `ccapId`-hez. Üres kulcs → ürítés.\n * Hibakezelés: silent-fail (DyFM_Log.warn) — a UI üres marad, nincs popup-blokk.\n */\n private refreshRateLimitState(): void {\n if (!this._ccapId) {\n this.rateLimitInfo_$.set(null);\n return;\n }\n\n this.claudeCode_AS.getRateLimitState({ ccapId: this._ccapId })\n .then((result: { items: CC_RateLimitStateServerItem_Response[] }): void => {\n const info: CcSessionRateLimitInfo_Interface | null =\n CC_RateLimitStateMapper_Util.mapServerItemsToClientInfo(result.items);\n this.rateLimitInfo_$.set(info);\n })\n .catch((err: unknown): void => {\n DyFM_Log.warn(\n `s-cc-rate-limit-info | rate-limit fetch failed | ccapId: ${this._ccapId} | err: ${String(err)}`,\n );\n this.rateLimitInfo_$.set(null);\n });\n }\n}\n", "<!-- REQ-CC-USAGE-001 Slice 1: shared CC Session rate-limit info display.\n Csak akkor renderel, ha a szerver tartott fenn rate-limit state-et az adott ccapId-re. -->\n@if (rateLimitInfo_$(); as rl) {\n <div class=\"grid grid-cols-[minmax(8rem,auto)_1fr] gap-x-3 gap-y-2 text-xs text-neutral-200\">\n <span\n class=\"col-span-2 text-[11px] uppercase tracking-wider text-neutral-500\">\n Rate limit\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Scope</span>\n <span class=\"whitespace-nowrap\">{{ limitScopeLabel_$() || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Státusz</span>\n <span\n class=\"whitespace-nowrap\"\n [class.text-neonRed]=\"rl.status === 'limited'\"\n [class.text-yellow-400]=\"rl.status === 'allowed_warning'\"\n [class.text-neutral-300]=\"rl.status === 'allowed'\">\n {{ rl.status || '—' }}\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Utilization</span>\n <span class=\"whitespace-nowrap font-mono\">{{ utilizationPercent_$() }}%</span>\n\n <span class=\"text-neutral-500 shrink-0\">Reset</span>\n <span class=\"whitespace-nowrap font-mono\">{{ resetText_$() || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Utolsó észlelés</span>\n <span class=\"font-mono text-[11px] whitespace-nowrap\">\n {{ (rl.receivedAt | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n </div>\n}\n", "import { CcSessionRateLimitInfo_Interface } from '../_services/cc.data-service.interface';\n\n/**\n * CC Session rate limit UI segédmetódusok.\n * Közös képlettár a metadata popover, az Agent Update status-update sáv és a top banner számára.\n * A `utilization` és `surpassedThreshold` az új rate_limit_event payload mezőiből jön (0..1).\n */\nexport class CC_RateLimitDisplay_Util {\n\n /** Session (per-conversation) limit azonosítója a rate_limit_event.rateLimitType mezőben. */\n static readonly SESSION_LIMIT_TYPE: string = 'five_hour';\n\n /** Weekly (7 napos) limit azonosítója a rate_limit_event.rateLimitType mezőben. */\n static readonly WEEKLY_LIMIT_TYPE: string = 'seven_day';\n\n /**\n * Relatív reset szöveg (rövid forma: \"2h 15m\" / \"8m\" / \"expired\").\n * A metadata gomb és a status-update pirula használja.\n */\n static formatResetText(info: CcSessionRateLimitInfo_Interface | null): string {\n if (!info?.resetsAt) {\n return '';\n }\n const resetDate: Date = new Date(info.resetsAt * 1000);\n const now: Date = new Date();\n const diffMs: number = resetDate.getTime() - now.getTime();\n if (diffMs <= 0) {\n return 'expired';\n }\n const diffMin: number = Math.floor(diffMs / 60000);\n const hours: number = Math.floor(diffMin / 60);\n const mins: number = diffMin % 60;\n return hours > 0 ? `${hours}h ${mins}m` : `${mins}m`;\n }\n\n /**\n * Pontos reset szöveg napok/órák/percek/másodperc bontásban (pl. \"6d 11h 45m 12s\").\n * A top banner használja — a user kérte, hogy pontosan lássa, mikor ér véget a limit.\n */\n static formatResetTextPrecise(info: CcSessionRateLimitInfo_Interface | null): string {\n if (!info?.resetsAt) {\n return '';\n }\n const resetDate: Date = new Date(info.resetsAt * 1000);\n const now: Date = new Date();\n const diffSec: number = Math.floor((resetDate.getTime() - now.getTime()) / 1000);\n if (diffSec <= 0) {\n return 'expired';\n }\n const days: number = Math.floor(diffSec / 86400);\n const hours: number = Math.floor((diffSec % 86400) / 3600);\n const mins: number = Math.floor((diffSec % 3600) / 60);\n const secs: number = diffSec % 60;\n const parts: string[] = [];\n if (days) {\n parts.push(`${days}d`);\n }\n if (days || hours) {\n parts.push(`${hours}h`);\n }\n if (days || hours || mins) {\n parts.push(`${mins}m`);\n }\n parts.push(`${secs}s`);\n return parts.join(' ');\n }\n\n /**\n * Utilization százalék (0..100, egész szám).\n * Közvetlenül a payload `utilization` mezőjéből (0..1) — nem becslés, hanem a CLI által jelentett érték.\n */\n static computeUtilizationPercent(info: CcSessionRateLimitInfo_Interface | null): number {\n if (!info) {\n return 0;\n }\n const raw: number = typeof info.utilization === 'number' ? info.utilization : 0;\n const clamped: number = Math.max(0, Math.min(1, raw));\n return Math.round(clamped * 100);\n }\n\n /**\n * Threshold százalék (0..100, egész szám).\n * A küszöb, ami felett warning/limited státusz aktiválódik.\n */\n static computeThresholdPercent(info: CcSessionRateLimitInfo_Interface | null): number {\n if (!info) {\n return 0;\n }\n const raw: number = typeof info.surpassedThreshold === 'number' ? info.surpassedThreshold : 0;\n const clamped: number = Math.max(0, Math.min(1, raw));\n return Math.round(clamped * 100);\n }\n\n /**\n * Igaz, ha a jelenlegi utilization átlépte a threshold-ot (warning banner triggere).\n */\n static isOverThreshold(info: CcSessionRateLimitInfo_Interface | null): boolean {\n if (!info) {\n return false;\n }\n const util: number = typeof info.utilization === 'number' ? info.utilization : 0;\n const thr: number = typeof info.surpassedThreshold === 'number' ? info.surpassedThreshold : 1;\n return util >= thr && thr > 0;\n }\n\n /**\n * Limit scope emberbarát címke — \"Session\" (five_hour) vagy \"Weekly\" (seven_day) vagy a nyers érték.\n * A user kérte, hogy a banner egyértelműen jelezze, melyik limitről van szó.\n */\n static formatLimitScopeLabel(info: CcSessionRateLimitInfo_Interface | null): string {\n if (!info?.rateLimitType) {\n return '';\n }\n if (info.rateLimitType === CC_RateLimitDisplay_Util.SESSION_LIMIT_TYPE) {\n return 'Session';\n }\n if (info.rateLimitType === CC_RateLimitDisplay_Util.WEEKLY_LIMIT_TYPE) {\n return 'Weekly';\n }\n return info.rateLimitType;\n }\n}\n", "import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { Set_InstanceRegistryViewRow_Interface }\n from '../../../config/_modules/settings/_models/interfaces/set-instance-registry-view-row.interface';\nimport { S_CcRateLimitInfo_Component } from '../s-cc-rate-limit-info/s-cc-rate-limit-info.component';\nimport { S_InstancePresenceBadge_Component } from '../s-instance-presence-badge/s-instance-presence-badge.component';\nimport { EXS_InstancePresenceInfo_ClientInterface } from '../../../external-sessions/_services/data-services/exs-instance-presence-info.interface';\n\n/**\n * REQ-UI-INST-001 Slice 1 + REQ-CC-RATE-002 part (a) — megosztott instance detail view.\n *\n * Egy registry ViewRow mezőit jeleníti meg label/value grid-ben. Read-only view.\n * Cél: (a) a Settings táblázat sor-kibontásaként, és (b) a chip-info popup\n * tartalmaként — ugyanaz a layout / SSOT (REQ-UI-INST-001).\n *\n * **REQ-CC-RATE-002 part (a)** + **REQ-CC-USAGE-001 Slice 1 (cycle 258)**:\n * a rate-limit blokk delegálva van a `S_CcRateLimitInfo_Component`-re — egyetlen\n * forrás ezen logikának, így minden CC Sessions felület ugyanazt a komponenst\n * használja. A korábbi belső fetch + signal-állítás logika átkerült az új komponensbe.\n *\n * Template date formázás: Angular built-in `date` pipe — nincs metódushívás (CLAUDE.md).\n */\n@Component({\n selector: 'app-s-instance-detail-view',\n standalone: true,\n imports: [CommonModule, S_CcRateLimitInfo_Component, S_InstancePresenceBadge_Component],\n templateUrl: './s-instance-detail-view.component.html',\n})\n/** S_InstanceDetailView_Component class. */\nexport class S_InstanceDetailView_Component {\n\n /** A megjelenítendő ViewRow (registry + opcionális instanceData). */\n @Input({ required: true })\n row!: Set_InstanceRegistryViewRow_Interface;\n\n /**\n * REQ-INST-STATE-001 Slice 5b (cycle 695) — opcionális presence info a\n * detail-view badge-éhez. Parent-injection pattern (lásd s-instance-selector\n * jsdoc): a SZÜLŐ-komponens szolgáltatja a presence-info-t, így a detail-view\n * NEM inject-eli a `ExS_InstancePresence_DataService`-t (HttpClient chain\n * elkerülés). Ha undefined → nincs badge sor (backward-compatible).\n */\n @Input()\n presence: EXS_InstancePresenceInfo_ClientInterface | undefined = undefined;\n}\n", "<!-- REQ-UI-INST-001 Slice 1: instance detail SSOT view — label/value grid -->\n<div class=\"grid grid-cols-[minmax(8rem,auto)_1fr] gap-x-3 gap-y-2 text-xs text-neutral-200\">\n\n <!-- Registry basics -->\n <span class=\"text-neutral-500 shrink-0\">instanceKey</span>\n <span class=\"font-mono break-all\">{{ row.registry.instanceKey || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Név</span>\n <span class=\"break-all\">{{ (row.instanceData?.name?.trim()) || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Státusz</span>\n <span class=\"whitespace-nowrap\">{{ row.instanceData?.status || '—' }}</span>\n\n <!-- REQ-INST-STATE-001 Slice 5b (cycle 695): instance presence badge — csak\n akkor jelenik meg, ha a szülő szolgáltatott `presence` Input-ot\n (parent-injection pattern). -->\n @if (presence; as p) {\n <span class=\"text-neutral-500 shrink-0\">Instance presence</span>\n <span class=\"whitespace-nowrap\">\n <app-s-instance-presence-badge\n [presence]=\"p.presence\"\n [lastHeartbeatAt]=\"p.lastHeartbeatAt\"\n [wsConnected]=\"p.wsConnected\"\n />\n </span>\n }\n\n <span class=\"text-neutral-500 shrink-0\">Session presence</span>\n <span class=\"whitespace-nowrap\">\n {{ row.instanceData?.sessionStatuses?.[0]?.presence || '—' }}\n </span>\n\n <!-- Aktivitás / run -->\n @if (row.instanceData?.sessionStatuses?.[0]; as ss) {\n <span class=\"text-neutral-500 shrink-0 self-start pt-0.5\">Run / tevékenység</span>\n <span class=\"break-words\">\n <span class=\"font-mono text-[11px] text-neutral-400 block\">{{ ss.activeRunPhase || '—' }}</span>\n <span class=\"text-neutral-300\">{{ ss.activitySummary || '—' }}</span>\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Utolsó aktivitás</span>\n <span class=\"font-mono text-[11px] whitespace-nowrap\">\n {{ (ss.lastActivityAt | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Utolsó üzenet</span>\n <span class=\"break-words text-neutral-300\">{{ ss.lastMessage || '—' }}</span>\n }\n\n <!-- Hardware / hoszt / telepítés -->\n <span class=\"text-neutral-500 shrink-0\">MAC</span>\n <span class=\"font-mono break-all\">{{ row.registry.primaryMacAddress || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Install path</span>\n <span class=\"font-mono break-all\">{{ row.registry.installLocationPath || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">hostName</span>\n <span class=\"break-all\">{{ row.registry.hostName || '—' }}</span>\n\n <!-- Registry metadata (DyFM_Metadata) -->\n <span class=\"text-neutral-500 shrink-0\">registry __created</span>\n <span class=\"font-mono whitespace-nowrap\">\n {{ (row.registry.__created | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">registry __updated</span>\n <span class=\"font-mono whitespace-nowrap\">\n {{ (row.registry.__updated | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n\n\n</div>\n\n<!-- REQ-CC-RATE-002 part (a) + REQ-CC-USAGE-001 Slice 1 (cycle 258): rate-limit blokk\n a megosztott s-cc-rate-limit-info komponensben. A registry instanceKey-ből\n fetch-eli + render-eli, csak akkor látszik, ha a szerver tartott fenn state-et. -->\n<div class=\"mt-2 pt-2 border-t border-neutral-800\">\n <app-s-cc-rate-limit-info [ccapId]=\"row.registry.instanceKey || ''\" />\n</div>\n", "import { Component, computed, EventEmitter, inject, Input, OnInit, Output, Signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ExS_InstanceContext_DataService } from '../../../external-sessions/_services/exs-instance-context.data-service';\nimport { ExS_InstanceRegistryRow_Response } from '../../../external-sessions/_services/exs-instance-registry-row.interface';\nimport { EXS_InstancePresenceInfo_ClientInterface } from '../../../external-sessions/_services/data-services/exs-instance-presence-info.interface';\nimport { S_InstancePresenceBadge_Component } from '../s-instance-presence-badge/s-instance-presence-badge.component';\n\n/**\n * Instance-szelektor pill/dropdown: a session listák tetején jelenik meg,\n * lehetővé téve a felhasználó számára, hogy másik CCAP instance session-jeit kezelje.\n * A kiválasztott ccapId a `ExS_InstanceContext_DataService.selectedCcapId_$` signal-ba kerül.\n * Standalone component — bármelyik modul importálhatja.\n * REQ-PEI-016 §15.3.\n */\n@Component({\n selector: 'app-s-instance-selector',\n standalone: true,\n imports: [CommonModule, S_InstancePresenceBadge_Component],\n templateUrl: './s-instance-selector.component.html',\n host: { class: 'block' },\n})\n/** S_InstanceSelector_Component class. */\nexport class S_InstanceSelector_Component implements OnInit {\n\n readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n\n /**\n * REQ-INST-STATE-001 Slice 5b (cycle 695) — opcionális presence map a chip\n * badge-ekhez. Parent-injection pattern: a selector NEM inject-eli a\n * `ExS_InstancePresence_DataService`-t (mert az HttpClient injection chain-t\n * von vele, ami 63 spec-ben tört volna). Helyette a SZÜLŐ-komponens\n * gondoskodik a presence map szolgáltatásáról:\n *\n * ```html\n * <app-s-instance-selector [presenceMap]=\"presence_DS.instancePresenceMap_$()\" />\n * ```\n *\n * Ha nincs megadva (default empty Map) → nincs badge a chip-eken\n * (backward-compatible meglévő használókkal).\n */\n @Input()\n presenceMap: Map<string, EXS_InstancePresenceInfo_ClientInterface> = new Map();\n\n /**\n * REQ-UI-INST-CHIP-INDICATORS-001 part 2 (USER-INPUT_4 2. tétel) — Slice 1\n * plumbing: parent-injection map a chip-szintű \"van aktív session\" sárga\n * dot indikátorhoz. Kulcs az `instanceKey`, érték `true`, ha az adott\n * instance-en legalább egy CC / CCAP / CA / OC session running-like\n * státuszban van. Default empty Map → no dot → backward-compat.\n *\n * A selector NEM származtatja saját maga a flag-et, mert az session-\n * lista DS-ek injektálása ugyanazt a HttpClient cascade failure-t okozná,\n * mint cycle 695-ben a presence_DS-szel. A parent-komponens (pl. cc-\n * dashboard, ses-list, set-agent) felel a map összerakásáért és átadásáért.\n */\n @Input()\n activeSessionMap: Map<string, boolean> = new Map();\n\n /**\n * Info ikon klikk event — REQ-UI-INST-001 Slice 3.\n * A szülő komponens ezt fogja használni, hogy a megadott instance-hez popup-ot nyisson\n * a megosztott S_InstanceDetailView_Component tartalmával (Slice 4 composite wrapper).\n */\n @Output() infoRequested: EventEmitter<{ instanceKey: string }> =\n new EventEmitter<{ instanceKey: string }>();\n\n /**\n * Instance lista pill-ekhez: registry-ből, online/offline jelzéssel.\n */\n readonly instances_$: Signal<ExS_InstanceRegistryRow_Response[]> = computed(\n (): ExS_InstanceRegistryRow_Response[] => this.peiContext_DS.instanceList_$(),\n );\n\n /**\n * Aktuálisan kiválasztott ccapId.\n */\n readonly selectedCcapId_$: Signal<string> = computed(\n (): string => this.peiContext_DS.activeCcapId_$(),\n );\n\n /**\n * Lokális instance key (a „saját\" instance kiemeléshez).\n */\n readonly localKey_$: Signal<string> = computed(\n (): string => this.peiContext_DS.localInstanceKey_$(),\n );\n\n ngOnInit(): void {\n void this.peiContext_DS.initialize();\n }\n\n /**\n * Instance pill kattintás handler.\n */\n handleSelectInstance(ccapId: string): void {\n this.peiContext_DS.selectInstance(ccapId);\n }\n\n /**\n * Info ikon klikk handler — REQ-UI-INST-001 Slice 3.\n * Nem változtat selectedCcapId-t; csak a `infoRequested` Output-ot emittálja,\n * hogy a szülő egy popup-ban megjelenítse a megadott instance registry-detail-jét.\n */\n handleInfoClick(instanceKey: string): void {\n this.infoRequested.emit({ instanceKey: instanceKey });\n }\n\n /**\n * Instance megjelenítési név: hostName (utolsó 6 karakter az instanceKey-ből).\n */\n getDisplayLabel(row: ExS_InstanceRegistryRow_Response): string {\n const host: string = row.hostName ?? '';\n const keySuffix: string = (row.instanceKey ?? '').slice(-6);\n if (host) {\n return `${host} (${keySuffix})`;\n }\n return keySuffix || '?';\n }\n\n /**\n * Instance az aktuálisan kiválasztott-e.\n */\n isSelected(row: ExS_InstanceRegistryRow_Response): boolean {\n return (row.instanceKey ?? '') === this.selectedCcapId_$();\n }\n\n /**\n * Instance a lokális-e (saját szerver).\n */\n isLocal(row: ExS_InstanceRegistryRow_Response): boolean {\n return (row.instanceKey ?? '') === this.localKey_$();\n }\n\n /**\n * REQ-INST-STATE-001 Slice 5b: presence info lekérése a map-ből.\n * Ha az instanceKey nincs a map-ben (parent nem szolgáltatott vagy még\n * nem refresh-elt), `null`-t ad vissza — a template ekkor nem rendel\n * badge-t. Ez backward-compatible: a meglévő használók empty map-pel\n * → null → no badge → változatlan render.\n */\n getPresenceForRow(row: ExS_InstanceRegistryRow_Response): EXS_InstancePresenceInfo_ClientInterface | null {\n const key: string = row.instanceKey ?? '';\n if (!key) {\n return null;\n }\n return this.presenceMap.get(key) ?? null;\n }\n\n /**\n * REQ-UI-INST-CHIP-INDICATORS-001 part 2: active-session flag lekérése a\n * map-ből. Üres key vagy nincs entry → false (no dot). Backward-compat:\n * meglévő használók empty map-pel → minden row false → változatlan render.\n */\n getActiveSessionForRow(row: ExS_InstanceRegistryRow_Response): boolean {\n const key: string = row.instanceKey ?? '';\n if (!key) {\n return false;\n }\n return this.activeSessionMap.get(key) === true;\n }\n}\n", "<!-- Instance-szelektor pill sor (REQ-PEI-016 §15.3) -->\n<div class=\"flex gap-1 flex-wrap items-center\">\n <span class=\"text-[10px] text-neutral-500 mr-1 uppercase tracking-wider\">Instance:</span>\n\n @for (instance of instances_$(); track instance.instanceKey) {\n <!-- Chip + info icon csoport — REQ-UI-INST-001 Slice 3. Két külön <button>,\n mert a HTML nem engedi a button-in-button-t. REQ-INST-STATE-001\n Slice 5b (cycle 695): presence dot a chip előtt, ha a parent\n szolgáltatott `presenceMap`-et. -->\n <div class=\"flex items-center gap-0.5 group\">\n <button\n class=\"px-2 py-0.5 text-[11px] rounded-full border transition-colors flex items-center gap-1\"\n [class.border-ccapAccent]=\"isSelected(instance)\"\n [class.text-ccapAccent]=\"isSelected(instance)\"\n [ngClass]=\"{'bg-ccapAccent/10': isSelected(instance)}\"\n [class.border-neonDefault]=\"!isSelected(instance)\"\n [class.text-neutral-400]=\"!isSelected(instance)\"\n [class.hover:text-neutral-200]=\"!isSelected(instance)\"\n [class.hover:border-neutral-500]=\"!isSelected(instance)\"\n (click)=\"handleSelectInstance(instance.instanceKey ?? '')\">\n @if (getPresenceForRow(instance); as p) {\n <app-s-instance-presence-badge\n [presence]=\"p.presence\"\n [lastHeartbeatAt]=\"p.lastHeartbeatAt\"\n [wsConnected]=\"p.wsConnected\"\n [showLabel]=\"false\"\n />\n }\n {{ getDisplayLabel(instance) }}\n @if (isLocal(instance)) {\n <span class=\"ml-0.5 text-[9px] text-neutral-500\">(local)</span>\n }\n @if (getActiveSessionForRow(instance)) {\n <!-- REQ-UI-INST-CHIP-INDICATORS-001 part 2: sárga spinning dot,\n ha az adott instance-en aktív session fut. -->\n <span class=\"inline-block w-1.5 h-1.5 rounded-full bg-yellow-400 animate-pulse shrink-0\"\n title=\"Aktív session fut ezen az instance-en\"\n aria-label=\"Aktív session fut ezen az instance-en\"\n data-testid=\"s-instance-active-session-dot\"></span>\n }\n </button>\n <button\n type=\"button\"\n class=\"text-[11px] leading-none w-4 h-4 rounded-full border border-neutral-700 text-neutral-500 hover:text-ccapAccent hover:border-ccapAccent transition-colors flex items-center justify-center\"\n title=\"Instance details\"\n aria-label=\"Show instance details\"\n data-testid=\"s-instance-selector-info-btn\"\n (click)=\"handleInfoClick(instance.instanceKey ?? '')\">\n i\n </button>\n </div>\n }\n\n @if (!instances_$().length) {\n <span class=\"text-[10px] text-neutral-600 italic\">loading...</span>\n }\n</div>\n", "import { Component, computed, inject, Input, signal, Signal, WritableSignal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ExS_InstanceRegistry_DataService } from '../../../external-sessions/_services/exs-instance-registry.data-service';\nimport { ExS_RuntimeInstances_DataService } from '../../../external-sessions/_services/data-services/exs-runtime-instances.data-service';\nimport { EXS_InstancePresenceInfo_ClientInterface } from '../../../external-sessions/_services/data-services/exs-instance-presence-info.interface';\nimport { Set_InstanceRegistryViewRows_Util } from '../../../config/_modules/settings/_collections/set-instance-registry-view-rows.util';\nimport { Set_InstanceRegistryViewRow_Interface } from '../../../config/_modules/settings/_models/interfaces/set-instance-registry-view-row.interface';\nimport { S_InstanceDetailView_Component } from '../s-instance-detail-view/s-instance-detail-view.component';\nimport { S_InstanceSelector_Component } from '../s-instance-selector/s-instance-selector.component';\nimport { S_Modal_Component } from '../s-modal/s-modal.component';\n\n/**\n * REQ-UI-INST-001 Slice 4 — composite wrapper: instance chip-sor + info-popup host.\n *\n * A komponens magában tartja az info-popup state-et (`selectedInstanceKey_$`),\n * fog-adja a gyerek `S_InstanceSelector_Component` `infoRequested` eventjét, és\n * a kiválasztott instance-hez a Settings-beli SSOT ViewRow-t (`Set_InstanceRegistryViewRow_Interface`)\n * betölti a megosztott `S_InstanceDetailView_Component`-be egy `s-modal` popup-ban.\n *\n * A chip-sor main click-je (instance select) változatlanul a `S_InstanceSelector_Component`\n * belsejében marad — ez a wrapper csak a popup-ot adja hozzá. A parent komponensek\n * (`ses-list`, `cc-dashboard`, `ca-dashboard`, `oc-dashboard`, `set-agent`) Slice 5-ben állnak át\n * erre a wrapperre.\n */\n@Component({\n selector: 'app-s-instance-chip-row-with-info',\n standalone: true,\n imports: [\n CommonModule,\n S_InstanceSelector_Component,\n S_Modal_Component,\n S_InstanceDetailView_Component,\n ],\n templateUrl: './s-instance-chip-row-with-info.component.html',\n host: { class: 'block' },\n})\n/** S_InstanceChipRowWithInfo_Component class. */\nexport class S_InstanceChipRowWithInfo_Component {\n\n readonly instanceRegistry_DS: ExS_InstanceRegistry_DataService =\n inject(ExS_InstanceRegistry_DataService);\n\n readonly runtimeInstances_DS: ExS_RuntimeInstances_DataService =\n inject(ExS_RuntimeInstances_DataService);\n\n /**\n * REQ-INST-STATE-001 Slice 5b consumer wire-up + REQ-UI-INST-CHIP-INDICATORS-001\n * (cycle 706, USER-INPUT_4 user-prio): a parent komponens szolgáltathatja a\n * presence map-et, amit a wrapper továbbítja a selector + detail-view\n * gyerekkomponenseknek. Default empty Map → no badge → backward-compat\n * a 19+ consumer-spec-tel.\n *\n * A wrapper NEM inject-eli a presence_DS-t, mert az HttpClient injection\n * chain failure-t okozna a downstream specekben (cycle 698 tanulság).\n * A consumer (parent) felel a presence_DS injection-ért és a presenceMap\n * átadásáért.\n */\n @Input()\n presenceMap: Map<string, EXS_InstancePresenceInfo_ClientInterface> = new Map();\n\n /**\n * REQ-UI-INST-CHIP-INDICATORS-001 part 2 (USER-INPUT_4 2. tétel) — Slice 1:\n * parent-injection map a chip-szintű \"van aktív session\" sárga dot\n * indikátorhoz. A wrapper csak átengedi a selector gyerekkomponensnek;\n * a tényleges aggregálást a parent (cc-dashboard / ses-list / set-agent)\n * felel össze a session lista DS-ek alapján. Default empty Map → no dot.\n */\n @Input()\n activeSessionMap: Map<string, boolean> = new Map();\n\n /**\n * A popup-hoz kiválasztott instance key (null = zárt modal).\n */\n readonly selectedInstanceKey_$: WritableSignal<string | null> =\n signal<string | null>(null);\n\n /**\n * Registry + instance_data join ViewRow lista (SSOT: Set_InstanceRegistryViewRows_Util).\n * Ugyanaz az adatforrás, mint a Settings → Instances táblázat.\n */\n readonly viewRows_$: Signal<Set_InstanceRegistryViewRow_Interface[]> = computed(\n (): Set_InstanceRegistryViewRow_Interface[] =>\n Set_InstanceRegistryViewRows_Util.buildViewRows(\n this.instanceRegistry_DS.list_$(),\n this.runtimeInstances_DS.ccapInstanceList_$(),\n ),\n );\n\n /**\n * A kiválasztott instance-hez tartozó ViewRow, vagy null ha nincs egyezés.\n */\n readonly selectedRow_$: Signal<Set_InstanceRegistryViewRow_Interface | null> = computed(\n (): Set_InstanceRegistryViewRow_Interface | null => {\n const key: string | null = this.selectedInstanceKey_$();\n if (!key) {\n return null;\n }\n return this.viewRows_$().find(\n (row: Set_InstanceRegistryViewRow_Interface): boolean =>\n (row.registry.instanceKey ?? '') === key,\n ) ?? null;\n },\n );\n\n /**\n * Modal nyitva akkor és csak akkor, ha van kiválasztott ViewRow.\n */\n readonly isModalOpen_$: Signal<boolean> = computed(\n (): boolean => this.selectedRow_$() !== null,\n );\n\n /**\n * Modal cím — instance hostName vagy instanceKey-suffix.\n */\n readonly modalTitle_$: Signal<string> = computed((): string => {\n const row: Set_InstanceRegistryViewRow_Interface | null = this.selectedRow_$();\n if (!row) {\n return '';\n }\n const host: string = row.registry.hostName ?? '';\n const key: string = row.registry.instanceKey ?? '';\n if (host) {\n return `Instance — ${host}`;\n }\n return `Instance — ${key.slice(-6) || '?'}`;\n });\n\n /**\n * Gyerek chip-sor `infoRequested` handler — megnyitja a popup-ot.\n */\n handleInfoRequested(event: { instanceKey: string }): void {\n this.selectedInstanceKey_$.set(event.instanceKey);\n }\n\n /**\n * REQ-INST-STATE-001 Slice 5b: a kiválasztott row presence info-ja a\n * detail-view számára. Cached lookup a presenceMap-ből; ha nincs entry\n * → undefined (detail-view template @if nem render-eli az \"Instance\n * presence\" sort).\n */\n getPresenceForSelectedRow(): EXS_InstancePresenceInfo_ClientInterface | undefined {\n const row: Set_InstanceRegistryViewRow_Interface | null = this.selectedRow_$();\n if (!row) {\n return undefined;\n }\n const key: string = row.registry.instanceKey ?? '';\n if (!key) {\n return undefined;\n }\n return this.presenceMap.get(key);\n }\n\n /**\n * Modal close handler — bezárja a popup-ot (X / Escape / backdrop).\n */\n handleModalClosed(): void {\n this.selectedInstanceKey_$.set(null);\n }\n}\n", "<!-- REQ-UI-INST-001 Slice 4: instance chip-sor + info popup host (composite wrapper).\n REQ-INST-STATE-001 Slice 5b consumer + REQ-UI-INST-CHIP-INDICATORS-001\n (cycle 706 part 1 + cycle 709 part 2): presenceMap = chip presence dot-ok\n (zöld/sárga/szürke); activeSessionMap = sárga spinning \"aktív session\"\n dot. Mindkettő parent-injection (default empty Map → no dot). -->\n<app-s-instance-selector\n [presenceMap]=\"presenceMap\"\n [activeSessionMap]=\"activeSessionMap\"\n (infoRequested)=\"handleInfoRequested($event)\" />\n\n@if (isModalOpen_$()) {\n <app-s-modal\n [isOpen]=\"true\"\n [title]=\"modalTitle_$()\"\n [maxWidth]=\"'lg'\"\n (closed)=\"handleModalClosed()\">\n @if (selectedRow_$(); as row) {\n <app-s-instance-detail-view\n [row]=\"row\"\n [presence]=\"getPresenceForSelectedRow()\" />\n }\n </app-s-modal>\n}\n", "import { Component, computed, inject, input, InputSignal, OnInit, signal, Signal, WritableSignal } from '@angular/core';\n\nimport { SCH_Job_Response } from '../../../../scheduler/_models/interfaces/sch-job.interface';\nimport { SCH_ScheduledJobs_DataService } from '../../../../scheduler/_services/data-services/sch-scheduled-jobs.data-service';\n\n/**\n * Session schedule floating overlay — bal alul \"belógó\" gomb a chat oszlop fölött.\n *\n * Csak akkor renderel látható tartalmat, ha az adott `sessionId`-hoz tartozó\n * scheduled job (target.payload.sessionId match + enabled) van a scheduler\n * data-service-ben. Default állapot: kis tab-gomb naptár ikonnal a bal szélen.\n * Klikk: a gomb beljebb csúszik, jobbra kinyit egy panel, amin a session-höz\n * tartozó job(-ok) mellett `Trigger Now` gomb található.\n *\n * A komponens self-loading: ha `jobs_$()` üres (a user még nem járt a Schedule\n * felületen), `loadAll()`-t hív induláskor — így a kis indikátor mindig megjelenik\n * ott, ahol kell, függetlenül attól, hogy más dashboard-ot előbb látott-e a user.\n *\n * Slot-tartalom: a `[sChatColumnOverlay]` slotba projektálódik a shared\n * `S_SessionChatColumnLayout_Component`-ben — a host `absolute bottom-4 left-0`\n * a teljes chat oszlop relative ankerére települ.\n */\n@Component({\n selector: 'app-s-session-schedule-overlay',\n standalone: true,\n templateUrl: './s-session-schedule-overlay.component.html',\n host: { class: 'absolute bottom-4 left-0 z-30 pointer-events-none' },\n})\n/** S_SessionScheduleOverlay_Component class. */\nexport class S_SessionScheduleOverlay_Component implements OnInit {\n\n /** A session ID, amihez a scheduled job-okat keressük (target.payload.sessionId match). */\n readonly sessionId: InputSignal<string> = input.required<string>();\n\n private readonly scheduledJobs_DS: SCH_ScheduledJobs_DataService =\n inject(SCH_ScheduledJobs_DataService);\n\n /** Panel nyitva van-e (klikk után true → gomb beljebb + panel látszik). */\n readonly isOpen_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Per-job folyamatban-lévő trigger flagek — disable + label-csere a gombon. */\n readonly busyJobIds_$: WritableSignal<Set<string>> = signal<Set<string>>(new Set<string>());\n\n /**\n * A jelenlegi sessionId-hoz tartozó aktív (enabled) scheduled job-ok.\n * Üres lista esetén az overlay teljesen elrejti magát.\n */\n readonly sessionJobs_$: Signal<SCH_Job_Response[]> = computed(\n (): SCH_Job_Response[] => {\n const sid: string = (this.sessionId() ?? '').trim();\n if (!sid) {\n return [];\n }\n const all: SCH_Job_Response[] = this.scheduledJobs_DS.jobs_$();\n return all.filter(\n (job: SCH_Job_Response): boolean => {\n if (job.enabled === false) {\n return false;\n }\n const jobSid: string = (job.target?.payload?.sessionId ?? '').trim();\n return jobSid === sid;\n },\n );\n },\n );\n\n /** Van-e legalább 1 job — render-gate; ha nincs, semmit nem mutat az overlay. */\n readonly hasSchedule_$: Signal<boolean> = computed(\n (): boolean => this.sessionJobs_$().length > 0,\n );\n\n ngOnInit(): void {\n // Self-load: ha a scheduler list még üres, lekérjük (best-effort, nem blokkolja a UI-t).\n if (this.scheduledJobs_DS.jobs_$().length === 0) {\n void this.scheduledJobs_DS.loadAll();\n }\n }\n\n /** Tab-gomb klikk — panel toggle. */\n handleToggle(): void {\n this.isOpen_$.update((v: boolean): boolean => !v);\n }\n\n /**\n * `Trigger Now` klikk: scheduledJobs_DS.triggerNow hívás a job _id-jával.\n * A gomb a hívás idejére disabled (busy set), siker/hiba után visszakapcsol.\n */\n async handleTriggerNow(job: SCH_Job_Response): Promise<void> {\n const jobId: string = (job._id ?? '').trim();\n if (!jobId) {\n return;\n }\n if (this.busyJobIds_$().has(jobId)) {\n return;\n }\n this.busyJobIds_$.update((prev: Set<string>): Set<string> => {\n const next: Set<string> = new Set<string>(prev);\n next.add(jobId);\n return next;\n });\n try {\n await this.scheduledJobs_DS.triggerNow({ jobId: jobId, reason: 'session-overlay-manual' });\n } finally {\n this.busyJobIds_$.update((prev: Set<string>): Set<string> => {\n const next: Set<string> = new Set<string>(prev);\n next.delete(jobId);\n return next;\n });\n }\n }\n}\n", "@if (hasSchedule_$()) {\n <div class=\"flex items-end gap-2 pointer-events-auto\">\n\n <!-- Bal szélen \"belógó\" ikon-tab: closed: -translate-x-2. Open: translate-x-2.\n Neon cyan stílus a Send/Queue/Stop minta szerint (border-2, neonCyan,\n shadow-neon-glow-cyan). Count badge: amber neon, hogy figyelemfelhívó legyen. -->\n <button type=\"button\"\n (click)=\"handleToggle()\"\n [attr.aria-expanded]=\"isOpen_$()\"\n aria-label=\"Schedule\"\n [title]=\"isOpen_$() ? 'Schedule panel bezárása' : 'Schedule megjelenítése (' + sessionJobs_$().length + ' job)'\"\n class=\"relative flex items-center justify-center h-8 w-7 bg-neutral-900\n border-2 border-l-0 border-neonCyan/60 rounded-r-lg text-neonCyan\n shadow-neon-glow-cyan\n hover:border-neonCyan hover:bg-neonCyan/10\n transition-all duration-200 ease-out\"\n [class.-translate-x-2]=\"!isOpen_$()\"\n [class.translate-x-2]=\"isOpen_$()\">\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5\n a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n @if (sessionJobs_$().length > 1) {\n <span aria-hidden=\"true\"\n class=\"absolute -top-1 -right-1 min-w-[14px] h-[14px] px-[2px]\n bg-neonAmber text-neutral-900 rounded-full text-[9px]\n font-mono font-bold leading-[14px] text-center\n shadow-neon-glow-orange\">\n {{ sessionJobs_$().length > 9 ? '9+' : sessionJobs_$().length }}\n </span>\n }\n </button>\n\n <!-- Slide-out panel: csak nyitva renderelünk, hogy zárt állapotban semmi\n interaktív elem ne lógjon a chat fölé. -->\n @if (isOpen_$()) {\n <div class=\"bg-neutral-900 border-2 border-neonCyan/60 rounded-lg p-3\n flex flex-col gap-2 min-w-[16rem] max-w-xs\n shadow-neon-glow-cyan\">\n\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-[10px] uppercase tracking-wider text-neonCyan font-mono\">\n Schedule ({{ sessionJobs_$().length }})\n </span>\n <button type=\"button\"\n (click)=\"handleToggle()\"\n title=\"Bezárás\"\n aria-label=\"Schedule panel bezárása\"\n class=\"text-neutral-400 hover:text-neonCyan leading-none px-1 transition-colors\">\n ×\n </button>\n </div>\n\n @for (job of sessionJobs_$(); track job._id) {\n <div class=\"flex items-center justify-between gap-2 border-t border-neutral-800\n pt-2 first:border-t-0 first:pt-0\">\n <div class=\"flex flex-col min-w-0\">\n <span class=\"text-sm text-neutral-100 truncate\" [title]=\"job.name ?? ''\">\n {{ (job.name ?? '').trim() || 'Unnamed schedule' }}\n </span>\n @if (job.schedule?.preset) {\n <span class=\"text-[10px] text-neutral-500 font-mono\">\n {{ job.schedule?.preset }}\n </span>\n }\n </div>\n <!-- Trigger Now ikon-gomb: play / \"▶\" SVG. Neon cyan minta a Queue gombéhoz hasonlóan. -->\n <button type=\"button\"\n (click)=\"handleTriggerNow(job)\"\n [disabled]=\"busyJobIds_$().has(job._id ?? '')\"\n aria-label=\"Trigger now\"\n [title]=\"busyJobIds_$().has(job._id ?? '') ? 'Indítás folyamatban…' : 'Most futtatni (Trigger Now)'\"\n class=\"shrink-0 flex items-center justify-center w-7 h-7 rounded-full\n bg-neutral-900 border-2 border-neonCyan/60 text-neonCyan\n hover:border-neonCyan hover:bg-neonCyan/10 hover:shadow-neon-glow-cyan\n disabled:opacity-40 disabled:cursor-not-allowed\n transition-all\">\n <svg class=\"w-3.5 h-3.5\" fill=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n </button>\n </div>\n }\n\n </div>\n }\n\n </div>\n}\n", "import {\n Component,\n input,\n InputSignal,\n output,\n OutputEmitterRef,\n signal,\n WritableSignal,\n} from '@angular/core';\n\n/**\n * QuickCast floating overlay — bal alul \"belógó\" gomb a Schedule overlay fölött.\n *\n * Default állapot: kis villám-ikon tab a bal szélen. Klikk → a gomb beljebb csúszik\n * és jobbra kinyit egy panel, amin néhány rövid akciógomb található (Go, Continue,\n * OK, Proceed). Bármelyik gombra kattintva a komponens a `actionSelected` output-on\n * emittálja a kiválasztott szöveget — a parent maga küldi el a session-be (így a\n * komponens nem köti magát a CCAP `Session_DataService`-hez, működni tud későbbi\n * OC / CA / CC bekötéssel is).\n *\n * Duplikátum-védelem: az utolsó klikk után 800ms-ig minden további klikk no-op\n * (in-component throttle), miközben az adott gomb `pending` állapotban látszódik.\n *\n * Slot: `[sChatColumnOverlay]` — a shared `S_SessionChatColumnLayout_Component`\n * relative ankerére települ; host class `absolute bottom-16 left-0` → a Schedule\n * overlay (bottom-4) fölött jelenik meg.\n */\n@Component({\n selector: 'app-s-session-quickcast-overlay',\n standalone: true,\n templateUrl: './s-session-quickcast-overlay.component.html',\n host: { class: 'absolute bottom-16 left-0 z-30 pointer-events-none' },\n})\n/** S_SessionQuickCast_Overlay_Component class. */\nexport class S_SessionQuickCast_Overlay_Component {\n\n /** Akciógomb-feliratok (egyben a session-be küldött szöveg). */\n readonly actions: InputSignal<string[]> = input<string[]>([\n 'Go',\n 'Continue',\n 'OK',\n 'Proceed',\n 'Review Very Very Carefully',\n 'Ensure Documentations',\n ]);\n\n /** Egy akciógomb klikk → a parent kapja a szöveget és küldi a session-be. */\n readonly actionSelected: OutputEmitterRef<string> = output<string>();\n\n /** Panel nyitva van-e — kattintásra nyit, panel marad nyitva több akcióhoz. */\n readonly isOpen_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /**\n * Az utoljára kattintott akció (vagy null) — duplikátum-védelmi cooldown alatt.\n * Csak az adott akciógomb látszódik disabled / pending-ben, a többi kattintható.\n */\n readonly pendingAction_$: WritableSignal<string | null> = signal<string | null>(null);\n\n /** Tab-gomb klikk — panel toggle. */\n handleToggle(): void {\n this.isOpen_$.update((v: boolean): boolean => !v);\n }\n\n /**\n * Akció gomb klikk: throttle ha már fut egy másik akció (800ms cooldown), különben\n * pending-be teszi az adott akciót, kibocsátja a parent-nek és időzítve nullázza.\n */\n handleAction(action: string): void {\n if (this.pendingAction_$() !== null) {\n return;\n }\n this.pendingAction_$.set(action);\n this.actionSelected.emit(action);\n setTimeout((): void => {\n if (this.pendingAction_$() === action) {\n this.pendingAction_$.set(null);\n }\n }, 800);\n }\n}\n", "<div class=\"flex items-end gap-2 pointer-events-auto\">\n\n <!-- Bal szélen \"belógó\" ikon-gomb. Closed: -translate-x-2 (jobban balra tucked).\n Open: translate-x-2. Neon cyan stílus a Send/Queue/Stop minta szerint. -->\n <button type=\"button\"\n (click)=\"handleToggle()\"\n [attr.aria-expanded]=\"isOpen_$()\"\n aria-label=\"QuickCast\"\n [title]=\"isOpen_$() ? 'QuickCast bezárása' : 'QuickCast megnyitása'\"\n class=\"flex items-center justify-center h-8 w-7 bg-neutral-900\n border-2 border-l-0 border-neonCyan/60 rounded-r-lg text-neonCyan\n shadow-neon-glow-cyan\n hover:border-neonCyan hover:bg-neonCyan/10\n transition-all duration-200 ease-out\"\n [class.-translate-x-2]=\"!isOpen_$()\"\n [class.translate-x-2]=\"isOpen_$()\">\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n </svg>\n </button>\n\n <!-- Slide-out panel: csak nyitva renderelünk; akciógombok kompakt egy-oszlopos listában. -->\n @if (isOpen_$()) {\n <div class=\"bg-neutral-900 border-2 border-neonCyan/60 rounded-md p-1.5\n flex flex-col gap-1 min-w-[7rem] max-w-[12rem]\n shadow-neon-glow-cyan\">\n\n <div class=\"flex items-center justify-between gap-1\">\n <span class=\"text-[9px] uppercase tracking-wider text-neonCyan font-mono leading-none\">\n QC\n </span>\n <button type=\"button\"\n (click)=\"handleToggle()\"\n title=\"Bezárás\"\n aria-label=\"QuickCast panel bezárása\"\n class=\"text-neutral-400 hover:text-neonCyan leading-none text-xs px-1 transition-colors\">\n ×\n </button>\n </div>\n\n <div class=\"flex flex-col gap-1\">\n @for (action of actions(); track action) {\n <button type=\"button\"\n (click)=\"handleAction(action)\"\n [disabled]=\"pendingAction_$() === action\"\n class=\"px-1.5 py-0.5 rounded border-2 border-neonCyan/60 text-neonCyan\n text-[11px] font-medium\n hover:border-neonCyan hover:bg-neonCyan/10 hover:shadow-neon-glow-cyan\n disabled:opacity-40 disabled:cursor-not-allowed\n transition-all leading-tight\">\n {{ pendingAction_$() === action ? 'Sending…' : action }}\n </button>\n }\n </div>\n\n </div>\n }\n\n</div>\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_fsm_dynamo", "CC_RateLimitDisplay_Util", "SESSION_LIMIT_TYPE", "WEEKLY_LIMIT_TYPE", "formatResetText", "info", "resetsAt", "resetDate", "Date", "now", "diffMs", "getTime", "diffMin", "Math", "floor", "hours", "mins", "formatResetTextPrecise", "diffSec", "days", "secs", "parts", "push", "join", "computeUtilizationPercent", "raw", "utilization", "clamped", "max", "min", "round", "computeThresholdPercent", "surpassedThreshold", "isOverThreshold", "util", "thr", "formatLimitScopeLabel", "rateLimitType", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "ctx_r1", "limitScopeLabel_$", "\u0275\u0275classProp", "rl_r1", "status", "\u0275\u0275textInterpolate1", "utilizationPercent_$", "resetText_$", "\u0275\u0275pipeBind2", "receivedAt", "S_CcRateLimitInfo_Component", "claudeCode_AS", "inject", "ClaudeCode_ApiService", "_ccapId", "ccapId", "value", "trim", "refreshRateLimitState", "rateLimitInfo_$", "signal", "computed", "CC_RateLimitDisplay_Util", "computeUtilizationPercent", "formatResetText", "formatLimitScopeLabel", "set", "getRateLimitState", "then", "result", "info", "CC_RateLimitStateMapper_Util", "mapServerItemsToClientInfo", "items", "catch", "err", "DyFM_Log", "warn", "String", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "S_CcRateLimitInfo_Component_Conditional_0_Template", "\u0275\u0275conditional", "tmp_0_0", "CommonModule", "DatePipe", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275element", "\u0275\u0275advance", "\u0275\u0275property", "p_r1", "presence", "lastHeartbeatAt", "wsConnected", "\u0275\u0275textInterpolate", "ss_r2", "activeRunPhase", "activitySummary", "\u0275\u0275textInterpolate1", "\u0275\u0275pipeBind2", "lastActivityAt", "lastMessage", "S_InstanceDetailView_Component", "row", "undefined", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "S_InstanceDetailView_Component_Conditional_13_Template", "S_InstanceDetailView_Component_Conditional_18_Template", "registry", "instanceKey", "instanceData", "name", "trim", "status", "\u0275\u0275conditional", "tmp_3_0", "sessionStatuses", "tmp_5_0", "primaryMacAddress", "installLocationPath", "hostName", "__created", "__updated", "CommonModule", "DatePipe", "S_CcRateLimitInfo_Component", "S_InstancePresenceBadge_Component", "encapsulation", "\u0275\u0275element", "\u0275\u0275property", "p_r4", "presence", "lastHeartbeatAt", "wsConnected", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275listener", "tmp_11_0", "instance_r2", "\u0275\u0275restoreView", "_r1", "$implicit", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleSelectInstance", "instanceKey", "undefined", "\u0275\u0275template", "S_InstanceSelector_Component_For_4_Conditional_2_Template", "S_InstanceSelector_Component_For_4_Conditional_4_Template", "S_InstanceSelector_Component_For_4_Conditional_5_Template", "handleInfoClick", "\u0275\u0275advance", "\u0275\u0275classProp", "isSelected", "\u0275\u0275pureFunction1", "_c0", "\u0275\u0275conditional", "tmp_17_0", "getPresenceForRow", "\u0275\u0275textInterpolate1", "getDisplayLabel", "isLocal", "getActiveSessionForRow", "S_InstanceSelector_Component", "peiContext_DS", "inject", "ExS_InstanceContext_DataService", "presenceMap", "Map", "activeSessionMap", "infoRequested", "EventEmitter", "instances_$", "computed", "instanceList_$", "selectedCcapId_$", "activeCcapId_$", "localKey_$", "localInstanceKey_$", "ngOnInit", "initialize", "ccapId", "selectInstance", "emit", "row", "host", "hostName", "keySuffix", "slice", "key", "get", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275repeaterCreate", "S_InstanceSelector_Component_For_4_Template", "_forTrack0", "S_InstanceSelector_Component_Conditional_5_Template", "\u0275\u0275repeater", "length", "CommonModule", "NgClass", "S_InstancePresenceBadge_Component", "encapsulation", "\u0275\u0275element", "\u0275\u0275property", "ctx", "ctx_r1", "getPresenceForSelectedRow", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleModalClosed", "\u0275\u0275template", "S_InstanceChipRowWithInfo_Component_Conditional_1_Conditional_1_Template", "\u0275\u0275elementEnd", "modalTitle_$", "\u0275\u0275advance", "\u0275\u0275conditional", "tmp_4_0", "selectedRow_$", "S_InstanceChipRowWithInfo_Component", "instanceRegistry_DS", "inject", "ExS_InstanceRegistry_DataService", "runtimeInstances_DS", "ExS_RuntimeInstances_DataService", "presenceMap", "Map", "activeSessionMap", "selectedInstanceKey_$", "signal", "viewRows_$", "computed", "Set_InstanceRegistryViewRows_Util", "buildViewRows", "list_$", "ccapInstanceList_$", "key", "find", "row", "registry", "instanceKey", "isModalOpen_$", "host", "hostName", "slice", "handleInfoRequested", "event", "set", "get", "selectors", "hostAttrs", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "$event", "S_InstanceChipRowWithInfo_Component_Conditional_1_Template", "CommonModule", "S_InstanceSelector_Component", "S_Modal_Component", "S_InstanceDetailView_Component", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "ctx_r1", "sessionJobs_$", "length", "job_r5", "schedule", "preset", "\u0275\u0275template", "S_SessionScheduleOverlay_Component_Conditional_0_Conditional_5_For_7_Conditional_4_Template", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r4", "$implicit", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleTriggerNow", "\u0275\u0275element", "\u0275\u0275property", "tmp_12_0", "name", "undefined", "tmp_13_0", "trim", "\u0275\u0275conditional", "busyJobIds_$", "has", "tmp_15_0", "_id", "tmp_16_0", "_r3", "handleToggle", "\u0275\u0275repeaterCreate", "S_SessionScheduleOverlay_Component_Conditional_0_Conditional_5_For_7_Template", "_forTrack0", "\u0275\u0275repeater", "_r1", "S_SessionScheduleOverlay_Component_Conditional_0_Conditional_4_Template", "S_SessionScheduleOverlay_Component_Conditional_0_Conditional_5_Template", "\u0275\u0275classProp", "isOpen_$", "S_SessionScheduleOverlay_Component", "sessionId", "input", "required", "scheduledJobs_DS", "inject", "SCH_ScheduledJobs_DataService", "signal", "Set", "computed", "sid", "jobs_$", "filter", "job", "enabled", "target", "payload", "hasSchedule_$", "ngOnInit", "loadAll", "update", "v", "__async", "jobId", "prev", "next", "add", "triggerNow", "reason", "delete", "selectors", "hostAttrs", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "S_SessionScheduleOverlay_Component_Conditional_0_Template", "\u0275\u0275elementStart", "\u0275\u0275listener", "action_r4", "\u0275\u0275restoreView", "_r3", "$implicit", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleAction", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "pendingAction_$", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "_r1", "handleToggle", "\u0275\u0275repeaterCreate", "S_SessionQuickCast_Overlay_Component_Conditional_4_For_8_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275repeater", "actions", "S_SessionQuickCast_Overlay_Component", "input", "actionSelected", "output", "isOpen_$", "signal", "update", "v", "action", "set", "emit", "setTimeout", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275template", "S_SessionQuickCast_Overlay_Component_Conditional_4_Template", "\u0275\u0275classProp", "\u0275\u0275conditional"]
|
|
3
|
+
"sources": ["src/app/_modules/shared/_components/s-cc-rate-limit-info/s-cc-rate-limit-info.component.ts", "src/app/_modules/shared/_components/s-cc-rate-limit-info/s-cc-rate-limit-info.component.html", "src/app/_modules/external-sessions/_modules/claude-code/_collections/cc-rate-limit-display.util.ts", "src/app/_modules/shared/_components/s-instance-detail-view/s-instance-detail-view.component.ts", "src/app/_modules/shared/_components/s-instance-detail-view/s-instance-detail-view.component.html", "src/app/_modules/shared/_components/s-instance-selector/s-instance-selector.component.ts", "src/app/_modules/shared/_components/s-instance-selector/s-instance-selector.component.html", "src/app/_modules/shared/_components/s-instance-chip-row-with-info/s-instance-chip-row-with-info.component.ts", "src/app/_modules/shared/_components/s-instance-chip-row-with-info/s-instance-chip-row-with-info.component.html", "src/app/_modules/shared/_components/session-ui/s-session-schedule-overlay/s-session-schedule-overlay.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-schedule-overlay/s-session-schedule-overlay.component.html", "src/app/_modules/shared/_components/session-ui/s-session-quickcast-overlay/s-session-quickcast-overlay.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-quickcast-overlay/s-session-quickcast-overlay.component.html", "src/app/_modules/shared/_components/session-ui/s-session-coordinator-overlay/s-session-coordinator-overlay.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-coordinator-overlay/s-session-coordinator-overlay.component.html"],
|
|
4
|
+
"sourcesContent": ["import { Component, computed, inject, Input, Signal, signal, WritableSignal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DyFM_Log } from '@futdevpro/fsm-dynamo';\n\nimport { CcSessionRateLimitInfo_Interface }\n from '../../../external-sessions/_modules/claude-code/_services/cc.data-service.interface';\nimport { CC_RateLimitDisplay_Util }\n from '../../../external-sessions/_modules/claude-code/_collections/cc-rate-limit-display.util';\nimport { CC_RateLimitStateMapper_Util }\n from '../../../external-sessions/_modules/claude-code/_collections/cc-rate-limit-state-mapper.util';\nimport { CC_RateLimitStateServerItem_Response }\n from '../../../external-sessions/_modules/claude-code/_models/interfaces/cc-rate-limit-state-server-item.interface';\nimport { ClaudeCode_ApiService }\n from '../../../external-sessions/_modules/claude-code/_services/claude-code.api-service';\n\n/**\n * REQ-CC-USAGE-001 Slice 1 (cycle 258) — shared CC Session rate-limit info component.\n *\n * Egyetlen forrásból mutatja a per-CCAP-instance rate-limit állapotot, amit korábban\n * a `S_InstanceDetailView_Component` belső blokkja kezelt. A komponens elérhető\n * minden CC Sessions felületről (settings instance popup, session detail metadata,\n * dashboard popup), egyetlen prezentációval — REQ-CC-USAGE-001 fő architecture\n * decision: ne legyen duplikált rate-limit-fetch + display logika.\n *\n * Inputs:\n * - `ccapId` (required) — a célzott CCAP instance kulcsa. Ha üres / undefined,\n * silent skip (nincs blokk).\n *\n * Internal state:\n * - `rateLimitInfo_$` — perzisztált állapot a `GET /cc-session/rate-limit-state/:ccapId`-ról.\n * - Computed signal-ok a CC_RateLimitDisplay_Util formatter-jeiből.\n *\n * Hibakezelés: silent-fail a fetch hibájára (DyFM_Log.warn diagnosztikához), a komponens\n * üres marad — analóg az eredeti `S_InstanceDetailView_Component` viselkedéssel.\n */\n@Component({\n selector: 'app-s-cc-rate-limit-info',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './s-cc-rate-limit-info.component.html',\n})\n/** S_CcRateLimitInfo_Component class — REQ-CC-USAGE-001 Slice 1. */\nexport class S_CcRateLimitInfo_Component {\n\n readonly claudeCode_AS: ClaudeCode_ApiService = inject(ClaudeCode_ApiService);\n\n private _ccapId: string = '';\n\n /** A célzott CCAP instance kulcsa (`ccapId`). Üres → nincs fetch, blokk rejtve. */\n @Input({ required: true })\n set ccapId(value: string) {\n this._ccapId = value?.trim() ?? '';\n this.refreshRateLimitState();\n }\n get ccapId(): string {\n return this._ccapId;\n }\n\n /**\n * Perzisztált rate-limit állapot. `null` ha nincs adat / fetch hibázott.\n */\n readonly rateLimitInfo_$: WritableSignal<CcSessionRateLimitInfo_Interface | null> =\n signal<CcSessionRateLimitInfo_Interface | null>(null);\n\n /** Utilization százalék (computed a rateLimitInfo_$-ból). */\n readonly utilizationPercent_$: Signal<number> = computed((): number => {\n return CC_RateLimitDisplay_Util.computeUtilizationPercent(this.rateLimitInfo_$());\n });\n\n /** Reset countdown szöveg (pl. \"2h 15m\" / \"expired\"). */\n readonly resetText_$: Signal<string> = computed((): string => {\n return CC_RateLimitDisplay_Util.formatResetText(this.rateLimitInfo_$());\n });\n\n /** Limit scope címke (\"Session\" / \"Weekly\" / raw). */\n readonly limitScopeLabel_$: Signal<string> = computed((): string => {\n return CC_RateLimitDisplay_Util.formatLimitScopeLabel(this.rateLimitInfo_$());\n });\n\n /**\n * Rate-limit state frissítése a jelenlegi `ccapId`-hez. Üres kulcs → ürítés.\n * Hibakezelés: silent-fail (DyFM_Log.warn) — a UI üres marad, nincs popup-blokk.\n */\n private refreshRateLimitState(): void {\n if (!this._ccapId) {\n this.rateLimitInfo_$.set(null);\n return;\n }\n\n this.claudeCode_AS.getRateLimitState({ ccapId: this._ccapId })\n .then((result: { items: CC_RateLimitStateServerItem_Response[] }): void => {\n const info: CcSessionRateLimitInfo_Interface | null =\n CC_RateLimitStateMapper_Util.mapServerItemsToClientInfo(result.items);\n this.rateLimitInfo_$.set(info);\n })\n .catch((err: unknown): void => {\n DyFM_Log.warn(\n `s-cc-rate-limit-info | rate-limit fetch failed | ccapId: ${this._ccapId} | err: ${String(err)}`,\n );\n this.rateLimitInfo_$.set(null);\n });\n }\n}\n", "<!-- REQ-CC-USAGE-001 Slice 1: shared CC Session rate-limit info display.\n Csak akkor renderel, ha a szerver tartott fenn rate-limit state-et az adott ccapId-re. -->\n@if (rateLimitInfo_$(); as rl) {\n <div class=\"grid grid-cols-[minmax(8rem,auto)_1fr] gap-x-3 gap-y-2 text-xs text-neutral-200\">\n <span\n class=\"col-span-2 text-[11px] uppercase tracking-wider text-neutral-500\">\n Rate limit\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Scope</span>\n <span class=\"whitespace-nowrap\">{{ limitScopeLabel_$() || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Státusz</span>\n <span\n class=\"whitespace-nowrap\"\n [class.text-neonRed]=\"rl.status === 'limited'\"\n [class.text-yellow-400]=\"rl.status === 'allowed_warning'\"\n [class.text-neutral-300]=\"rl.status === 'allowed'\">\n {{ rl.status || '—' }}\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Utilization</span>\n <span class=\"whitespace-nowrap font-mono\">{{ utilizationPercent_$() }}%</span>\n\n <span class=\"text-neutral-500 shrink-0\">Reset</span>\n <span class=\"whitespace-nowrap font-mono\">{{ resetText_$() || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Utolsó észlelés</span>\n <span class=\"font-mono text-[11px] whitespace-nowrap\">\n {{ (rl.receivedAt | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n </div>\n}\n", "import { CcSessionRateLimitInfo_Interface } from '../_services/cc.data-service.interface';\n\n/**\n * CC Session rate limit UI segédmetódusok.\n * Közös képlettár a metadata popover, az Agent Update status-update sáv és a top banner számára.\n * A `utilization` és `surpassedThreshold` az új rate_limit_event payload mezőiből jön (0..1).\n */\nexport class CC_RateLimitDisplay_Util {\n\n /** Session (per-conversation) limit azonosítója a rate_limit_event.rateLimitType mezőben. */\n static readonly SESSION_LIMIT_TYPE: string = 'five_hour';\n\n /** Weekly (7 napos) limit azonosítója a rate_limit_event.rateLimitType mezőben. */\n static readonly WEEKLY_LIMIT_TYPE: string = 'seven_day';\n\n /**\n * Relatív reset szöveg (rövid forma: \"2h 15m\" / \"8m\" / \"expired\").\n * A metadata gomb és a status-update pirula használja.\n */\n static formatResetText(info: CcSessionRateLimitInfo_Interface | null): string {\n if (!info?.resetsAt) {\n return '';\n }\n const resetDate: Date = new Date(info.resetsAt * 1000);\n const now: Date = new Date();\n const diffMs: number = resetDate.getTime() - now.getTime();\n if (diffMs <= 0) {\n return 'expired';\n }\n const diffMin: number = Math.floor(diffMs / 60000);\n const hours: number = Math.floor(diffMin / 60);\n const mins: number = diffMin % 60;\n return hours > 0 ? `${hours}h ${mins}m` : `${mins}m`;\n }\n\n /**\n * Pontos reset szöveg napok/órák/percek/másodperc bontásban (pl. \"6d 11h 45m 12s\").\n * A top banner használja — a user kérte, hogy pontosan lássa, mikor ér véget a limit.\n */\n static formatResetTextPrecise(info: CcSessionRateLimitInfo_Interface | null): string {\n if (!info?.resetsAt) {\n return '';\n }\n const resetDate: Date = new Date(info.resetsAt * 1000);\n const now: Date = new Date();\n const diffSec: number = Math.floor((resetDate.getTime() - now.getTime()) / 1000);\n if (diffSec <= 0) {\n return 'expired';\n }\n const days: number = Math.floor(diffSec / 86400);\n const hours: number = Math.floor((diffSec % 86400) / 3600);\n const mins: number = Math.floor((diffSec % 3600) / 60);\n const secs: number = diffSec % 60;\n const parts: string[] = [];\n if (days) {\n parts.push(`${days}d`);\n }\n if (days || hours) {\n parts.push(`${hours}h`);\n }\n if (days || hours || mins) {\n parts.push(`${mins}m`);\n }\n parts.push(`${secs}s`);\n return parts.join(' ');\n }\n\n /**\n * Utilization százalék (0..100, egész szám).\n * Közvetlenül a payload `utilization` mezőjéből (0..1) — nem becslés, hanem a CLI által jelentett érték.\n */\n static computeUtilizationPercent(info: CcSessionRateLimitInfo_Interface | null): number {\n if (!info) {\n return 0;\n }\n const raw: number = typeof info.utilization === 'number' ? info.utilization : 0;\n const clamped: number = Math.max(0, Math.min(1, raw));\n return Math.round(clamped * 100);\n }\n\n /**\n * Threshold százalék (0..100, egész szám).\n * A küszöb, ami felett warning/limited státusz aktiválódik.\n */\n static computeThresholdPercent(info: CcSessionRateLimitInfo_Interface | null): number {\n if (!info) {\n return 0;\n }\n const raw: number = typeof info.surpassedThreshold === 'number' ? info.surpassedThreshold : 0;\n const clamped: number = Math.max(0, Math.min(1, raw));\n return Math.round(clamped * 100);\n }\n\n /**\n * Igaz, ha a jelenlegi utilization átlépte a threshold-ot (warning banner triggere).\n */\n static isOverThreshold(info: CcSessionRateLimitInfo_Interface | null): boolean {\n if (!info) {\n return false;\n }\n const util: number = typeof info.utilization === 'number' ? info.utilization : 0;\n const thr: number = typeof info.surpassedThreshold === 'number' ? info.surpassedThreshold : 1;\n return util >= thr && thr > 0;\n }\n\n /**\n * Limit scope emberbarát címke — \"Session\" (five_hour) vagy \"Weekly\" (seven_day) vagy a nyers érték.\n * A user kérte, hogy a banner egyértelműen jelezze, melyik limitről van szó.\n */\n static formatLimitScopeLabel(info: CcSessionRateLimitInfo_Interface | null): string {\n if (!info?.rateLimitType) {\n return '';\n }\n if (info.rateLimitType === CC_RateLimitDisplay_Util.SESSION_LIMIT_TYPE) {\n return 'Session';\n }\n if (info.rateLimitType === CC_RateLimitDisplay_Util.WEEKLY_LIMIT_TYPE) {\n return 'Weekly';\n }\n return info.rateLimitType;\n }\n}\n", "import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { Set_InstanceRegistryViewRow_Interface }\n from '../../../config/_modules/settings/_models/interfaces/set-instance-registry-view-row.interface';\nimport { S_CcRateLimitInfo_Component } from '../s-cc-rate-limit-info/s-cc-rate-limit-info.component';\nimport { S_InstancePresenceBadge_Component } from '../s-instance-presence-badge/s-instance-presence-badge.component';\nimport { EXS_InstancePresenceInfo_ClientInterface } from '../../../external-sessions/_services/data-services/exs-instance-presence-info.interface';\n\n/**\n * REQ-UI-INST-001 Slice 1 + REQ-CC-RATE-002 part (a) — megosztott instance detail view.\n *\n * Egy registry ViewRow mezőit jeleníti meg label/value grid-ben. Read-only view.\n * Cél: (a) a Settings táblázat sor-kibontásaként, és (b) a chip-info popup\n * tartalmaként — ugyanaz a layout / SSOT (REQ-UI-INST-001).\n *\n * **REQ-CC-RATE-002 part (a)** + **REQ-CC-USAGE-001 Slice 1 (cycle 258)**:\n * a rate-limit blokk delegálva van a `S_CcRateLimitInfo_Component`-re — egyetlen\n * forrás ezen logikának, így minden CC Sessions felület ugyanazt a komponenst\n * használja. A korábbi belső fetch + signal-állítás logika átkerült az új komponensbe.\n *\n * Template date formázás: Angular built-in `date` pipe — nincs metódushívás (CLAUDE.md).\n */\n@Component({\n selector: 'app-s-instance-detail-view',\n standalone: true,\n imports: [CommonModule, S_CcRateLimitInfo_Component, S_InstancePresenceBadge_Component],\n templateUrl: './s-instance-detail-view.component.html',\n})\n/** S_InstanceDetailView_Component class. */\nexport class S_InstanceDetailView_Component {\n\n /** A megjelenítendő ViewRow (registry + opcionális instanceData). */\n @Input({ required: true })\n row!: Set_InstanceRegistryViewRow_Interface;\n\n /**\n * REQ-INST-STATE-001 Slice 5b (cycle 695) — opcionális presence info a\n * detail-view badge-éhez. Parent-injection pattern (lásd s-instance-selector\n * jsdoc): a SZÜLŐ-komponens szolgáltatja a presence-info-t, így a detail-view\n * NEM inject-eli a `ExS_InstancePresence_DataService`-t (HttpClient chain\n * elkerülés). Ha undefined → nincs badge sor (backward-compatible).\n */\n @Input()\n presence: EXS_InstancePresenceInfo_ClientInterface | undefined = undefined;\n}\n", "<!-- REQ-UI-INST-001 Slice 1: instance detail SSOT view — label/value grid -->\n<div class=\"grid grid-cols-[minmax(8rem,auto)_1fr] gap-x-3 gap-y-2 text-xs text-neutral-200\">\n\n <!-- Registry basics -->\n <span class=\"text-neutral-500 shrink-0\">instanceKey</span>\n <span class=\"font-mono break-all\">{{ row.registry.instanceKey || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Név</span>\n <span class=\"break-all\">{{ (row.instanceData?.name?.trim()) || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Státusz</span>\n <span class=\"whitespace-nowrap\">{{ row.instanceData?.status || '—' }}</span>\n\n <!-- REQ-INST-STATE-001 Slice 5b (cycle 695): instance presence badge — csak\n akkor jelenik meg, ha a szülő szolgáltatott `presence` Input-ot\n (parent-injection pattern). -->\n @if (presence; as p) {\n <span class=\"text-neutral-500 shrink-0\">Instance presence</span>\n <span class=\"whitespace-nowrap\">\n <app-s-instance-presence-badge\n [presence]=\"p.presence\"\n [lastHeartbeatAt]=\"p.lastHeartbeatAt\"\n [wsConnected]=\"p.wsConnected\"\n />\n </span>\n }\n\n <span class=\"text-neutral-500 shrink-0\">Session presence</span>\n <span class=\"whitespace-nowrap\">\n {{ row.instanceData?.sessionStatuses?.[0]?.presence || '—' }}\n </span>\n\n <!-- Aktivitás / run -->\n @if (row.instanceData?.sessionStatuses?.[0]; as ss) {\n <span class=\"text-neutral-500 shrink-0 self-start pt-0.5\">Run / tevékenység</span>\n <span class=\"break-words\">\n <span class=\"font-mono text-[11px] text-neutral-400 block\">{{ ss.activeRunPhase || '—' }}</span>\n <span class=\"text-neutral-300\">{{ ss.activitySummary || '—' }}</span>\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Utolsó aktivitás</span>\n <span class=\"font-mono text-[11px] whitespace-nowrap\">\n {{ (ss.lastActivityAt | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Utolsó üzenet</span>\n <span class=\"break-words text-neutral-300\">{{ ss.lastMessage || '—' }}</span>\n }\n\n <!-- Hardware / hoszt / telepítés -->\n <span class=\"text-neutral-500 shrink-0\">MAC</span>\n <span class=\"font-mono break-all\">{{ row.registry.primaryMacAddress || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Install path</span>\n <span class=\"font-mono break-all\">{{ row.registry.installLocationPath || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">hostName</span>\n <span class=\"break-all\">{{ row.registry.hostName || '—' }}</span>\n\n <!-- Registry metadata (DyFM_Metadata) -->\n <span class=\"text-neutral-500 shrink-0\">registry __created</span>\n <span class=\"font-mono whitespace-nowrap\">\n {{ (row.registry.__created | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">registry __updated</span>\n <span class=\"font-mono whitespace-nowrap\">\n {{ (row.registry.__updated | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n\n\n</div>\n\n<!-- REQ-CC-RATE-002 part (a) + REQ-CC-USAGE-001 Slice 1 (cycle 258): rate-limit blokk\n a megosztott s-cc-rate-limit-info komponensben. A registry instanceKey-ből\n fetch-eli + render-eli, csak akkor látszik, ha a szerver tartott fenn state-et. -->\n<div class=\"mt-2 pt-2 border-t border-neutral-800\">\n <app-s-cc-rate-limit-info [ccapId]=\"row.registry.instanceKey || ''\" />\n</div>\n", "import { Component, computed, EventEmitter, inject, Input, OnInit, Output, Signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ExS_InstanceContext_DataService } from '../../../external-sessions/_services/exs-instance-context.data-service';\nimport { ExS_InstanceRegistryRow_Response } from '../../../external-sessions/_services/exs-instance-registry-row.interface';\nimport { EXS_InstancePresenceInfo_ClientInterface } from '../../../external-sessions/_services/data-services/exs-instance-presence-info.interface';\nimport { S_InstancePresenceBadge_Component } from '../s-instance-presence-badge/s-instance-presence-badge.component';\n\n/**\n * Instance-szelektor pill/dropdown: a session listák tetején jelenik meg,\n * lehetővé téve a felhasználó számára, hogy másik CCAP instance session-jeit kezelje.\n * A kiválasztott ccapId a `ExS_InstanceContext_DataService.selectedCcapId_$` signal-ba kerül.\n * Standalone component — bármelyik modul importálhatja.\n * REQ-PEI-016 §15.3.\n */\n@Component({\n selector: 'app-s-instance-selector',\n standalone: true,\n imports: [CommonModule, S_InstancePresenceBadge_Component],\n templateUrl: './s-instance-selector.component.html',\n host: { class: 'block' },\n})\n/** S_InstanceSelector_Component class. */\nexport class S_InstanceSelector_Component implements OnInit {\n\n readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n\n /**\n * REQ-INST-STATE-001 Slice 5b (cycle 695) — opcionális presence map a chip\n * badge-ekhez. Parent-injection pattern: a selector NEM inject-eli a\n * `ExS_InstancePresence_DataService`-t (mert az HttpClient injection chain-t\n * von vele, ami 63 spec-ben tört volna). Helyette a SZÜLŐ-komponens\n * gondoskodik a presence map szolgáltatásáról:\n *\n * ```html\n * <app-s-instance-selector [presenceMap]=\"presence_DS.instancePresenceMap_$()\" />\n * ```\n *\n * Ha nincs megadva (default empty Map) → nincs badge a chip-eken\n * (backward-compatible meglévő használókkal).\n */\n @Input()\n presenceMap: Map<string, EXS_InstancePresenceInfo_ClientInterface> = new Map();\n\n /**\n * REQ-UI-INST-CHIP-INDICATORS-001 part 2 (USER-INPUT_4 2. tétel) — Slice 1\n * plumbing: parent-injection map a chip-szintű \"van aktív session\" sárga\n * dot indikátorhoz. Kulcs az `instanceKey`, érték `true`, ha az adott\n * instance-en legalább egy CC / CCAP / CA / OC session running-like\n * státuszban van. Default empty Map → no dot → backward-compat.\n *\n * A selector NEM származtatja saját maga a flag-et, mert az session-\n * lista DS-ek injektálása ugyanazt a HttpClient cascade failure-t okozná,\n * mint cycle 695-ben a presence_DS-szel. A parent-komponens (pl. cc-\n * dashboard, ses-list, set-agent) felel a map összerakásáért és átadásáért.\n */\n @Input()\n activeSessionMap: Map<string, boolean> = new Map();\n\n /**\n * Info ikon klikk event — REQ-UI-INST-001 Slice 3.\n * A szülő komponens ezt fogja használni, hogy a megadott instance-hez popup-ot nyisson\n * a megosztott S_InstanceDetailView_Component tartalmával (Slice 4 composite wrapper).\n */\n @Output() infoRequested: EventEmitter<{ instanceKey: string }> =\n new EventEmitter<{ instanceKey: string }>();\n\n /**\n * Instance lista pill-ekhez: registry-ből, online/offline jelzéssel.\n */\n readonly instances_$: Signal<ExS_InstanceRegistryRow_Response[]> = computed(\n (): ExS_InstanceRegistryRow_Response[] => this.peiContext_DS.instanceList_$(),\n );\n\n /**\n * Aktuálisan kiválasztott ccapId.\n */\n readonly selectedCcapId_$: Signal<string> = computed(\n (): string => this.peiContext_DS.activeCcapId_$(),\n );\n\n /**\n * Lokális instance key (a „saját\" instance kiemeléshez).\n */\n readonly localKey_$: Signal<string> = computed(\n (): string => this.peiContext_DS.localInstanceKey_$(),\n );\n\n ngOnInit(): void {\n void this.peiContext_DS.initialize();\n }\n\n /**\n * Instance pill kattintás handler.\n */\n handleSelectInstance(ccapId: string): void {\n this.peiContext_DS.selectInstance(ccapId);\n }\n\n /**\n * Info ikon klikk handler — REQ-UI-INST-001 Slice 3.\n * Nem változtat selectedCcapId-t; csak a `infoRequested` Output-ot emittálja,\n * hogy a szülő egy popup-ban megjelenítse a megadott instance registry-detail-jét.\n */\n handleInfoClick(instanceKey: string): void {\n this.infoRequested.emit({ instanceKey: instanceKey });\n }\n\n /**\n * Instance megjelenítési név: hostName (utolsó 6 karakter az instanceKey-ből).\n */\n getDisplayLabel(row: ExS_InstanceRegistryRow_Response): string {\n const host: string = row.hostName ?? '';\n const keySuffix: string = (row.instanceKey ?? '').slice(-6);\n if (host) {\n return `${host} (${keySuffix})`;\n }\n return keySuffix || '?';\n }\n\n /**\n * Instance az aktuálisan kiválasztott-e.\n */\n isSelected(row: ExS_InstanceRegistryRow_Response): boolean {\n return (row.instanceKey ?? '') === this.selectedCcapId_$();\n }\n\n /**\n * Instance a lokális-e (saját szerver).\n */\n isLocal(row: ExS_InstanceRegistryRow_Response): boolean {\n return (row.instanceKey ?? '') === this.localKey_$();\n }\n\n /**\n * REQ-INST-STATE-001 Slice 5b: presence info lekérése a map-ből.\n * Ha az instanceKey nincs a map-ben (parent nem szolgáltatott vagy még\n * nem refresh-elt), `null`-t ad vissza — a template ekkor nem rendel\n * badge-t. Ez backward-compatible: a meglévő használók empty map-pel\n * → null → no badge → változatlan render.\n */\n getPresenceForRow(row: ExS_InstanceRegistryRow_Response): EXS_InstancePresenceInfo_ClientInterface | null {\n const key: string = row.instanceKey ?? '';\n if (!key) {\n return null;\n }\n return this.presenceMap.get(key) ?? null;\n }\n\n /**\n * REQ-UI-INST-CHIP-INDICATORS-001 part 2: active-session flag lekérése a\n * map-ből. Üres key vagy nincs entry → false (no dot). Backward-compat:\n * meglévő használók empty map-pel → minden row false → változatlan render.\n */\n getActiveSessionForRow(row: ExS_InstanceRegistryRow_Response): boolean {\n const key: string = row.instanceKey ?? '';\n if (!key) {\n return false;\n }\n return this.activeSessionMap.get(key) === true;\n }\n}\n", "<!-- Instance-szelektor pill sor (REQ-PEI-016 §15.3) -->\n<div class=\"flex gap-1 flex-wrap items-center\">\n <span class=\"text-[10px] text-neutral-500 mr-1 uppercase tracking-wider\">Instance:</span>\n\n @for (instance of instances_$(); track instance.instanceKey) {\n <!-- Chip + info icon csoport — REQ-UI-INST-001 Slice 3. Két külön <button>,\n mert a HTML nem engedi a button-in-button-t. REQ-INST-STATE-001\n Slice 5b (cycle 695): presence dot a chip előtt, ha a parent\n szolgáltatott `presenceMap`-et. -->\n <div class=\"flex items-center gap-0.5 group\">\n <button\n class=\"px-2 py-0.5 text-[11px] rounded-full border transition-colors flex items-center gap-1\"\n [class.border-ccapAccent]=\"isSelected(instance)\"\n [class.text-ccapAccent]=\"isSelected(instance)\"\n [ngClass]=\"{'bg-ccapAccent/10': isSelected(instance)}\"\n [class.border-neonDefault]=\"!isSelected(instance)\"\n [class.text-neutral-400]=\"!isSelected(instance)\"\n [class.hover:text-neutral-200]=\"!isSelected(instance)\"\n [class.hover:border-neutral-500]=\"!isSelected(instance)\"\n (click)=\"handleSelectInstance(instance.instanceKey ?? '')\">\n @if (getPresenceForRow(instance); as p) {\n <app-s-instance-presence-badge\n [presence]=\"p.presence\"\n [lastHeartbeatAt]=\"p.lastHeartbeatAt\"\n [wsConnected]=\"p.wsConnected\"\n [showLabel]=\"false\"\n />\n }\n {{ getDisplayLabel(instance) }}\n @if (isLocal(instance)) {\n <span class=\"ml-0.5 text-[9px] text-neutral-500\">(local)</span>\n }\n @if (getActiveSessionForRow(instance)) {\n <!-- REQ-UI-INST-CHIP-INDICATORS-001 part 2: sárga spinning dot,\n ha az adott instance-en aktív session fut. -->\n <span class=\"inline-block w-1.5 h-1.5 rounded-full bg-yellow-400 animate-pulse shrink-0\"\n title=\"Aktív session fut ezen az instance-en\"\n aria-label=\"Aktív session fut ezen az instance-en\"\n data-testid=\"s-instance-active-session-dot\"></span>\n }\n </button>\n <button\n type=\"button\"\n class=\"text-[11px] leading-none w-4 h-4 rounded-full border border-neutral-700 text-neutral-500 hover:text-ccapAccent hover:border-ccapAccent transition-colors flex items-center justify-center\"\n title=\"Instance details\"\n aria-label=\"Show instance details\"\n data-testid=\"s-instance-selector-info-btn\"\n (click)=\"handleInfoClick(instance.instanceKey ?? '')\">\n i\n </button>\n </div>\n }\n\n @if (!instances_$().length) {\n <span class=\"text-[10px] text-neutral-600 italic\">loading...</span>\n }\n</div>\n", "import { Component, computed, inject, Input, signal, Signal, WritableSignal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ExS_InstanceRegistry_DataService } from '../../../external-sessions/_services/exs-instance-registry.data-service';\nimport { ExS_RuntimeInstances_DataService } from '../../../external-sessions/_services/data-services/exs-runtime-instances.data-service';\nimport { EXS_InstancePresenceInfo_ClientInterface } from '../../../external-sessions/_services/data-services/exs-instance-presence-info.interface';\nimport { Set_InstanceRegistryViewRows_Util } from '../../../config/_modules/settings/_collections/set-instance-registry-view-rows.util';\nimport { Set_InstanceRegistryViewRow_Interface } from '../../../config/_modules/settings/_models/interfaces/set-instance-registry-view-row.interface';\nimport { S_InstanceDetailView_Component } from '../s-instance-detail-view/s-instance-detail-view.component';\nimport { S_InstanceSelector_Component } from '../s-instance-selector/s-instance-selector.component';\nimport { S_Modal_Component } from '../s-modal/s-modal.component';\n\n/**\n * REQ-UI-INST-001 Slice 4 — composite wrapper: instance chip-sor + info-popup host.\n *\n * A komponens magában tartja az info-popup state-et (`selectedInstanceKey_$`),\n * fog-adja a gyerek `S_InstanceSelector_Component` `infoRequested` eventjét, és\n * a kiválasztott instance-hez a Settings-beli SSOT ViewRow-t (`Set_InstanceRegistryViewRow_Interface`)\n * betölti a megosztott `S_InstanceDetailView_Component`-be egy `s-modal` popup-ban.\n *\n * A chip-sor main click-je (instance select) változatlanul a `S_InstanceSelector_Component`\n * belsejében marad — ez a wrapper csak a popup-ot adja hozzá. A parent komponensek\n * (`ses-list`, `cc-dashboard`, `ca-dashboard`, `oc-dashboard`, `set-agent`) Slice 5-ben állnak át\n * erre a wrapperre.\n */\n@Component({\n selector: 'app-s-instance-chip-row-with-info',\n standalone: true,\n imports: [\n CommonModule,\n S_InstanceSelector_Component,\n S_Modal_Component,\n S_InstanceDetailView_Component,\n ],\n templateUrl: './s-instance-chip-row-with-info.component.html',\n host: { class: 'block' },\n})\n/** S_InstanceChipRowWithInfo_Component class. */\nexport class S_InstanceChipRowWithInfo_Component {\n\n readonly instanceRegistry_DS: ExS_InstanceRegistry_DataService =\n inject(ExS_InstanceRegistry_DataService);\n\n readonly runtimeInstances_DS: ExS_RuntimeInstances_DataService =\n inject(ExS_RuntimeInstances_DataService);\n\n /**\n * REQ-INST-STATE-001 Slice 5b consumer wire-up + REQ-UI-INST-CHIP-INDICATORS-001\n * (cycle 706, USER-INPUT_4 user-prio): a parent komponens szolgáltathatja a\n * presence map-et, amit a wrapper továbbítja a selector + detail-view\n * gyerekkomponenseknek. Default empty Map → no badge → backward-compat\n * a 19+ consumer-spec-tel.\n *\n * A wrapper NEM inject-eli a presence_DS-t, mert az HttpClient injection\n * chain failure-t okozna a downstream specekben (cycle 698 tanulság).\n * A consumer (parent) felel a presence_DS injection-ért és a presenceMap\n * átadásáért.\n */\n @Input()\n presenceMap: Map<string, EXS_InstancePresenceInfo_ClientInterface> = new Map();\n\n /**\n * REQ-UI-INST-CHIP-INDICATORS-001 part 2 (USER-INPUT_4 2. tétel) — Slice 1:\n * parent-injection map a chip-szintű \"van aktív session\" sárga dot\n * indikátorhoz. A wrapper csak átengedi a selector gyerekkomponensnek;\n * a tényleges aggregálást a parent (cc-dashboard / ses-list / set-agent)\n * felel össze a session lista DS-ek alapján. Default empty Map → no dot.\n */\n @Input()\n activeSessionMap: Map<string, boolean> = new Map();\n\n /**\n * A popup-hoz kiválasztott instance key (null = zárt modal).\n */\n readonly selectedInstanceKey_$: WritableSignal<string | null> =\n signal<string | null>(null);\n\n /**\n * Registry + instance_data join ViewRow lista (SSOT: Set_InstanceRegistryViewRows_Util).\n * Ugyanaz az adatforrás, mint a Settings → Instances táblázat.\n */\n readonly viewRows_$: Signal<Set_InstanceRegistryViewRow_Interface[]> = computed(\n (): Set_InstanceRegistryViewRow_Interface[] =>\n Set_InstanceRegistryViewRows_Util.buildViewRows(\n this.instanceRegistry_DS.list_$(),\n this.runtimeInstances_DS.ccapInstanceList_$(),\n ),\n );\n\n /**\n * A kiválasztott instance-hez tartozó ViewRow, vagy null ha nincs egyezés.\n */\n readonly selectedRow_$: Signal<Set_InstanceRegistryViewRow_Interface | null> = computed(\n (): Set_InstanceRegistryViewRow_Interface | null => {\n const key: string | null = this.selectedInstanceKey_$();\n if (!key) {\n return null;\n }\n return this.viewRows_$().find(\n (row: Set_InstanceRegistryViewRow_Interface): boolean =>\n (row.registry.instanceKey ?? '') === key,\n ) ?? null;\n },\n );\n\n /**\n * Modal nyitva akkor és csak akkor, ha van kiválasztott ViewRow.\n */\n readonly isModalOpen_$: Signal<boolean> = computed(\n (): boolean => this.selectedRow_$() !== null,\n );\n\n /**\n * Modal cím — instance hostName vagy instanceKey-suffix.\n */\n readonly modalTitle_$: Signal<string> = computed((): string => {\n const row: Set_InstanceRegistryViewRow_Interface | null = this.selectedRow_$();\n if (!row) {\n return '';\n }\n const host: string = row.registry.hostName ?? '';\n const key: string = row.registry.instanceKey ?? '';\n if (host) {\n return `Instance — ${host}`;\n }\n return `Instance — ${key.slice(-6) || '?'}`;\n });\n\n /**\n * Gyerek chip-sor `infoRequested` handler — megnyitja a popup-ot.\n */\n handleInfoRequested(event: { instanceKey: string }): void {\n this.selectedInstanceKey_$.set(event.instanceKey);\n }\n\n /**\n * REQ-INST-STATE-001 Slice 5b: a kiválasztott row presence info-ja a\n * detail-view számára. Cached lookup a presenceMap-ből; ha nincs entry\n * → undefined (detail-view template @if nem render-eli az \"Instance\n * presence\" sort).\n */\n getPresenceForSelectedRow(): EXS_InstancePresenceInfo_ClientInterface | undefined {\n const row: Set_InstanceRegistryViewRow_Interface | null = this.selectedRow_$();\n if (!row) {\n return undefined;\n }\n const key: string = row.registry.instanceKey ?? '';\n if (!key) {\n return undefined;\n }\n return this.presenceMap.get(key);\n }\n\n /**\n * Modal close handler — bezárja a popup-ot (X / Escape / backdrop).\n */\n handleModalClosed(): void {\n this.selectedInstanceKey_$.set(null);\n }\n}\n", "<!-- REQ-UI-INST-001 Slice 4: instance chip-sor + info popup host (composite wrapper).\n REQ-INST-STATE-001 Slice 5b consumer + REQ-UI-INST-CHIP-INDICATORS-001\n (cycle 706 part 1 + cycle 709 part 2): presenceMap = chip presence dot-ok\n (zöld/sárga/szürke); activeSessionMap = sárga spinning \"aktív session\"\n dot. Mindkettő parent-injection (default empty Map → no dot). -->\n<app-s-instance-selector\n [presenceMap]=\"presenceMap\"\n [activeSessionMap]=\"activeSessionMap\"\n (infoRequested)=\"handleInfoRequested($event)\" />\n\n@if (isModalOpen_$()) {\n <app-s-modal\n [isOpen]=\"true\"\n [title]=\"modalTitle_$()\"\n [maxWidth]=\"'lg'\"\n (closed)=\"handleModalClosed()\">\n @if (selectedRow_$(); as row) {\n <app-s-instance-detail-view\n [row]=\"row\"\n [presence]=\"getPresenceForSelectedRow()\" />\n }\n </app-s-modal>\n}\n", "import { Component, computed, inject, input, InputSignal, OnInit, signal, Signal, WritableSignal } from '@angular/core';\n\nimport { SCH_Job_Response } from '../../../../scheduler/_models/interfaces/sch-job.interface';\nimport { SCH_ScheduledJobs_DataService } from '../../../../scheduler/_services/data-services/sch-scheduled-jobs.data-service';\n\n/**\n * Session schedule floating overlay — bal alul \"belógó\" gomb a chat oszlop fölött.\n *\n * Csak akkor renderel látható tartalmat, ha az adott `sessionId`-hoz tartozó\n * scheduled job (target.payload.sessionId match + enabled) van a scheduler\n * data-service-ben. Default állapot: kis tab-gomb naptár ikonnal a bal szélen.\n * Klikk: a gomb beljebb csúszik, jobbra kinyit egy panel, amin a session-höz\n * tartozó job(-ok) mellett `Trigger Now` gomb található.\n *\n * A komponens self-loading: ha `jobs_$()` üres (a user még nem járt a Schedule\n * felületen), `loadAll()`-t hív induláskor — így a kis indikátor mindig megjelenik\n * ott, ahol kell, függetlenül attól, hogy más dashboard-ot előbb látott-e a user.\n *\n * Slot-tartalom: a `[sChatColumnOverlay]` slotba projektálódik a shared\n * `S_SessionChatColumnLayout_Component`-ben — a host `absolute bottom-4 left-0`\n * a teljes chat oszlop relative ankerére települ.\n */\n@Component({\n selector: 'app-s-session-schedule-overlay',\n standalone: true,\n templateUrl: './s-session-schedule-overlay.component.html',\n host: { class: 'absolute bottom-4 left-0 z-30 pointer-events-none' },\n})\n/** S_SessionScheduleOverlay_Component class. */\nexport class S_SessionScheduleOverlay_Component implements OnInit {\n\n /** A session ID, amihez a scheduled job-okat keressük (target.payload.sessionId match). */\n readonly sessionId: InputSignal<string> = input.required<string>();\n\n private readonly scheduledJobs_DS: SCH_ScheduledJobs_DataService =\n inject(SCH_ScheduledJobs_DataService);\n\n /** Panel nyitva van-e (klikk után true → gomb beljebb + panel látszik). */\n readonly isOpen_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Per-job folyamatban-lévő trigger flagek — disable + label-csere a gombon. */\n readonly busyJobIds_$: WritableSignal<Set<string>> = signal<Set<string>>(new Set<string>());\n\n /**\n * A jelenlegi sessionId-hoz tartozó aktív (enabled) scheduled job-ok.\n * Üres lista esetén az overlay teljesen elrejti magát.\n */\n readonly sessionJobs_$: Signal<SCH_Job_Response[]> = computed(\n (): SCH_Job_Response[] => {\n const sid: string = (this.sessionId() ?? '').trim();\n if (!sid) {\n return [];\n }\n const all: SCH_Job_Response[] = this.scheduledJobs_DS.jobs_$();\n return all.filter(\n (job: SCH_Job_Response): boolean => {\n if (job.enabled === false) {\n return false;\n }\n const jobSid: string = (job.target?.payload?.sessionId ?? '').trim();\n return jobSid === sid;\n },\n );\n },\n );\n\n /** Van-e legalább 1 job — render-gate; ha nincs, semmit nem mutat az overlay. */\n readonly hasSchedule_$: Signal<boolean> = computed(\n (): boolean => this.sessionJobs_$().length > 0,\n );\n\n ngOnInit(): void {\n // Self-load: ha a scheduler list még üres, lekérjük (best-effort, nem blokkolja a UI-t).\n if (this.scheduledJobs_DS.jobs_$().length === 0) {\n void this.scheduledJobs_DS.loadAll();\n }\n }\n\n /** Tab-gomb klikk — panel toggle. */\n handleToggle(): void {\n this.isOpen_$.update((v: boolean): boolean => !v);\n }\n\n /**\n * `Trigger Now` klikk: scheduledJobs_DS.triggerNow hívás a job _id-jával.\n * A gomb a hívás idejére disabled (busy set), siker/hiba után visszakapcsol.\n */\n async handleTriggerNow(job: SCH_Job_Response): Promise<void> {\n const jobId: string = (job._id ?? '').trim();\n if (!jobId) {\n return;\n }\n if (this.busyJobIds_$().has(jobId)) {\n return;\n }\n this.busyJobIds_$.update((prev: Set<string>): Set<string> => {\n const next: Set<string> = new Set<string>(prev);\n next.add(jobId);\n return next;\n });\n try {\n await this.scheduledJobs_DS.triggerNow({ jobId: jobId, reason: 'session-overlay-manual' });\n } finally {\n this.busyJobIds_$.update((prev: Set<string>): Set<string> => {\n const next: Set<string> = new Set<string>(prev);\n next.delete(jobId);\n return next;\n });\n }\n }\n}\n", "@if (hasSchedule_$()) {\n <div class=\"flex items-end gap-2 pointer-events-auto\">\n\n <!-- Bal szélen \"belógó\" ikon-tab: closed: -translate-x-2. Open: translate-x-2.\n Neon cyan stílus a Send/Queue/Stop minta szerint (border-2, neonCyan,\n shadow-neon-glow-cyan). Count badge: amber neon, hogy figyelemfelhívó legyen. -->\n <button type=\"button\"\n (click)=\"handleToggle()\"\n [attr.aria-expanded]=\"isOpen_$()\"\n aria-label=\"Schedule\"\n [title]=\"isOpen_$() ? 'Schedule panel bezárása' : 'Schedule megjelenítése (' + sessionJobs_$().length + ' job)'\"\n class=\"relative flex items-center justify-center h-8 w-7 bg-neutral-900\n border-2 border-l-0 border-neonCyan/60 rounded-r-lg text-neonCyan\n shadow-neon-glow-cyan\n hover:border-neonCyan hover:bg-neonCyan/10\n transition-all duration-200 ease-out\"\n [class.-translate-x-2]=\"!isOpen_$()\"\n [class.translate-x-2]=\"isOpen_$()\">\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5\n a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n @if (sessionJobs_$().length > 1) {\n <span aria-hidden=\"true\"\n class=\"absolute -top-1 -right-1 min-w-[14px] h-[14px] px-[2px]\n bg-neonAmber text-neutral-900 rounded-full text-[9px]\n font-mono font-bold leading-[14px] text-center\n shadow-neon-glow-orange\">\n {{ sessionJobs_$().length > 9 ? '9+' : sessionJobs_$().length }}\n </span>\n }\n </button>\n\n <!-- Slide-out panel: csak nyitva renderelünk, hogy zárt állapotban semmi\n interaktív elem ne lógjon a chat fölé. -->\n @if (isOpen_$()) {\n <div class=\"bg-neutral-900 border-2 border-neonCyan/60 rounded-lg p-3\n flex flex-col gap-2 min-w-[16rem] max-w-xs\n shadow-neon-glow-cyan\">\n\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-[10px] uppercase tracking-wider text-neonCyan font-mono\">\n Schedule ({{ sessionJobs_$().length }})\n </span>\n <button type=\"button\"\n (click)=\"handleToggle()\"\n title=\"Bezárás\"\n aria-label=\"Schedule panel bezárása\"\n class=\"text-neutral-400 hover:text-neonCyan leading-none px-1 transition-colors\">\n ×\n </button>\n </div>\n\n @for (job of sessionJobs_$(); track job._id) {\n <div class=\"flex items-center justify-between gap-2 border-t border-neutral-800\n pt-2 first:border-t-0 first:pt-0\">\n <div class=\"flex flex-col min-w-0\">\n <span class=\"text-sm text-neutral-100 truncate\" [title]=\"job.name ?? ''\">\n {{ (job.name ?? '').trim() || 'Unnamed schedule' }}\n </span>\n @if (job.schedule?.preset) {\n <span class=\"text-[10px] text-neutral-500 font-mono\">\n {{ job.schedule?.preset }}\n </span>\n }\n </div>\n <!-- Trigger Now ikon-gomb: play / \"▶\" SVG. Neon cyan minta a Queue gombéhoz hasonlóan. -->\n <button type=\"button\"\n (click)=\"handleTriggerNow(job)\"\n [disabled]=\"busyJobIds_$().has(job._id ?? '')\"\n aria-label=\"Trigger now\"\n [title]=\"busyJobIds_$().has(job._id ?? '') ? 'Indítás folyamatban…' : 'Most futtatni (Trigger Now)'\"\n class=\"shrink-0 flex items-center justify-center w-7 h-7 rounded-full\n bg-neutral-900 border-2 border-neonCyan/60 text-neonCyan\n hover:border-neonCyan hover:bg-neonCyan/10 hover:shadow-neon-glow-cyan\n disabled:opacity-40 disabled:cursor-not-allowed\n transition-all\">\n <svg class=\"w-3.5 h-3.5\" fill=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n </button>\n </div>\n }\n\n </div>\n }\n\n </div>\n}\n", "import {\n Component,\n input,\n InputSignal,\n output,\n OutputEmitterRef,\n signal,\n WritableSignal,\n} from '@angular/core';\n\n/**\n * QuickCast floating overlay — bal alul \"belógó\" gomb a Schedule overlay fölött.\n *\n * Default állapot: kis villám-ikon tab a bal szélen. Klikk → a gomb beljebb csúszik\n * és jobbra kinyit egy panel, amin néhány rövid akciógomb található (Go, Continue,\n * OK, Proceed). Bármelyik gombra kattintva a komponens a `actionSelected` output-on\n * emittálja a kiválasztott szöveget — a parent maga küldi el a session-be (így a\n * komponens nem köti magát a CCAP `Session_DataService`-hez, működni tud későbbi\n * OC / CA / CC bekötéssel is).\n *\n * Duplikátum-védelem: az utolsó klikk után 800ms-ig minden további klikk no-op\n * (in-component throttle), miközben az adott gomb `pending` állapotban látszódik.\n *\n * Slot: `[sChatColumnOverlay]` — a shared `S_SessionChatColumnLayout_Component`\n * relative ankerére települ; host class `absolute bottom-16 left-0` → a Schedule\n * overlay (bottom-4) fölött jelenik meg.\n */\n@Component({\n selector: 'app-s-session-quickcast-overlay',\n standalone: true,\n templateUrl: './s-session-quickcast-overlay.component.html',\n host: { class: 'absolute bottom-16 left-0 z-30 pointer-events-none' },\n})\n/** S_SessionQuickCast_Overlay_Component class. */\nexport class S_SessionQuickCast_Overlay_Component {\n\n /** Akciógomb-feliratok (egyben a session-be küldött szöveg). */\n readonly actions: InputSignal<string[]> = input<string[]>([\n 'Go',\n 'Continue',\n 'OK',\n 'Proceed',\n 'Review Very Very Carefully',\n 'Ensure Documentations',\n ]);\n\n /** Egy akciógomb klikk → a parent kapja a szöveget és küldi a session-be. */\n readonly actionSelected: OutputEmitterRef<string> = output<string>();\n\n /** Panel nyitva van-e — kattintásra nyit, panel marad nyitva több akcióhoz. */\n readonly isOpen_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /**\n * Az utoljára kattintott akció (vagy null) — duplikátum-védelmi cooldown alatt.\n * Csak az adott akciógomb látszódik disabled / pending-ben, a többi kattintható.\n */\n readonly pendingAction_$: WritableSignal<string | null> = signal<string | null>(null);\n\n /** Tab-gomb klikk — panel toggle. */\n handleToggle(): void {\n this.isOpen_$.update((v: boolean): boolean => !v);\n }\n\n /**\n * Akció gomb klikk: throttle ha már fut egy másik akció (800ms cooldown), különben\n * pending-be teszi az adott akciót, kibocsátja a parent-nek és időzítve nullázza.\n */\n handleAction(action: string): void {\n if (this.pendingAction_$() !== null) {\n return;\n }\n this.pendingAction_$.set(action);\n this.actionSelected.emit(action);\n setTimeout((): void => {\n if (this.pendingAction_$() === action) {\n this.pendingAction_$.set(null);\n }\n }, 800);\n }\n}\n", "<div class=\"flex items-end gap-2 pointer-events-auto\">\n\n <!-- Bal szélen \"belógó\" ikon-gomb. Closed: -translate-x-2 (jobban balra tucked).\n Open: translate-x-2. Neon cyan stílus a Send/Queue/Stop minta szerint. -->\n <button type=\"button\"\n (click)=\"handleToggle()\"\n [attr.aria-expanded]=\"isOpen_$()\"\n aria-label=\"QuickCast\"\n [title]=\"isOpen_$() ? 'QuickCast bezárása' : 'QuickCast megnyitása'\"\n class=\"flex items-center justify-center h-8 w-7 bg-neutral-900\n border-2 border-l-0 border-neonCyan/60 rounded-r-lg text-neonCyan\n shadow-neon-glow-cyan\n hover:border-neonCyan hover:bg-neonCyan/10\n transition-all duration-200 ease-out\"\n [class.-translate-x-2]=\"!isOpen_$()\"\n [class.translate-x-2]=\"isOpen_$()\">\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n </svg>\n </button>\n\n <!-- Slide-out panel: csak nyitva renderelünk; akciógombok kompakt egy-oszlopos listában. -->\n @if (isOpen_$()) {\n <div class=\"bg-neutral-900 border-2 border-neonCyan/60 rounded-md p-1.5\n flex flex-col gap-1 min-w-[7rem] max-w-[12rem]\n shadow-neon-glow-cyan\">\n\n <div class=\"flex items-center justify-between gap-1\">\n <span class=\"text-[9px] uppercase tracking-wider text-neonCyan font-mono leading-none\">\n QC\n </span>\n <button type=\"button\"\n (click)=\"handleToggle()\"\n title=\"Bezárás\"\n aria-label=\"QuickCast panel bezárása\"\n class=\"text-neutral-400 hover:text-neonCyan leading-none text-xs px-1 transition-colors\">\n ×\n </button>\n </div>\n\n <div class=\"flex flex-col gap-1\">\n @for (action of actions(); track action) {\n <button type=\"button\"\n (click)=\"handleAction(action)\"\n [disabled]=\"pendingAction_$() === action\"\n class=\"px-1.5 py-0.5 rounded border-2 border-neonCyan/60 text-neonCyan\n text-[11px] font-medium\n hover:border-neonCyan hover:bg-neonCyan/10 hover:shadow-neon-glow-cyan\n disabled:opacity-40 disabled:cursor-not-allowed\n transition-all leading-tight\">\n {{ pendingAction_$() === action ? 'Sending…' : action }}\n </button>\n }\n </div>\n\n </div>\n }\n\n</div>\n", "import { Component, computed, inject, input, InputSignal, OnInit, signal, Signal, WritableSignal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgClass } from '@angular/common';\n\nimport { CCAP_CoordinatorSession_Response } from '../../../../../_models/interfaces/coordinator/ccap-coordinator-session.interface';\nimport { Coordinator_DataService } from '../../../../coordinator/_services/coordinator.data-service';\nimport { AIS_RegistrySsot_ControlService } from '../../../../ai-systems/_services/ais-registry-ssot.control-service';\nimport { MRg_ListItem_Response } from '../../../../ai-systems/_modules/model-registry/_services/mrg-list-item.interface';\n\n/**\n * Session coordinator floating overlay — bal alul \"belógó\" gomb a QuickCast fölött.\n *\n * A tab-gomb mindig látszik. Aktív állapot (van coordinator a sessionhöz, status nem\n * `stopped`/`completed`): neon amber border + glow. Inaktív állapot (nincs assigned\n * coordinator): szürke border, nem világít — DE továbbra is kattintható, hogy a user\n * a panelen keresztül assign-olhasson koordinátort.\n *\n * Panel — assigned ágon: provider / model / status info + Stop gomb (unassign).\n * Panel — nem assigned ágon: model dropdown + Assign gomb (`startCoordinator`).\n *\n * A komponens self-loading: ngOnInit-ben ha `globalCoordinatorsList_$` üres, hív\n * `loadAllCoordinatorsForManagementPage()`-t; az AIS registry LLM listáját is biztosítja\n * (`ensureLoaded('llm')`), hogy a dropdown azonnal feltöltődjön.\n *\n * Slot-tartalom: a `[sChatColumnOverlay]` slotba projektálódik a shared\n * `S_SessionChatColumnLayout_Component`-ben — host `absolute bottom-28 left-0`,\n * a Schedule (bottom-4) és QuickCast (bottom-16) overlay-ek FÖLÖTT.\n */\n@Component({\n selector: 'app-s-session-coordinator-overlay',\n standalone: true,\n imports: [NgClass, FormsModule],\n templateUrl: './s-session-coordinator-overlay.component.html',\n host: { class: 'absolute bottom-28 left-0 z-30 pointer-events-none' },\n})\n/** S_SessionCoordinator_Overlay_Component class. */\nexport class S_SessionCoordinator_Overlay_Component implements OnInit {\n\n /** A session ID, amihez a coordinator-t keressük / assign-oljuk. */\n readonly sessionId: InputSignal<string> = input.required<string>();\n\n private readonly coordinator_DS: Coordinator_DataService = inject(Coordinator_DataService);\n private readonly registrySsot_CS: AIS_RegistrySsot_ControlService = inject(AIS_RegistrySsot_ControlService);\n\n /** Panel nyitva van-e (klikk → toggle, panel marad nyitva amíg user be nem zárja). */\n readonly isOpen_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Assign / stop hívás folyamatban — gomb disabled + felirat-csere. */\n readonly isBusy_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Model dropdown kiválasztott értéke (`provider:::modelName` composite key). */\n readonly selectedModelKey_$: WritableSignal<string> = signal<string>('');\n\n /** AIS registry enabled LLM modellek a dropdown-hoz. */\n readonly modelOptions_$: Signal<MRg_ListItem_Response[]> = computed(\n (): MRg_ListItem_Response[] => this.registrySsot_CS.enabledLlmModels_$(),\n );\n\n /**\n * A jelenlegi sessionId-hoz tartozó assigned (aktív) coordinator (vagy null).\n * Tükrözi a `coordinatedSessionIds_$` set döntését — `stopped`/`completed` kizárva.\n */\n readonly assignedCoordinator_$: Signal<CCAP_CoordinatorSession_Response | null> = computed(\n (): CCAP_CoordinatorSession_Response | null => {\n const sid: string = (this.sessionId() ?? '').trim();\n if (!sid) {\n return null;\n }\n const ids: Set<string> = this.coordinator_DS.coordinatedSessionIds_$();\n if (!ids.has(sid)) {\n return null;\n }\n const list: CCAP_CoordinatorSession_Response[] = this.coordinator_DS.globalCoordinatorsList_$();\n return list.find((c: CCAP_CoordinatorSession_Response): boolean => {\n const csid: string = (c.sessionId ?? '').trim();\n const status: string = (c.status ?? '').trim().toLowerCase();\n return csid === sid && status !== 'stopped' && status !== 'completed';\n }) ?? null;\n },\n );\n\n /** Van-e aktív coordinator — tab-gomb és panel-mód váltó. */\n readonly isAssigned_$: Signal<boolean> = computed(\n (): boolean => this.assignedCoordinator_$() !== null,\n );\n\n ngOnInit(): void {\n // Self-load: ha üres a coordinator lista, induló fetch.\n if (this.coordinator_DS.globalCoordinatorsList_$().length === 0) {\n void this.coordinator_DS.loadAllCoordinatorsForManagementPage();\n }\n // Assign-panel-hez kell a model dropdown adat.\n this.registrySsot_CS.ensureLoaded('llm');\n }\n\n /** Tab-gomb klikk — panel toggle (akkor is nyit, ha nincs assigned coordinator). */\n handleToggle(): void {\n this.isOpen_$.update((v: boolean): boolean => !v);\n }\n\n /**\n * Assign — a kiválasztott modellt használja `startCoordinator` paramként.\n * A `selectedModelKey_$` formátuma `provider:::modelName`.\n */\n async handleAssign(): Promise<void> {\n const sid: string = (this.sessionId() ?? '').trim();\n const key: string = this.selectedModelKey_$().trim();\n if (!sid || !key || this.isBusy_$()) {\n return;\n }\n const parts: string[] = key.split(':::');\n if (parts.length !== 2) {\n return;\n }\n const providerName: string = parts[0];\n const model: string = parts[1];\n if (!providerName || !model) {\n return;\n }\n this.isBusy_$.set(true);\n try {\n await this.coordinator_DS.startCoordinator({\n sessionId: sid,\n providerName: providerName,\n model: model,\n });\n // Sikeres assign → a globális lista frissítése, hogy a coordinatedSessionIds_$\n // tükrözze az új koordinátort (a startCoordinator a coordinator_$-t állítja, de\n // a globalCoordinatorsList_$-t nem).\n void this.coordinator_DS.loadAllCoordinatorsForManagementPage();\n } finally {\n this.isBusy_$.set(false);\n }\n }\n\n /**\n * Stop — leállítja az assigned coordinator-t (`stopCoordinator`), majd frissíti\n * a globális listát hogy az UI inactive állapotba váltson.\n */\n async handleStop(): Promise<void> {\n const sid: string = (this.sessionId() ?? '').trim();\n if (!sid || this.isBusy_$()) {\n return;\n }\n this.isBusy_$.set(true);\n try {\n await this.coordinator_DS.stopCoordinator(sid);\n void this.coordinator_DS.loadAllCoordinatorsForManagementPage();\n } finally {\n this.isBusy_$.set(false);\n }\n }\n}\n", "<div class=\"flex items-end gap-2 pointer-events-auto\">\n\n <!-- Bal szélen \"belógó\" ikon-tab.\n Aktív (assigned coordinator): neon amber + glow.\n Inaktív (nincs assigned): szürke, nem világít — DE továbbra is kattintható, hogy\n a panelből assign-olhasson koordinátort a user. -->\n <button type=\"button\"\n (click)=\"handleToggle()\"\n [attr.aria-expanded]=\"isOpen_$()\"\n aria-label=\"Coordinator\"\n [title]=\"isAssigned_$()\n ? (isOpen_$() ? 'Coordinator panel bezárása' : 'Coordinator: ' + (assignedCoordinator_$()?.status ?? ''))\n : (isOpen_$() ? 'Coordinator panel bezárása' : 'Nincs coordinator — assign-oláshoz kattints')\"\n class=\"relative flex items-center justify-center h-8 w-7 bg-neutral-900\n border-2 border-l-0 rounded-r-lg\n transition-all duration-200 ease-out\"\n [ngClass]=\"isAssigned_$()\n ? ['border-neonAmber/60', 'text-neonAmber', 'shadow-neon-glow-orange',\n 'hover:border-neonAmber', 'hover:bg-neonAmber/10']\n : ['border-neutral-700', 'text-neutral-500',\n 'hover:border-neutral-500', 'hover:bg-neutral-800/50']\"\n [class.-translate-x-2]=\"!isOpen_$()\"\n [class.translate-x-2]=\"isOpen_$()\">\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polygon points=\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\" />\n </svg>\n </button>\n\n <!-- Slide-out panel. Két mód: assigned (info + Stop) vagy nem assigned (assign UI). -->\n @if (isOpen_$()) {\n <div class=\"bg-neutral-900 border-2 rounded-lg p-3\n flex flex-col gap-2 min-w-[16rem] max-w-xs\"\n [ngClass]=\"isAssigned_$()\n ? ['border-neonAmber/60', 'shadow-neon-glow-orange']\n : ['border-neutral-700']\">\n\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-[10px] uppercase tracking-wider font-mono\"\n [ngClass]=\"isAssigned_$() ? ['text-neonAmber'] : ['text-neutral-400']\">\n Coordinator\n </span>\n <button type=\"button\"\n (click)=\"handleToggle()\"\n title=\"Bezárás\"\n aria-label=\"Coordinator panel bezárása\"\n class=\"text-neutral-400 hover:text-neonAmber leading-none px-1 transition-colors\">\n ×\n </button>\n </div>\n\n @if (assignedCoordinator_$(); as coord) {\n <!-- Assigned ág: info + Stop -->\n <div class=\"flex flex-col gap-1 text-xs\">\n <div class=\"flex justify-between gap-2\">\n <span class=\"text-neutral-500 font-mono text-[10px]\">status</span>\n <span class=\"text-neutral-100\">{{ coord.status }}</span>\n </div>\n @if (coord.providerName) {\n <div class=\"flex justify-between gap-2\">\n <span class=\"text-neutral-500 font-mono text-[10px]\">provider</span>\n <span class=\"text-neutral-100 truncate\" [title]=\"coord.providerName\">\n {{ coord.providerName }}\n </span>\n </div>\n }\n @if (coord.model) {\n <div class=\"flex justify-between gap-2\">\n <span class=\"text-neutral-500 font-mono text-[10px]\">model</span>\n <span class=\"text-neutral-100 truncate\" [title]=\"coord.model\">{{ coord.model }}</span>\n </div>\n }\n @if (coord.workflowId) {\n <div class=\"flex justify-between gap-2\">\n <span class=\"text-neutral-500 font-mono text-[10px]\">workflow</span>\n <span class=\"text-neutral-100 truncate\" [title]=\"coord.workflowId\">\n {{ coord.workflowId }}\n </span>\n </div>\n }\n </div>\n <button type=\"button\"\n (click)=\"handleStop()\"\n [disabled]=\"isBusy_$()\"\n class=\"self-end px-2 py-1 rounded border-2 border-neonAmber/60 text-neonAmber\n text-xs font-medium hover:bg-neonAmber/10 hover:shadow-neon-glow-orange\n disabled:opacity-40 disabled:cursor-not-allowed transition-all\">\n {{ isBusy_$() ? 'Stopping…' : 'Stop' }}\n </button>\n } @else {\n <!-- Assign ág: model dropdown + Assign gomb -->\n <span class=\"text-[11px] text-neutral-400\">\n Nincs assigned coordinator — válassz modellt és kattints az Assign-ra.\n </span>\n <select [ngModel]=\"selectedModelKey_$()\"\n (ngModelChange)=\"selectedModelKey_$.set($event)\"\n class=\"bg-neutral-900 border border-neutral-700 rounded px-2 py-1 text-xs\n text-neutral-100 focus:outline-none focus:border-neonAmber/60\">\n <option value=\"\" disabled>— válassz modellt —</option>\n @for (m of modelOptions_$(); track m.provider + ':::' + m.modelName) {\n <option [value]=\"m.provider + ':::' + m.modelName\">\n {{ m.provider }} / {{ m.modelName }}\n </option>\n }\n </select>\n <button type=\"button\"\n (click)=\"handleAssign()\"\n [disabled]=\"!selectedModelKey_$() || isBusy_$()\"\n class=\"self-end px-2 py-1 rounded border-2 border-neonAmber/60 text-neonAmber\n text-xs font-medium hover:bg-neonAmber/10 hover:shadow-neon-glow-orange\n disabled:opacity-40 disabled:cursor-not-allowed transition-all\">\n {{ isBusy_$() ? 'Assigning…' : 'Assign' }}\n </button>\n }\n\n </div>\n }\n\n</div>\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_fsm_dynamo", "CC_RateLimitDisplay_Util", "SESSION_LIMIT_TYPE", "WEEKLY_LIMIT_TYPE", "formatResetText", "info", "resetsAt", "resetDate", "Date", "now", "diffMs", "getTime", "diffMin", "Math", "floor", "hours", "mins", "formatResetTextPrecise", "diffSec", "days", "secs", "parts", "push", "join", "computeUtilizationPercent", "raw", "utilization", "clamped", "max", "min", "round", "computeThresholdPercent", "surpassedThreshold", "isOverThreshold", "util", "thr", "formatLimitScopeLabel", "rateLimitType", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "ctx_r1", "limitScopeLabel_$", "\u0275\u0275classProp", "rl_r1", "status", "\u0275\u0275textInterpolate1", "utilizationPercent_$", "resetText_$", "\u0275\u0275pipeBind2", "receivedAt", "S_CcRateLimitInfo_Component", "claudeCode_AS", "inject", "ClaudeCode_ApiService", "_ccapId", "ccapId", "value", "trim", "refreshRateLimitState", "rateLimitInfo_$", "signal", "computed", "CC_RateLimitDisplay_Util", "computeUtilizationPercent", "formatResetText", "formatLimitScopeLabel", "set", "getRateLimitState", "then", "result", "info", "CC_RateLimitStateMapper_Util", "mapServerItemsToClientInfo", "items", "catch", "err", "DyFM_Log", "warn", "String", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "S_CcRateLimitInfo_Component_Conditional_0_Template", "\u0275\u0275conditional", "tmp_0_0", "CommonModule", "DatePipe", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275element", "\u0275\u0275advance", "\u0275\u0275property", "p_r1", "presence", "lastHeartbeatAt", "wsConnected", "\u0275\u0275textInterpolate", "ss_r2", "activeRunPhase", "activitySummary", "\u0275\u0275textInterpolate1", "\u0275\u0275pipeBind2", "lastActivityAt", "lastMessage", "S_InstanceDetailView_Component", "row", "undefined", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "S_InstanceDetailView_Component_Conditional_13_Template", "S_InstanceDetailView_Component_Conditional_18_Template", "registry", "instanceKey", "instanceData", "name", "trim", "status", "\u0275\u0275conditional", "tmp_3_0", "sessionStatuses", "tmp_5_0", "primaryMacAddress", "installLocationPath", "hostName", "__created", "__updated", "CommonModule", "DatePipe", "S_CcRateLimitInfo_Component", "S_InstancePresenceBadge_Component", "encapsulation", "\u0275\u0275element", "\u0275\u0275property", "p_r4", "presence", "lastHeartbeatAt", "wsConnected", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275listener", "tmp_11_0", "instance_r2", "\u0275\u0275restoreView", "_r1", "$implicit", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleSelectInstance", "instanceKey", "undefined", "\u0275\u0275template", "S_InstanceSelector_Component_For_4_Conditional_2_Template", "S_InstanceSelector_Component_For_4_Conditional_4_Template", "S_InstanceSelector_Component_For_4_Conditional_5_Template", "handleInfoClick", "\u0275\u0275advance", "\u0275\u0275classProp", "isSelected", "\u0275\u0275pureFunction1", "_c0", "\u0275\u0275conditional", "tmp_17_0", "getPresenceForRow", "\u0275\u0275textInterpolate1", "getDisplayLabel", "isLocal", "getActiveSessionForRow", "S_InstanceSelector_Component", "peiContext_DS", "inject", "ExS_InstanceContext_DataService", "presenceMap", "Map", "activeSessionMap", "infoRequested", "EventEmitter", "instances_$", "computed", "instanceList_$", "selectedCcapId_$", "activeCcapId_$", "localKey_$", "localInstanceKey_$", "ngOnInit", "initialize", "ccapId", "selectInstance", "emit", "row", "host", "hostName", "keySuffix", "slice", "key", "get", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275repeaterCreate", "S_InstanceSelector_Component_For_4_Template", "_forTrack0", "S_InstanceSelector_Component_Conditional_5_Template", "\u0275\u0275repeater", "length", "CommonModule", "NgClass", "S_InstancePresenceBadge_Component", "encapsulation", "\u0275\u0275element", "\u0275\u0275property", "ctx", "ctx_r1", "getPresenceForSelectedRow", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleModalClosed", "\u0275\u0275template", "S_InstanceChipRowWithInfo_Component_Conditional_1_Conditional_1_Template", "\u0275\u0275elementEnd", "modalTitle_$", "\u0275\u0275advance", "\u0275\u0275conditional", "tmp_4_0", "selectedRow_$", "S_InstanceChipRowWithInfo_Component", "instanceRegistry_DS", "inject", "ExS_InstanceRegistry_DataService", "runtimeInstances_DS", "ExS_RuntimeInstances_DataService", "presenceMap", "Map", "activeSessionMap", "selectedInstanceKey_$", "signal", "viewRows_$", "computed", "Set_InstanceRegistryViewRows_Util", "buildViewRows", "list_$", "ccapInstanceList_$", "key", "find", "row", "registry", "instanceKey", "isModalOpen_$", "host", "hostName", "slice", "handleInfoRequested", "event", "set", "get", "selectors", "hostAttrs", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "$event", "S_InstanceChipRowWithInfo_Component_Conditional_1_Template", "CommonModule", "S_InstanceSelector_Component", "S_Modal_Component", "S_InstanceDetailView_Component", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "ctx_r1", "sessionJobs_$", "length", "job_r5", "schedule", "preset", "\u0275\u0275template", "S_SessionScheduleOverlay_Component_Conditional_0_Conditional_5_For_7_Conditional_4_Template", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r4", "$implicit", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleTriggerNow", "\u0275\u0275element", "\u0275\u0275property", "tmp_12_0", "name", "undefined", "tmp_13_0", "trim", "\u0275\u0275conditional", "busyJobIds_$", "has", "tmp_15_0", "_id", "tmp_16_0", "_r3", "handleToggle", "\u0275\u0275repeaterCreate", "S_SessionScheduleOverlay_Component_Conditional_0_Conditional_5_For_7_Template", "_forTrack0", "\u0275\u0275repeater", "_r1", "S_SessionScheduleOverlay_Component_Conditional_0_Conditional_4_Template", "S_SessionScheduleOverlay_Component_Conditional_0_Conditional_5_Template", "\u0275\u0275classProp", "isOpen_$", "S_SessionScheduleOverlay_Component", "sessionId", "input", "required", "scheduledJobs_DS", "inject", "SCH_ScheduledJobs_DataService", "signal", "Set", "computed", "sid", "jobs_$", "filter", "job", "enabled", "target", "payload", "hasSchedule_$", "ngOnInit", "loadAll", "update", "v", "__async", "jobId", "prev", "next", "add", "triggerNow", "reason", "delete", "selectors", "hostAttrs", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "S_SessionScheduleOverlay_Component_Conditional_0_Template", "\u0275\u0275elementStart", "\u0275\u0275listener", "action_r4", "\u0275\u0275restoreView", "_r3", "$implicit", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleAction", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "pendingAction_$", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "_r1", "handleToggle", "\u0275\u0275repeaterCreate", "S_SessionQuickCast_Overlay_Component_Conditional_4_For_8_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275repeater", "actions", "S_SessionQuickCast_Overlay_Component", "input", "actionSelected", "output", "isOpen_$", "signal", "update", "v", "action", "set", "emit", "setTimeout", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275template", "S_SessionQuickCast_Overlay_Component_Conditional_4_Template", "\u0275\u0275classProp", "\u0275\u0275conditional", "$item", "modelName", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275property", "coord_r4", "providerName", "\u0275\u0275textInterpolate1", "model", "\u0275\u0275textInterpolate", "workflowId", "\u0275\u0275template", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_6_Conditional_6_Template", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_6_Conditional_7_Template", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_6_Conditional_8_Template", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r3", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleStop", "status", "\u0275\u0275conditional", "isBusy_$", "m_r6", "provider", "\u0275\u0275textInterpolate2", "$event", "_r5", "selectedModelKey_$", "set", "\u0275\u0275repeaterCreate", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_7_For_6_Template", "_forTrack0", "handleAssign", "\u0275\u0275repeater", "modelOptions_$", "_r1", "handleToggle", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_6_Template", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_7_Template", "isAssigned_$", "\u0275\u0275pureFunction0", "_c2", "_c3", "_c4", "_c5", "tmp_3_0", "assignedCoordinator_$", "S_SessionCoordinator_Overlay_Component", "sessionId", "input", "required", "coordinator_DS", "inject", "Coordinator_DataService", "registrySsot_CS", "AIS_RegistrySsot_ControlService", "isOpen_$", "signal", "computed", "enabledLlmModels_$", "sid", "trim", "coordinatedSessionIds_$", "has", "globalCoordinatorsList_$", "find", "c", "csid", "toLowerCase", "ngOnInit", "length", "loadAllCoordinatorsForManagementPage", "ensureLoaded", "update", "v", "__async", "key", "parts", "split", "startCoordinator", "stopCoordinator", "selectors", "hostAttrs", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "S_SessionCoordinator_Overlay_Component_Conditional_5_Template", "\u0275\u0275classProp", "tmp_2_0", "undefined", "_c0", "_c1", "NgClass", "FormsModule", "NgSelectOption", "\u0275NgSelectMultipleOption", "SelectControlValueAccessor", "NgControlStatus", "NgModel", "encapsulation"]
|
|
7
7
|
}
|