@futdevpro/ccap 1.1.3223 → 1.1.3441
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/build/_collections/update/update-verify-install.interface.d.ts +23 -0
- package/cli/build/_collections/update/update-verify-install.interface.d.ts.map +1 -0
- package/cli/build/_collections/update/update-verify-install.interface.js +3 -0
- package/cli/build/_collections/update/update-verify-install.interface.js.map +1 -0
- package/cli/build/_collections/update/update-verify-install.util.d.ts +50 -0
- package/cli/build/_collections/update/update-verify-install.util.d.ts.map +1 -0
- package/cli/build/_collections/update/update-verify-install.util.js +179 -0
- package/cli/build/_collections/update/update-verify-install.util.js.map +1 -0
- package/cli/build/_collections/update/update-verify-install.util.spec.d.ts +6 -0
- package/cli/build/_collections/update/update-verify-install.util.spec.d.ts.map +1 -0
- package/cli/build/_collections/update/update-verify-install.util.spec.js +117 -0
- package/cli/build/_collections/update/update-verify-install.util.spec.js.map +1 -0
- package/cli/build/_commands/cc-inspect-options.interface.d.ts +11 -0
- package/cli/build/_commands/cc-inspect-options.interface.d.ts.map +1 -0
- package/cli/build/_commands/cc-inspect-options.interface.js +3 -0
- package/cli/build/_commands/cc-inspect-options.interface.js.map +1 -0
- package/cli/build/_commands/cc-inspect.d.ts +33 -0
- package/cli/build/_commands/cc-inspect.d.ts.map +1 -0
- package/cli/build/_commands/cc-inspect.js +228 -0
- package/cli/build/_commands/cc-inspect.js.map +1 -0
- package/cli/build/_commands/input.d.ts +55 -0
- package/cli/build/_commands/input.d.ts.map +1 -0
- package/cli/build/_commands/input.interface.d.ts +21 -0
- package/cli/build/_commands/input.interface.d.ts.map +1 -0
- package/cli/build/_commands/input.interface.js +3 -0
- package/cli/build/_commands/input.interface.js.map +1 -0
- package/cli/build/_commands/input.js +183 -0
- package/cli/build/_commands/input.js.map +1 -0
- package/cli/build/_commands/input.spec.d.ts +8 -0
- package/cli/build/_commands/input.spec.d.ts.map +1 -0
- package/cli/build/_commands/input.spec.js +63 -0
- package/cli/build/_commands/input.spec.js.map +1 -0
- package/cli/build/_commands/skill-doc.d.ts +63 -0
- package/cli/build/_commands/skill-doc.d.ts.map +1 -0
- package/cli/build/_commands/skill-doc.interface.d.ts +19 -0
- package/cli/build/_commands/skill-doc.interface.d.ts.map +1 -0
- package/cli/build/_commands/skill-doc.interface.js +3 -0
- package/cli/build/_commands/skill-doc.interface.js.map +1 -0
- package/cli/build/_commands/skill-doc.js +421 -0
- package/cli/build/_commands/skill-doc.js.map +1 -0
- package/cli/build/_commands/skill-doc.spec.d.ts +10 -0
- package/cli/build/_commands/skill-doc.spec.d.ts.map +1 -0
- package/cli/build/_commands/skill-doc.spec.js +112 -0
- package/cli/build/_commands/skill-doc.spec.js.map +1 -0
- package/cli/build/_commands/update.d.ts.map +1 -1
- package/cli/build/_commands/update.js +59 -0
- package/cli/build/_commands/update.js.map +1 -1
- package/cli/build/_commands/update.spec.js +12 -0
- package/cli/build/_commands/update.spec.js.map +1 -1
- package/cli/build/program.js +51 -0
- package/cli/build/program.js.map +1 -1
- package/client-dist/{agent-instances.module-V7DKSWVC.js → agent-instances.module-4ADMPXCV.js} +2 -2
- package/client-dist/ca.module-RVGC3WQC.js +5 -0
- package/client-dist/{ca.module-MVE3OLDD.js.map → ca.module-RVGC3WQC.js.map} +3 -3
- package/client-dist/cc-usage-dashboard.component-OQS2BC4L.js +2 -0
- package/client-dist/cc-usage-dashboard.component-OQS2BC4L.js.map +7 -0
- package/client-dist/cc.module-SPB35JNX.js +4 -0
- package/client-dist/cc.module-SPB35JNX.js.map +7 -0
- package/client-dist/{chunk-7HSUCNW5.js → chunk-2ATSF4KC.js} +7 -3
- package/client-dist/{chunk-7HSUCNW5.js.map → chunk-2ATSF4KC.js.map} +2 -2
- package/client-dist/{chunk-CRYF37M7.js → chunk-3HJWN4W6.js} +2 -2
- package/client-dist/{chunk-D2UUXA6L.js → chunk-4EV32FFZ.js} +2 -2
- package/client-dist/{chunk-AX7QIINI.js → chunk-4H3E32UH.js} +2 -2
- package/client-dist/{chunk-KYVIZZWW.js → chunk-4LCJ4GNK.js} +19 -19
- package/client-dist/chunk-4LCJ4GNK.js.map +7 -0
- package/client-dist/{chunk-OUBNMT7L.js → chunk-5NW5UGVZ.js} +2 -2
- package/client-dist/{chunk-HLNT234H.js → chunk-AM5URSKV.js} +2 -2
- package/client-dist/{chunk-SYCUR4MY.js → chunk-AMROWQBM.js} +2 -2
- package/client-dist/{chunk-PTCJL62W.js → chunk-AR6EOT63.js} +2 -2
- package/client-dist/{chunk-OLK5MJ4J.js → chunk-B25EGDHU.js} +2 -2
- package/client-dist/{chunk-4SFV57IQ.js → chunk-BQTJHETS.js} +2 -2
- package/client-dist/{chunk-XTUQJ3W6.js → chunk-COOWEMEW.js} +2 -2
- package/client-dist/{chunk-TOFOK5W7.js → chunk-E3JXFFHE.js} +2 -2
- package/client-dist/{chunk-OQW6FXRJ.js → chunk-ESIGVRCK.js} +2 -2
- package/client-dist/{chunk-JMZKJLUE.js → chunk-EVMDNGBK.js} +2 -2
- package/client-dist/{chunk-6GSTJE3R.js → chunk-F6VMAVI5.js} +2 -2
- package/client-dist/chunk-FRVRMJQF.js +2 -0
- package/client-dist/chunk-FRVRMJQF.js.map +7 -0
- package/client-dist/chunk-G5SK3OBM.js +2 -0
- package/client-dist/chunk-G5SK3OBM.js.map +7 -0
- package/client-dist/{chunk-VO5ZLOZM.js → chunk-GBOES7QW.js} +2 -2
- package/client-dist/{chunk-2OAF6FCL.js → chunk-GTERKRTR.js} +2 -2
- package/client-dist/{chunk-7X22BWF7.js → chunk-HD4CODAD.js} +2 -2
- package/client-dist/{chunk-2EMFCVYO.js → chunk-I3FSMGMK.js} +2 -2
- package/client-dist/{chunk-VGTXKD6D.js → chunk-IFYHOOVA.js} +2 -2
- package/client-dist/{chunk-IINV7GMO.js → chunk-IUAZJ3PT.js} +2 -2
- package/client-dist/chunk-IUAZJ3PT.js.map +7 -0
- package/client-dist/{chunk-PFBJ7ZHP.js → chunk-IVLMVAVJ.js} +2 -2
- package/client-dist/chunk-KBMXCICX.js +2 -0
- package/client-dist/chunk-KBMXCICX.js.map +7 -0
- package/client-dist/{chunk-3D32XY5M.js → chunk-KIKSSJKL.js} +2 -2
- package/client-dist/{chunk-U2EBQMSE.js → chunk-LPNQ5PRN.js} +2 -2
- package/client-dist/{chunk-4JKJRGJX.js → chunk-MO37SUK2.js} +2 -2
- package/client-dist/{chunk-BC7H7K5F.js → chunk-MYVEHPA7.js} +2 -2
- package/client-dist/{chunk-JEHOIN7Y.js → chunk-N55GOFVU.js} +2 -2
- package/client-dist/{chunk-R5WCLLO5.js → chunk-NNUHTCXG.js} +2 -2
- package/client-dist/{chunk-TP2634XD.js → chunk-OKTAADTQ.js} +2 -2
- package/client-dist/{chunk-DURLBTAJ.js → chunk-ONS7XQYD.js} +2 -2
- package/client-dist/chunk-OYB7GU43.js +2 -0
- package/client-dist/chunk-OYB7GU43.js.map +7 -0
- package/client-dist/{chunk-7SAFEFWU.js → chunk-PVSQ5ZEZ.js} +14 -14
- package/client-dist/{chunk-7SAFEFWU.js.map → chunk-PVSQ5ZEZ.js.map} +3 -3
- package/client-dist/{chunk-PG7CJVEP.js → chunk-PZN2OI7U.js} +2 -2
- package/client-dist/{chunk-C4JDDOQR.js → chunk-QUD3BEHN.js} +2 -2
- package/client-dist/{chunk-DJVWZQNB.js → chunk-QUEYZI42.js} +2 -2
- package/client-dist/chunk-R2IBKJ4K.js +2 -0
- package/client-dist/chunk-R2IBKJ4K.js.map +7 -0
- package/client-dist/{chunk-3TMVRWAB.js → chunk-RAHCHCWR.js} +2 -2
- package/client-dist/{chunk-SQWHJTFE.js → chunk-RCCUSGIN.js} +2 -2
- package/client-dist/{chunk-GADEZIXI.js → chunk-RL5LPTPO.js} +2 -2
- package/client-dist/{chunk-5C3KCWYF.js → chunk-SDVXPGB7.js} +2 -2
- package/client-dist/{chunk-CLQC45GB.js → chunk-TNLHQRL7.js} +2 -2
- package/client-dist/{chunk-JZHYGU3K.js → chunk-TWK7BOB7.js} +2 -2
- package/client-dist/{chunk-ILG5WENK.js → chunk-U62YECNK.js} +2 -2
- package/client-dist/{chunk-RSPVPEQ4.js → chunk-UOC6UYZT.js} +2 -2
- package/client-dist/{chunk-AI7WKHRQ.js → chunk-VDQROW6J.js} +2 -2
- package/client-dist/{chunk-3PA6BJES.js → chunk-VMXIXZV2.js} +2 -2
- package/client-dist/chunk-VQ4GBHH7.js +2 -0
- package/client-dist/chunk-VQ4GBHH7.js.map +7 -0
- package/client-dist/{chunk-CFHQS3UB.js → chunk-WRI37SX4.js} +2 -2
- package/client-dist/{chunk-MS5OG7JD.js → chunk-XLSL262Q.js} +2 -2
- package/client-dist/{chunk-SLSTIBOT.js → chunk-Y6V4NGLU.js} +2 -2
- package/client-dist/{chunk-SLSTIBOT.js.map → chunk-Y6V4NGLU.js.map} +1 -1
- package/client-dist/{chunk-3PLWSRB4.js → chunk-YN4H6MW2.js} +2 -2
- package/client-dist/{chunk-OEEQNIJG.js → chunk-Z5FUR5ZW.js} +2 -2
- package/client-dist/{chunk-MY75XBDH.js → chunk-ZCHMBEHT.js} +2 -2
- package/client-dist/{chunk-LIQPVSH3.js → chunk-ZPJ6KYMA.js} +2 -2
- package/client-dist/consultant.module-UWXLFLDS.js +3 -0
- package/client-dist/{consultant.module-WUUVSVHL.js.map → consultant.module-UWXLFLDS.js.map} +3 -3
- package/client-dist/{crd.module-IRGVOYD5.js → crd.module-2I2BDC3A.js} +2 -2
- package/client-dist/{dashboard.module-NPPSZHO6.js → dashboard.module-X2A6LOTA.js} +2 -2
- package/client-dist/{do.module-GKQTJOXR.js → do.module-CJWEKZ4L.js} +2 -2
- package/client-dist/{document-library.module-JK3K7QNJ.js → document-library.module-WJSFZPA7.js} +2 -2
- package/client-dist/{embedding-eval.module-LVESAMPN.js → embedding-eval.module-FOALIAQW.js} +2 -2
- package/client-dist/{embedding-registry.module-3ECACZZ3.js → embedding-registry.module-SS646R4H.js} +2 -2
- package/client-dist/err.module-SR4ZAOQH.js +6 -0
- package/client-dist/err.module-SR4ZAOQH.js.map +7 -0
- package/client-dist/{feedback.module-AHG7462C.js → feedback.module-T3MZQKXV.js} +2 -2
- package/client-dist/{host-runtime-mcp.module-XFUI7B65.js → host-runtime-mcp.module-FBZZGQGD.js} +2 -2
- package/client-dist/index.html +2 -2
- package/client-dist/{live-dev-pipeline.module-OMK67DGM.js → live-dev-pipeline.module-OKQYFSJL.js} +2 -2
- package/client-dist/{logs.module-FWACECVV.js → logs.module-SHHOD5XW.js} +2 -2
- package/client-dist/{main-H4AYPQ2E.js → main-L3WW2VTB.js} +4 -4
- package/client-dist/{main-H4AYPQ2E.js.map → main-L3WW2VTB.js.map} +3 -3
- package/client-dist/{master-control-remote-poc.module-GQ6RMPRB.js → master-control-remote-poc.module-ITXHYU5K.js} +2 -2
- package/client-dist/{mobile-app.module-YSARX6QC.js → mobile-app.module-Q3W3PU4O.js} +2 -2
- package/client-dist/{model-registry.module-SJOUSDXZ.js → model-registry.module-DGN55LTQ.js} +2 -2
- package/client-dist/oc.module-DYSATWML.js +3 -0
- package/client-dist/{oc.module-CDGBJ6I4.js.map → oc.module-DYSATWML.js.map} +3 -3
- package/client-dist/orc.module-NQO6OLPK.js +2 -0
- package/client-dist/orc.module-NQO6OLPK.js.map +7 -0
- package/client-dist/{project-management.module-LWZLB6VU.js → project-management.module-T7NBKKSR.js} +2 -2
- package/client-dist/project-source-routed.module-YO54LEGN.js +2 -0
- package/client-dist/{scheduler.module-VH647PWD.js → scheduler.module-4CMBOTGZ.js} +2 -2
- package/client-dist/session.module-V4SRPQRZ.js +12 -0
- package/client-dist/session.module-V4SRPQRZ.js.map +7 -0
- package/client-dist/{set.module-XHJR4XUD.js → set.module-32SVEWTG.js} +5 -5
- package/client-dist/{set.module-XHJR4XUD.js.map → set.module-32SVEWTG.js.map} +3 -3
- package/client-dist/{setup.module-RRQZ62B2.js → setup.module-5T6MCMR4.js} +2 -2
- package/client-dist/styles-CTUT42AQ.css +2 -0
- package/client-dist/styles-CTUT42AQ.css.map +7 -0
- package/client-dist/{terminals.module-QKIQS6FH.js → terminals.module-AQO2TVO2.js} +2 -2
- package/client-dist/{voice-notes-poc.module-K3FB6OIB.js → voice-notes-poc.module-EI2HY7YJ.js} +2 -2
- package/client-dist/{wfs.module-JVR53PGJ.js → wfs.module-AHRZE5WB.js} +2 -2
- package/package.json +1 -1
- package/server/build/src/_collections/core/ccap-post-services-bootstrap.util.d.ts.map +1 -1
- package/server/build/src/_collections/core/ccap-post-services-bootstrap.util.js +5 -0
- package/server/build/src/_collections/core/ccap-post-services-bootstrap.util.js.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/agent-core/_modules/run/_services/control-services/run-flow.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/agent-core/_modules/run/_services/control-services/run-flow.control-service.js +8 -1
- package/server/build/src/_modules/ccap-agent/_modules/agent-core/_modules/run/_services/control-services/run-flow.control-service.js.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.d.ts +11 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.d.ts.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.js +20 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.js.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.d.ts +65 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.d.ts.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.js +222 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.js.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.d.ts +7 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.d.ts.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.js +213 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.js.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.d.ts +58 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.d.ts.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.js +3 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.js.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_routes/error-handling.controller.d.ts.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_routes/error-handling.controller.js +14 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_routes/error-handling.controller.js.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.d.ts +35 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.d.ts.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.js +80 -0
- package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.js.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.d.ts +47 -0
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.d.ts.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.js +100 -0
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.js.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.spec.d.ts +2 -0
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.spec.d.ts.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.spec.js +162 -0
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.spec.js.map +1 -0
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.d.ts +2 -0
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.js +16 -0
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.js.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/tts/voc-tts.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/tts/voc-tts.control-service.js +22 -4
- package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/tts/voc-tts.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.d.ts +58 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.js +64 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-list-item-serialize.util.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-list-item-serialize.util.js +3 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-list-item-serialize.util.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.d.ts +17 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.js +65 -5
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.spec.d.ts +9 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.spec.d.ts.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.spec.js +213 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.spec.js.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.d.ts +47 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.d.ts.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.js +71 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.js.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.d.ts +36 -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 +93 -6
- 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 +85 -21
- 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/_collections/utils/lifecycle/cc-recovery.util.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-recovery.util.js +81 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-recovery.util.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.js +14 -2
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/claude-code.controller.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/claude-code.controller.js +19 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/claude-code.controller.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.d.ts +4 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.js +6 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.d.ts +13 -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 +21 -0
- 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-adapter.interface.d.ts +33 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.interface.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-event.data-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-event.data-service.js +10 -3
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-event.data-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.d.ts +54 -0
- 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 +163 -75
- 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-monitoring.control-service.d.ts +6 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.js +32 -9
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.spec.js +20 -2
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.spec.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.d.ts +25 -0
- 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 +301 -1
- 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/status/cc-status-transition.control-service.d.ts +20 -3
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js +62 -7
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.spec.js +10 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.spec.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.d.ts +11 -18
- 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 +40 -48
- 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/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.d.ts +8 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.js +13 -2
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/openclaw/_services/core/oc-event.data-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/openclaw/_services/core/oc-event.data-service.js +8 -3
- package/server/build/src/_modules/external-sessions/_modules/openclaw/_services/core/oc-event.data-service.js.map +1 -1
- package/server/build/src/_modules/messaging/_services/control-services/providers/msg-client-socket-server.service.d.ts.map +1 -1
- package/server/build/src/_modules/messaging/_services/control-services/providers/msg-client-socket-server.service.js +12 -0
- package/server/build/src/_modules/messaging/_services/control-services/providers/msg-client-socket-server.service.js.map +1 -1
- package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.d.ts +10 -0
- package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.d.ts.map +1 -1
- package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.js +18 -0
- package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.js.map +1 -1
- package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.spec.js +32 -3
- package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.spec.js.map +1 -1
- package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.d.ts +42 -0
- package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.d.ts.map +1 -0
- package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.js +73 -0
- package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.js.map +1 -0
- package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.d.ts +10 -0
- package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.d.ts.map +1 -0
- package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.js +89 -0
- package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.js.map +1 -0
- package/server/build/src/_modules/peer-instance/_models/interfaces/pei-bootstrap-attempt.interface.d.ts +8 -1
- package/server/build/src/_modules/peer-instance/_models/interfaces/pei-bootstrap-attempt.interface.d.ts.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.d.ts +10 -0
- package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.d.ts.map +1 -0
- package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.js +74 -0
- package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.js.map +1 -0
- package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.d.ts +37 -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 +117 -0
- 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-dispatch.control-service.d.ts +11 -0
- package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.js +11 -1
- package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.js.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.spec.js +65 -0
- package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.spec.js.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-event-relay.control-service.spec.d.ts +15 -0
- package/server/build/src/_modules/peer-instance/_services/pei-event-relay.control-service.spec.d.ts.map +1 -0
- package/server/build/src/_modules/peer-instance/_services/pei-event-relay.control-service.spec.js +122 -0
- package/server/build/src/_modules/peer-instance/_services/pei-event-relay.control-service.spec.js.map +1 -0
- 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 +24 -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-ws-client.control-service.d.ts +30 -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 +91 -2
- package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.js.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-ws-server.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/peer-instance/_services/pei-ws-server.control-service.js +10 -0
- package/server/build/src/_modules/peer-instance/_services/pei-ws-server.control-service.js.map +1 -1
- package/server/build/src/_modules/scheduler/_collections/utils/sch-jitter.util.spec.js +4 -2
- package/server/build/src/_modules/scheduler/_collections/utils/sch-jitter.util.spec.js.map +1 -1
- package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-diagnostics-result.interface.d.ts +9 -0
- 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/_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 +1 -0
- package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.js.map +1 -1
- package/client-dist/ca.module-MVE3OLDD.js +0 -5
- package/client-dist/cc-usage-dashboard.component-F7S4MG67.js +0 -2
- package/client-dist/cc-usage-dashboard.component-F7S4MG67.js.map +0 -7
- package/client-dist/cc.module-GOXYWYW2.js +0 -4
- package/client-dist/cc.module-GOXYWYW2.js.map +0 -7
- package/client-dist/chunk-4GPIIB3D.js +0 -2
- package/client-dist/chunk-4GPIIB3D.js.map +0 -7
- package/client-dist/chunk-EGRHWZRV.js +0 -1
- package/client-dist/chunk-EGRHWZRV.js.map +0 -7
- package/client-dist/chunk-GZDOO5NB.js +0 -2
- package/client-dist/chunk-GZDOO5NB.js.map +0 -7
- package/client-dist/chunk-IINV7GMO.js.map +0 -7
- package/client-dist/chunk-KYVIZZWW.js.map +0 -7
- package/client-dist/chunk-MZLFEWAN.js +0 -2
- package/client-dist/chunk-MZLFEWAN.js.map +0 -7
- package/client-dist/chunk-QPEW5PI4.js +0 -2
- package/client-dist/chunk-QPEW5PI4.js.map +0 -7
- package/client-dist/consultant.module-WUUVSVHL.js +0 -3
- package/client-dist/err.module-B666YXQT.js +0 -6
- package/client-dist/err.module-B666YXQT.js.map +0 -7
- package/client-dist/oc.module-CDGBJ6I4.js +0 -3
- package/client-dist/orc.module-5S7GBE4E.js +0 -2
- package/client-dist/orc.module-5S7GBE4E.js.map +0 -7
- package/client-dist/project-source-routed.module-FDCQCUUB.js +0 -2
- package/client-dist/session.module-AKETH5O2.js +0 -12
- package/client-dist/session.module-AKETH5O2.js.map +0 -7
- package/client-dist/styles-KHQAHCL5.css +0 -2
- package/client-dist/styles-KHQAHCL5.css.map +0 -7
- /package/client-dist/{agent-instances.module-V7DKSWVC.js.map → agent-instances.module-4ADMPXCV.js.map} +0 -0
- /package/client-dist/{chunk-CRYF37M7.js.map → chunk-3HJWN4W6.js.map} +0 -0
- /package/client-dist/{chunk-D2UUXA6L.js.map → chunk-4EV32FFZ.js.map} +0 -0
- /package/client-dist/{chunk-AX7QIINI.js.map → chunk-4H3E32UH.js.map} +0 -0
- /package/client-dist/{chunk-OUBNMT7L.js.map → chunk-5NW5UGVZ.js.map} +0 -0
- /package/client-dist/{chunk-HLNT234H.js.map → chunk-AM5URSKV.js.map} +0 -0
- /package/client-dist/{chunk-SYCUR4MY.js.map → chunk-AMROWQBM.js.map} +0 -0
- /package/client-dist/{chunk-PTCJL62W.js.map → chunk-AR6EOT63.js.map} +0 -0
- /package/client-dist/{chunk-OLK5MJ4J.js.map → chunk-B25EGDHU.js.map} +0 -0
- /package/client-dist/{chunk-4SFV57IQ.js.map → chunk-BQTJHETS.js.map} +0 -0
- /package/client-dist/{chunk-XTUQJ3W6.js.map → chunk-COOWEMEW.js.map} +0 -0
- /package/client-dist/{chunk-TOFOK5W7.js.map → chunk-E3JXFFHE.js.map} +0 -0
- /package/client-dist/{chunk-OQW6FXRJ.js.map → chunk-ESIGVRCK.js.map} +0 -0
- /package/client-dist/{chunk-JMZKJLUE.js.map → chunk-EVMDNGBK.js.map} +0 -0
- /package/client-dist/{chunk-6GSTJE3R.js.map → chunk-F6VMAVI5.js.map} +0 -0
- /package/client-dist/{chunk-VO5ZLOZM.js.map → chunk-GBOES7QW.js.map} +0 -0
- /package/client-dist/{chunk-2OAF6FCL.js.map → chunk-GTERKRTR.js.map} +0 -0
- /package/client-dist/{chunk-7X22BWF7.js.map → chunk-HD4CODAD.js.map} +0 -0
- /package/client-dist/{chunk-2EMFCVYO.js.map → chunk-I3FSMGMK.js.map} +0 -0
- /package/client-dist/{chunk-VGTXKD6D.js.map → chunk-IFYHOOVA.js.map} +0 -0
- /package/client-dist/{chunk-PFBJ7ZHP.js.map → chunk-IVLMVAVJ.js.map} +0 -0
- /package/client-dist/{chunk-3D32XY5M.js.map → chunk-KIKSSJKL.js.map} +0 -0
- /package/client-dist/{chunk-U2EBQMSE.js.map → chunk-LPNQ5PRN.js.map} +0 -0
- /package/client-dist/{chunk-4JKJRGJX.js.map → chunk-MO37SUK2.js.map} +0 -0
- /package/client-dist/{chunk-BC7H7K5F.js.map → chunk-MYVEHPA7.js.map} +0 -0
- /package/client-dist/{chunk-JEHOIN7Y.js.map → chunk-N55GOFVU.js.map} +0 -0
- /package/client-dist/{chunk-R5WCLLO5.js.map → chunk-NNUHTCXG.js.map} +0 -0
- /package/client-dist/{chunk-TP2634XD.js.map → chunk-OKTAADTQ.js.map} +0 -0
- /package/client-dist/{chunk-DURLBTAJ.js.map → chunk-ONS7XQYD.js.map} +0 -0
- /package/client-dist/{chunk-PG7CJVEP.js.map → chunk-PZN2OI7U.js.map} +0 -0
- /package/client-dist/{chunk-C4JDDOQR.js.map → chunk-QUD3BEHN.js.map} +0 -0
- /package/client-dist/{chunk-DJVWZQNB.js.map → chunk-QUEYZI42.js.map} +0 -0
- /package/client-dist/{chunk-3TMVRWAB.js.map → chunk-RAHCHCWR.js.map} +0 -0
- /package/client-dist/{chunk-SQWHJTFE.js.map → chunk-RCCUSGIN.js.map} +0 -0
- /package/client-dist/{chunk-GADEZIXI.js.map → chunk-RL5LPTPO.js.map} +0 -0
- /package/client-dist/{chunk-5C3KCWYF.js.map → chunk-SDVXPGB7.js.map} +0 -0
- /package/client-dist/{chunk-CLQC45GB.js.map → chunk-TNLHQRL7.js.map} +0 -0
- /package/client-dist/{chunk-JZHYGU3K.js.map → chunk-TWK7BOB7.js.map} +0 -0
- /package/client-dist/{chunk-ILG5WENK.js.map → chunk-U62YECNK.js.map} +0 -0
- /package/client-dist/{chunk-RSPVPEQ4.js.map → chunk-UOC6UYZT.js.map} +0 -0
- /package/client-dist/{chunk-AI7WKHRQ.js.map → chunk-VDQROW6J.js.map} +0 -0
- /package/client-dist/{chunk-3PA6BJES.js.map → chunk-VMXIXZV2.js.map} +0 -0
- /package/client-dist/{chunk-CFHQS3UB.js.map → chunk-WRI37SX4.js.map} +0 -0
- /package/client-dist/{chunk-MS5OG7JD.js.map → chunk-XLSL262Q.js.map} +0 -0
- /package/client-dist/{chunk-3PLWSRB4.js.map → chunk-YN4H6MW2.js.map} +0 -0
- /package/client-dist/{chunk-OEEQNIJG.js.map → chunk-Z5FUR5ZW.js.map} +0 -0
- /package/client-dist/{chunk-MY75XBDH.js.map → chunk-ZCHMBEHT.js.map} +0 -0
- /package/client-dist/{chunk-LIQPVSH3.js.map → chunk-ZPJ6KYMA.js.map} +0 -0
- /package/client-dist/{crd.module-IRGVOYD5.js.map → crd.module-2I2BDC3A.js.map} +0 -0
- /package/client-dist/{dashboard.module-NPPSZHO6.js.map → dashboard.module-X2A6LOTA.js.map} +0 -0
- /package/client-dist/{do.module-GKQTJOXR.js.map → do.module-CJWEKZ4L.js.map} +0 -0
- /package/client-dist/{document-library.module-JK3K7QNJ.js.map → document-library.module-WJSFZPA7.js.map} +0 -0
- /package/client-dist/{embedding-eval.module-LVESAMPN.js.map → embedding-eval.module-FOALIAQW.js.map} +0 -0
- /package/client-dist/{embedding-registry.module-3ECACZZ3.js.map → embedding-registry.module-SS646R4H.js.map} +0 -0
- /package/client-dist/{feedback.module-AHG7462C.js.map → feedback.module-T3MZQKXV.js.map} +0 -0
- /package/client-dist/{host-runtime-mcp.module-XFUI7B65.js.map → host-runtime-mcp.module-FBZZGQGD.js.map} +0 -0
- /package/client-dist/{live-dev-pipeline.module-OMK67DGM.js.map → live-dev-pipeline.module-OKQYFSJL.js.map} +0 -0
- /package/client-dist/{logs.module-FWACECVV.js.map → logs.module-SHHOD5XW.js.map} +0 -0
- /package/client-dist/{master-control-remote-poc.module-GQ6RMPRB.js.map → master-control-remote-poc.module-ITXHYU5K.js.map} +0 -0
- /package/client-dist/{mobile-app.module-YSARX6QC.js.map → mobile-app.module-Q3W3PU4O.js.map} +0 -0
- /package/client-dist/{model-registry.module-SJOUSDXZ.js.map → model-registry.module-DGN55LTQ.js.map} +0 -0
- /package/client-dist/{project-management.module-LWZLB6VU.js.map → project-management.module-T7NBKKSR.js.map} +0 -0
- /package/client-dist/{project-source-routed.module-FDCQCUUB.js.map → project-source-routed.module-YO54LEGN.js.map} +0 -0
- /package/client-dist/{scheduler.module-VH647PWD.js.map → scheduler.module-4CMBOTGZ.js.map} +0 -0
- /package/client-dist/{setup.module-RRQZ62B2.js.map → setup.module-5T6MCMR4.js.map} +0 -0
- /package/client-dist/{terminals.module-QKIQS6FH.js.map → terminals.module-AQO2TVO2.js.map} +0 -0
- /package/client-dist/{voice-notes-poc.module-K3FB6OIB.js.map → voice-notes-poc.module-EI2HY7YJ.js.map} +0 -0
- /package/client-dist/{wfs.module-JVR53PGJ.js.map → wfs.module-AHRZE5WB.js.map} +0 -0
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{a as $e,b as bt}from"./chunk-DURLBTAJ.js";import{a as ee,b as _e,c as ue,d as vt}from"./chunk-HLNT234H.js";import"./chunk-EGRHWZRV.js";import{a as xt}from"./chunk-TP2634XD.js";import{a as St}from"./chunk-4JKJRGJX.js";import{a as Z}from"./chunk-Q2PKIGLB.js";import{a as dt,b as ce,c as Ae,d as pe,e as L}from"./chunk-XTUQJ3W6.js";import{a as st}from"./chunk-CLQC45GB.js";import{a as ye}from"./chunk-YRVQSWSZ.js";import{a as nt}from"./chunk-TOFOK5W7.js";import{a as ot,b as le}from"./chunk-IINV7GMO.js";import"./chunk-QPEW5PI4.js";import"./chunk-2EMFCVYO.js";import{a as re}from"./chunk-5C3KCWYF.js";import"./chunk-OLK5MJ4J.js";import{g as Ct}from"./chunk-7HSUCNW5.js";import"./chunk-CRYF37M7.js";import{a as ut}from"./chunk-7JUIBZEE.js";import{a as pt,b as _t,c as mt}from"./chunk-C7XPBJTG.js";import{b as R,f as ft,g as ht}from"./chunk-JMZKJLUE.js";import"./chunk-WPHEQXWB.js";import{c as lt}from"./chunk-VGTXKD6D.js";import{a as de,b as at,c as rt,d as we}from"./chunk-DJVWZQNB.js";import"./chunk-MZLFEWAN.js";import"./chunk-OEEQNIJG.js";import"./chunk-Q2NVIOCY.js";import{a as ct}from"./chunk-U2EBQMSE.js";import"./chunk-SYCUR4MY.js";import"./chunk-R5WCLLO5.js";import"./chunk-V3VQWJQL.js";import"./chunk-6GSTJE3R.js";import{a as ge}from"./chunk-JZHYGU3K.js";import"./chunk-ZBTWQZNB.js";import{a as ae}from"./chunk-FLAJXIYW.js";import{c as Xe,f as Je,i as Ge,n as Ye,o as Ze,p as et,v as tt}from"./chunk-EO4DNTT4.js";import{k as K}from"./chunk-KYVIZZWW.js";import{a as D}from"./chunk-5UPNU54P.js";import{j as it}from"./chunk-7SAFEFWU.js";import"./chunk-SLSTIBOT.js";import{$a as k,Aa as G,Ba as Y,C as v,Cb as Qe,D as O,E as Re,Eb as oe,Fa as d,Fb as je,G as U,Ga as q,Gb as se,Ha as g,Ia as te,J as u,K as m,Kb as Ke,L as Le,M as Ve,Pa as ie,Qa as ne,Ra as E,T as Oe,Ua as be,Va as Ne,W as Ue,Z as l,_ as Fe,a as ve,aa as h,ab as P,b as Te,ca as We,da as b,ga as C,ha as qe,hb as M,ia as z,ib as Be,ja as I,jb as ze,k as $,la as S,mb as j,oa as H,pa as Q,q as Ie,qa as a,r as Ee,ra as r,sa as w,ua as y,ub as He,v as ke,va as f,wa as p,y as Pe,z as Me,za as J}from"./chunk-TBMJSIBB.js";var A="ccap-caSession",x=class{static saveStatusFilter(o){D.writeString(`${A}:statusFilter`,o)}static loadStatusFilter(){return D.readString(`${A}:statusFilter`)??""}static saveShowArchived(o){D.writeBoolean(`${A}:showArchived`,o)}static loadShowArchived(){return D.readBoolean(`${A}:showArchived`,!1)}static saveLastWorkspacePath(o){D.writeString(`${A}:lastWorkspacePath`,o)}static loadLastWorkspacePath(){return D.readString(`${A}:lastWorkspacePath`)??""}static saveLastLabel(o){D.writeString(`${A}:lastLabel`,o)}static loadLastLabel(){return D.readString(`${A}:lastLabel`)??""}static savePromptDraft(o,e){ee.saveDraft(A,o,e)}static loadPromptDraft(o){return ee.loadDraft(A,o)}static clearPromptDraft(o){ee.clearDraft(A,o)}static hasPromptDraft(o){return ee.hasDraft(A,o)}static savePanelOpen(o,e){D.writeBoolean(`${A}:panelOpen:${o}`,e)}static loadPanelOpen(o,e){return D.readBoolean(`${A}:panelOpen:${o}`,e)}static savePanelWidth(o,e){D.writeNumber(`${A}:panelWidth:${o}`,e)}static loadPanelWidth(o,e){return D.readNumber(`${A}:panelWidth:${o}`,e)}static saveLastSessionId(o){D.writeString(`${A}:lastSessionId`,o)}static loadLastSessionId(){return D.readString(`${A}:lastSessionId`)??""}static saveShowAgentUpdates(o){D.writeBoolean(`${A}:showAgentUpdates`,o)}static loadShowAgentUpdates(){return D.readBoolean(`${A}:showAgentUpdates`,!0)}static saveShowSessionStatus(o){D.writeBoolean(`${A}:showSessionStatus`,o)}static loadShowSessionStatus(){return D.readBoolean(`${A}:showSessionStatus`,!0)}};var F=(()=>{class n{ca_DS=v(L);isTimelinePanelOpen_$=h(x.loadPanelOpen("timeline",!1));isMetadataPanelOpen_$=h(x.loadPanelOpen("metadata",!1));isTerminating_$=h(!1);isStopping_$=h(!1);isShowSessionStatus_$=h(x.loadShowSessionStatus());isShowAgentUpdates_$=h(x.loadShowAgentUpdates());handleToggleTimeline(){let e=!this.isTimelinePanelOpen_$();this.isTimelinePanelOpen_$.set(e),x.savePanelOpen("timeline",e)}handleToggleMetadata(){let e=!this.isMetadataPanelOpen_$();this.isMetadataPanelOpen_$.set(e),x.savePanelOpen("metadata",e)}handleToggleSessionStatus(){let e=!this.isShowSessionStatus_$();this.isShowSessionStatus_$.set(e),x.saveShowSessionStatus(e)}handleToggleAgentUpdates(){let e=!this.isShowAgentUpdates_$();this.isShowAgentUpdates_$.set(e),x.saveShowAgentUpdates(e)}handleStopExecution(){return $(this,null,function*(){let e=this.ca_DS.selectedSession_$();if(!e||this.isStopping_$())return;let i=e.sessionId??"";if(i){this.isStopping_$.set(!0);try{yield this.ca_DS.stopExecution(i)}catch{}finally{this.isStopping_$.set(!1)}}})}handleTerminate(){return $(this,null,function*(){let e=this.ca_DS.selectedSession_$();if(!e||this.isTerminating_$())return;let i=e.sessionId??"";if(i){this.isTerminating_$.set(!0);try{yield this.ca_DS.terminateSession(i)}catch{}finally{this.isTerminating_$.set(!1)}}})}static \u0275fac=function(i){return new(i||n)};static \u0275prov=Pe({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var zt=(n,o)=>o.path;function Ht(n,o){if(n&1&&(a(0,"div",5)(1,"span",35),d(2),r(),a(3,"span",35),d(4),r()()),n&2){let e=o;l(),z("bg-emerald-950",e.isAcpConnected)("text-emerald-300",e.isAcpConnected)("bg-neutral-800",!e.isAcpConnected)("text-neutral-500",!e.isAcpConnected),l(),g(" ACP ",e.isAcpConnected?"connected":"offline"," "),l(),z("bg-sky-950",e.loadSessionSupported)("text-sky-300",e.loadSessionSupported)("bg-neutral-800",!e.loadSessionSupported)("text-neutral-500",!e.loadSessionSupported),l(),g(" session/load ",e.loadSessionSupported?"yes":"no"," ")}}function Qt(n,o){if(n&1&&(a(0,"div",18),w(1,"app-ccap-error-display",36),r()),n&2){let e=p();l(),C("error",e.ca_DS.sessionsLoadError_$())}}function jt(n,o){n&1&&(a(0,"div",20),d(1,"Loading\u2026"),r())}function Kt(n,o){if(n&1){let e=y();a(0,"div",21)(1,"span",37),d(2,"No sessions"),r(),a(3,"button",38),f("click",function(){u(e);let t=p();return m(t.handleOpenCreateDialog())}),d(4," Create session "),r()()}}function Xt(n,o){if(n&1){let e=y();a(0,"app-s-session-select",39),f("selected",function(t){u(e);let s=p();return m(s.handleSelectSession(t))})("contextMenu",function(t){u(e);let s=p();return m(s.handleRowContextMenu(t))})("scheduleIndicatorClicked",function(t){u(e);let s=p();return m(s.handleScheduleIndicatorClick(t))})("coordinatorIndicatorClicked",function(t){u(e);let s=p();return m(s.handleCoordinatorIndicatorClick(t))}),r()}if(n&2){let e=p();C("rows",e.sessionRowViews_$())("activeId",e.ca_DS.activeSessionId_$())("showWorkspacePath",!0)("showPromptCount",!0)("hideSearch",!0)}}function Jt(n,o){if(n&1&&(a(0,"option",42),d(1),r()),n&2){let e=o.$implicit;C("value",e.path),l(),te("",e.label," \u2014 ",e.path,"")}}function Gt(n,o){if(n&1){let e=y();a(0,"select",40),f("ngModelChange",function(t){u(e);let s=p();return m(s.handlePathOptionChange(t))}),a(1,"option",41),d(2,"Select a path..."),r(),H(3,Jt,2,3,"option",42,zt),a(5,"option",43),d(6,"Custom path..."),r()()}if(n&2){let e=p();C("ngModel",e.selectedPathOption_$()),l(3),Q(e.newAgentSessionWorkspace_DS.workspacePathPickerOptions_$())}}function Yt(n,o){if(n&1&&(a(0,"div",30),w(1,"app-ccap-error-display",44),r()),n&2){let e=p();l(),C("error",e.createSessionError_$())}}function Zt(n,o){n&1&&d(0," \u2713 Link copied ")}function ei(n,o){n&1&&d(0," Copy failed ")}function ti(n,o){n&1&&d(0," Copy link ")}function ii(n,o){if(n&1){let e=y();a(0,"div",45),f("click",function(){u(e);let t=p();return m(t.handleCloseCtxMenu())}),r(),a(1,"div",46)(2,"button",47),f("click",function(){u(e);let t=p();return m(t.handleCtxCopyLink())}),b(3,Zt,1,0)(4,ei,1,0)(5,ti,1,0),r(),a(6,"button",48),f("click",function(){u(e);let t=p();return m(t.handleCtxToggleArchive())}),d(7),r()()}if(n&2){let e,i=p();l(),qe("left",i.ctxMenuPos_$().x,"px")("top",i.ctxMenuPos_$().y,"px"),l(),C("disabled",i.linkCopyState_$()!=="idle"),l(),S((e=i.linkCopyState_$())==="copied"?3:e==="failed"?4:5),l(4),g(" ",o.isArchived?"Unarchive":"Archive"," ")}}var gt=(()=>{class n{ca_DS=v(L);newAgentSessionWorkspace_DS=v(st);peiContext_DS=v(re);scheduledJobs_DS=v(St);coordinator_DS=v(xt);router=v(se);globalError_CS=v(it);instanceChangeEffect=ze(()=>{let e=this.peiContext_DS.activeCcapId_$(),i=this.showArchived_$();e&&Be(()=>{this.ca_DS.loadSessions({includeArchived:i||void 0})})});statusFilter_$=h("");searchQuery_$=h("");isCreateDialogOpen_$=h(!1);newSessionWorkspacePath_$=h("");newSessionLabel_$=h("");selectedPathOption_$=h("");isCreating_$=h(!1);createSessionError_$=h(null);showArchived_$=h(!1);isSyncing_$=h(!1);sessionSelected=Oe();ngOnInit(){let e=x.loadStatusFilter();e&&this.statusFilter_$.set(e),this.showArchived_$.set(x.loadShowArchived()),this.peiContext_DS.ensureInitialized().then(()=>{this.ca_DS.loadSessions({includeArchived:this.showArchived_$()})}),this.scheduledJobs_DS.loadAll(),this.coordinator_DS.loadAllCoordinatorsForManagementPage()}handleStatusFilterChange(e){this.statusFilter_$.set(e),x.saveStatusFilter(e)}handleToggleShowArchived(){let e=!this.showArchived_$();this.showArchived_$.set(e),x.saveShowArchived(e),this.ca_DS.loadSessions({includeArchived:e})}filteredSessions_$=M(()=>{let e=this.searchQuery_$(),i=this.statusFilter_$().trim();return[...this.ca_DS.sessions_$().filter(s=>!s.sessionId||i&&s.status!==i?!1:de.includesText(s.label,e)||de.includesText(s.workspacePath,e)||de.includesText(s.lastPrompt,e))].sort((s,c)=>n.listFreshnessSortMs(c)-n.listFreshnessSortMs(s))});static listFreshnessSortMs(e){let i=e.lastActivityAt;if(typeof i=="string"&&i.length>0){let t=Date.parse(i);if(!isNaN(t))return t}return 0}sessionRowViews_$=M(()=>{let e=this.scheduledJobs_DS.scheduledSessionIds_$(),i=this.coordinator_DS.coordinatedSessionIds_$();return this.filteredSessions_$().map(t=>({id:t.sessionId??"",label:t.label||t.sessionId||"",status:t.status??"",statusColorClass:ye.resolve(t.status),workspacePath:t.workspacePath,isArchived:!!t.isArchived,lastActivityAt:t.lastActivityAt,promptCount:t.promptCount,isRunning:ye.isRunning(t.status),hasSchedule:e.has(t.sessionId??""),hasCoordinator:i.has(t.sessionId??""),hasDraft:x.hasPromptDraft(t.sessionId??"")}))});handleSelectSession(e){if(!e)return;let i=this.peiContext_DS.activeCcapId_$(),t=i?["/ca-session",i,e]:["/ca-session",e];this.router.navigate(t),this.sessionSelected.emit()}handleOpenCreateDialog(){return $(this,null,function*(){if(this.createSessionError_$.set(null),this.isCreateDialogOpen_$.set(!0),yield this.newAgentSessionWorkspace_DS.refreshWorkspacePathPickerOptions(),!this.newSessionWorkspacePath_$()){let i=this.newAgentSessionWorkspace_DS.resolveInitialWorkspacePath({lastWorkspacePath:x.loadLastWorkspacePath()});i&&(this.newSessionWorkspacePath_$.set(i),this.selectedPathOption_$.set(i))}let e=x.loadLastLabel();e&&this.newSessionLabel_$.set(e)})}handlePathOptionChange(e){this.selectedPathOption_$.set(e),e&&e!=="custom"&&this.newSessionWorkspacePath_$.set(e)}handleCloseCreateDialog(){this.createSessionError_$.set(null),this.isCreateDialogOpen_$.set(!1),this.newSessionWorkspacePath_$.set(""),this.newSessionLabel_$.set(""),this.selectedPathOption_$.set("")}handleConfirmCreate(){return $(this,null,function*(){let e=this.newSessionWorkspacePath_$().trim();if(e){this.isCreating_$.set(!0);try{x.saveLastWorkspacePath(e),x.saveLastLabel(this.newSessionLabel_$().trim());let i=yield this.ca_DS.createSession({workspacePath:e,label:this.newSessionLabel_$().trim()||void 0});if(this.handleCloseCreateDialog(),i.length>0){let t=this.peiContext_DS.activeCcapId_$(),s=t?["/ca-session",t,i]:["/ca-session",i];this.router.navigate(s)}}catch(i){this.createSessionError_$.set(i)}finally{this.isCreating_$.set(!1)}}})}ctxMenuSession_$=h(null);ctxMenuPos_$=h({x:0,y:0});handleRowContextMenu(e){let i=this.filteredSessions_$().find(t=>t.sessionId===e.id);i&&(this.ctxMenuSession_$.set(i),this.ctxMenuPos_$.set({x:e.event.clientX,y:e.event.clientY}))}linkCopyState_$=h("idle");handleCloseCtxMenu(){this.ctxMenuSession_$.set(null),this.linkCopyState_$.set("idle")}handleCtxCopyLink(){return $(this,null,function*(){let e=this.ctxMenuSession_$();if(!e?.sessionId)return;let i=this.peiContext_DS.activeCcapId_$(),t=i?`/ca-session/${i}/${e.sessionId}`:`/ca-session/${e.sessionId}`,s=`${window.location.origin}${t}`,c=yield this.globalError_CS.copyToClipboard(s);this.linkCopyState_$.set(c.ok?"copied":"failed"),setTimeout(()=>{this.handleCloseCtxMenu()},700)})}schedulePopupSessionId_$=h(null);handleScheduleIndicatorClick(e){this.schedulePopupSessionId_$.set(e)}handleCloseSchedulePopup(){this.schedulePopupSessionId_$.set(null)}coordinatorPopupSessionId_$=h(null);handleCoordinatorIndicatorClick(e){this.coordinatorPopupSessionId_$.set(e)}handleCloseCoordinatorPopup(){this.coordinatorPopupSessionId_$.set(null)}handleCtxToggleArchive(){return $(this,null,function*(){let e=this.ctxMenuSession_$();if(!e?.sessionId)return;let i=e.sessionId;this.handleCloseCtxMenu(),yield this.handleArchiveRow(i)})}handleSyncFromAgent(){return $(this,null,function*(){this.isSyncing_$.set(!0);try{yield this.ca_DS.syncFromAgent()}finally{this.isSyncing_$.set(!1)}})}handleArchiveRow(e){return $(this,null,function*(){if(!e)return;let i=this.filteredSessions_$().find(c=>c.sessionId===e);if(!i)return;let t=this.ca_DS.activeSessionId_$()===e,s=i.isArchived!==!0;try{yield this.ca_DS.setSessionArchived({sessionId:e,isArchived:s}),t&&s&&!this.showArchived_$()&&this.router.navigate(["/ca-session"])}catch{}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=O({type:n,selectors:[["app-ccap-ca-dashboard"]],hostAttrs:[1,"flex","flex-col","flex-1","min-h-0","overflow-hidden"],outputs:{sessionSelected:"sessionSelected"},decls:56,vars:25,consts:[[1,"shrink-0","px-2","py-1.5","border-b","border-neonDefault","flex","flex-col","gap-1"],[1,"flex","items-center","gap-1"],[1,"text-xs","font-semibold","text-neutral-300","flex-1"],["type","button","title","Sync session list from Agent",1,"px-1.5","py-0.5","text-xs","border","border-neutral-600","text-neutral-400","hover:bg-neutral-700","rounded","shrink-0",3,"click","disabled"],["type","button",1,"px-1.5","py-0.5","text-xs","border","border-neonDefault","text-neutral-300","hover:bg-neutral-700","rounded","shrink-0",3,"click"],[1,"flex","flex-wrap","items-center","gap-1","text-[9px]","text-neutral-500"],[1,"shrink-0","px-2","py-1.5","border-b","border-neutral-800","flex","flex-col","gap-1"],["type","text","placeholder","Search\u2026",1,"w-full","px-2","py-1","text-xs","bg-neutral-800","border","border-neutral-700","text-neutral-200","rounded",3,"input","value"],[1,"flex-1","px-1.5","py-0.5","text-xs","bg-neutral-800","border","border-neutral-700","text-neutral-300","rounded",3,"change","value"],["value",""],["value","waiting-input"],["value","running"],["value","connecting"],["value","disconnected"],["value","errored"],["value","completed"],["value","terminated"],["type","button",1,"px-1.5","py-0.5","text-xs","border","rounded","shrink-0",3,"click"],[1,"shrink-0","px-2","py-1.5"],[1,"flex-1","overflow-y-auto"],[1,"flex","items-center","justify-center","py-8","text-xs","text-neutral-500"],[1,"flex","flex-col","items-center","justify-center","py-8","gap-2"],["kind","ca",3,"rows","activeId","showWorkspacePath","showPromptCount","hideSearch"],[3,"closed","isOpen","title","maxWidth","bodyFlexColumn","closeOnBackdropClick"],[1,"flex","flex-col","flex-1","min-h-0","gap-3"],[1,"shrink-0"],[1,"text-xs","text-neutral-400","block","mb-1"],[1,"w-full","bg-neutral-900","text-neutral-300","text-xs","rounded","px-2","py-1.5","border","border-neonDefault","focus:border-neonCyan","focus:outline-none","mb-1.5",3,"ngModel"],["type","text","placeholder","/path/to/workspace",1,"w-full","bg-neutral-900","text-neutral-200","text-sm","rounded","px-2","py-1.5","border","border-neonDefault","focus:border-neonCyan","focus:outline-none",3,"ngModelChange","ngModel"],["type","text","placeholder","My session",1,"w-full","bg-neutral-900","text-neutral-200","text-sm","rounded","px-2","py-1.5","border","border-neonDefault","focus:border-neonCyan","focus:outline-none",3,"ngModelChange","ngModel"],[1,"flex-1","min-h-0","overflow-y-auto","overscroll-contain","rounded-md","border","border-neonRed/30","pr-0.5"],[1,"shrink-0","flex","justify-end","gap-2","pt-2","border-t","border-neutral-700/80"],["type","button",1,"px-3","py-1.5","text-xs","border","border-neonDefault","text-neutral-300","hover:bg-neutral-700","rounded","transition-colors",3,"click","disabled"],["type","button",1,"px-3","py-1.5","text-xs","border","border-ccapAccent","text-ccapAccent","hover:bg-ccapAccent","hover:text-white","disabled:opacity-50","rounded","transition-colors",3,"click","disabled"],[3,"closed","sessionId","isOpen"],[1,"px-1","py-0.5","rounded"],["sourceLabelOverride","CA session list",1,"block",3,"error"],[1,"text-xs","text-neutral-500"],["type","button",1,"px-2","py-1","text-xs","border","border-neonDefault","text-neutral-300","rounded",3,"click"],["kind","ca",3,"selected","contextMenu","scheduleIndicatorClicked","coordinatorIndicatorClicked","rows","activeId","showWorkspacePath","showPromptCount","hideSearch"],[1,"w-full","bg-neutral-900","text-neutral-300","text-xs","rounded","px-2","py-1.5","border","border-neonDefault","focus:border-neonCyan","focus:outline-none","mb-1.5",3,"ngModelChange","ngModel"],["value","","disabled",""],[3,"value"],["value","custom"],["sourceLabelOverride","New CA session",1,"block","min-h-0",3,"error"],[1,"fixed","inset-0","z-40",3,"click"],[1,"fixed","z-50","min-w-[140px]","bg-neutral-900","border","border-neutral-700","rounded-lg","shadow-xl","py-1","text-xs"],[1,"w-full","text-left","px-3","py-1.5","text-neutral-300","hover:bg-neutral-800","transition-colors",3,"click","disabled"],[1,"w-full","text-left","px-3","py-1.5","text-neutral-300","hover:bg-neutral-800","transition-colors",3,"click"]],template:function(i,t){if(i&1&&(a(0,"div",0)(1,"div",1)(2,"span",2),d(3,"CA session"),r(),a(4,"button",3),f("click",function(){return t.handleSyncFromAgent()}),d(5," Sync "),r(),a(6,"button",4),f("click",function(){return t.handleOpenCreateDialog()}),d(7," + New "),r()(),b(8,Ht,5,18,"div",5),r(),a(9,"div",6)(10,"input",7),f("input",function(c){return t.searchQuery_$.set(c.target.value)}),r(),a(11,"div",1)(12,"select",8),f("change",function(c){return t.handleStatusFilterChange(c.target.value)}),a(13,"option",9),d(14,"All statuses"),r(),a(15,"option",10),d(16,"Waiting"),r(),a(17,"option",11),d(18,"Running"),r(),a(19,"option",12),d(20,"Connecting"),r(),a(21,"option",13),d(22,"Disconnected"),r(),a(23,"option",14),d(24,"Errored"),r(),a(25,"option",15),d(26,"Completed"),r(),a(27,"option",16),d(28,"Terminated"),r()(),a(29,"button",17),f("click",function(){return t.handleToggleShowArchived()}),d(30," Arch "),r()()(),b(31,Qt,2,1,"div",18),a(32,"div",19),b(33,jt,2,0,"div",20)(34,Kt,5,0,"div",21)(35,Xt,1,5,"app-s-session-select",22),r(),a(36,"app-s-modal",23),f("closed",function(){return t.handleCloseCreateDialog()}),a(37,"div",24)(38,"div",25)(39,"label",26),d(40,"Workspace Path *"),r(),b(41,Gt,7,1,"select",27),a(42,"input",28),f("ngModelChange",function(c){return t.newSessionWorkspacePath_$.set(c)}),r()(),a(43,"div",25)(44,"label",26),d(45,"Label (optional)"),r(),a(46,"input",29),f("ngModelChange",function(c){return t.newSessionLabel_$.set(c)}),r()(),b(47,Yt,2,1,"div",30),a(48,"div",31)(49,"button",32),f("click",function(){return t.handleCloseCreateDialog()}),d(50," Cancel "),r(),a(51,"button",33),f("click",function(){return t.handleConfirmCreate()}),d(52),r()()()(),a(53,"app-sch-schedule-popup",34),f("closed",function(){return t.handleCloseSchedulePopup()}),r(),a(54,"app-crd-info-popup",34),f("closed",function(){return t.handleCloseCoordinatorPopup()}),r(),b(55,ii,8,7)),i&2){let s,c;l(4),C("disabled",t.isSyncing_$()),l(4),S((s=t.ca_DS.mirrorRuntime_$())?8:-1,s),l(2),C("value",t.searchQuery_$()),l(2),C("value",t.statusFilter_$()),l(17),I(t.showArchived_$()?"border-ccapAccent/60 text-ccapAccent/80 bg-ccapAccent/10":"border-neutral-700 text-neutral-500"),l(2),S(t.ca_DS.sessionsLoadError_$()?31:-1),l(2),S(t.ca_DS.sessionsLoading_$()?33:!t.filteredSessions_$().length&&!t.ca_DS.sessionsLoadError_$()?34:35),l(3),C("isOpen",t.isCreateDialogOpen_$())("title","New CA session")("maxWidth","lg")("bodyFlexColumn",!0)("closeOnBackdropClick",!1),l(5),S(t.newAgentSessionWorkspace_DS.workspacePathPickerOptions_$().length?41:-1),l(),C("ngModel",t.newSessionWorkspacePath_$()),l(4),C("ngModel",t.newSessionLabel_$()),l(),S(t.createSessionError_$()?47:-1),l(2),C("disabled",t.isCreating_$()),l(2),C("disabled",t.isCreating_$()||!t.newSessionWorkspacePath_$()),l(),g(" ",t.isCreating_$()?"Creating...":"Create"," "),l(),C("sessionId",t.schedulePopupSessionId_$())("isOpen",t.schedulePopupSessionId_$()!==null),l(),C("sessionId",t.coordinatorPopupSessionId_$())("isOpen",t.coordinatorPopupSessionId_$()!==null),l(),S((c=t.ctxMenuSession_$())?55:-1,c)}},dependencies:[Ze,et,Xe,Ye,Je,Ge,K,ae,_e,ue,lt],encapsulation:2})}return n})();var X=(()=>{class n{transform(e){switch(e??""){case"running":return"bg-yellow-500";case"waiting-input":return"bg-green-500";case"connecting":return"bg-yellow-500";case"creating":return"bg-yellow-400";case"completed":return"bg-blue-500";case"errored":return"bg-red-500";case"terminated":return"bg-red-700";case"disconnected":return"bg-amber-700";default:return"bg-neutral-600"}}static \u0275fac=function(i){return new(i||n)};static \u0275pipe=U({name:"caSessionStatusColor",type:n,pure:!0})}return n})();function si(n,o){n&1&&w(0,"div",5)}function ai(n,o){if(n&1){let e=y();a(0,"button",13),f("click",function(){u(e);let t=p();return m(t.detailUi_DS.handleToggleMetadata())}),d(1," Info "),r()}if(n&2){let e=p();I(e.detailUi_DS.isMetadataPanelOpen_$()?"border-neonCyan/50 text-neonCyan bg-neonCyan/10":"border-neutral-700 text-neutral-500 hover:text-neutral-300")}}function ri(n,o){n&1&&w(0,"span",17)}function li(n,o){if(n&1&&(w(0,"span",16),k(1,"caSessionStatusColor"),b(2,ri,1,0,"span",17)),n&2){p(2);let e=E(1);C("ngClass",P(1,3,e.session.status))("title",e.session.status),l(2),S(e.isLive?2:-1)}}function di(n,o){n&1&&(a(0,"span",15),d(1,"Loading\u2026"),r())}function ci(n,o){if(n&1&&(a(0,"span",14),d(1),r(),b(2,li,3,5)(3,di,2,0,"span",15)),n&2){p();let e=E(1);C("title",e.title),l(),g(" ",e.title," "),l(),S(e.session?2:-1),l(),S(e.isLoading&&!e.session?3:-1)}}function pi(n,o){if(n&1){let e=y();w(0,"div",19),a(1,"button",20),f("click",function(){u(e);let t=p(2);return m(t.detailUi_DS.handleStopExecution())}),d(2),r()}if(n&2){let e=p(2);l(),C("disabled",e.detailUi_DS.isStopping_$()),l(),g(" ",e.detailUi_DS.isStopping_$()?"Stopping\u2026":"Stop"," ")}}function _i(n,o){if(n&1){let e=y();a(0,"button",18),f("click",function(){u(e);let t=p();return m(t.detailUi_DS.handleToggleTimeline())}),d(1," Timeline "),r(),b(2,pi,3,2)}if(n&2){let e=p(),i=E(1);I(e.detailUi_DS.isTimelinePanelOpen_$()?"border-neonCyan/50 text-neonCyan bg-neonCyan/10":"border-neutral-700 text-neutral-500 hover:text-neutral-300"),l(2),S(i.isLive?2:-1)}}var Dt=(()=>{class n{ca_DS=v(L);detailUi_DS=v(F);caTopBar_$=M(()=>{let e=this.ca_DS.activeSessionId_$();if(!e)return null;let i=this.ca_DS.selectedSessionLoading_$(),t=this.ca_DS.selectedSession_$(),c=this.ca_DS.sessions_$().find(xe=>xe.sessionId===e),_=t?.sessionId===e,T=_?t:c??null,W=T&&(T.label||T.sessionId)||e,B=T?.status??"";return{title:W,session:T,isLoading:i,showActions:_&&!i,isLive:B==="running"||B==="waiting-input"}});sidebarWidth_$=h(320);isSidebarOpen_$=h(!0);isResizing_$=h(!1);ngOnInit(){let e=x.loadPanelWidth("sidebar",320);this.sidebarWidth_$.set(Math.max(200,Math.min(600,e))),this.isSidebarOpen_$.set(x.loadPanelOpen("sidebar",!0))}handleSidebarResizeStart(e){let i=e.clientX,t=this.sidebarWidth_$();this.isResizing_$.set(!0),Z.attachUntilPointerUp({startEvent:e,onMove:s=>{let c=s.clientX-i,_=Math.max(200,Math.min(600,t+c));this.sidebarWidth_$.set(_)},onEnd:()=>{this.isResizing_$.set(!1),x.savePanelWidth("sidebar",this.sidebarWidth_$())}})}handleToggleSidebar(){this.isSidebarOpen_$.update(e=>!e),x.savePanelOpen("sidebar",this.isSidebarOpen_$())}handleSessionSelectedFromDashboard(){window.innerWidth<640&&this.isSidebarOpen_$.set(!1)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=O({type:n,selectors:[["app-ccap-ca-shell"]],hostAttrs:[1,"flex","min-h-0","w-full","flex-1","flex-col","overflow-hidden"],decls:19,vars:14,consts:[[1,"flex","min-h-0","w-full","flex-1","flex-col","overflow-hidden"],["sSessionToolbarLeft","",1,"flex","items-center","gap-1","min-w-0"],["type","button",1,"px-2","py-1","text-xs","border","border-neonDefault","text-neutral-300","hover:bg-neutral-700","rounded","flex","items-center","gap-1","shrink-0",3,"click"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round",1,"w-3","h-3","shrink-0","transition-transform","duration-150"],["points","6 9 12 15 18 9"],[1,"w-px","h-4","bg-neutral-700","shrink-0","self-center","mx-0.5"],["type","button",1,"px-2","py-1","text-xs","border","rounded","transition-colors","shrink-0",3,"class"],["sSessionToolbarCenter","",1,"flex","items-center","justify-center","gap-2","min-w-0","max-w-[min(100vw-10rem,48rem)]"],["sSessionToolbarRight","",1,"flex","items-center","gap-1","min-w-0","flex-wrap","justify-end"],[3,"sidebarResizeStart","isSidebarOpen","sidebarWidthPx","isResizing"],["sSessionShellSidebar","",1,"flex","flex-col","overflow-hidden","h-full"],[3,"sessionSelected"],["sSessionShellMain","",1,"flex","min-h-0","flex-1","flex-col","overflow-hidden","[&>router-outlet]:contents"],["type","button",1,"px-2","py-1","text-xs","border","rounded","transition-colors","shrink-0",3,"click"],[1,"text-sm","font-semibold","text-neutral-200","truncate","text-center","min-w-0","max-w-[min(240px,35vw)]",3,"title"],[1,"text-[10px]","text-neutral-500","shrink-0"],[1,"w-2","h-2","rounded-full","shrink-0",3,"ngClass","title"],["title","Live",1,"w-2","h-2","rounded-full","bg-green-500","animate-pulse","shrink-0"],["type","button",1,"px-2","py-1","text-xs","border","rounded","transition-colors",3,"click"],[1,"hidden","sm:block","w-px","h-4","bg-neutral-700","shrink-0","self-center"],["type","button",1,"px-2","py-1","text-xs","border","border-neonRed/50","text-red-300","hover:bg-red-950/40","rounded","transition-colors","shrink-0","disabled:opacity-40",3,"click","disabled"]],template:function(i,t){if(i&1){let s=y();a(0,"div",0),ie(1),a(2,"app-s-session-shell-toolbar")(3,"div",1)(4,"button",2),f("click",function(){return u(s),m(t.handleToggleSidebar())}),Le(),a(5,"svg",3),w(6,"polyline",4),r(),d(7," CA Sessions "),r(),b(8,si,1,0,"div",5)(9,ai,2,2,"button",6),r(),Ve(),a(10,"div",7),b(11,ci,4,4),r(),a(12,"div",8),b(13,_i,3,3),r()(),a(14,"app-s-resizable-session-shell-layout",9),f("sidebarResizeStart",function(_){return u(s),m(t.handleSidebarResizeStart(_))}),a(15,"div",10)(16,"app-ccap-ca-dashboard",11),f("sessionSelected",function(){return u(s),m(t.handleSessionSelectedFromDashboard())}),r()(),a(17,"div",12),w(18,"router-outlet"),r()()()}if(i&2){z("select-none",t.isResizing_$()),l();let s=ne(t.caTopBar_$());l(4),z("rotate-90",t.isSidebarOpen_$())("-rotate-90",!t.isSidebarOpen_$()),l(3),S(s?8:-1),l(),S(s&&s.showActions?9:-1),l(2),S(s?11:-1),l(2),S(s&&s.showActions?13:-1),l(),C("isSidebarOpen",t.isSidebarOpen_$())("sidebarWidthPx",t.sidebarWidth_$())("isResizing",t.isResizing_$())}},dependencies:[j,je,pt,_t,gt,X],encapsulation:2})}return n})();var me=class{static pickDefaultSessionId(o){let e=o.sessions;if(!e.length)return"";let i=o.lastSavedSessionId.trim();if(i.length>0){let s=e.find(c=>c.sessionId===i);if(s?.sessionId&&(o.includeArchived||s.isArchived!==!0))return s.sessionId}let t=e.find(s=>!!s.sessionId&&s.isArchived!==!0);return t?.sessionId?t.sessionId:o.includeArchived?e.find(c=>!!c.sessionId)?.sessionId??"":""}};var Tt=(()=>{class n{static toolCallUpdateBriefSubtype="tool_call_update";static filterForAgentUpdatesVisibility(e){let i=e.messages,t=i.length-1,s=[];for(let c=0;c<i.length;c++){let _=i[c];if(_.type!=="status-update"){s.push(_);continue}!e.isShowAgentUpdates||_.briefSubtype===n.toolCallUpdateBriefSubtype&&c!==t||s.push(_)}return s}}return n})();var fe=class n{static pairToolResultsIntoToolStarts(o){let e=new Map;for(let s=0;s<o.length;s++){let c=o[s];if(c.type!=="tool"||c.briefSubtype!=="tool_call")continue;let _=pe.tryParseStableListKey(c.listKey);_===null||_.role!=="start"||e.set(_.toolCallId,s)}if(!e.size)return o;let i=new Set,t=o.map(s=>ve({},s));for(let s=0;s<t.length;s++){let c=t[s];if(c.briefSubtype!=="tool_call_update")continue;let _=pe.tryParseStableListKey(c.listKey);if(_===null)continue;let T=c.type==="tool-result"&&_.role==="result",W=c.type==="error"&&_.role==="error";if(!T&&!W)continue;let B=e.get(_.toolCallId);if(B===void 0)continue;let Se=n.buildPairedExpandableRawOutput({rawData:c.rawData,fallbackText:c.text}),xe={text:c.text,expandableContent:Se.length?Se:c.text,rawData:c.rawData,isError:W?!0:void 0};t[B]=Te(ve({},t[B]),{pairedResult:xe,isToolCallFailedIndicator:W?!0:t[B].isToolCallFailedIndicator}),i.add(s)}return i.size?t.filter((s,c)=>!i.has(c)):t}static buildPairedExpandableRawOutput(o){let e=o.rawData;if(e===void 0)return o.fallbackText;let i=e.update;if(i===null||typeof i!="object"||Array.isArray(i))return n.stringifyRecordOrFallback({value:e,fallbackText:o.fallbackText});let t=[],s=Reflect.get(i,"content");if(Array.isArray(s)&&s.length){let _=pe.formatContent(s);_.length&&t.push(_)}let c=Reflect.get(i,"rawOutput");if(c!==void 0)try{let _=JSON.stringify(c,null,2);we.looksLikeJson(_)?t.push(we.formatJson(_)):t.push(_)}catch{}return t.length?t.join(`
|
|
2
|
-
|
|
3
|
-
`):n.stringifyRecordOrFallback({value:e,fallbackText:o.fallbackText})}static stringifyRecordOrFallback(o){try{return JSON.stringify(o.value,null,2)}catch{return o.fallbackText}}};var he=class n{static fromConsoleMessage(o){let e=n.mapTypeToKind(o.type);o.useRawBubbleKind===!0&&(e=R.raw),o.streamTextRole==="user"&&o.type==="assistant"&&o.useRawBubbleKind!==!0&&(e=R.userPrompt);let i=o.streamTextRole==="user"||o.type==="prompt"&&o.useRawBubbleKind!==!0,t=o.briefSubtype!==void 0&&o.briefSubtype.length>0?o.briefSubtype:o.mirrorEventType,s=o.type==="tool"&&o.toolDisplayName!==void 0&&o.toolDisplayName.length>0?o.toolDisplayName:void 0,c=o.type==="error"||o.isToolCallFailedIndicator===!0?"error":void 0,_=o.pairedResult!==void 0?{text:o.pairedResult.text,expandableContent:o.pairedResult.expandableContent,rawData:o.pairedResult.rawData,isError:o.pairedResult.isError}:void 0;return{listKey:o.listKey,kind:e,bodyText:o.text,timestampIso:o.timestamp,expandableContent:void 0,rawData:o.rawData,pairedResult:_,isUserAligned:i,subtype:t,toolName:s,headerStatusDot:c,flags:{showCopy:!0,showRawInfo:!0,useEditDiffForExpandable:!1}}}static mapTypeToKind(o){switch(o){case"prompt":return R.userPrompt;case"assistant":return R.assistant;case"thinking":return R.thinking;case"tool":return R.tool;case"tool-result":return R.toolResult;case"error":return R.error;case"info":return R.info;case"status":return R.status;case"status-update":return R.statusUpdate;default:return R.info}}};var ui=["messagesEnd"],mi=["topSentinel"],fi=(n,o)=>o.listKey,hi=()=>({"w-[90%]":!0,"ml-4":!0}),Ci=()=>({"w-[85%]":!0});function Si(n,o){if(n&1&&(a(0,"span",14),k(1,"caSessionStatusColor"),d(2),r()),n&2){let e=o;I(P(1,3,e.status)),l(2),g(" ",e.status," ")}}function xi(n,o){n&1&&(a(0,"div",7),d(1," R\xE9gebbi \xFCzenetek bet\xF6lt\xE9se\u2026 "),r())}function vi(n,o){n&1&&(a(0,"div",8),d(1," \u2014 A besz\xE9lget\xE9s eleje \u2014 "),r())}function bi(n,o){n&1&&(a(0,"div",9),d(1," Loading\u2026 "),r())}function gi(n,o){n&1&&(a(0,"div",9),d(1," No messages yet \u2014 send a prompt "),r())}function yi(n,o){if(n&1){let e=y();a(0,"div")(1,"div",15)(2,"app-s-agent-console-message-bubble",16),f("ttsCached",function(t){u(e);let s=p();return m(s.handleTtsCached(t))}),r()()()}if(n&2){let e=o.$implicit,i=p();I(e.isUserAligned?"flex justify-end":"flex justify-start"),l(),C("ngClass",e.kind===i.bubbleKind.tool?be(4,hi):be(5,Ci)),l(),C("view",e)}}var It=(()=>{class n{messagesEndRef;topSentinelRef;topSentinelObserver=null;ca_DS=v(L);detailUi_DS=v(F);voiceInputUi_DS=v(ot);sessionQueue_DS=v(vt);route=v(oe);promptInput_$=h("");isSending_$=h(!1);isExecuting_$=M(()=>this.ca_DS.selectedSession_$()?.status==="running");messages_$=M(()=>this.ca_DS.consoleMessages_$());ttsCachedKeys_$=h(new Set);handleTtsCached(e){this.ttsCachedKeys_$.update(i=>new Set([...i,e]))}bubbleViews_$=M(()=>{let e=this.ca_DS.assembledMessages_$();if(e.length>0){let c=this.sessionId,_=this.ttsCachedKeys_$(),T=e.map(W=>bt.fromAssembledMessage(W,{sessionId:c,cachedKeys:_}));return T=$e.groupSubAgentItems(T),T=$e.groupConsecutiveToolItems(T),T}let i=this.detailUi_DS.isShowAgentUpdates_$(),t=Tt.filterForAgentUpdatesVisibility({messages:this.messages_$(),isShowAgentUpdates:i});return fe.pairToolResultsIntoToolStarts(t).map(c=>he.fromConsoleMessage(c))});bubbleKind=R;isComposerSendDisabled_$=M(()=>!this.promptInput_$().trim().length);previousConsoleMessageCount=0;get sessionId(){return this.ca_DS.activeSessionId_$()}ngAfterViewInit(){this.scheduleScrollToBottom(),this.setupTopSentinelObserver()}ngOnDestroy(){this.topSentinelObserver&&(this.topSentinelObserver.disconnect(),this.topSentinelObserver=null)}setupTopSentinelObserver(){let e=this.topSentinelRef?.nativeElement;!e||typeof IntersectionObserver>"u"||this.topSentinelObserver||(this.topSentinelObserver=new IntersectionObserver(i=>{for(let t of i)t.isIntersecting&&this.loadOlderAssembledIfNeeded()},{rootMargin:"100px 0px 0px 0px",threshold:0}),this.topSentinelObserver.observe(e))}loadOlderAssembledIfNeeded(){this.sessionId&&this.ca_DS.loadOlderAssembledMessages({sessionId:this.sessionId})}ngAfterViewChecked(){let e=this.ca_DS.consoleMessages_$().length;e>this.previousConsoleMessageCount&&this.scheduleScrollToBottom(),this.previousConsoleMessageCount=e}ngOnInit(){let e=this.route.snapshot.paramMap.get("sessionId")??"";e&&(this.promptInput_$.set(x.loadPromptDraft(e)),this.sessionQueue_DS.subscribeToSession({sessionId:e,baseRoute:"ca-session"}))}handleSendPrompt(){return $(this,null,function*(){let e=this.promptInput_$().trim();if(!(!e||!this.sessionId||this.isSending_$())){x.clearPromptDraft(this.sessionId),this.promptInput_$.set(""),this.isSending_$.set(!0);try{yield this.ca_DS.sendPrompt({sessionId:this.sessionId,content:e})}catch{}finally{this.isSending_$.set(!1)}}})}handleComposerDraftChange(e){this.promptInput_$.set(e);let i=this.sessionId;i&&x.savePromptDraft(i,e)}handleVoiceSegment(e){let i=e.text.trim();if(!i.length)return;let t=this.promptInput_$().trim(),s=t.length>0?`${t} ${i}`:i;this.handleComposerDraftChange(s),this.voiceInputUi_DS.autoSendAfterVoice_$()&&e.isFinal&&this.handleSendPrompt()}scheduleScrollToBottom(){setTimeout(()=>{let e=this.messagesEndRef?.nativeElement;e&&e.scrollIntoView({block:"end",inline:"nearest"})},0)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=O({type:n,selectors:[["app-ccap-ca-console"]],viewQuery:function(i,t){if(i&1&&(J(ui,5),J(mi,5)),i&2){let s;G(s=Y())&&(t.messagesEndRef=s.first),G(s=Y())&&(t.topSentinelRef=s.first)}},hostAttrs:[1,"flex","flex-col","flex-1","min-h-0","overflow-hidden","w-full","min-w-0"],decls:20,vars:15,consts:[["topSentinel",""],["messagesEnd",""],["sChatColumnHeader","",1,"flex","shrink-0","flex-col"],[1,"flex","shrink-0","items-center","gap-2","border-b","border-neonDefault","bg-ccapSurface","px-3","py-1.5"],[1,"flex-1","truncate","font-mono","text-xs","text-neutral-400"],[1,"rounded","px-1.5","py-0.5","text-[10px]","font-medium","text-black",3,"class"],["sChatColumnScroll","",1,"space-y-3","px-3","py-3","text-xs"],[1,"text-center","text-neutral-500","py-2","text-xs","italic"],[1,"text-center","text-neutral-600","py-1","text-xs"],[1,"flex","h-full","items-center","justify-center","text-xs","text-neutral-600"],[3,"class"],["sChatColumnComposer",""],["placeholder","Send a prompt\u2026",3,"draftTextChange","sendRequested","queueRequested","stopRequested","queueEditStart","queueEditTextChange","queueEditSave","queueEditCancel","queueRemoveItem","queueSendNow","queueMoveUp","queueMoveDown","draftText","isExecuting","isSending","isStopping","enableAttachments","textareaRows","queueItems","isQueueLocked","editingQueueItemId","editingQueueText"],["sInputTextareaAccessory","",3,"transcriptSegmentReady","compactLayout"],[1,"rounded","px-1.5","py-0.5","text-[10px]","font-medium","text-black"],[1,"max-w-full",3,"ngClass"],[3,"ttsCached","view"]],template:function(i,t){if(i&1){let s=y();a(0,"app-s-session-chat-column-layout")(1,"div",2)(2,"div",3)(3,"span",4),d(4),r(),b(5,Si,3,5,"span",5),r()(),a(6,"div",6),w(7,"div",null,0),b(9,xi,2,0,"div",7)(10,vi,2,0,"div",8)(11,bi,2,0,"div",9)(12,gi,2,0,"div",9),H(13,yi,3,6,"div",10,fi),w(15,"div",null,1),r(),a(17,"div",11)(18,"app-s-session-input",12),f("draftTextChange",function(_){return u(s),m(t.handleComposerDraftChange(_))})("sendRequested",function(){return u(s),m(t.handleSendPrompt())})("queueRequested",function(){return u(s),m(t.handleSendPrompt())})("stopRequested",function(){return u(s),m(t.detailUi_DS.handleStopExecution())})("queueEditStart",function(_){return u(s),m(t.sessionQueue_DS.startEditing(_))})("queueEditTextChange",function(_){return u(s),m(t.sessionQueue_DS.editingText_$.set(_))})("queueEditSave",function(){return u(s),m(t.sessionQueue_DS.saveEdit())})("queueEditCancel",function(){return u(s),m(t.sessionQueue_DS.cancelEdit())})("queueRemoveItem",function(_){return u(s),m(t.sessionQueue_DS.removeItem(_))})("queueSendNow",function(_){return u(s),m(t.sessionQueue_DS.sendNow(_))})("queueMoveUp",function(_){return u(s),m(t.sessionQueue_DS.reorderItem({queueItemId:_,direction:"up"}))})("queueMoveDown",function(_){return u(s),m(t.sessionQueue_DS.reorderItem({queueItemId:_,direction:"down"}))}),a(19,"app-ccap-voice-record-button",13),f("transcriptSegmentReady",function(_){return u(s),m(t.handleVoiceSegment(_))}),r()()()()}if(i&2){let s;l(4),g(" ",t.ca_DS.activeSessionId_$()||"No session"," "),l(),S((s=t.ca_DS.selectedSession_$())?5:-1,s),l(4),S(t.ca_DS.isLoadingOlderMessages_$()?9:t.bubbleViews_$().length>0&&!t.ca_DS.assembledMessagesHasMore_$()?10:-1),l(2),S(t.ca_DS.selectedSessionLoading_$()?11:t.bubbleViews_$().length?-1:12),l(2),Q(t.bubbleViews_$()),l(5),C("draftText",t.promptInput_$())("isExecuting",t.isExecuting_$())("isSending",t.isSending_$())("isStopping",t.detailUi_DS.isStopping_$())("enableAttachments",!0)("textareaRows",3)("queueItems",t.sessionQueue_DS.items_$())("isQueueLocked",t.sessionQueue_DS.isLocked_$())("editingQueueItemId",t.sessionQueue_DS.editingItemId_$())("editingQueueText",t.sessionQueue_DS.editingText_$()),l(),C("compactLayout",!0)}},dependencies:[j,le,mt,ft,ht,X],encapsulation:2})}return n})();var Et=(()=>{class n{transform(e){switch(e??""){case"lifecycle":return"bg-cyan-600";case"ca-session-update":return"bg-green-600";case"prompt-sent":return"bg-blue-600";case"prompt-completed":return"bg-green-500";case"error":return"bg-red-600";case"sync-list":return"bg-purple-600";case"hydrate-from-agent":return"bg-indigo-600";default:return"bg-neutral-600"}}static \u0275fac=function(i){return new(i||n)};static \u0275pipe=U({name:"caSessionEventTypeColor",type:n,pure:!0})}return n})();var kt=(()=>{class n{sanitizer;constructor(e){this.sanitizer=e}transform(e){if(!e)return this.sanitizer.bypassSecurityTrustHtml('<span class="text-neutral-500">{}</span>');try{let i=JSON.stringify(e,null,2),t=this.highlightJson(i);return this.sanitizer.bypassSecurityTrustHtml(t)}catch{return this.sanitizer.bypassSecurityTrustHtml('<span class="text-neutral-500">{}</span>')}}MULTILINE_THRESHOLD=150;highlightJson(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/("(\\u[\da-fA-F]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g,t=>/^"/.test(t)?/:$/.test(t)?`<span style="color:#7dd3fc">${t}</span>`:t.length>this.MULTILINE_THRESHOLD&&t.includes("\\n")?this.formatMultilineString(t):`<span style="color:#86efac">${t}</span>`:/true|false/.test(t)?`<span style="color:#fbbf24">${t}</span>`:/null/.test(t)?`<span style="color:#a78bfa">${t}</span>`:`<span style="color:#fb923c">${t}</span>`)}formatMultilineString(e){return'<span style="color:#86efac">"</span><span style="display:block;margin:2px 0;padding:4px 8px;border-left:2px solid rgba(134,239,172,0.25);background:rgba(134,239,172,0.04);border-radius:0 4px 4px 0;color:#86efac;opacity:0.85;white-space:pre-wrap;word-break:break-word;font-size:0.9em;line-height:1.5">'+e.slice(1,-1).replace(/\\n/g,`
|
|
4
|
-
`).replace(/\\t/g," ").replace(/\\r/g,"").replace(/\\"/g,'"').replace(/\\\\/g,"\\")+'</span><span style="color:#86efac">"</span>'}static \u0275fac=function(i){return new(i||n)(Fe(Qe,16))};static \u0275pipe=U({name:"caSessionJsonFormat",type:n,pure:!0})}return n})();var N=class n{static eventBrief(o){let e=o.data??{};switch(o.eventType){case"prompt-sent":{let i=e.content;if(typeof i=="string"&&i.length)return`prompt: ${i.length>80?`${i.substring(0,80)}\u2026`:i}`;let t=e.contentLength;return typeof t=="number"?`prompt length ${t}`:"prompt"}case"lifecycle":{let i=e.phase;if(i==="acpSessionRebound"){let t=e.previousAcpSessionId,s=e.newAcpSessionId,c=typeof t=="string"?t.substring(0,8):"?",_=typeof s=="string"?s.substring(0,8):"?";return`ACP rebound ${c}\u2026 \u2192 ${_}\u2026`}return typeof i=="string"?i:"lifecycle"}case"ca-session-update":return"session update";case"hydrate-from-agent":{let i=e.acpLoadFingerprint;return typeof i=="string"&&i.length>12?`session/load \xB7 ${i.substring(0,12)}\u2026`:"session/load snapshot"}default:{let i=JSON.stringify(e);return i.length>60?i.substring(0,60)+"\u2026":i}}}static streamRowBrief(o){if(o.events.length===1)return n.eventBrief(o.events[0]);let e=[];for(let t of o.events){let s=ce.parseStreamChunkFromMirrorData(t.data??{});s!==null&&e.push(s.text)}let i=e.join("");return i.length>80?`${i.substring(0,80)}\u2026`:i}static streamRowSequenceLabel(o){if(!o.events.length)return"";if(o.events.length===1)return`#${String(o.events[0].sequence??"")}`;let e=o.events[0].sequence??0,i=o.events[o.events.length-1].sequence??0;return`#${String(e)}\u2013#${String(i)}`}static streamRowClipboardText(o){return Ae.prettyStringifyUnknown({merged:o.events.length>1,events:o.events.map(e=>({eventType:e.eventType,sequence:e.sequence,timestamp:e.timestamp,sessionId:e.sessionId,data:e.data??{}}))})}};var Pt=(()=>{class n{transform(e){return e==null?"":N.streamRowBrief(e)}static \u0275fac=function(i){return new(i||n)};static \u0275pipe=U({name:"caSessionTimelineStreamRowBrief",type:n,pure:!0})}return n})();var Mt=(()=>{class n{transform(e){return e==null?"":N.streamRowClipboardText(e)}static \u0275fac=function(i){return new(i||n)};static \u0275pipe=U({name:"caSessionTimelineStreamRowClipboardText",type:n,pure:!0})}return n})();var Rt=(()=>{class n{transform(e){return e==null?"":N.streamRowSequenceLabel(e)}static \u0275fac=function(i){return new(i||n)};static \u0275pipe=U({name:"caSessionTimelineStreamRowSequenceLabel",type:n,pure:!0})}return n})();var Ei=["eventList"],ki=(n,o)=>o.rowKey,Pi=n=>({"bg-neutral-800/30":n});function Mi(n,o){if(n&1){let e=y();a(0,"div",9)(1,"button",12),f("click",function(){u(e);let t=p();return m(t.handleLoadMoreEvents())}),d(2),r()()}if(n&2){let e=p();l(),C("disabled",e.isLoadingMore_$()),l(),g(" ",e.isLoadingMore_$()?"Loading\u2026":"Load more events"," ")}}function Ri(n,o){n&1&&(a(0,"div",11),d(1," No events yet "),r())}function Li(n,o){if(n&1&&(a(0,"span",17),d(1),r()),n&2){let e=p().$implicit;l(),g(" \xD7",e.events.length,"")}}function Vi(n,o){if(n&1&&(a(0,"div",23)(1,"div",24),d(2,"Event data:"),r(),w(3,"pre",25),k(4,"caSessionJsonFormat"),r()),n&2){let e=p().$implicit;l(3),C("innerHTML",P(4,1,e.events[0].data),Ue)}}function Oi(n,o){if(n&1){let e=y();a(0,"div",14),f("click",function(){let t=u(e).$implicit,s=p(2);return m(s.handleSelectRow(t))}),a(1,"div",15)(2,"span",16),k(3,"caSessionEventTypeColor"),d(4),b(5,Li,2,1,"span",17),r(),a(6,"span",18),d(7),k(8,"caSessionTimelineStreamRowSequenceLabel"),r(),a(9,"span",19),k(10,"caSessionTimelineStreamRowBrief"),d(11),k(12,"caSessionTimelineStreamRowBrief"),r(),a(13,"span",20),k(14,"sAbsoluteTime"),d(15),k(16,"sTimeAgo"),r(),a(17,"span",21),f("click",function(t){return u(e),m(t.stopPropagation())}),w(18,"app-s-copy-button",22),k(19,"caSessionTimelineStreamRowClipboardText"),r()(),b(20,Vi,5,3,"div",23),r()}if(n&2){let e,i,t=o.$implicit,s=p(2);C("ngClass",Ne(26,Pi,s.selectedRowKey_$()===t.rowKey)),l(2),I(P(3,12,t.events[0].eventType)),l(2),g(" ",t.events[0].eventType," "),l(),S(t.events.length>1?5:-1),l(2),g(" ",P(8,14,t)," "),l(2),C("title",P(10,16,t)),l(2),g(" ",P(12,18,t)," "),l(2),C("title",P(14,20,(e=t.events[0].timestamp)!==null&&e!==void 0?e:"")),l(2),g(" ",P(16,22,(i=t.events[0].timestamp)!==null&&i!==void 0?i:"")," "),l(3),C("content",P(19,24,t)),l(2),S(s.selectedRowKey_$()===t.rowKey?20:-1)}}function Ui(n,o){if(n&1&&H(0,Oi,21,28,"div",13,ki),n&2){let e=p();Q(e.displayRows_$())}}var Lt=(()=>{class n{ca_DS=v(L);detailUi_DS=v(F);selectedRowKey_$=h(null);isLoadingMore_$=h(!1);isAutoScroll_$=h(!0);eventListRef;previousRowCount=0;displayRows_$=M(()=>{let e=[...this.ca_DS.selectedSessionEvents_$()].sort(dt.compareMirrorEventsAsc);return[...ce.foldEventsToTimelineRows(e)].reverse()});ngAfterViewChecked(){let e=this.displayRows_$().length;this.isAutoScroll_$()&&e>this.previousRowCount&&this.scrollToTop(),this.previousRowCount=e}handleToggleAutoScroll(){this.isAutoScroll_$.update(e=>!e)}handleSelectRow(e){let i=e.rowKey;this.selectedRowKey_$()===i?this.selectedRowKey_$.set(null):this.selectedRowKey_$.set(i)}handleLoadMoreEvents(){return $(this,null,function*(){let e=this.ca_DS.activeSessionId_$();if(e){this.isLoadingMore_$.set(!0);try{yield this.ca_DS.loadMoreSessionEvents({sessionId:e})}finally{this.isLoadingMore_$.set(!1)}}})}scrollToTop(){let e=this.eventListRef?.nativeElement;e&&(e.scrollTop=0)}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=O({type:n,selectors:[["app-ccap-ca-timeline"]],viewQuery:function(i,t){if(i&1&&J(Ei,5),i&2){let s;G(s=Y())&&(t.eventListRef=s.first)}},hostAttrs:[1,"flex","flex-col","h-full","min-h-0","overflow-hidden"],decls:18,vars:9,consts:[["eventList",""],[1,"flex","items-center","justify-between","p-2","border-b","border-neonDefault","shrink-0"],[1,"flex","items-center","gap-1"],[1,"text-xs","text-neutral-400","font-medium"],[1,"text-xs","text-neutral-500"],["type","button",1,"text-[10px]","px-1.5","py-0.5","border","rounded","transition-colors",3,"click"],[1,"flex","items-center","gap-1","px-2","py-1.5","border-b","border-neonDefault","shrink-0"],["type","button","title","Session lifecycle status changes",1,"px-2","py-0.5","text-[10px]","border","rounded","transition-colors",3,"click"],["type","button","title","Tool call progress / agent updates (in_progress)",1,"px-2","py-0.5","text-[10px]","border","rounded","transition-colors",3,"click"],[1,"shrink-0","px-2","py-0.5","border-b","border-neutral-800"],[1,"flex-1","min-h-0","overflow-y-auto"],[1,"flex","items-center","justify-center","py-4","text-[10px]","text-neutral-600"],["type","button",1,"w-full","px-2","py-0.5","text-[9px]","border","border-neutral-600","text-neutral-300","rounded","disabled:opacity-40",3,"click","disabled"],[1,"px-2","py-1","border-b","border-neutral-700/30","cursor-pointer","hover:bg-neutral-800/30","transition-colors",3,"ngClass"],[1,"px-2","py-1","border-b","border-neutral-700/30","cursor-pointer","hover:bg-neutral-800/30","transition-colors",3,"click","ngClass"],[1,"flex","items-center","gap-1.5","min-w-0"],[1,"text-[9px]","px-1","py-0.5","rounded","font-medium","text-black","shrink-0","leading-none","whitespace-nowrap"],[1,"text-neutral-600","font-normal"],[1,"text-[10px]","text-neutral-600","shrink-0","leading-none","font-mono"],[1,"text-[10px]","text-neutral-400","truncate","font-mono","min-w-0","flex-1","leading-none",3,"title"],[1,"text-[10px]","text-neutral-400","shrink-0","leading-none",3,"title"],[1,"inline-flex","shrink-0",3,"click"],["buttonTitle","Copy event (JSON)","size","sm",3,"content"],[1,"mt-1","px-0","pt-1","border-t","border-neutral-800/80"],[1,"text-[10px]","text-neutral-500","mb-1"],[1,"p-2","bg-neutral-900","border","border-neutral-700/50","rounded","text-[10px]","font-mono","text-neonCyan/70","overflow-x-auto","whitespace-pre-wrap","break-words","max-h-60",3,"innerHTML"]],template:function(i,t){if(i&1){let s=y();a(0,"div",1)(1,"div",2)(2,"span",3),d(3,"Event Timeline"),r(),a(4,"span",4),d(5),r()(),a(6,"button",5),f("click",function(){return u(s),m(t.handleToggleAutoScroll())}),d(7," Auto-scroll "),r()(),a(8,"div",6)(9,"button",7),f("click",function(){return u(s),m(t.detailUi_DS.handleToggleSessionStatus())}),d(10," Session status "),r(),a(11,"button",8),f("click",function(){return u(s),m(t.detailUi_DS.handleToggleAgentUpdates())}),d(12," Agent updates "),r()(),b(13,Mi,3,2,"div",9),a(14,"div",10,0),b(16,Ri,2,0,"div",11)(17,Ui,2,0),r()}i&2&&(l(5),g(" (",t.ca_DS.selectedSessionEvents_$().length,") "),l(),I(t.isAutoScroll_$()?"border-neonCyan text-neonCyan shadow-neon-glow-cyan":"border-neonDefault text-neutral-400"),l(3),I(t.detailUi_DS.isShowSessionStatus_$()?"border-purple-500/50 text-purple-400 bg-purple-500/10":"border-neutral-700 text-neutral-500 hover:text-neutral-300"),l(2),I(t.detailUi_DS.isShowAgentUpdates_$()?"border-teal-500/50 text-teal-400 bg-teal-500/10":"border-neutral-700 text-neutral-500 hover:text-neutral-300 hover:border-neutral-600"),l(2),S(t.ca_DS.sessionEventsHasMore_$()?13:-1),l(3),S(t.displayRows_$().length?17:16))},dependencies:[j,ct,at,rt,Et,kt,Pt,Mt,Rt],encapsulation:2})}return n})();function Wi(n,o){n&1&&(a(0,"div",0),d(1,"Loading\u2026"),r())}function qi(n,o){n&1&&(a(0,"div",0),d(1,"No session"),r())}function Ni(n,o){if(n&1&&(a(0,"div",6)(1,"span",7),d(2,"ACP sessionId"),r(),a(3,"span",8),d(4),r()()),n&2){p();let e=E(0);l(4),q(e.acpSessionId)}}function Bi(n,o){if(n&1&&(a(0,"div",6)(1,"span",7),d(2,"Label"),r(),a(3,"span",18),d(4),r()()),n&2){p();let e=E(0);l(4),q(e.label)}}function zi(n,o){if(n&1&&(a(0,"div",6)(1,"span",7),d(2,"Parent CCAP session"),r(),a(3,"span",8),d(4),r()()),n&2){p();let e=E(0);l(4),q(e.parentSessionId)}}function Hi(n,o){if(n&1&&(a(0,"div",4)(1,"div",5),d(2,"Agent"),r(),a(3,"div",18),d(4),r()()),n&2){p();let e=E(0);l(4),te("",e.agentInfoName," ",e.agentInfoVersion,"")}}function Qi(n,o){if(n&1&&(a(0,"div",10),d(1),r()),n&2){p();let e=E(0);l(),g(" ACP: ",e.isAcpConnected?"connected":"offline"," ")}}function ji(n,o){if(n&1&&(a(0,"div",10),d(1),r()),n&2){p();let e=E(0);l(),g(" session/load: ",e.loadSessionSupported?"supported":"not advertised"," ")}}function Ki(n,o){if(n&1&&(a(0,"div",10),d(1),r()),n&2){p();let e=E(0);l(),g(" mode: ",e.isTerminalMode?"terminal":"direct"," ")}}function Xi(n,o){if(n&1&&(a(0,"div",19),d(1),r()),n&2){p();let e=E(0);I(e.isTerminalRunnerConnected?"text-green-400":"text-amber-400"),l(),g(" runner: ",e.isTerminalRunnerConnected?"connected":"disconnected"," ")}}function Ji(n,o){if(n&1&&(a(0,"div",6)(1,"span",7),d(2,"lastSyncAt"),r(),a(3,"span",20),d(4),r()()),n&2){p();let e=E(0);l(4),q(e.lastSyncAt)}}function Gi(n,o){if(n&1&&(a(0,"div",12),d(1),r()),n&2){p();let e=E(0);l(),g(" ",e.lastSyncError," ")}}function Yi(n,o){if(n&1){let e=y();ie(0),a(1,"div",1)(2,"div",2)(3,"span",3),k(4,"caSessionStatusColor"),d(5),r()(),a(6,"div",4)(7,"div",5),d(8,"Session"),r(),a(9,"div",6)(10,"span",7),d(11,"Business ID"),r(),a(12,"span",8),d(13),r()(),b(14,Ni,5,1,"div",6)(15,Bi,5,1,"div",6),a(16,"div",6)(17,"span",7),d(18,"Workspace"),r(),a(19,"span",8),d(20),r()(),b(21,zi,5,1,"div",6),r(),b(22,Hi,5,2,"div",4),a(23,"div",9)(24,"div",5),d(25,"Mirror / ACP"),r(),b(26,Qi,2,1,"div",10)(27,ji,2,1,"div",10)(28,Ki,2,1,"div",10)(29,Xi,2,3,"div",11)(30,Ji,5,1,"div",6)(31,Gi,2,1,"div",12),a(32,"button",13),f("click",function(){u(e);let t=p();return m(t.handleHydrate(!1))}),d(33," Hydrate from agent "),r(),a(34,"button",14),f("click",function(){u(e);let t=p();return m(t.handleHydrate(!0))}),d(35," Force re-hydrate "),r()(),a(36,"div",15)(37,"button",16),f("click",function(){u(e);let t=p();return m(t.handleTerminate())}),d(38),r(),a(39,"button",17),f("click",function(){u(e);let t=p();return m(t.handleArchiveToggle())}),d(40),r()()()}if(n&2){let e=p(),i=ne(e.session_$());l(3),I(P(4,22,i.status)),l(2),g(" ",i.status," "),l(8),q(i.sessionId),l(),S(i.acpSessionId?14:-1),l(),S(i.label?15:-1),l(5),q(i.workspacePath),l(),S(i.parentSessionId?21:-1),l(),S(i.agentInfoName||i.agentInfoVersion?22:-1),l(4),S(i.isAcpConnected===!0||i.isAcpConnected===!1?26:-1),l(),S(i.loadSessionSupported===!0||i.loadSessionSupported===!1?27:-1),l(),S(i.isTerminalMode===!0||i.isTerminalMode===!1?28:-1),l(),S(i.isTerminalMode===!0?29:-1),l(),S(i.lastSyncAt?30:-1),l(),S(i.lastSyncError?31:-1),l(),C("disabled",e.isHydrating_$()||i.loadSessionSupported!==!0),l(2),C("disabled",e.isHydrating_$()||i.loadSessionSupported!==!0),l(3),C("disabled",e.detailUi_DS.isTerminating_$()),l(),g(" ",e.detailUi_DS.isTerminating_$()?"Terminating\u2026":"Terminate"," "),l(),C("disabled",e.isArchiving_$()),l(),g(" ",i.isArchived?"Unarchive":"Archive"," ")}}var Vt=(()=>{class n{ca_DS=v(L);detailUi_DS=v(F);session_$=M(()=>this.ca_DS.selectedSession_$());isLoading_$=M(()=>this.ca_DS.selectedSessionLoading_$());isArchiving_$=h(!1);isHydrating_$=h(!1);handleHydrate(e){return $(this,null,function*(){let t=this.session_$()?.sessionId??"";if(t){this.isHydrating_$.set(!0);try{yield this.ca_DS.hydrateFromAgent({sessionId:t,force:e})}catch{}finally{this.isHydrating_$.set(!1)}}})}handleTerminate(){this.detailUi_DS.handleTerminate()}handleArchiveToggle(){return $(this,null,function*(){let e=this.session_$(),i=e?.sessionId??"";if(!(!i||!e)){this.isArchiving_$.set(!0);try{let t=e.isArchived!==!0;yield this.ca_DS.setSessionArchived({sessionId:i,isArchived:t})}catch{}finally{this.isArchiving_$.set(!1)}}})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=O({type:n,selectors:[["app-ccap-ca-metadata"]],hostAttrs:[1,"flex","flex-col"],decls:3,vars:1,consts:[[1,"flex","items-center","justify-center","py-6","text-[10px]","text-neutral-600"],[1,"p-2","space-y-3","text-xs"],[1,"flex","items-center","gap-2"],[1,"px-2","py-0.5","rounded","text-[10px]","font-medium","text-black"],[1,"space-y-1.5"],[1,"text-[10px]","font-semibold","text-neutral-500","uppercase","tracking-wide"],[1,"flex","flex-col","gap-0.5"],[1,"text-[10px]","text-neutral-600"],[1,"font-mono","text-[10px]","text-neutral-300","break-all"],[1,"space-y-1.5","pt-2","border-t","border-neutral-800"],[1,"text-[10px]","text-neutral-400"],[1,"text-[10px]",3,"class"],[1,"text-[10px]","text-amber-400/90","border","border-amber-600/30","rounded","px-1.5","py-1"],["type","button","title","ACP session/load \u2192 mirror hydrate event",1,"w-full","px-2","py-1","text-[10px]","border","border-sky-700","text-sky-300","rounded","disabled:opacity-40",3,"click","disabled"],["type","button",1,"w-full","px-2","py-1","text-[10px]","border","border-neutral-600","text-neutral-400","rounded","disabled:opacity-40",3,"click","disabled"],[1,"flex","flex-col","gap-2","pt-2","border-t","border-neutral-800"],["type","button",1,"px-2","py-1","text-[10px]","border","border-red-800","text-red-300","rounded","disabled:opacity-40",3,"click","disabled"],["type","button",1,"px-2","py-1","text-[10px]","border","border-neutral-600","text-neutral-300","rounded","disabled:opacity-40",3,"click","disabled"],[1,"text-[10px]","text-neutral-300"],[1,"text-[10px]"],[1,"font-mono","text-[10px]","text-neutral-300"]],template:function(i,t){i&1&&b(0,Wi,2,0,"div",0)(1,qi,2,0,"div",0)(2,Yi,41,24,"div",1),i&2&&S(t.isLoading_$()?0:t.session_$()?2:1)},dependencies:[X],encapsulation:2})}return n})();function en(n,o){if(n&1){let e=y();a(0,"div",0)(1,"p",4),d(2,"Could not load this session."),r(),w(3,"app-ccap-error-display",5),a(4,"button",6),f("click",function(){u(e);let t=p();return m(t.handleRetryLoadDetail())}),d(5," Retry "),r()()}if(n&2){let e=p();l(3),C("error",e.ca_DS.sessionDetailError_$())}}function tn(n,o){if(n&1&&(a(0,"div",1)(1,"span"),d(2,"Loading session\u2026"),r(),a(3,"span",7),d(4),r()()),n&2){let e=p();l(4),q(e.sessionId_$())}}function nn(n,o){if(n&1){let e=y();a(0,"app-s-session-detail-three-column-layout",8),f("startResizeStart",function(t){u(e);let s=p();return m(s.handleMetadataResizeStart(t))})("endResizeStart",function(t){u(e);let s=p();return m(s.handleTimelineResizeStart(t))}),a(1,"div",9),w(2,"app-ccap-ca-metadata"),r(),a(3,"div",10),w(4,"app-ccap-ca-console"),r(),a(5,"div",11),w(6,"app-ccap-ca-timeline"),r()()}if(n&2){let e=p();C("isStartOpen",e.detailUi_DS.isMetadataPanelOpen_$())("isEndOpen",e.detailUi_DS.isTimelinePanelOpen_$())("startWidthPx",e.metadataWidth_$())("endWidthPx",e.timelineWidth_$())("isResizing",e.isResizing_$())}}function on(n,o){if(n&1){let e=y();a(0,"div",0)(1,"p",4),d(2,"Could not load CA session list."),r(),w(3,"app-ccap-error-display",12),a(4,"button",6),f("click",function(){u(e);let t=p();return m(t.handleRetryLoadList())}),d(5," Retry list "),r()()}if(n&2){let e=p();l(3),C("error",e.ca_DS.sessionsLoadError_$())}}function sn(n,o){n&1&&(a(0,"div",1)(1,"span"),d(2,"Loading sessions\u2026"),r()())}function an(n,o){n&1&&(a(0,"div",3)(1,"span"),d(2,"No CA sessions yet."),r(),a(3,"span",13),d(4,"Create one from the sidebar or check the server connection."),r()())}function rn(n,o){n&1&&(a(0,"div",3)(1,"span"),d(2,"Select a session from the sidebar"),r(),a(3,"span",13),d(4,"Opening the default session\u2026"),r()())}var Ce=(()=>{class n extends nt{ca_DS=v(L);detailUi_DS=v(F);peiContext_DS=v(re);route=v(oe);router=v(se);sessionsListObs$;sessionsLoadingObs$;sessionId_$=h("");metadataWidth_$=h(256);timelineWidth_$=h(288);isResizing_$=h(!1);isEmptyRouteListFetchRequested=!1;constructor(){super(),this.sessionsListObs$=ge(this.ca_DS.sessions_$),this.sessionsLoadingObs$=ge(this.ca_DS.sessionsLoading_$)}ngOnInit(){this.metadataWidth_$.set(Math.max(160,Math.min(500,x.loadPanelWidth("metadata",256)))),this.timelineWidth_$.set(Math.max(200,Math.min(600,x.loadPanelWidth("timeline",288))));let e=this.route.paramMap.pipe(Ie(i=>({sessionId:i.get("sessionId")??"",ccapId:i.get("ccapId")??""})),ke((i,t)=>i.sessionId===t.sessionId&&i.ccapId===t.ccapId));this.addSubscription(Ee([e,this.sessionsListObs$,this.sessionsLoadingObs$]).subscribe(([i,t,s])=>{let c=i.sessionId;if(i.ccapId&&this.peiContext_DS.activeCcapId_$()!==i.ccapId&&this.peiContext_DS.selectInstance(i.ccapId),c.length>0){this.isEmptyRouteListFetchRequested=!1,c!==this.sessionId_$()&&this.loadSession(c);return}if(s)return;if(!t.length&&!this.isEmptyRouteListFetchRequested){this.isEmptyRouteListFetchRequested=!0,this.ca_DS.loadSessions({includeArchived:x.loadShowArchived()});return}if(!t.length){this.sessionId_$.set(""),this.ca_DS.stopOpenSessionPolling(),this.ca_DS.setActiveSessionId("");return}let _=me.pickDefaultSessionId({sessions:t,lastSavedSessionId:x.loadLastSessionId(),includeArchived:x.loadShowArchived()});if(_.length>0){let T=this.peiContext_DS.activeCcapId_$(),W=T?["/ca-session",T,_]:["/ca-session",_];this.router.navigate(W,{replaceUrl:!0});return}this.sessionId_$.set(""),this.ca_DS.stopOpenSessionPolling(),this.ca_DS.setActiveSessionId("")}))}ngOnDestroy(){super.ngOnDestroy(),this.ca_DS.stopOpenSessionPolling(),this.ca_DS.setActiveSessionId("")}handleRetryLoadDetail(){let e=this.sessionId_$();e.length&&this.loadSession(e)}handleRetryLoadList(){this.ca_DS.loadSessions({includeArchived:x.loadShowArchived()})}handleMetadataResizeStart(e){let i=this.metadataWidth_$(),t=e.clientX;this.isResizing_$.set(!0),Z.attachUntilPointerUp({startEvent:e,onMove:s=>{let c=s.clientX-t,_=Math.max(160,Math.min(500,i+c));this.metadataWidth_$.set(_)},onEnd:()=>{this.isResizing_$.set(!1),x.savePanelWidth("metadata",this.metadataWidth_$())}})}handleTimelineResizeStart(e){let i=this.timelineWidth_$(),t=e.clientX;this.isResizing_$.set(!0),Z.attachUntilPointerUp({startEvent:e,onMove:s=>{let c=t-s.clientX,_=Math.max(200,Math.min(600,i+c));this.timelineWidth_$.set(_)},onEnd:()=>{this.isResizing_$.set(!1),x.savePanelWidth("timeline",this.timelineWidth_$())}})}loadSession(e){this.sessionId_$.set(e),this.ca_DS.clearLiveOutput(),this.ca_DS.setActiveSessionId(e),x.saveLastSessionId(e),this.peiContext_DS.ensureInitialized().then(()=>{this.runLoadSessionDetailWithPoll(e)})}runLoadSessionDetailWithPoll(e){return $(this,null,function*(){(yield this.ca_DS.loadSessionDetail({sessionId:e}))&&e===this.sessionId_$()&&this.ca_DS.startOpenSessionPolling(e)})}static \u0275fac=function(i){return new(i||n)};static \u0275cmp=O({type:n,selectors:[["app-ccap-ca-detail"]],hostAttrs:[1,"flex","flex-col","flex-1","min-h-0","overflow-hidden"],features:[We],decls:7,vars:1,consts:[[1,"flex","flex-col","items-center","justify-center","h-full","gap-3","px-4","py-6","overflow-y-auto"],[1,"flex","flex-col","items-center","justify-center","h-full","gap-2","text-neutral-500","text-sm"],[3,"isStartOpen","isEndOpen","startWidthPx","endWidthPx","isResizing"],[1,"flex","flex-col","items-center","justify-center","h-full","gap-2","text-neutral-500","text-sm","px-4","text-center"],[1,"text-xs","text-neutral-400","text-center"],["sourceLabelOverride","CA session detail",1,"block","w-full","max-w-lg",3,"error"],["type","button",1,"px-3","py-1.5","text-xs","border","border-neonDefault","text-neutral-300","rounded","hover:bg-neutral-700",3,"click"],[1,"text-xs","text-neutral-600","font-mono","truncate","max-w-[90%]"],[3,"startResizeStart","endResizeStart","isStartOpen","isEndOpen","startWidthPx","endWidthPx","isResizing"],["sDetailColumnStart",""],["sDetailColumnMain",""],["sDetailColumnEnd",""],["sourceLabelOverride","CA session list",1,"block","w-full","max-w-lg",3,"error"],[1,"text-xs","text-neutral-600"]],template:function(i,t){i&1&&b(0,en,6,1,"div",0)(1,tn,5,1,"div",1)(2,nn,7,5,"app-s-session-detail-three-column-layout",2)(3,on,6,1,"div",0)(4,sn,3,0,"div",1)(5,an,5,0,"div",3)(6,rn,5,0,"div",3),i&2&&S(t.sessionId_$()&&t.ca_DS.sessionDetailError_$()?0:t.sessionId_$()&&t.ca_DS.selectedSessionLoading_$()?1:t.sessionId_$()?2:t.ca_DS.sessionsLoadError_$()?3:t.ca_DS.sessionsLoading_$()?4:t.ca_DS.sessions_$().length?6:5)},dependencies:[K,ut,It,Lt,Vt],encapsulation:2})}return n})();var ln=[{path:"",component:Dt,children:[{path:"",pathMatch:"full",component:Ce},{path:":ccapId/:sessionId",component:Ce},{path:":sessionId",component:Ce}]}],Hs=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=Re({type:n});static \u0275inj=Me({imports:[He,tt,Ke.forChild(ln),K,le,ae,_e,ue,Ct]})}return n})();export{Hs as CaSession_Module};
|
|
5
|
-
//# sourceMappingURL=ca.module-MVE3OLDD.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{e as ne}from"./chunk-JZHYGU3K.js";import{a as ie}from"./chunk-FLAJXIYW.js";import{c as J,f as Q,i as X,v as ee}from"./chunk-EO4DNTT4.js";import"./chunk-7SAFEFWU.js";import{I as te}from"./chunk-SLSTIBOT.js";import{C as w,D as L,Fa as r,Ga as I,Ha as d,J as U,K as A,L as v,M as S,Pa as N,Qa as j,R,Ra as W,Ta as G,Ua as K,Z as o,aa as _,da as x,fa as B,ga as f,ha as V,hb as Y,ia as E,ja as $,k as m,la as h,ma as P,na as z,oa as k,p as C,pa as D,qa as i,ra as a,sa as y,ua as F,ub as Z,va as b,wa as p,xb as q,y as O}from"./chunk-TBMJSIBB.js";var re=(()=>{class s{baseUrl=`${te.api.baseUrl}/cc-account`;http=w(q);listAccounts(){return C(this.http.get(`${this.baseUrl}/list`))}refreshLocalAccounts(){return C(this.http.post(`${this.baseUrl}/refresh`,{}))}getInstanceMapping(){return C(this.http.get(`${this.baseUrl}/instance-mapping`))}getAccount(e){return C(this.http.get(`${this.baseUrl}/${e}`))}getAccountUsage(e){return C(this.http.get(`${this.baseUrl}/${e}/usage`))}getAccountUsageHistory(e){let t=[];e.windowType!=null&&e.windowType!==""&&t.push(`windowType=${encodeURIComponent(e.windowType)}`),e.fromMs!=null&&t.push(`fromMs=${e.fromMs}`),e.toMs!=null&&t.push(`toMs=${e.toMs}`);let n=t.length>0?`?${t.join("&")}`:"";return C(this.http.get(`${this.baseUrl}/${e.accountKey}/usage-history${n}`))}refreshAccountUsage(e){return C(this.http.post(`${this.baseUrl}/${e}/refresh-usage`,{}))}renameAccount(e){let t={};return e.displayName!==void 0&&(t.displayName=e.displayName),e.email!==void 0&&(t.email=e.email),C(this.http.patch(`${this.baseUrl}/${e.accountKey}`,t))}static \u0275fac=function(t){return new(t||s)};static \u0275prov=O({token:s,factory:s.\u0275fac,providedIn:"root"})}return s})();var le="cc:account-usage-update",ce="cc:account-list-update",oe=(()=>{class s{account_AS=w(re);socket_CS=w(ne);ngZone=w(R);socketSubscription=null;accounts_$=_([]);accountUsageMap_$=_(new Map);instanceMapping_$=_(null);usageHistoryMap_$=_(new Map);isLoading_$=_(!1);loadError_$=_(null);loadDashboardBootstrap(){return m(this,null,function*(){this.isLoading_$.set(!0),this.loadError_$.set(null);try{let[e,t]=yield Promise.all([this.account_AS.listAccounts(),this.account_AS.getInstanceMapping()]);this.accounts_$.set(e.items),this.instanceMapping_$.set(t)}catch(e){this.loadError_$.set(this.errorMessageOf(e))}finally{this.isLoading_$.set(!1)}})}loadAccounts(){return m(this,null,function*(){try{let e=yield this.account_AS.listAccounts();this.accounts_$.set(e.items)}catch(e){this.loadError_$.set(this.errorMessageOf(e))}})}loadAccountUsage(e){return m(this,null,function*(){try{let t=yield this.account_AS.getAccountUsage(e),n=new Map(this.accountUsageMap_$());n.set(e,t.items),this.accountUsageMap_$.set(n)}catch(t){this.loadError_$.set(this.errorMessageOf(t))}})}loadAccountUsageHistory(e){return m(this,null,function*(){try{let t=yield this.account_AS.getAccountUsageHistory(e),n=new Map(this.usageHistoryMap_$());n.set(e.accountKey,t.items),this.usageHistoryMap_$.set(n)}catch(t){this.loadError_$.set(this.errorMessageOf(t))}})}loadInstanceMapping(){return m(this,null,function*(){try{let e=yield this.account_AS.getInstanceMapping();this.instanceMapping_$.set(e)}catch(e){this.loadError_$.set(this.errorMessageOf(e))}})}refreshAccounts(){return m(this,null,function*(){this.isLoading_$.set(!0),this.loadError_$.set(null);try{let e=yield this.account_AS.refreshLocalAccounts();return yield this.loadAccounts(),e}catch(e){return this.loadError_$.set(this.errorMessageOf(e)),{refreshedKeys:[],scannedPaths:0}}finally{this.isLoading_$.set(!1)}})}refreshAccountUsage(e){return m(this,null,function*(){try{let t=yield this.account_AS.refreshAccountUsage(e);return yield this.loadAccountUsage(e),yield this.loadAccounts(),t}catch(t){return this.loadError_$.set(this.errorMessageOf(t)),{status:"error",windowsUpserted:0,email:null}}})}renameAccount(e){return m(this,null,function*(){try{let t=yield this.account_AS.renameAccount(e),n=this.accounts_$().map(l=>l.accountKey===e.accountKey?t:l);this.accounts_$.set(n)}catch(t){this.loadError_$.set(this.errorMessageOf(t))}})}startLiveUpdates(){this.socketSubscription==null&&(this.socketSubscription=this.socket_CS.event$.subscribe(e=>{this.ngZone.run(()=>{e.event===le?this.handleAccountUsageUpdate(e.payload):e.event===ce&&this.handleAccountListUpdate(e.payload)})}))}stopLiveUpdates(){this.socketSubscription!=null&&(this.socketSubscription.unsubscribe(),this.socketSubscription=null)}ngOnDestroy(){this.stopLiveUpdates()}handleAccountUsageUpdate(e){let t=e.accountKey,n=e.windowType;if(typeof t!="string"||t===""||typeof n!="string")return;let l={accountKey:t,windowType:n,utilization:typeof e.utilization=="number"?e.utilization:void 0,resetsAtMs:typeof e.resetsAtMs=="number"?e.resetsAtMs:void 0,lastObservedStatus:typeof e.lastObservedStatus=="string"?e.lastObservedStatus:void 0,observedAt:typeof e.observedAt=="string"?e.observedAt:void 0,lastObservedByCcapId:typeof e.lastObservedByCcapId=="string"?e.lastObservedByCcapId:void 0,lastObservedBySessionId:typeof e.lastObservedBySessionId=="string"?e.lastObservedBySessionId:void 0},c=new Map(this.accountUsageMap_$()),M=(c.get(t)??[]).filter(H=>H.windowType!==n);M.push(l),c.set(t,M),this.accountUsageMap_$.set(c)}handleAccountListUpdate(e){this.loadAccounts()}errorMessageOf(e){if(e instanceof Error)return e.message;if(typeof e=="object"&&e!==null){let t=e;if(typeof t.message=="string")return t.message}return String(e)}static \u0275fac=function(t){return new(t||s)};static \u0275prov=O({token:s,factory:s.\u0275fac,providedIn:"root"})}return s})();var T=(()=>{class s{static WINDOW_SEC_BY_TYPE={five_hour:18e3,seven_day:604800,seven_day_opus:604800,seven_day_sonnet:604800};static computePacingFraction(e){let t=s.WINDOW_SEC_BY_TYPE[e.windowType];if(t===void 0||!e.resetsAtMs||e.resetsAtMs<=0)return null;let n=t*1e3,l=e.resetsAtMs-n,g=Math.max(0,e.nowMs-l)/n;return g<0?0:g>1?1:g}static classifyPacing(e){if(e.utilization==null||e.pacingFraction===null)return null;let t=e.tolerance??.1,n=e.utilization-e.pacingFraction;return n>t?"above":n<-t?"below":"on-pace"}static colorClassForPacing(e){return e==="below"?"text-green-400":e==="on-pace"?"text-yellow-300":e==="above"?"text-red-400":"text-neutral-500"}}return s})();var de=(s,u)=>u.accountKey,ue=(s,u)=>u.ccapId,pe=()=>[],me=()=>["five_hour","seven_day","seven_day_opus","seven_day_sonnet","extra_usage"];function _e(s,u){s&1&&(i(0,"div",13),r(1," Loading dashboard\u2026 "),a())}function fe(s,u){s&1&&(i(0,"div",14)(1,"strong"),r(2,"Load error:"),a(),r(3),a()),s&2&&(o(3),d(" ",u," "))}function he(s,u){s&1&&(i(0,"div",19),v(),i(1,"svg",32),y(2,"path",33),a(),S(),i(3,"p",34),r(4,"No CC accounts discovered yet"),a(),i(5,"p",35),r(6," Run "),i(7,"code",36),r(8,"claude /login"),a(),r(9," on this machine, then click "),i(10,"strong",37),r(11,"Refresh accounts"),a(),r(12,". "),a()())}function xe(s,u){if(s&1&&(i(0,"span",62),r(1),a()),s&2){let e=p().$implicit,t=p();$("text-[9px] px-1.5 py-0.5 rounded-full border font-medium shrink-0 "+t.tokenStatusBadgeClassOf(e.tokenStatus)),f("title","Token status: "+e.tokenStatus),o(),d(" ",e.tokenStatus," ")}}function ge(s,u){if(s&1&&(i(0,"span",44),r(1),a()),s&2){let e=p().$implicit;o(),d(" ",e.planTier," ")}}function ye(s,u){if(s&1&&(i(0,"span",46),r(1),a()),s&2){let e=p().$implicit;o(),I(e.email)}}function be(s,u){if(s&1&&y(0,"div"),s&2){p();let e=W(0),t=p(2);$("h-full transition-all "+t.utilizationBarColorClass(e.utilization)),V("width",t.utilizationPercent(e.utilization),"%")}}function ve(s,u){if(s&1&&(N(0),i(1,"div",63)(2,"div",64),r(3),a(),i(4,"div",65)(5,"div",66),x(6,be,1,4,"div",67),a(),i(7,"span",68),r(8),a()(),i(9,"div",69),r(10),a()()),s&2){let e,t=u.$implicit,n=p().$implicit,l=p(),c=j(l.usageItemOfWindow(n.accountKey,t));o(),E("opacity-50",!c),o(),f("title",t),o(),d(" ",l.windowLabelOf(t)," "),o(3),h(c?6:-1),o(2),d(" ",l.formatUtilization((e=c==null?null:c.utilization)!==null&&e!==void 0?e:null)," "),o(),f("title","Resets in "+l.formatResetCountdown(c==null?null:c.resetsAtMs)),o(),d(" ",l.formatResetCountdown(c==null?null:c.resetsAtMs)," ")}}function Ce(s,u){s&1&&(i(0,"div",55),r(1," No data yet \u2014 click "),i(2,"strong",6),r(3,"Pull"),a(),r(4," or run a CC session. "),a())}function Se(s,u){s&1&&(i(0,"span",60),r(1,"loading\u2026"),a())}function we(s,u){s&1&&(i(0,"div",74),r(1," No history events recorded yet. Stream-driven events come from CC sessions when "),i(2,"code",76),r(3,"rate_limit_event"),a(),r(4," fires; pull-driven events come from periodic auto-pull or manual "),i(5,"strong"),r(6,"Pull"),a(),r(7," clicks. "),a())}function Ee(s,u){if(s&1&&(i(0,"tr",80)(1,"td",81),r(2),a(),i(3,"td",82),r(4),a(),i(5,"td",83)(6,"span"),r(7),a()(),i(8,"td",84),r(9),a(),i(10,"td",85),r(11),a(),i(12,"td",86),r(13),a()()),s&2){let e,t,n,l=u.$implicit,c=p(4);o(2),d(" ",c.formatObservedAt(l.observedAt)," "),o(2),d(" ",c.windowLabelOf(l.windowType)," "),o(2),$("text-[10px] px-1.5 py-0.5 rounded-full border "+c.sourceBadgeClassOf(l.source)),o(),d(" ",(e=l.source)!==null&&e!==void 0?e:"\u2014"," "),o(2),d(" ",c.formatUtilization((t=l.utilization)!==null&&t!==void 0?t:null)," "),o(2),d(" ",(n=l.lastObservedStatus)!==null&&n!==void 0?n:"\u2014"," "),o(2),d(" ",c.formatResetCountdown(l.resetsAtMs)," ")}}function $e(s,u){if(s&1&&(i(0,"div",75)(1,"table",77)(2,"thead",71)(3,"tr")(4,"th",78),r(5,"When"),a(),i(6,"th",78),r(7,"Window"),a(),i(8,"th",78),r(9,"Source"),a(),i(10,"th",79),r(11,"Util"),a(),i(12,"th",78),r(13,"Status"),a(),i(14,"th",78),r(15,"Reset in"),a()()(),i(16,"tbody"),k(17,Ee,14,8,"tr",80,P),a()()()),s&2){let e=p(2).$implicit,t=p();o(17),D(t.historyItemsOf(e.accountKey))}}function Me(s,u){if(s&1){let e=F();i(0,"div",61)(1,"div",70)(2,"span",71),r(3," Usage event history "),i(4,"span",72),r(5),a()(),i(6,"button",73),b("click",function(){U(e);let n=p().$implicit,l=p();return A(l.handleRefreshHistory(n.accountKey))}),r(7),a()(),x(8,we,8,0,"div",74)(9,$e,19,0,"div",75),a()}if(s&2){let e=p().$implicit,t=p();o(5),d(" \xB7 ",t.historyItemsOf(e.accountKey).length," event(s) "),o(),f("disabled",t.isHistoryLoading(e.accountKey)),o(),d(" ",t.isHistoryLoading(e.accountKey)?"\u2026":"Refresh history"," "),o(),h(!t.historyItemsOf(e.accountKey).length&&!t.isHistoryLoading(e.accountKey)?8:9)}}function Ue(s,u){if(s&1){let e=F();i(0,"div",38)(1,"div",39)(2,"div"),r(3),a(),i(4,"div",40)(5,"div",41)(6,"span",42),r(7),a(),x(8,xe,2,4,"span",43)(9,ge,2,1,"span",44),a(),i(10,"div",45),x(11,ye,2,1,"span",46),i(12,"button",47),b("click",function(){let n=U(e).$implicit,l=p();return A(l.handleEditEmail(n))}),r(13),a()(),i(14,"div",48)(15,"span",49),r(16,"key:"),a(),r(17),a()(),i(18,"button",50),b("click",function(){let n=U(e).$implicit,l=p();return A(l.handleRefreshUsage(n.accountKey))}),v(),i(19,"svg",51),y(20,"path",10),a(),S(),i(21,"span"),r(22),a()()(),i(23,"div",52)(24,"div",53),k(25,ve,11,9,"div",54,z),a(),x(27,Ce,5,0,"div",55),a(),i(28,"div",56)(29,"button",57),b("click",function(){let n=U(e).$implicit,l=p();return A(l.handleToggleHistory(n.accountKey))}),v(),i(30,"svg",58),y(31,"path",59),a(),r(32),x(33,Se,2,0,"span",60),a(),x(34,Me,10,4,"div",61),a()()}if(s&2){let e=u.$implicit,t=p();E("xl:col-span-2",t.isHistoryOpen(e.accountKey))("xl:col-span-3",!1),o(2),$("shrink-0 w-8 h-8 rounded-md flex items-center justify-center text-sm font-bold "+t.avatarBgClassOf(e.accountKey)),B("aria-label","Avatar for "+t.displayNameOf(e)),o(),d(" ",t.avatarLetterOf(e)," "),o(4),d(" ",t.displayNameOf(e)," "),o(),h(e.tokenStatus?8:-1),o(),h(e.planTier?9:-1),o(2),h(e.email?11:-1),o(),f("title",t.hasEmail(e)?"Edit email":"Set email manually"),o(),d(" ",t.hasEmail(e)?"\u270F\uFE0F Edit":"\u270F\uFE0F Set email"," "),o(),f("title","key: "+e.accountKey+(e.organizationId?" \xB7 org: "+e.organizationId:"")),o(3),d(" ",e.accountKey.slice(0,12)," "),o(),f("disabled",t.isRefreshingUsageOf(e.accountKey)),o(),E("animate-spin",t.isRefreshingUsageOf(e.accountKey)),o(3),I(t.isRefreshingUsageOf(e.accountKey)?"\u2026":"Pull"),o(3),D(K(27,me)),o(2),h(t.usageItemsOf(e.accountKey).length?-1:27),o(2),f("title",t.isHistoryOpen(e.accountKey)?"Hide usage history":"Show usage history"),o(),E("rotate-90",t.isHistoryOpen(e.accountKey)),o(2),d(" ",t.isHistoryOpen(e.accountKey)?"Hide":"Show"," history "),o(),h(t.isHistoryLoading(e.accountKey)?33:-1),o(),h(t.isHistoryOpen(e.accountKey)?34:-1)}}function Ae(s,u){s&1&&(i(0,"div",23),r(1," No instance mappings yet. Mappings appear after the first "),i(2,"code",76),r(3,"rate_limit_event"),a(),r(4," on a session with a bound account, or after a manual "),i(5,"strong",6),r(6,"Pull usage"),a(),r(7,". "),a())}function ke(s,u){if(s&1&&(i(0,"span",37),r(1),a(),i(2,"span",91),r(3),a(),i(4,"span",92),r(5,"\xB7"),a(),i(6,"span"),r(7,"5h: "),i(8,"strong"),r(9),a()(),i(10,"span",92),r(11,"\xB7"),a()),s&2){let e=u,t=p().$implicit,n=p();o(),d(" ",n.displayNameByAccountKey(e)," "),o(2),d("(",e.slice(0,6),"\u2026)"),o(5),$(n.pacingColorClassForFiveHour(t.items)),o(),I(n.formatUtilization(n.latestFiveHourUtilOf(t.items)))}}function De(s,u){if(s&1&&(i(0,"div",24)(1,"div",87),v(),i(2,"svg",9),y(3,"path",88),a()(),S(),i(4,"div",40)(5,"div",89),r(6),a(),i(7,"div",90),x(8,ke,12,5),i(9,"span",49),r(10),a()()()()),s&2){let e,t=u.$implicit,n=p();o(6),d(" ",t.ccapId," "),o(2),h((e=n.latestAccountKeyOf(t.items))?8:-1,e),o(2),d("",n.itemsCountOf(t.items)," record(s)")}}var Xe=(()=>{class s{account_DS=w(oe);isRefreshing_$=_(!1);isRefreshingAllUsage_$=_(!1);refreshingUsageKeys_$=_(new Set);editEmailModalOpen_$=_(!1);editEmailAccountKey_$=_(null);editEmailValue_$=_("");editEmailSaving_$=_(!1);expandedHistoryKeys_$=_(new Set);loadingHistoryKeys_$=_(new Set);instanceCount_$=Y(()=>this.account_DS.instanceMapping_$()?.instances.length??0);ngOnInit(){this.account_DS.loadDashboardBootstrap(),this.account_DS.startLiveUpdates()}handleRefresh(){return m(this,null,function*(){this.isRefreshing_$.set(!0);try{yield this.account_DS.refreshAccounts()}finally{this.isRefreshing_$.set(!1)}})}handleRefreshUsage(e){return m(this,null,function*(){this.refreshingUsageKeys_$.update(t=>{let n=new Set(t);return n.add(e),n});try{yield this.account_DS.refreshAccountUsage(e)}finally{this.refreshingUsageKeys_$.update(t=>{let n=new Set(t);return n.delete(e),n})}})}handleRefreshAllUsage(){return m(this,null,function*(){let e=this.account_DS.accounts_$().map(t=>t.accountKey);if(e.length!==0){this.isRefreshingAllUsage_$.set(!0);try{yield Promise.all(e.map(t=>this.account_DS.refreshAccountUsage(t)))}finally{this.isRefreshingAllUsage_$.set(!1)}}})}usageItemsOf(e){return this.account_DS.accountUsageMap_$().get(e)??[]}usageItemOfWindow(e,t){for(let n of this.usageItemsOf(e))if(n.windowType===t)return n;return null}formatResetCountdown(e){if(e==null||!isFinite(e)||e<=0)return"\u2014";let t=e-Date.now();if(t<=0)return"expired";let n=Math.floor(t/6e4),l=Math.floor(n/(60*24)),c=Math.floor(n%(60*24)/60),g=n%60;return l>0?`${l}d ${c}h`:c>0?`${c}h ${g}m`:`${g}m`}isRefreshingUsageOf(e){return this.refreshingUsageKeys_$().has(e)}handleEditEmail(e){this.editEmailAccountKey_$.set(e.accountKey),this.editEmailValue_$.set(e.email??""),this.editEmailModalOpen_$.set(!0)}handleEditEmailSave(){return m(this,null,function*(){let e=this.editEmailAccountKey_$();if(e===null)return;let t=this.editEmailValue_$().trim();this.editEmailSaving_$.set(!0);try{yield this.account_DS.renameAccount({accountKey:e,email:t===""?null:t}),this.handleEditEmailClose()}finally{this.editEmailSaving_$.set(!1)}})}handleEditEmailClose(){this.editEmailModalOpen_$.set(!1),this.editEmailAccountKey_$.set(null),this.editEmailValue_$.set("")}hasEmail(e){return typeof e.email=="string"&&e.email!==""}handleToggleHistory(e){return m(this,null,function*(){if(this.expandedHistoryKeys_$().has(e)){this.expandedHistoryKeys_$.update(l=>{let c=new Set(l);return c.delete(e),c});return}this.expandedHistoryKeys_$.update(l=>{let c=new Set(l);return c.add(e),c}),this.account_DS.usageHistoryMap_$().get(e)===void 0&&(yield this.loadHistoryFor(e))})}handleRefreshHistory(e){return m(this,null,function*(){yield this.loadHistoryFor(e)})}loadHistoryFor(e){return m(this,null,function*(){this.loadingHistoryKeys_$.update(t=>{let n=new Set(t);return n.add(e),n});try{yield this.account_DS.loadAccountUsageHistory({accountKey:e})}finally{this.loadingHistoryKeys_$.update(t=>{let n=new Set(t);return n.delete(e),n})}})}isHistoryOpen(e){return this.expandedHistoryKeys_$().has(e)}isHistoryLoading(e){return this.loadingHistoryKeys_$().has(e)}historyItemsOf(e){let n=(this.account_DS.usageHistoryMap_$().get(e)??[]).slice();return n.sort((l,c)=>{let g=l.observedAt?Date.parse(l.observedAt):0;return(c.observedAt?Date.parse(c.observedAt):0)-g}),n}sourceBadgeClassOf(e){return e==="stream"?"bg-cyan-900/40 border-cyan-700 text-cyan-300":e==="pull"?"bg-emerald-900/40 border-emerald-700 text-emerald-300":"bg-neutral-800 border-neutral-700 text-neutral-400"}formatObservedAt(e){if(e==null||e==="")return"\u2014";let t=Date.parse(e);if(!isFinite(t)||t<=0)return e;let n=new Date(t),l=String(n.getFullYear()),c=String(n.getMonth()+1).padStart(2,"0"),g=String(n.getDate()).padStart(2,"0"),M=String(n.getHours()).padStart(2,"0"),H=String(n.getMinutes()).padStart(2,"0"),se=String(n.getSeconds()).padStart(2,"0");return`${l}-${c}-${g} ${M}:${H}:${se}`}windowLabelOf(e){switch(e){case"five_hour":return"5-hour session";case"seven_day":return"Weekly";case"seven_day_opus":return"Weekly \xB7 Opus";case"seven_day_sonnet":return"Weekly \xB7 Sonnet";case"extra_usage":return"Extra (pay-as-you-go)";default:return e}}tokenStatusBadgeClassOf(e){return e==="valid"?"bg-green-900/40 border-green-700 text-green-300":e==="scope-incomplete"?"bg-amber-900/40 border-amber-700 text-amber-300":e==="expired"||e==="revoked"?"bg-red-900/40 border-red-700 text-red-300":"bg-neutral-800 border-neutral-700 text-neutral-400"}avatarLetterOf(e){let t=this.displayNameOf(e).trim();return t.length>0?t.charAt(0).toUpperCase():"A"}avatarBgClassOf(e){let t=["bg-emerald-700/60 text-emerald-200","bg-cyan-700/60 text-cyan-200","bg-indigo-700/60 text-indigo-200","bg-fuchsia-700/60 text-fuchsia-200","bg-amber-700/60 text-amber-200","bg-rose-700/60 text-rose-200","bg-teal-700/60 text-teal-200","bg-violet-700/60 text-violet-200"],n=0;for(let l=0;l<e.length;l++)n=n*31+e.charCodeAt(l)&2147483647;return t[n%t.length]}utilizationPercent(e){return e==null||!isFinite(e)?0:Math.max(0,Math.min(100,Math.round(e*100)))}utilizationBarColorClass(e){return e==null||!isFinite(e)?"bg-neutral-600":e>=.85?"bg-red-500":e>=.5?"bg-amber-500":"bg-emerald-500"}displayNameOf(e){return e.displayName!==""?e.displayName:`account-${e.accountKey.slice(0,6)}`}itemsCountOf(e){return e.length}latestFiveHourUtilOf(e){for(let t of e)if(t.windowType==="five_hour"&&typeof t.utilization=="number")return t.utilization;return null}latestAccountKeyOf(e){if(e.length===0)return null;let t=e[0];for(let n of e){let l=n.observedAt?Date.parse(n.observedAt):0,c=t.observedAt?Date.parse(t.observedAt):0;l>c&&(t=n)}return t.accountKey}displayNameByAccountKey(e){let t=this.account_DS.accounts_$().find(n=>n.accountKey===e);return t?this.displayNameOf(t):`account-${e.slice(0,6)}`}formatUtilization(e){return e===null?"\u2014":`${Math.round(e*100)}%`}utilizationColorClass(e){return e===null||e<.5?"text-green-400":e<.85?"text-yellow-300":"text-red-400"}pacingColorClassForFiveHour(e){let t;for(let c of e)if(c.windowType==="five_hour"){t=c;break}if(!t)return"text-neutral-500";let n=T.computePacingFraction({windowType:"five_hour",resetsAtMs:t.resetsAtMs,nowMs:Date.now()});if(n===null){let c=t.utilization??null;return this.utilizationColorClass(c)}let l=T.classifyPacing({utilization:t.utilization,pacingFraction:n});return T.colorClassForPacing(l)}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=L({type:s,selectors:[["app-cc-usage-dashboard"]],hostAttrs:[1,"flex","flex-col","flex-1","min-h-0","overflow-auto","p-4"],standalone:!0,features:[G],decls:55,vars:21,consts:[[1,"flex","items-start","justify-between","mb-6","pb-3","border-b","border-neutral-700","gap-3"],[1,"min-w-0","flex-1"],[1,"text-xl","font-bold","text-neutral-100","flex","items-center","gap-2"],["fill","none","stroke","currentColor","viewBox","0 0 24 24","aria-hidden","true",1,"w-5","h-5","text-neonCyan"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","2","d","M9 19V6l3-3 3 3v13M5 21h14a2 2 0 002-2v-7l-7-7-7 7v7a2 2 0 002 2z"],[1,"text-xs","text-neutral-500","mt-1"],[1,"text-neutral-400"],[1,"flex","items-center","gap-2","shrink-0"],["type","button","title","Re-scan local credential files (~/.claude/.credentials.json) and register newly discovered accounts.",1,"px-3","py-1.5","text-xs","rounded-md","border","border-neonDefault","bg-neonDefault/15","text-neutral-100","hover:bg-neonDefault/30","hover:border-neonDefault","transition-colors","disabled:opacity-40","disabled:cursor-not-allowed","font-medium","flex","items-center","gap-1.5",3,"click","disabled"],["fill","none","stroke","currentColor","viewBox","0 0 24 24","aria-hidden","true",1,"w-3.5","h-3.5"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","2","d","M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"],["type","button","title","Pull live usage data from Anthropic for every known account.",1,"px-3","py-1.5","text-xs","rounded-md","border","border-neonCyan","bg-neonCyan/15","text-neutral-100","hover:bg-neonCyan/30","hover:border-neonCyan","transition-colors","disabled:opacity-40","disabled:cursor-not-allowed","font-medium","flex","items-center","gap-1.5",3,"click","disabled"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","2","d","M13 10V3L4 14h7v7l9-11h-7z"],[1,"text-sm","text-neutral-400","italic","py-4"],[1,"text-sm","text-red-400","bg-red-950/30","border","border-red-700","rounded","p-3","mb-4"],[1,"mb-6"],[1,"text-xs","font-semibold","text-neutral-400","uppercase","tracking-wider","mb-3","flex","items-center","gap-2"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","2","d","M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"],[1,"text-neutral-600","font-normal","normal-case","tracking-normal"],[1,"rounded-lg","border","border-dashed","border-neutral-700","bg-neutral-900/30","px-6","py-10","text-center"],[1,"grid","grid-cols-1","md:grid-cols-2","xl:grid-cols-3","gap-3"],[1,"rounded-lg","border","border-neutral-800","hover:border-neutral-700","hover:shadow-md","hover:shadow-black/30","bg-gradient-to-br","from-neutral-900/60","to-neutral-950/30","transition-all","overflow-hidden","flex","flex-col",3,"xl:col-span-2","xl:col-span-3"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","2","d","M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"],[1,"rounded-lg","border","border-dashed","border-neutral-700","bg-neutral-900/30","px-4","py-6","text-center","text-[11px]","text-neutral-500"],[1,"flex","items-center","gap-3","py-2.5","px-3","rounded-lg","border","border-neutral-800","mb-2","hover:border-neutral-700","hover:bg-neutral-900/40","transition-all"],["title","Set CC account email","maxWidth","sm",3,"closed","isOpen"],[1,"flex","flex-col","gap-3"],[1,"text-xs","text-neutral-400"],["type","email","placeholder","user@example.com","autofocus","",1,"w-full","px-3","py-2","rounded-md","bg-neutral-900","border","border-neutral-700","text-sm","text-neutral-100","placeholder-neutral-500","focus:outline-none","focus:border-neonCyan",3,"ngModelChange","ngModel"],[1,"flex","items-center","justify-end","gap-2","pt-2"],["type","button",1,"px-3","py-1.5","text-xs","rounded-md","border","border-neutral-700","text-neutral-300","hover:bg-neutral-800","transition-colors",3,"click"],["type","button",1,"px-3","py-1.5","text-xs","rounded-md","border","border-neonCyan","bg-neonCyan/15","text-neutral-100","hover:bg-neonCyan/30","transition-colors","disabled:opacity-40","disabled:cursor-not-allowed",3,"click","disabled"],["fill","none","stroke","currentColor","viewBox","0 0 24 24","aria-hidden","true",1,"w-12","h-12","mx-auto","text-neutral-600","mb-3"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","1.5","d","M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"],[1,"text-sm","text-neutral-300","font-medium","mb-1"],[1,"text-xs","text-neutral-500"],[1,"px-1.5","py-0.5","rounded","bg-neutral-800","text-neonCyan","font-mono"],[1,"text-neutral-300"],[1,"rounded-lg","border","border-neutral-800","hover:border-neutral-700","hover:shadow-md","hover:shadow-black/30","bg-gradient-to-br","from-neutral-900/60","to-neutral-950/30","transition-all","overflow-hidden","flex","flex-col"],[1,"flex","items-start","gap-2","py-2.5","px-3","border-b","border-neutral-800/70"],[1,"flex-1","min-w-0"],[1,"flex","items-center","gap-1.5","min-w-0"],[1,"text-sm","text-neutral-100","font-semibold","truncate"],[3,"class","title"],[1,"text-[9px]","text-neutral-200","px-1.5","py-0.5","rounded-full","border","border-indigo-700","bg-indigo-900/30","font-medium","shrink-0"],[1,"flex","items-center","gap-1.5","mt-0.5","min-w-0"],[1,"text-[11px]","text-neonCyan/90","truncate"],["type","button",1,"text-[9px]","text-neutral-400","hover:text-neonCyan","border","border-neutral-700","hover:border-neonCyan","rounded","px-1","py-0.5","transition-colors","shrink-0",3,"click","title"],[1,"text-[10px]","text-neutral-500","font-mono","truncate","mt-0.5",3,"title"],[1,"text-neutral-600"],["type","button","title","Pull live usage data from Anthropic for this account.",1,"shrink-0","px-2","py-1","text-[11px]","rounded-md","border","border-neonCyan","bg-neonCyan/15","text-neutral-100","hover:bg-neonCyan/30","transition-colors","flex","items-center","gap-1","disabled:opacity-40","disabled:cursor-not-allowed",3,"click","disabled"],["fill","none","stroke","currentColor","viewBox","0 0 24 24","aria-hidden","true",1,"w-3","h-3"],[1,"px-3","py-2.5","border-b","border-neutral-800/40","flex-1"],[1,"space-y-2"],[1,"grid","grid-cols-[110px_1fr_64px]","items-center","gap-2","text-[11px]",3,"opacity-50"],[1,"text-[10px]","text-neutral-500","italic","mt-2","pt-2","border-t","border-neutral-800/40"],[1,"px-3","py-2"],["type","button",1,"text-[11px]","text-neutral-400","hover:text-neonCyan","flex","items-center","gap-1","transition-colors",3,"click","title"],["fill","none","stroke","currentColor","viewBox","0 0 24 24","aria-hidden","true",1,"w-3","h-3","transition-transform"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","2","d","M9 5l7 7-7 7"],[1,"text-neutral-500","italic","ml-1"],[1,"mt-2","rounded-md","border","border-neutral-800","bg-neutral-950/40","p-2"],[3,"title"],[1,"grid","grid-cols-[110px_1fr_64px]","items-center","gap-2","text-[11px]"],[1,"text-neutral-300","font-medium","truncate",3,"title"],[1,"flex","items-center","gap-2","min-w-0"],[1,"flex-1","h-2","bg-neutral-800","rounded-full","overflow-hidden","relative"],[3,"class","width"],[1,"font-mono","text-neutral-200","text-right","w-9","shrink-0"],[1,"font-mono","text-neutral-500","text-right","text-[10px]","truncate",3,"title"],[1,"flex","items-center","justify-between","mb-2"],[1,"text-[10px]","text-neutral-500","uppercase","tracking-wider"],[1,"text-neutral-600","normal-case","tracking-normal","ml-1"],["type","button","title","Re-fetch usage event history from server.",1,"text-[10px]","text-neutral-400","hover:text-neonCyan","border","border-neutral-700","hover:border-neonCyan","rounded","px-1.5","py-0.5","transition-colors","disabled:opacity-40","disabled:cursor-not-allowed",3,"click","disabled"],[1,"text-[11px]","text-neutral-500","italic","px-2","py-3"],[1,"overflow-x-auto"],[1,"px-1","py-0.5","rounded","bg-neutral-800","text-neutral-400","font-mono","text-[10px]"],[1,"w-full","text-[11px]","text-left"],[1,"py-1","px-2","font-medium"],[1,"py-1","px-2","font-medium","text-right"],[1,"border-t","border-neutral-800/60","hover:bg-neutral-900/40"],[1,"py-1","px-2","font-mono","text-neutral-300"],[1,"py-1","px-2","text-neutral-300"],[1,"py-1","px-2"],[1,"py-1","px-2","font-mono","text-neutral-200","text-right"],[1,"py-1","px-2","text-neutral-400"],[1,"py-1","px-2","font-mono","text-neutral-500"],[1,"shrink-0","w-7","h-7","rounded-md","bg-neutral-800","border","border-neutral-700","flex","items-center","justify-center","text-neutral-400"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","2","d","M5 12H3l9-9 9 9h-2M5 12v7a2 2 0 002 2h10a2 2 0 002-2v-7"],[1,"text-sm","text-neutral-200","font-medium","truncate","font-mono"],[1,"text-[11px]","text-neutral-500","mt-0.5","flex","items-center","gap-1.5","flex-wrap"],[1,"font-mono","text-neutral-600","text-[10px]"],[1,"text-neutral-700"]],template:function(t,n){if(t&1&&(i(0,"header",0)(1,"div",1)(2,"h1",2),v(),i(3,"svg",3),y(4,"path",4),a(),r(5," CC Usage & Accounts "),a(),S(),i(6,"p",5),r(7," Anthropic OAuth credentials \xB7 per-account 5-hour / weekly / opus / sonnet / extra usage windows \xB7 "),i(8,"span",6),r(9),a(),r(10," \xB7 "),i(11,"span",6),r(12),a()()(),i(13,"div",7)(14,"button",8),b("click",function(){return n.handleRefresh()}),v(),i(15,"svg",9),y(16,"path",10),a(),r(17),a(),S(),i(18,"button",11),b("click",function(){return n.handleRefreshAllUsage()}),v(),i(19,"svg",9),y(20,"path",12),a(),r(21),a()()(),x(22,_e,2,0,"div",13)(23,fe,4,1,"div",14),S(),i(24,"section",15)(25,"h2",16),v(),i(26,"svg",9),y(27,"path",17),a(),r(28," Known CC Accounts "),S(),i(29,"span",18),r(30),a()(),x(31,he,13,0,"div",19),i(32,"div",20),k(33,Ue,35,28,"div",21,de),a()(),i(35,"section")(36,"h2",16),v(),i(37,"svg",9),y(38,"path",22),a(),r(39," Instance \u2194 Account Mapping "),S(),i(40,"span",18),r(41),a()(),x(42,Ae,8,0,"div",23),k(43,De,11,3,"div",24,ue),a(),i(45,"app-s-modal",25),b("closed",function(){return n.handleEditEmailClose()}),i(46,"div",26)(47,"p",27),r(48," Enter the email address linked to this Claude account. Leave empty to clear. "),a(),i(49,"input",28),b("ngModelChange",function(c){return n.editEmailValue_$.set(c)}),a(),i(50,"div",29)(51,"button",30),b("click",function(){return n.handleEditEmailClose()}),r(52," Cancel "),a(),i(53,"button",31),b("click",function(){return n.handleEditEmailSave()}),r(54),a()()()()),t&2){let l,c;o(9),d("",n.account_DS.accounts_$().length," account(s)"),o(3),d("",n.instanceCount_$()," instance mapping(s)"),o(2),f("disabled",n.isRefreshing_$()||n.account_DS.isLoading_$()),o(),E("animate-spin",n.isRefreshing_$()),o(2),d(" ",n.isRefreshing_$()?"Discovering\u2026":"Refresh accounts"," "),o(),f("disabled",n.isRefreshingAllUsage_$()||!n.account_DS.accounts_$().length),o(),E("animate-spin",n.isRefreshingAllUsage_$()),o(2),d(" ",n.isRefreshingAllUsage_$()?"Pulling all\u2026":"Pull all usage"," "),o(),h(n.account_DS.isLoading_$()?22:-1),o(),h((l=n.account_DS.loadError_$())?23:-1,l),o(7),d(" \xB7 ",n.account_DS.accounts_$().length," "),o(),h(!n.account_DS.accounts_$().length&&!n.account_DS.isLoading_$()?31:-1),o(2),D(n.account_DS.accounts_$()),o(8),d(" \xB7 ",n.instanceCount_$()," "),o(),h(!n.instanceCount_$()&&!n.account_DS.isLoading_$()?42:-1),o(),D((c=(c=n.account_DS.instanceMapping_$())==null?null:c.instances)!==null&&c!==void 0?c:K(20,pe)),o(2),f("isOpen",n.editEmailModalOpen_$()),o(4),f("ngModel",n.editEmailValue_$()),o(4),f("disabled",n.editEmailSaving_$()),o(),d(" ",n.editEmailSaving_$()?"Saving\u2026":"Save"," ")}},dependencies:[Z,ee,J,Q,X,ie],encapsulation:2})}return s})();export{Xe as CC_UsageDashboard_Component};
|
|
2
|
-
//# sourceMappingURL=cc-usage-dashboard.component-F7S4MG67.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["src/app/_modules/external-sessions/_modules/claude-code/_services/cc-account.api-service.ts", "src/app/_modules/external-sessions/_modules/claude-code/_services/cc-account.data-service.ts", "src/app/_modules/external-sessions/_modules/claude-code/_collections/cc-account-usage-pacing.util.ts", "src/app/_modules/external-sessions/_modules/claude-code/_components/cc-usage-dashboard/cc-usage-dashboard.component.ts", "src/app/_modules/external-sessions/_modules/claude-code/_components/cc-usage-dashboard/cc-usage-dashboard.component.html"],
|
|
4
|
-
"sourcesContent": ["import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { firstValueFrom } from 'rxjs';\n\nimport { CC_Account_Response } from '../_models/interfaces/cc-account.interface';\nimport { CC_AccountUsageEvent_Response } from '../_models/interfaces/cc-account-usage-event.interface';\nimport {\n CC_AccountInstanceMapping_Response,\n CC_AccountUsageState_Response,\n} from '../_models/interfaces/cc-account-usage-state.interface';\nimport { environment } from '../../../../../../environments/environment';\n\n/**\n * CC Account REST API service (REQ-CC-USAGE-DASHBOARD-001 Slice 5 cycle 856).\n *\n * HTTP-bridge a server-oldali `CC_Account_Controller` endpoint-jaihoz\n * (`/cc-account/*`). Egyszerű thin api-service mintán a\n * `cc-cci-instance-data.api-service.ts`-hez hasonlóan: minden hívás\n * `firstValueFrom`-mal Promise-ra fordított `HttpClient` get/post/patch.\n *\n * A Slice 5+ Dashboard komponensek és a Slice 6 instance-mapping view\n * data-service-en keresztül használja.\n */\n@Injectable({ providedIn: 'root' })\nexport class CC_Account_ApiService {\n\n private readonly baseUrl: string = `${environment.api.baseUrl}/cc-account`;\n\n private readonly http: HttpClient = inject(HttpClient);\n\n /** GET /cc-account/list — cross-instance account-lista. */\n listAccounts(): Promise<{ items: CC_Account_Response[] }> {\n return firstValueFrom(\n this.http.get<{ items: CC_Account_Response[] }>(`${this.baseUrl}/list`),\n );\n }\n\n /** POST /cc-account/refresh — a hívó CCAP instance-en credential-discovery újrafutás. */\n refreshLocalAccounts(): Promise<{ refreshedKeys: string[]; scannedPaths: number }> {\n return firstValueFrom(\n this.http.post<{ refreshedKeys: string[]; scannedPaths: number }>(\n `${this.baseUrl}/refresh`,\n {},\n ),\n );\n }\n\n /**\n * GET /cc-account/instance-mapping — Slice 4 cross-instance aggregate.\n * Minden ismert CCAP instance group-by lastObservedByCcapId — melyik account-okat\n * látta utoljára.\n */\n getInstanceMapping(): Promise<CC_AccountInstanceMapping_Response> {\n return firstValueFrom(\n this.http.get<CC_AccountInstanceMapping_Response>(`${this.baseUrl}/instance-mapping`),\n );\n }\n\n /** GET /cc-account/:accountKey — egy account részletek. */\n getAccount(accountKey: string): Promise<CC_Account_Response> {\n return firstValueFrom(\n this.http.get<CC_Account_Response>(`${this.baseUrl}/${accountKey}`),\n );\n }\n\n /**\n * GET /cc-account/:accountKey/usage — Slice 3 per-account usage state-ek.\n * 0..5 rekord (egy windowType-onként).\n */\n getAccountUsage(accountKey: string): Promise<{ items: CC_AccountUsageState_Response[] }> {\n return firstValueFrom(\n this.http.get<{ items: CC_AccountUsageState_Response[] }>(\n `${this.baseUrl}/${accountKey}/usage`,\n ),\n );\n }\n\n /**\n * GET /cc-account/:accountKey/usage-history — történeti event-lista\n * (REQ-CC-USAGE-DASHBOARD-001 cycle 879). Append-only timeline; opcionális\n * windowType + idő-tartomány szűrők (`fromMs`, `toMs`).\n */\n getAccountUsageHistory(params: {\n accountKey: string;\n windowType?: string;\n fromMs?: number;\n toMs?: number;\n }): Promise<{ items: CC_AccountUsageEvent_Response[] }> {\n const query: string[] = [];\n if (params.windowType != null && params.windowType !== '') {\n query.push(`windowType=${encodeURIComponent(params.windowType)}`);\n }\n if (params.fromMs != null) {\n query.push(`fromMs=${params.fromMs}`);\n }\n if (params.toMs != null) {\n query.push(`toMs=${params.toMs}`);\n }\n const qs: string = query.length > 0 ? `?${query.join('&')}` : '';\n return firstValueFrom(\n this.http.get<{ items: CC_AccountUsageEvent_Response[] }>(\n `${this.baseUrl}/${params.accountKey}/usage-history${qs}`,\n ),\n );\n }\n\n /**\n * POST /cc-account/:accountKey/refresh-usage — aktív Anthropic usage-pull\n * (REQ-CC-USAGE-DASHBOARD-001 cycle 873). A server credential-fájl + Bearer-rel\n * hív, az 5 window state-et upsert-eli, profile-mezőket (email/orgId/planTier)\n * a CC_Account-ba updateli, socket-broadcast.\n */\n refreshAccountUsage(accountKey: string): Promise<{ status: string; windowsUpserted: number; email: string | null }> {\n return firstValueFrom(\n this.http.post<{ status: string; windowsUpserted: number; email: string | null }>(\n `${this.baseUrl}/${accountKey}/refresh-usage`,\n {},\n ),\n );\n }\n\n /**\n * PATCH /cc-account/:accountKey — user-editable mezők frissítése (cycle 876):\n * `displayName` és/vagy `email`. Mindkettő opcionális; legalább egy kell.\n * `email: null` (vagy üres string) → kitörli (clear). Server-side validáció:\n * displayName 200-char + control-char tiltás, email RFC alap-formátum + 320-char.\n */\n renameAccount(params: {\n accountKey: string;\n displayName?: string;\n email?: string | null;\n }): Promise<CC_Account_Response> {\n const body: Record<string, unknown> = {};\n if (params.displayName !== undefined) {\n body.displayName = params.displayName;\n }\n if (params.email !== undefined) {\n body.email = params.email;\n }\n return firstValueFrom(\n this.http.patch<CC_Account_Response>(\n `${this.baseUrl}/${params.accountKey}`,\n body,\n ),\n );\n }\n}\n", "import { inject, Injectable, NgZone, OnDestroy, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { CCAP_Socket_ControlService } from '../../../../../_services/control-services/ccap-socket.control-service';\nimport { CC_Account_ApiService } from './cc-account.api-service';\nimport { CC_Account_Response } from '../_models/interfaces/cc-account.interface';\nimport { CC_AccountUsageEvent_Response } from '../_models/interfaces/cc-account-usage-event.interface';\nimport {\n CC_AccountInstanceMapping_Response,\n CC_AccountUsageState_Response,\n} from '../_models/interfaces/cc-account-usage-state.interface';\n\n/** Socket envelope shape — `CCAP_Socket_ControlService.event$` Subject közvetíti. */\ninterface SocketEnvelope_Interface {\n event: string;\n payload: Record<string, unknown>;\n}\n\n/** REQ-CC-USAGE-DASHBOARD-001 Slice 6 second-half: socket event nevek. */\nconst SOCKET_EVENT_CC_ACCOUNT_USAGE_UPDATE: string = 'cc:account-usage-update';\nconst SOCKET_EVENT_CC_ACCOUNT_LIST_UPDATE: string = 'cc:account-list-update';\n\n/**\n * CC Account Dashboard data service (REQ-CC-USAGE-DASHBOARD-001 Slice 5 cycle 857).\n *\n * SSOT a Slice 5+ Dashboard kliens-oldali state-jéhez. Signal-ek a komponensek\n * change-detection-jéhez (`accounts_$`, `accountUsageMap_$`, `instanceMapping_$`,\n * `isLoading_$`, `loadError_$`); async metódusok REST hívásokhoz a\n * `CC_Account_ApiService`-en át (cycle 856).\n *\n * NEM perzisztál (a backend DBNT a SSOT) — a kliens csak cache-eli a fetch-eket\n * a komponens élettartam alatt. Refresh: explicit user-action (`refreshAccounts`)\n * vagy szocket-event (Slice 6).\n */\n@Injectable({ providedIn: 'root' })\nexport class CC_Account_DataService implements OnDestroy {\n\n private readonly account_AS: CC_Account_ApiService = inject(CC_Account_ApiService);\n private readonly socket_CS: CCAP_Socket_ControlService = inject(CCAP_Socket_ControlService);\n private readonly ngZone: NgZone = inject(NgZone);\n\n /** Socket envelope subscription élettartam-kezelése. */\n private socketSubscription: Subscription | null = null;\n\n /** Cross-instance account-lista (a `listAccounts` REST eredménye). */\n readonly accounts_$ = signal<CC_Account_Response[]>([]);\n\n /**\n * Per-account usage state cache: `accountKey → usage-state[]` (5 windowType-onként\n * egy rekord max). A Slice 5 Dashboard account-card-ok ebből rendernek.\n */\n readonly accountUsageMap_$ = signal<Map<string, CC_AccountUsageState_Response[]>>(\n new Map(),\n );\n\n /** Cross-instance aggregate (Slice 4 instance-mapping endpoint cache). */\n readonly instanceMapping_$ = signal<CC_AccountInstanceMapping_Response | null>(null);\n\n /**\n * Per-account usage-history cache: `accountKey → event[]` (REQ-CC-USAGE-DASHBOARD-001\n * cycle 879). Append-only timeline a `ccap_cc_account_usage_event` collection-ből;\n * lazy-loaded a Dashboard expand-panel megnyitásakor.\n */\n readonly usageHistoryMap_$ = signal<Map<string, CC_AccountUsageEvent_Response[]>>(\n new Map(),\n );\n\n /** Bármelyik load folyamatban-e (UI spinner-hez). */\n readonly isLoading_$ = signal<boolean>(false);\n\n /** Utolsó load hiba — null ha sikeres vagy nem futott. */\n readonly loadError_$ = signal<string | null>(null);\n\n /** Bootstrap fetch: account-list + instance-mapping párhuzamosan. */\n async loadDashboardBootstrap(): Promise<void> {\n this.isLoading_$.set(true);\n this.loadError_$.set(null);\n try {\n const [accountsResp, mappingResp] = await Promise.all([\n this.account_AS.listAccounts(),\n this.account_AS.getInstanceMapping(),\n ]);\n this.accounts_$.set(accountsResp.items);\n this.instanceMapping_$.set(mappingResp);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n } finally {\n this.isLoading_$.set(false);\n }\n }\n\n /** Csak az account-listát tölti újra (kis fetch). */\n async loadAccounts(): Promise<void> {\n try {\n const resp = await this.account_AS.listAccounts();\n this.accounts_$.set(resp.items);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n }\n }\n\n /**\n * Per-account usage-state fetch + cache-be írás. A Slice 5 account-card\n * komponens ezt hívja a saját accountKey-jére.\n */\n async loadAccountUsage(accountKey: string): Promise<void> {\n try {\n const resp = await this.account_AS.getAccountUsage(accountKey);\n const next: Map<string, CC_AccountUsageState_Response[]> = new Map(this.accountUsageMap_$());\n next.set(accountKey, resp.items);\n this.accountUsageMap_$.set(next);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n }\n }\n\n /**\n * Per-account usage-history fetch + cache-be írás (REQ-CC-USAGE-DASHBOARD-001\n * cycle 879). Lazy: a Dashboard expand-panel megnyitásakor hívjuk. Opcionális\n * windowType + idő-tartomány szűrőkkel.\n */\n async loadAccountUsageHistory(params: {\n accountKey: string;\n windowType?: string;\n fromMs?: number;\n toMs?: number;\n }): Promise<void> {\n try {\n const resp = await this.account_AS.getAccountUsageHistory(params);\n const next: Map<string, CC_AccountUsageEvent_Response[]> = new Map(this.usageHistoryMap_$());\n next.set(params.accountKey, resp.items);\n this.usageHistoryMap_$.set(next);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n }\n }\n\n /** Cross-instance aggregate refetch (Slice 4 — Slice 6 view bootstrap-jánál). */\n async loadInstanceMapping(): Promise<void> {\n try {\n const resp = await this.account_AS.getInstanceMapping();\n this.instanceMapping_$.set(resp);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n }\n }\n\n /**\n * Explicit user-trigger: a hívó CCAP instance-en credential-discovery újrafutás\n * + account-lista refetch. POST /refresh után automatikusan listAccounts-szal frissít.\n */\n async refreshAccounts(): Promise<{ refreshedKeys: string[]; scannedPaths: number }> {\n this.isLoading_$.set(true);\n this.loadError_$.set(null);\n try {\n const refreshResult = await this.account_AS.refreshLocalAccounts();\n await this.loadAccounts();\n return refreshResult;\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n return { refreshedKeys: [], scannedPaths: 0 };\n } finally {\n this.isLoading_$.set(false);\n }\n }\n\n /**\n * Aktív usage-pull egy adott account-ra (REQ-CC-USAGE-DASHBOARD-001 cycle 873).\n * A server `POST /cc-account/:accountKey/refresh-usage`-t hívja, ami az\n * Anthropic `/api/oauth/usage` endpoint-ját triggeri Bearer-rel. A pull\n * eredménye automatikusan jön socket-eventként (`cc:account-usage-update`),\n * de a sikeres POST után explicit re-fetch-eljük is az adott account usage-ét\n * + a teljes account-listát (a profile-mezők is updatelődtek).\n */\n async refreshAccountUsage(accountKey: string): Promise<{ status: string; windowsUpserted: number; email: string | null }> {\n try {\n const result = await this.account_AS.refreshAccountUsage(accountKey);\n // Re-fetch a friss state-et — bár a socket-event is jön, a cache-frissítés\n // garantált a user-action végén.\n await this.loadAccountUsage(accountKey);\n await this.loadAccounts();\n return result;\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n return { status: 'error', windowsUpserted: 0, email: null };\n }\n }\n\n /**\n * Display-name átírása + a cache-elt account-lista frissítése (a megfelelő\n * elem displayName mezőjének felülírása, signal-update).\n */\n async renameAccount(params: {\n accountKey: string;\n displayName?: string;\n email?: string | null;\n }): Promise<void> {\n try {\n const updated = await this.account_AS.renameAccount(params);\n const next: CC_Account_Response[] = this.accounts_$().map(\n (a): CC_Account_Response => (a.accountKey === params.accountKey ? updated : a),\n );\n this.accounts_$.set(next);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n }\n }\n\n /**\n * Socket subscription init (REQ-CC-USAGE-DASHBOARD-001 Slice 6 second-half cycle 871).\n * A `CCAP_Socket_ControlService.event$` Subject minden socket-event-et közvetít\n * envelope-formában (event-name + payload). Mi az `cc:account-usage-update`\n * és `cc:account-list-update` event-ekre szűrünk és a megfelelő signal-eket frissítjük.\n *\n * Late subscription: a Dashboard component `ngOnInit`-jéből hívjuk (vagy explicit\n * service-init-kor), hogy ne legyen subscription-overhead, ha a Dashboard sose\n * nyílik meg.\n */\n startLiveUpdates(): void {\n if (this.socketSubscription != null) {\n return;\n }\n this.socketSubscription = this.socket_CS.event$.subscribe(\n (envelope: SocketEnvelope_Interface): void => {\n this.ngZone.run((): void => {\n if (envelope.event === SOCKET_EVENT_CC_ACCOUNT_USAGE_UPDATE) {\n this.handleAccountUsageUpdate(envelope.payload);\n } else if (envelope.event === SOCKET_EVENT_CC_ACCOUNT_LIST_UPDATE) {\n this.handleAccountListUpdate(envelope.payload);\n }\n });\n },\n );\n }\n\n /** Socket subscription teardown (component destroy / explicit stop). */\n stopLiveUpdates(): void {\n if (this.socketSubscription != null) {\n this.socketSubscription.unsubscribe();\n this.socketSubscription = null;\n }\n }\n\n ngOnDestroy(): void {\n this.stopLiveUpdates();\n }\n\n /**\n * Per-account usage state real-time frissítés. A server `persistAccountUsageState`\n * upsert sikere után emit-elt event-ből építjük újra a `accountUsageMap_$`\n * megfelelő `accountKey` bejegyzését. Ha a windowType már szerepel, lecseréljük;\n * különben hozzáadjuk.\n */\n private handleAccountUsageUpdate(payload: Record<string, unknown>): void {\n const accountKey: unknown = payload.accountKey;\n const windowType: unknown = payload.windowType;\n if (typeof accountKey !== 'string' || accountKey === '' || typeof windowType !== 'string') {\n return;\n }\n const newItem: CC_AccountUsageState_Response = {\n accountKey: accountKey,\n windowType: windowType,\n utilization: typeof payload.utilization === 'number' ? payload.utilization : undefined,\n resetsAtMs: typeof payload.resetsAtMs === 'number' ? payload.resetsAtMs : undefined,\n lastObservedStatus: typeof payload.lastObservedStatus === 'string' ? payload.lastObservedStatus : undefined,\n observedAt: typeof payload.observedAt === 'string' ? payload.observedAt : undefined,\n lastObservedByCcapId: typeof payload.lastObservedByCcapId === 'string' ? payload.lastObservedByCcapId : undefined,\n lastObservedBySessionId: typeof payload.lastObservedBySessionId === 'string' ? payload.lastObservedBySessionId : undefined,\n };\n\n const next: Map<string, CC_AccountUsageState_Response[]> = new Map(this.accountUsageMap_$());\n const existing: CC_AccountUsageState_Response[] = next.get(accountKey) ?? [];\n const replaced: CC_AccountUsageState_Response[] = existing.filter(\n (item: CC_AccountUsageState_Response): boolean => item.windowType !== windowType,\n );\n replaced.push(newItem);\n next.set(accountKey, replaced);\n this.accountUsageMap_$.set(next);\n }\n\n /**\n * Account-pool változás (új account felfedezve, displayName-átírás): a\n * legegyszerűbb és legbiztonságosabb módon `loadAccounts()` re-fetch-csel\n * frissítjük a `accounts_$` signal-t. Cross-instance change-ek esetén is\n * ez a megközelítés robosztus (a DB SSOT-ből minden instance ugyanazt látja).\n */\n private handleAccountListUpdate(_payload: Record<string, unknown>): void {\n void this.loadAccounts();\n }\n\n /** Hibaüzenet kinyerés tipikus shape-ekből (HttpErrorResponse / Error / unknown). */\n private errorMessageOf(err: unknown): string {\n if (err instanceof Error) {\n return err.message;\n }\n if (typeof err === 'object' && err !== null) {\n const rec: Record<string, unknown> = err as Record<string, unknown>;\n if (typeof rec.message === 'string') {\n return rec.message;\n }\n }\n return String(err);\n }\n}\n", "/**\n * CC Account usage pacing util (REQ-CC-USAGE-DASHBOARD-001 Slice 6 cycle 867).\n *\n * Pacing target compute: minden time-windowed utilization-hoz (five_hour /\n * seven_day / seven_day_opus / seven_day_sonnet) ki tudja számolni a\n * jelenlegi időponti pacing-target-et (`elapsed_sec * 100 / window_sec`),\n * és klasszifikálja, hogy a tényleges utilization above / on-pace / below\n * pacing-en van-e. Az `extra_usage` window NEM time-based, ehhez NEM\n * használható (a hívó döntse el melyik window-on alkalmazza).\n *\n * Pure-static, NEM service-injekt. A Slice 6 Dashboard view-frissítés és\n * a későbbi per-window usage-card komponens egyaránt ezt használja.\n */\nexport class CC_AccountUsagePacing_Util {\n\n /** Time-windowed windowType-ok másodpercekben. */\n static readonly WINDOW_SEC_BY_TYPE: Record<string, number> = {\n five_hour: 5 * 3600,\n seven_day: 7 * 24 * 3600,\n seven_day_opus: 7 * 24 * 3600,\n seven_day_sonnet: 7 * 24 * 3600,\n };\n\n /**\n * Pacing fraction (0..1): mennyi telt el a window-ból. NEM utilization-hez\n * köthető. Példa: ha a 5h window 2.5h-nál tart, pacing = 0.5.\n *\n * Compute: `windowStart = resetsAtMs - windowSec*1000`;\n * `elapsed = max(0, now - windowStart)`;\n * `pacing = clamp(elapsed / windowSec*1000, 0, 1)`.\n *\n * Visszaad null-t, ha NEM time-windowed type vagy NEM kalkulálható\n * (windowSec hiányzik a térképen, resetsAtMs negatív/0).\n */\n static computePacingFraction(params: {\n windowType: string;\n resetsAtMs: number | undefined;\n nowMs: number;\n }): number | null {\n const windowSec: number | undefined =\n CC_AccountUsagePacing_Util.WINDOW_SEC_BY_TYPE[params.windowType];\n if (windowSec === undefined) {\n return null;\n }\n if (!params.resetsAtMs || params.resetsAtMs <= 0) {\n return null;\n }\n const windowMs: number = windowSec * 1000;\n const windowStart: number = params.resetsAtMs - windowMs;\n const elapsed: number = Math.max(0, params.nowMs - windowStart);\n const pacing: number = elapsed / windowMs;\n if (pacing < 0) {\n return 0;\n }\n if (pacing > 1) {\n return 1;\n }\n return pacing;\n }\n\n /**\n * Pacing klasszifikáció: utilization vs pacing-target. Tolerancia (default\n * 0.10) belül 'on-pace'; alatta 'below' (egészséges, alulhasználat); fölötte\n * 'above' (gyors égetés).\n *\n * Visszaad null-t, ha bármelyik input hiányzik.\n */\n static classifyPacing(params: {\n utilization: number | undefined;\n pacingFraction: number | null;\n tolerance?: number;\n }): 'below' | 'on-pace' | 'above' | null {\n if (params.utilization == null || params.pacingFraction === null) {\n return null;\n }\n const tolerance: number = params.tolerance ?? 0.10;\n const diff: number = params.utilization - params.pacingFraction;\n if (diff > tolerance) {\n return 'above';\n }\n if (diff < -tolerance) {\n return 'below';\n }\n return 'on-pace';\n }\n\n /**\n * Tailwind text-color class a pacing-klasszifikáció alapján:\n * - 'below' → 'text-green-400' (alulhasználat, egészséges)\n * - 'on-pace' → 'text-yellow-300' (on-target, watch)\n * - 'above' → 'text-red-400' (gyors égetés, közeli rate-limit)\n * - null → 'text-neutral-500' (no-data fallback)\n */\n static colorClassForPacing(classification: 'below' | 'on-pace' | 'above' | null): string {\n if (classification === 'below') {\n return 'text-green-400';\n }\n if (classification === 'on-pace') {\n return 'text-yellow-300';\n }\n if (classification === 'above') {\n return 'text-red-400';\n }\n return 'text-neutral-500';\n }\n}\n", "import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnInit, Signal, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { S_Modal_Component } from '../../../../../shared/_components/s-modal/s-modal.component';\nimport { CC_Account_DataService } from '../../_services/cc-account.data-service';\nimport { CC_Account_Response } from '../../_models/interfaces/cc-account.interface';\nimport { CC_AccountUsageState_Response } from '../../_models/interfaces/cc-account-usage-state.interface';\nimport { CC_AccountUsageEvent_Response } from '../../_models/interfaces/cc-account-usage-event.interface';\nimport { CC_AccountUsagePacing_Util } from '../../_collections/cc-account-usage-pacing.util';\n\n/**\n * CC Account Usage Dashboard skeleton komponens (REQ-CC-USAGE-DASHBOARD-001\n * Slice 5 cycle 858).\n *\n * Standalone Angular komponens — listázza az ismert CC account-okat + a\n * cross-instance instance-mapping aggregate-et. A skeleton-szint:\n * loading state, error state, üres-lista placeholder, és minimum lista-\n * render. A részletes account-card + per-window usage-render a Slice\n * további szeleteiben (cycle 859+).\n *\n * Data-flow: ngOnInit → CC_Account_DataService.loadDashboardBootstrap\n * (Promise.all listAccounts + getInstanceMapping) → signal-update →\n * template re-render.\n *\n * Refresh-button: explicit user-action → POST /cc-account/refresh +\n * automatikus listAccounts re-fetch (data-service refreshAccounts hívás).\n */\n@Component({\n selector: 'app-cc-usage-dashboard',\n standalone: true,\n imports: [CommonModule, FormsModule, S_Modal_Component],\n templateUrl: './cc-usage-dashboard.component.html',\n host: { class: 'flex flex-col flex-1 min-h-0 overflow-auto p-4' },\n})\n/** CC_UsageDashboard_Component class. */\nexport class CC_UsageDashboard_Component implements OnInit {\n\n readonly account_DS: CC_Account_DataService = inject(CC_Account_DataService);\n\n /** Refresh-button folyamat-jelző (a data-service.isLoading_$ mellett külön ehhez). */\n readonly isRefreshing_$ = signal<boolean>(false);\n\n /** Globális 'Refresh all usage' folyamat-jelző (cycle 873). */\n readonly isRefreshingAllUsage_$ = signal<boolean>(false);\n\n /** Per-account refresh-usage folyamat-jelző Set (cycle 873). */\n readonly refreshingUsageKeys_$ = signal<Set<string>>(new Set<string>());\n\n /** Edit-email modal nyitva-jelző (cycle 877: shared S_Modal flow). */\n readonly editEmailModalOpen_$ = signal<boolean>(false);\n\n /** Edit-email modal — éppen szerkesztett accountKey (null = nincs nyitva). */\n readonly editEmailAccountKey_$ = signal<string | null>(null);\n\n /** Edit-email modal — input-mező live értéke (ngModel két-irányú binding). */\n readonly editEmailValue_$ = signal<string>('');\n\n /** Edit-email modal — save folyamat-jelző (a Save gomb spinner-jéhez). */\n readonly editEmailSaving_$ = signal<boolean>(false);\n\n /**\n * Cycle 879: melyik account history-panel-je van nyitva. A Set-tartalom\n * accountKey-eket tárol (több is nyitva lehet egyszerre).\n */\n readonly expandedHistoryKeys_$ = signal<Set<string>>(new Set<string>());\n\n /** Per-account history-loading folyamat-jelző (a fetch alatt). */\n readonly loadingHistoryKeys_$ = signal<Set<string>>(new Set<string>());\n\n /**\n * Computed: a cross-instance instance-mapping aggregate `{ instances }`\n * top-level array hossza. A template ezzel dönti el, hogy a \"no instances\"\n * placeholder vagy a lista renderel.\n */\n readonly instanceCount_$: Signal<number> = computed((): number => {\n const mapping = this.account_DS.instanceMapping_$();\n return mapping?.instances.length ?? 0;\n });\n\n ngOnInit(): void {\n // fire-and-forget: a Promise hibái a data-service.loadError_$ signal-ba\n // mennek, NEM throw-olnak — a template loadError_$-rel rendereli.\n void this.account_DS.loadDashboardBootstrap();\n // REQ-CC-USAGE-DASHBOARD-001 Slice 6 second-half (cycle 871): real-time\n // socket subscription a `cc:account-usage-update` és `cc:account-list-update`\n // event-ekre. A subscription a service singleton élettartam alatt él\n // (root-providedIn), így nem teardown-oljuk a komponens destroy-jakor.\n this.account_DS.startLiveUpdates();\n }\n\n /** Refresh-button click — POST /refresh + auto listAccounts. */\n async handleRefresh(): Promise<void> {\n this.isRefreshing_$.set(true);\n try {\n await this.account_DS.refreshAccounts();\n } finally {\n this.isRefreshing_$.set(false);\n }\n }\n\n /** Per-account 'Refresh usage' gomb: aktív Anthropic /api/oauth/usage pull (cycle 873). */\n async handleRefreshUsage(accountKey: string): Promise<void> {\n this.refreshingUsageKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.add(accountKey);\n return next;\n });\n try {\n await this.account_DS.refreshAccountUsage(accountKey);\n } finally {\n this.refreshingUsageKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.delete(accountKey);\n return next;\n });\n }\n }\n\n /** Globális 'Refresh all usage' gomb: minden ismert account-ra usage-pull (cycle 873). */\n async handleRefreshAllUsage(): Promise<void> {\n const keys: string[] = this.account_DS.accounts_$().map(\n (a: CC_Account_Response): string => a.accountKey,\n );\n if (keys.length === 0) {\n return;\n }\n this.isRefreshingAllUsage_$.set(true);\n try {\n await Promise.all(keys.map((k: string): Promise<unknown> => this.account_DS.refreshAccountUsage(k)));\n } finally {\n this.isRefreshingAllUsage_$.set(false);\n }\n }\n\n /** Per-account usage state-ek a kliens cache-ből (5 windowType-onként max 1 rekord). */\n usageItemsOf(accountKey: string): CC_AccountUsageState_Response[] {\n return this.account_DS.accountUsageMap_$().get(accountKey) ?? [];\n }\n\n /** Egy adott windowType state-jét adja vissza, vagy null. */\n usageItemOfWindow(accountKey: string, windowType: string): CC_AccountUsageState_Response | null {\n for (const item of this.usageItemsOf(accountKey)) {\n if (item.windowType === windowType) {\n return item;\n }\n }\n return null;\n }\n\n /** Reset countdown formázás — emberi olvasható ('2h 34m', '5d 1h', 'expired'). */\n formatResetCountdown(resetsAtMs: number | undefined): string {\n if (resetsAtMs == null || !isFinite(resetsAtMs) || resetsAtMs <= 0) {\n return '—';\n }\n const diffMs: number = resetsAtMs - Date.now();\n if (diffMs <= 0) {\n return 'expired';\n }\n const totalMinutes: number = Math.floor(diffMs / 60_000);\n const days: number = Math.floor(totalMinutes / (60 * 24));\n const hours: number = Math.floor((totalMinutes % (60 * 24)) / 60);\n const minutes: number = totalMinutes % 60;\n if (days > 0) {\n return `${days}d ${hours}h`;\n }\n if (hours > 0) {\n return `${hours}h ${minutes}m`;\n }\n return `${minutes}m`;\n }\n\n /** True ha az adott account kulcsra fut a per-account refresh-usage. */\n isRefreshingUsageOf(accountKey: string): boolean {\n return this.refreshingUsageKeys_$().has(accountKey);\n }\n\n /**\n * Manuális email-bind: megnyitja a shared S_Modal-t az aktuális email-lel\n * (vagy üres mezővel); a tényleges PATCH a Save-click-en történik\n * (`handleEditEmailSave`).\n */\n handleEditEmail(account: CC_Account_Response): void {\n this.editEmailAccountKey_$.set(account.accountKey);\n this.editEmailValue_$.set(account.email ?? '');\n this.editEmailModalOpen_$.set(true);\n }\n\n /** Edit-email modal Save-click: trim + PATCH + close (üres = clear). */\n async handleEditEmailSave(): Promise<void> {\n const accountKey: string | null = this.editEmailAccountKey_$();\n if (accountKey === null) {\n return;\n }\n const trimmed: string = this.editEmailValue_$().trim();\n this.editEmailSaving_$.set(true);\n try {\n await this.account_DS.renameAccount({\n accountKey: accountKey,\n email: trimmed === '' ? null : trimmed,\n });\n this.handleEditEmailClose();\n } finally {\n this.editEmailSaving_$.set(false);\n }\n }\n\n /** Edit-email modal Cancel / X / backdrop: state-cleanup. */\n handleEditEmailClose(): void {\n this.editEmailModalOpen_$.set(false);\n this.editEmailAccountKey_$.set(null);\n this.editEmailValue_$.set('');\n }\n\n /** True, ha az account-rekord rendelkezik email-lel. Template használja a \"Set email\" / \"Edit email\" gomb-szöveghez. */\n hasEmail(account: CC_Account_Response): boolean {\n return typeof account.email === 'string' && account.email !== '';\n }\n\n /**\n * History expand-toggle (cycle 879). Első expand-kor lazy-fetch-eli a\n * `/cc-account/:accountKey/usage-history` endpoint-ot; további toggle-ök\n * NEM re-fetchelnek (a felhasználó explicit Refresh-history gombbal kérheti).\n */\n async handleToggleHistory(accountKey: string): Promise<void> {\n const isOpen: boolean = this.expandedHistoryKeys_$().has(accountKey);\n if (isOpen) {\n // Bezárás: csak a Set-ből kivesszük; a cache marad.\n this.expandedHistoryKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.delete(accountKey);\n return next;\n });\n return;\n }\n // Nyitás: Set-be tesszük + lazy-load (csak ha még nincs cache-ben).\n this.expandedHistoryKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.add(accountKey);\n return next;\n });\n const cached: CC_AccountUsageEvent_Response[] | undefined =\n this.account_DS.usageHistoryMap_$().get(accountKey);\n if (cached === undefined) {\n await this.loadHistoryFor(accountKey);\n }\n }\n\n /** Explicit history-refresh (a panel-en belül 'Refresh history' gomb). */\n async handleRefreshHistory(accountKey: string): Promise<void> {\n await this.loadHistoryFor(accountKey);\n }\n\n /** Belső: history-fetch + per-account loading-set kezelés. */\n private async loadHistoryFor(accountKey: string): Promise<void> {\n this.loadingHistoryKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.add(accountKey);\n return next;\n });\n try {\n await this.account_DS.loadAccountUsageHistory({ accountKey: accountKey });\n } finally {\n this.loadingHistoryKeys_$.update((set: Set<string>): Set<string> => {\n const next: Set<string> = new Set(set);\n next.delete(accountKey);\n return next;\n });\n }\n }\n\n /** True, ha a history-panel nyitva az adott accountKey-re. */\n isHistoryOpen(accountKey: string): boolean {\n return this.expandedHistoryKeys_$().has(accountKey);\n }\n\n /** True, ha éppen fut a history-fetch az adott accountKey-re. */\n isHistoryLoading(accountKey: string): boolean {\n return this.loadingHistoryKeys_$().has(accountKey);\n }\n\n /** History-eventek (descending observedAt) az adott accountKey-re a cache-ből. */\n historyItemsOf(accountKey: string): CC_AccountUsageEvent_Response[] {\n const items: CC_AccountUsageEvent_Response[] =\n this.account_DS.usageHistoryMap_$().get(accountKey) ?? [];\n // Defensive copy + descending observedAt sort (újabb felül).\n const copy: CC_AccountUsageEvent_Response[] = items.slice();\n copy.sort((a: CC_AccountUsageEvent_Response, b: CC_AccountUsageEvent_Response): number => {\n const ta: number = a.observedAt ? Date.parse(a.observedAt) : 0;\n const tb: number = b.observedAt ? Date.parse(b.observedAt) : 0;\n return tb - ta;\n });\n return copy;\n }\n\n /** History-event source-badge szín (stream / pull / unknown). */\n sourceBadgeClassOf(source: string | undefined): string {\n if (source === 'stream') {\n return 'bg-cyan-900/40 border-cyan-700 text-cyan-300';\n }\n if (source === 'pull') {\n return 'bg-emerald-900/40 border-emerald-700 text-emerald-300';\n }\n return 'bg-neutral-800 border-neutral-700 text-neutral-400';\n }\n\n /** ISO timestamp → emberi olvasható lokál-string ('2026-05-09 14:32:01'); null → '—'. */\n formatObservedAt(observedAt: string | undefined): string {\n if (observedAt == null || observedAt === '') {\n return '—';\n }\n const t: number = Date.parse(observedAt);\n if (!isFinite(t) || t <= 0) {\n return observedAt;\n }\n const d: Date = new Date(t);\n const yyyy: string = String(d.getFullYear());\n const mm: string = String(d.getMonth() + 1).padStart(2, '0');\n const dd: string = String(d.getDate()).padStart(2, '0');\n const hh: string = String(d.getHours()).padStart(2, '0');\n const mi: string = String(d.getMinutes()).padStart(2, '0');\n const ss: string = String(d.getSeconds()).padStart(2, '0');\n return `${yyyy}-${mm}-${dd} ${hh}:${mi}:${ss}`;\n }\n\n /**\n * Window-typeName → emberi label (template-render). Pure mapping.\n * Cycle 875: vizuális javítás — a snake_case helyett title-case + iconok.\n */\n windowLabelOf(windowType: string): string {\n switch (windowType) {\n case 'five_hour': return '5-hour session';\n case 'seven_day': return 'Weekly';\n case 'seven_day_opus': return 'Weekly · Opus';\n case 'seven_day_sonnet': return 'Weekly · Sonnet';\n case 'extra_usage': return 'Extra (pay-as-you-go)';\n default: return windowType;\n }\n }\n\n /**\n * Token-status badge color-class. Zöld: valid; sárga: scope-incomplete;\n * piros: expired/revoked; szürke: unknown.\n */\n tokenStatusBadgeClassOf(tokenStatus: string | undefined): string {\n if (tokenStatus === 'valid') {\n return 'bg-green-900/40 border-green-700 text-green-300';\n }\n if (tokenStatus === 'scope-incomplete') {\n return 'bg-amber-900/40 border-amber-700 text-amber-300';\n }\n if (tokenStatus === 'expired' || tokenStatus === 'revoked') {\n return 'bg-red-900/40 border-red-700 text-red-300';\n }\n return 'bg-neutral-800 border-neutral-700 text-neutral-400';\n }\n\n /**\n * Account avatar — a displayName első értelmes karaktere (vagy 'A' fallback).\n * Pure mapping; a HTML-template hash-szín-ezi a card-ikon háttérszínét.\n */\n avatarLetterOf(account: CC_Account_Response): string {\n const name: string = this.displayNameOf(account).trim();\n return name.length > 0 ? name.charAt(0).toUpperCase() : 'A';\n }\n\n /**\n * Avatar háttérszín stable hash-ből az accountKey alapján. 8 paletta-szín\n * — a card-ikon visszaadja az account vizuális identitását.\n */\n avatarBgClassOf(accountKey: string): string {\n const palette: string[] = [\n 'bg-emerald-700/60 text-emerald-200',\n 'bg-cyan-700/60 text-cyan-200',\n 'bg-indigo-700/60 text-indigo-200',\n 'bg-fuchsia-700/60 text-fuchsia-200',\n 'bg-amber-700/60 text-amber-200',\n 'bg-rose-700/60 text-rose-200',\n 'bg-teal-700/60 text-teal-200',\n 'bg-violet-700/60 text-violet-200',\n ];\n let hash: number = 0;\n for (let i: number = 0; i < accountKey.length; i++) {\n hash = (hash * 31 + accountKey.charCodeAt(i)) & 0x7fffffff;\n }\n return palette[hash % palette.length];\n }\n\n /**\n * Utilization → progress-bar width inline-style (0..100%). Null → 0%.\n * A HTML-ben a progress-csík `[style.width.%]`-szel kötve.\n */\n utilizationPercent(utilization: number | undefined): number {\n if (utilization == null || !isFinite(utilization)) {\n return 0;\n }\n return Math.max(0, Math.min(100, Math.round(utilization * 100)));\n }\n\n /**\n * Progress-bar fill color (zöld 0..50%, sárga 50..85%, piros 85+%; szürke ha null).\n */\n utilizationBarColorClass(utilization: number | undefined): string {\n if (utilization == null || !isFinite(utilization)) {\n return 'bg-neutral-600';\n }\n if (utilization >= 0.85) {\n return 'bg-red-500';\n }\n if (utilization >= 0.5) {\n return 'bg-amber-500';\n }\n return 'bg-emerald-500';\n }\n\n /**\n * Template helper: account `displayName` vagy fallback (`accountKey első 6 char`).\n * NEM logika — pure mapping, getter-szerű, max-method-params szabályon belül.\n */\n displayNameOf(account: CC_Account_Response): string {\n return account.displayName !== '' ? account.displayName : `account-${account.accountKey.slice(0, 6)}`;\n }\n\n /**\n * Template helper: per-instance items count → mappingéhez render-be ('N usage records').\n * Pure mapping a Slice 6 view részletesebb table-cell-jei előtt.\n */\n itemsCountOf(items: CC_AccountUsageState_Response[]): number {\n return items.length;\n }\n\n /**\n * Slice 6 first-step (cycle 865): latest five_hour utilization egy instance-en.\n * A `five_hour` windowType item utilization-jét adja vissza (0..1 fraction);\n * ha nincs ilyen item → null (template '—'-t renderel).\n */\n latestFiveHourUtilOf(items: CC_AccountUsageState_Response[]): number | null {\n for (const item of items) {\n if (item.windowType === 'five_hour' && typeof item.utilization === 'number') {\n return item.utilization;\n }\n }\n return null;\n }\n\n /**\n * Slice 6 first-step (cycle 865): legutoljára-látott account-kulcs egy instance-en.\n * Az `items` rendszerint egyetlen account-hoz tartozik (per-instance only egy active),\n * de defensive a legutóbbi observedAt szerint választ. Empty → null.\n */\n latestAccountKeyOf(items: CC_AccountUsageState_Response[]): string | null {\n if (items.length === 0) {\n return null;\n }\n let latest: CC_AccountUsageState_Response = items[0];\n for (const item of items) {\n const a: number = item.observedAt ? Date.parse(item.observedAt) : 0;\n const b: number = latest.observedAt ? Date.parse(latest.observedAt) : 0;\n if (a > b) {\n latest = item;\n }\n }\n return latest.accountKey;\n }\n\n /**\n * Slice 6 first-step (cycle 865): account-displayName lookup accountKey alapján\n * az `accounts_$` cache-ből. Fallback `account-{first6}` ha nincs match.\n */\n displayNameByAccountKey(accountKey: string): string {\n const found: CC_Account_Response | undefined = this.account_DS.accounts_$().find(\n (a): boolean => a.accountKey === accountKey,\n );\n if (found) {\n return this.displayNameOf(found);\n }\n return `account-${accountKey.slice(0, 6)}`;\n }\n\n /**\n * Slice 6 first-step (cycle 865): utilization fraction (0..1) → percent string '42%'.\n * NEM logika — pure mapping. null → '—' (no data).\n */\n formatUtilization(utilization: number | null): string {\n if (utilization === null) {\n return '—';\n }\n return `${Math.round(utilization * 100)}%`;\n }\n\n /**\n * Slice 6 second-step (cycle 866): utilization-küszöb-szín a Dashboard 5h\n * percent-jelzéséhez. Egyszerűbb threshold-alapú szín-jelzés (NEM időbeli-\n * adaptív). Megmarad mint fallback / null-data eset, ahol a pacing NEM\n * számolható (resetsAtMs hiányzik). Tartományok REQ-CC-RATE-001 amber/red.\n */\n utilizationColorClass(utilization: number | null): string {\n if (utilization === null || utilization < 0.5) {\n return 'text-green-400';\n }\n if (utilization < 0.85) {\n return 'text-yellow-300';\n }\n return 'text-red-400';\n }\n\n /**\n * Slice 6 fourth-step (cycle 868): pacing-target színkód a Dashboard 5h\n * utilization-jelzéséhez. A cycle 866 sima threshold-küszöb helyett\n * időbeli-adaptív: a window-elapsed alapján a user lássa, hogy a tényleges\n * utilization \"above pacing\" (gyors), \"on-pace\" vagy \"below pacing\"\n * (egészséges). A `CC_AccountUsagePacing_Util` static metódusait láncolja.\n *\n * Fallback `utilizationColorClass`-ra, ha pacing NEM számolható\n * (resetsAtMs hiányzik / extra_usage). Ezzel mindig van valami szín-jelzés.\n */\n pacingColorClassForFiveHour(items: CC_AccountUsageState_Response[]): string {\n let fiveHourItem: CC_AccountUsageState_Response | undefined;\n for (const item of items) {\n if (item.windowType === 'five_hour') {\n fiveHourItem = item;\n break;\n }\n }\n if (!fiveHourItem) {\n return 'text-neutral-500';\n }\n const pacingFraction: number | null = CC_AccountUsagePacing_Util.computePacingFraction({\n windowType: 'five_hour',\n resetsAtMs: fiveHourItem.resetsAtMs,\n nowMs: Date.now(),\n });\n if (pacingFraction === null) {\n // Fallback: time-bázis NEM számolható → sima threshold-color.\n const util: number | null = fiveHourItem.utilization ?? null;\n return this.utilizationColorClass(util);\n }\n const classification: 'below' | 'on-pace' | 'above' | null =\n CC_AccountUsagePacing_Util.classifyPacing({\n utilization: fiveHourItem.utilization,\n pacingFraction: pacingFraction,\n });\n return CC_AccountUsagePacing_Util.colorClassForPacing(classification);\n }\n}\n", "<!-- CC Account Usage Dashboard (REQ-CC-USAGE-DASHBOARD-001).\n Cycle 875 visual polish: avatar, status-badges, progress-bars, human window labels. -->\n\n<header class=\"flex items-start justify-between mb-6 pb-3 border-b border-neutral-700 gap-3\">\n <div class=\"min-w-0 flex-1\">\n <h1 class=\"text-xl font-bold text-neutral-100 flex items-center gap-2\">\n <svg class=\"w-5 h-5 text-neonCyan\" 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=\"M9 19V6l3-3 3 3v13M5 21h14a2 2 0 002-2v-7l-7-7-7 7v7a2 2 0 002 2z\"/>\n </svg>\n CC Usage & Accounts\n </h1>\n <p class=\"text-xs text-neutral-500 mt-1\">\n Anthropic OAuth credentials · per-account 5-hour / weekly / opus / sonnet / extra usage windows\n ·\n <span class=\"text-neutral-400\">{{ account_DS.accounts_$().length }} account(s)</span>\n ·\n <span class=\"text-neutral-400\">{{ instanceCount_$() }} instance mapping(s)</span>\n </p>\n </div>\n <div class=\"flex items-center gap-2 shrink-0\">\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs rounded-md border border-neonDefault bg-neonDefault/15 text-neutral-100\n hover:bg-neonDefault/30 hover:border-neonDefault transition-colors\n disabled:opacity-40 disabled:cursor-not-allowed font-medium flex items-center gap-1.5\"\n [disabled]=\"isRefreshing_$() || account_DS.isLoading_$()\"\n (click)=\"handleRefresh()\"\n title=\"Re-scan local credential files (~/.claude/.credentials.json) and register newly discovered accounts.\"\n >\n <svg class=\"w-3.5 h-3.5\" [class.animate-spin]=\"isRefreshing_$()\" 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=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"/>\n </svg>\n {{ isRefreshing_$() ? 'Discovering…' : 'Refresh accounts' }}\n </button>\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs rounded-md border border-neonCyan bg-neonCyan/15 text-neutral-100\n hover:bg-neonCyan/30 hover:border-neonCyan transition-colors\n disabled:opacity-40 disabled:cursor-not-allowed font-medium flex items-center gap-1.5\"\n [disabled]=\"isRefreshingAllUsage_$() || !account_DS.accounts_$().length\"\n (click)=\"handleRefreshAllUsage()\"\n title=\"Pull live usage data from Anthropic for every known account.\"\n >\n <svg class=\"w-3.5 h-3.5\" [class.animate-spin]=\"isRefreshingAllUsage_$()\" 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 {{ isRefreshingAllUsage_$() ? 'Pulling all…' : 'Pull all usage' }}\n </button>\n </div>\n</header>\n\n@if (account_DS.isLoading_$()) {\n <div class=\"text-sm text-neutral-400 italic py-4\">\n Loading dashboard…\n </div>\n}\n\n@if (account_DS.loadError_$(); as err) {\n <div class=\"text-sm text-red-400 bg-red-950/30 border border-red-700 rounded p-3 mb-4\">\n <strong>Load error:</strong> {{ err }}\n </div>\n}\n\n<section class=\"mb-6\">\n <h2 class=\"text-xs font-semibold text-neutral-400 uppercase tracking-wider mb-3 flex items-center gap-2\">\n <svg class=\"w-3.5 h-3.5\" 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=\"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z\"/>\n </svg>\n Known CC Accounts\n <span class=\"text-neutral-600 font-normal normal-case tracking-normal\">\n · {{ account_DS.accounts_$().length }}\n </span>\n </h2>\n\n @if (!account_DS.accounts_$().length && !account_DS.isLoading_$()) {\n <div class=\"rounded-lg border border-dashed border-neutral-700 bg-neutral-900/30 px-6 py-10 text-center\">\n <svg class=\"w-12 h-12 mx-auto text-neutral-600 mb-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\n d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\"/>\n </svg>\n <p class=\"text-sm text-neutral-300 font-medium mb-1\">No CC accounts discovered yet</p>\n <p class=\"text-xs text-neutral-500\">\n Run <code class=\"px-1.5 py-0.5 rounded bg-neutral-800 text-neonCyan font-mono\">claude /login</code>\n on this machine, then click <strong class=\"text-neutral-300\">Refresh accounts</strong>.\n </p>\n </div>\n }\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-3\">\n @for (account of account_DS.accounts_$(); track account.accountKey) {\n <div class=\"rounded-lg border border-neutral-800 hover:border-neutral-700 hover:shadow-md hover:shadow-black/30\n bg-gradient-to-br from-neutral-900/60 to-neutral-950/30 transition-all overflow-hidden flex flex-col\"\n [class.xl:col-span-2]=\"isHistoryOpen(account.accountKey)\"\n [class.xl:col-span-3]=\"false\">\n <!-- Header row: avatar + displayName + accountKey + status badges + refresh gomb -->\n <div class=\"flex items-start gap-2 py-2.5 px-3 border-b border-neutral-800/70\">\n <!-- Avatar (initial letter, hash-stable color) -->\n <div [class]=\"'shrink-0 w-8 h-8 rounded-md flex items-center justify-center text-sm font-bold ' + avatarBgClassOf(account.accountKey)\"\n [attr.aria-label]=\"'Avatar for ' + displayNameOf(account)\">\n {{ avatarLetterOf(account) }}\n </div>\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex items-center gap-1.5 min-w-0\">\n <span class=\"text-sm text-neutral-100 font-semibold truncate\">\n {{ displayNameOf(account) }}\n </span>\n @if (account.tokenStatus) {\n <span [class]=\"'text-[9px] px-1.5 py-0.5 rounded-full border font-medium shrink-0 ' + tokenStatusBadgeClassOf(account.tokenStatus)\"\n [title]=\"'Token status: ' + account.tokenStatus\">\n {{ account.tokenStatus }}\n </span>\n }\n @if (account.planTier) {\n <span class=\"text-[9px] text-neutral-200 px-1.5 py-0.5 rounded-full border border-indigo-700 bg-indigo-900/30 font-medium shrink-0\">\n {{ account.planTier }}\n </span>\n }\n </div>\n <div class=\"flex items-center gap-1.5 mt-0.5 min-w-0\">\n @if (account.email) {\n <span class=\"text-[11px] text-neonCyan/90 truncate\">{{ account.email }}</span>\n }\n <button\n type=\"button\"\n class=\"text-[9px] text-neutral-400 hover:text-neonCyan border border-neutral-700\n hover:border-neonCyan rounded px-1 py-0.5 transition-colors shrink-0\"\n (click)=\"handleEditEmail(account)\"\n [title]=\"hasEmail(account) ? 'Edit email' : 'Set email manually'\"\n >\n {{ hasEmail(account) ? '✏️ Edit' : '✏️ Set email' }}\n </button>\n </div>\n <div class=\"text-[10px] text-neutral-500 font-mono truncate mt-0.5\"\n [title]=\"'key: ' + account.accountKey + (account.organizationId ? ' · org: ' + account.organizationId : '')\">\n <span class=\"text-neutral-600\">key:</span> {{ account.accountKey.slice(0, 12) }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"shrink-0 px-2 py-1 text-[11px] rounded-md border border-neonCyan bg-neonCyan/15 text-neutral-100\n hover:bg-neonCyan/30 transition-colors flex items-center gap-1\n disabled:opacity-40 disabled:cursor-not-allowed\"\n [disabled]=\"isRefreshingUsageOf(account.accountKey)\"\n (click)=\"handleRefreshUsage(account.accountKey)\"\n title=\"Pull live usage data from Anthropic for this account.\"\n >\n <svg class=\"w-3 h-3\" [class.animate-spin]=\"isRefreshingUsageOf(account.accountKey)\" 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=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"/>\n </svg>\n <span>{{ isRefreshingUsageOf(account.accountKey) ? '…' : 'Pull' }}</span>\n </button>\n </div>\n <!-- Usage table: 5 windowType-onként progress-bar + reset countdown.\n A 5 sor MINDIG látható (placeholder '—' és üres progress-bar, ha nincs data) — cycle 881. -->\n <div class=\"px-3 py-2.5 border-b border-neutral-800/40 flex-1\">\n <div class=\"space-y-2\">\n @for (windowType of ['five_hour', 'seven_day', 'seven_day_opus', 'seven_day_sonnet', 'extra_usage']; track windowType) {\n @let item = usageItemOfWindow(account.accountKey, windowType);\n <div class=\"grid grid-cols-[110px_1fr_64px] items-center gap-2 text-[11px]\"\n [class.opacity-50]=\"!item\">\n <div class=\"text-neutral-300 font-medium truncate\" [title]=\"windowType\">\n {{ windowLabelOf(windowType) }}\n </div>\n <div class=\"flex items-center gap-2 min-w-0\">\n <div class=\"flex-1 h-2 bg-neutral-800 rounded-full overflow-hidden relative\">\n @if (item) {\n <div [class]=\"'h-full transition-all ' + utilizationBarColorClass(item.utilization)\"\n [style.width.%]=\"utilizationPercent(item.utilization)\"></div>\n }\n </div>\n <span class=\"font-mono text-neutral-200 text-right w-9 shrink-0\">\n {{ formatUtilization(item?.utilization ?? null) }}\n </span>\n </div>\n <div class=\"font-mono text-neutral-500 text-right text-[10px] truncate\"\n [title]=\"'Resets in ' + formatResetCountdown(item?.resetsAtMs)\">\n {{ formatResetCountdown(item?.resetsAtMs) }}\n </div>\n </div>\n }\n </div>\n @if (!usageItemsOf(account.accountKey).length) {\n <div class=\"text-[10px] text-neutral-500 italic mt-2 pt-2 border-t border-neutral-800/40\">\n No data yet — click <strong class=\"text-neutral-400\">Pull</strong> or run a CC session.\n </div>\n }\n </div>\n <!-- History expand-toggle + lazy-loaded panel (cycle 879). -->\n <div class=\"px-3 py-2\">\n <button\n type=\"button\"\n class=\"text-[11px] text-neutral-400 hover:text-neonCyan flex items-center gap-1 transition-colors\"\n (click)=\"handleToggleHistory(account.accountKey)\"\n [title]=\"isHistoryOpen(account.accountKey) ? 'Hide usage history' : 'Show usage history'\"\n >\n <svg class=\"w-3 h-3 transition-transform\"\n [class.rotate-90]=\"isHistoryOpen(account.accountKey)\"\n 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=\"M9 5l7 7-7 7\"/>\n </svg>\n {{ isHistoryOpen(account.accountKey) ? 'Hide' : 'Show' }} history\n @if (isHistoryLoading(account.accountKey)) {\n <span class=\"text-neutral-500 italic ml-1\">loading…</span>\n }\n </button>\n @if (isHistoryOpen(account.accountKey)) {\n <div class=\"mt-2 rounded-md border border-neutral-800 bg-neutral-950/40 p-2\">\n <div class=\"flex items-center justify-between mb-2\">\n <span class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">\n Usage event history\n <span class=\"text-neutral-600 normal-case tracking-normal ml-1\">\n · {{ historyItemsOf(account.accountKey).length }} event(s)\n </span>\n </span>\n <button\n type=\"button\"\n class=\"text-[10px] text-neutral-400 hover:text-neonCyan border border-neutral-700\n hover:border-neonCyan rounded px-1.5 py-0.5 transition-colors\n disabled:opacity-40 disabled:cursor-not-allowed\"\n [disabled]=\"isHistoryLoading(account.accountKey)\"\n (click)=\"handleRefreshHistory(account.accountKey)\"\n title=\"Re-fetch usage event history from server.\"\n >\n {{ isHistoryLoading(account.accountKey) ? '…' : 'Refresh history' }}\n </button>\n </div>\n @if (!historyItemsOf(account.accountKey).length && !isHistoryLoading(account.accountKey)) {\n <div class=\"text-[11px] text-neutral-500 italic px-2 py-3\">\n No history events recorded yet. Stream-driven events come from CC sessions when\n <code class=\"px-1 py-0.5 rounded bg-neutral-800 text-neutral-400 font-mono text-[10px]\">rate_limit_event</code>\n fires; pull-driven events come from periodic auto-pull or manual <strong>Pull</strong> clicks.\n </div>\n } @else {\n <div class=\"overflow-x-auto\">\n <table class=\"w-full text-[11px] text-left\">\n <thead class=\"text-[10px] text-neutral-500 uppercase tracking-wider\">\n <tr>\n <th class=\"py-1 px-2 font-medium\">When</th>\n <th class=\"py-1 px-2 font-medium\">Window</th>\n <th class=\"py-1 px-2 font-medium\">Source</th>\n <th class=\"py-1 px-2 font-medium text-right\">Util</th>\n <th class=\"py-1 px-2 font-medium\">Status</th>\n <th class=\"py-1 px-2 font-medium\">Reset in</th>\n </tr>\n </thead>\n <tbody>\n @for (ev of historyItemsOf(account.accountKey); track $index) {\n <tr class=\"border-t border-neutral-800/60 hover:bg-neutral-900/40\">\n <td class=\"py-1 px-2 font-mono text-neutral-300\">\n {{ formatObservedAt(ev.observedAt) }}\n </td>\n <td class=\"py-1 px-2 text-neutral-300\">\n {{ windowLabelOf(ev.windowType) }}\n </td>\n <td class=\"py-1 px-2\">\n <span [class]=\"'text-[10px] px-1.5 py-0.5 rounded-full border ' + sourceBadgeClassOf(ev.source)\">\n {{ ev.source ?? '—' }}\n </span>\n </td>\n <td class=\"py-1 px-2 font-mono text-neutral-200 text-right\">\n {{ formatUtilization(ev.utilization ?? null) }}\n </td>\n <td class=\"py-1 px-2 text-neutral-400\">\n {{ ev.lastObservedStatus ?? '—' }}\n </td>\n <td class=\"py-1 px-2 font-mono text-neutral-500\">\n {{ formatResetCountdown(ev.resetsAtMs) }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n</section>\n\n<section>\n <h2 class=\"text-xs font-semibold text-neutral-400 uppercase tracking-wider mb-3 flex items-center gap-2\">\n <svg class=\"w-3.5 h-3.5\" 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=\"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10\"/>\n </svg>\n Instance ↔ Account Mapping\n <span class=\"text-neutral-600 font-normal normal-case tracking-normal\">\n · {{ instanceCount_$() }}\n </span>\n </h2>\n\n @if (!instanceCount_$() && !account_DS.isLoading_$()) {\n <div class=\"rounded-lg border border-dashed border-neutral-700 bg-neutral-900/30 px-4 py-6 text-center text-[11px] text-neutral-500\">\n No instance mappings yet. Mappings appear after the first\n <code class=\"px-1 py-0.5 rounded bg-neutral-800 text-neutral-400 font-mono text-[10px]\">rate_limit_event</code>\n on a session with a bound account, or after a manual\n <strong class=\"text-neutral-400\">Pull usage</strong>.\n </div>\n }\n\n @for (entry of account_DS.instanceMapping_$()?.instances ?? []; track entry.ccapId) {\n <div class=\"flex items-center gap-3 py-2.5 px-3 rounded-lg border border-neutral-800 mb-2\n hover:border-neutral-700 hover:bg-neutral-900/40 transition-all\">\n <!-- Instance icon (server-szerű) -->\n <div class=\"shrink-0 w-7 h-7 rounded-md bg-neutral-800 border border-neutral-700 flex items-center justify-center text-neutral-400\">\n <svg class=\"w-3.5 h-3.5\" 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=\"M5 12H3l9-9 9 9h-2M5 12v7a2 2 0 002 2h10a2 2 0 002-2v-7\"/>\n </svg>\n </div>\n <div class=\"flex-1 min-w-0\">\n <div class=\"text-sm text-neutral-200 font-medium truncate font-mono\">\n {{ entry.ccapId }}\n </div>\n <div class=\"text-[11px] text-neutral-500 mt-0.5 flex items-center gap-1.5 flex-wrap\">\n @if (latestAccountKeyOf(entry.items); as ak) {\n <span class=\"text-neutral-300\">\n {{ displayNameByAccountKey(ak) }}\n </span>\n <span class=\"font-mono text-neutral-600 text-[10px]\">({{ ak.slice(0, 6) }}…)</span>\n <span class=\"text-neutral-700\">·</span>\n <span>5h: <strong [class]=\"pacingColorClassForFiveHour(entry.items)\">{{ formatUtilization(latestFiveHourUtilOf(entry.items)) }}</strong></span>\n <span class=\"text-neutral-700\">·</span>\n }\n <span class=\"text-neutral-600\">{{ itemsCountOf(entry.items) }} record(s)</span>\n </div>\n </div>\n </div>\n }\n</section>\n\n<!-- Edit-email modal (cycle 877: shared S_Modal flow no-native-browser-dialogs review-szabály miatt). -->\n<app-s-modal\n [isOpen]=\"editEmailModalOpen_$()\"\n title=\"Set CC account email\"\n maxWidth=\"sm\"\n (closed)=\"handleEditEmailClose()\"\n>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-xs text-neutral-400\">\n Enter the email address linked to this Claude account. Leave empty to clear.\n </p>\n <input\n type=\"email\"\n [ngModel]=\"editEmailValue_$()\"\n (ngModelChange)=\"editEmailValue_$.set($event)\"\n placeholder=\"user@example.com\"\n class=\"w-full px-3 py-2 rounded-md bg-neutral-900 border border-neutral-700 text-sm text-neutral-100\n placeholder-neutral-500 focus:outline-none focus:border-neonCyan\"\n autofocus\n />\n <div class=\"flex items-center justify-end gap-2 pt-2\">\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs rounded-md border border-neutral-700 text-neutral-300\n hover:bg-neutral-800 transition-colors\"\n (click)=\"handleEditEmailClose()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-xs rounded-md border border-neonCyan bg-neonCyan/15 text-neutral-100\n hover:bg-neonCyan/30 transition-colors disabled:opacity-40 disabled:cursor-not-allowed\"\n [disabled]=\"editEmailSaving_$()\"\n (click)=\"handleEditEmailSave()\"\n >\n {{ editEmailSaving_$() ? 'Saving…' : 'Save' }}\n </button>\n </div>\n </div>\n</app-s-modal>\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["CC_Account_ApiService", "baseUrl", "environment", "api", "http", "inject", "HttpClient", "listAccounts", "firstValueFrom", "get", "refreshLocalAccounts", "post", "getInstanceMapping", "getAccount", "accountKey", "getAccountUsage", "getAccountUsageHistory", "params", "query", "windowType", "push", "encodeURIComponent", "fromMs", "toMs", "qs", "length", "join", "refreshAccountUsage", "renameAccount", "body", "displayName", "undefined", "email", "patch", "factory", "\u0275fac", "providedIn", "SOCKET_EVENT_CC_ACCOUNT_USAGE_UPDATE", "SOCKET_EVENT_CC_ACCOUNT_LIST_UPDATE", "CC_Account_DataService", "account_AS", "inject", "CC_Account_ApiService", "socket_CS", "CCAP_Socket_ControlService", "ngZone", "NgZone", "socketSubscription", "accounts_$", "signal", "accountUsageMap_$", "Map", "instanceMapping_$", "usageHistoryMap_$", "isLoading_$", "loadError_$", "loadDashboardBootstrap", "__async", "set", "accountsResp", "mappingResp", "Promise", "all", "listAccounts", "getInstanceMapping", "items", "err", "errorMessageOf", "loadAccounts", "resp", "loadAccountUsage", "accountKey", "getAccountUsage", "next", "loadAccountUsageHistory", "params", "getAccountUsageHistory", "loadInstanceMapping", "refreshAccounts", "refreshResult", "refreshLocalAccounts", "refreshedKeys", "scannedPaths", "refreshAccountUsage", "result", "status", "windowsUpserted", "email", "renameAccount", "updated", "map", "a", "startLiveUpdates", "event$", "subscribe", "envelope", "run", "event", "handleAccountUsageUpdate", "payload", "handleAccountListUpdate", "stopLiveUpdates", "unsubscribe", "ngOnDestroy", "windowType", "newItem", "utilization", "undefined", "resetsAtMs", "lastObservedStatus", "observedAt", "lastObservedByCcapId", "lastObservedBySessionId", "replaced", "get", "filter", "item", "push", "_payload", "Error", "message", "rec", "String", "factory", "\u0275fac", "providedIn", "CC_AccountUsagePacing_Util", "WINDOW_SEC_BY_TYPE", "five_hour", "seven_day", "seven_day_opus", "seven_day_sonnet", "computePacingFraction", "params", "windowSec", "windowType", "undefined", "resetsAtMs", "windowMs", "windowStart", "pacing", "Math", "max", "nowMs", "classifyPacing", "utilization", "pacingFraction", "tolerance", "diff", "colorClassForPacing", "classification", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "ctx", "\u0275\u0275element", "\u0275\u0275classMap", "ctx_r2", "tokenStatusBadgeClassOf", "account_r2", "tokenStatus", "\u0275\u0275property", "planTier", "\u0275\u0275textInterpolate", "email", "utilizationBarColorClass", "item_r4", "utilization", "\u0275\u0275styleProp", "utilizationPercent", "\u0275\u0275declareLet", "\u0275\u0275template", "CC_UsageDashboard_Component_For_34_For_26_Conditional_6_Template", "\u0275\u0275storeLet", "usageItemOfWindow", "accountKey", "windowType_r5", "\u0275\u0275classProp", "item_r6", "windowLabelOf", "\u0275\u0275conditional", "formatUtilization", "tmp_25_0", "undefined", "formatResetCountdown", "resetsAtMs", "formatObservedAt", "ev_r8", "observedAt", "windowType", "sourceBadgeClassOf", "source", "tmp_26_0", "tmp_27_0", "lastObservedStatus", "\u0275\u0275repeaterCreate", "CC_UsageDashboard_Component_For_34_Conditional_34_Conditional_9_For_18_Template", "\u0275\u0275repeaterTrackByIndex", "\u0275\u0275repeater", "historyItemsOf", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r7", "\u0275\u0275nextContext", "$implicit", "\u0275\u0275resetView", "handleRefreshHistory", "CC_UsageDashboard_Component_For_34_Conditional_34_Conditional_8_Template", "CC_UsageDashboard_Component_For_34_Conditional_34_Conditional_9_Template", "length", "isHistoryLoading", "CC_UsageDashboard_Component_For_34_Conditional_8_Template", "CC_UsageDashboard_Component_For_34_Conditional_9_Template", "CC_UsageDashboard_Component_For_34_Conditional_11_Template", "_r1", "handleEditEmail", "handleRefreshUsage", "CC_UsageDashboard_Component_For_34_For_26_Template", "\u0275\u0275repeaterTrackByIdentity", "CC_UsageDashboard_Component_For_34_Conditional_27_Template", "handleToggleHistory", "CC_UsageDashboard_Component_For_34_Conditional_33_Template", "CC_UsageDashboard_Component_For_34_Conditional_34_Template", "isHistoryOpen", "avatarBgClassOf", "avatarLetterOf", "displayNameOf", "hasEmail", "organizationId", "slice", "isRefreshingUsageOf", "\u0275\u0275pureFunction0", "_c1", "usageItemsOf", "displayNameByAccountKey", "ak_r9", "pacingColorClassForFiveHour", "entry_r10", "items", "latestFiveHourUtilOf", "CC_UsageDashboard_Component_For_44_Conditional_8_Template", "ccapId", "tmp_11_0", "latestAccountKeyOf", "itemsCountOf", "CC_UsageDashboard_Component", "account_DS", "inject", "CC_Account_DataService", "isRefreshing_$", "signal", "isRefreshingAllUsage_$", "refreshingUsageKeys_$", "Set", "editEmailModalOpen_$", "editEmailAccountKey_$", "editEmailValue_$", "editEmailSaving_$", "expandedHistoryKeys_$", "loadingHistoryKeys_$", "instanceCount_$", "computed", "instanceMapping_$", "instances", "ngOnInit", "loadDashboardBootstrap", "startLiveUpdates", "handleRefresh", "__async", "set", "refreshAccounts", "update", "next", "add", "refreshAccountUsage", "delete", "handleRefreshAllUsage", "keys", "accounts_$", "map", "a", "Promise", "all", "k", "accountUsageMap_$", "get", "item", "isFinite", "diffMs", "Date", "now", "totalMinutes", "Math", "floor", "days", "hours", "minutes", "has", "account", "handleEditEmailSave", "trimmed", "trim", "renameAccount", "handleEditEmailClose", "usageHistoryMap_$", "loadHistoryFor", "loadAccountUsageHistory", "copy", "sort", "b", "ta", "parse", "t", "d", "yyyy", "String", "getFullYear", "mm", "getMonth", "padStart", "dd", "getDate", "hh", "getHours", "mi", "getMinutes", "ss", "getSeconds", "name", "charAt", "toUpperCase", "palette", "hash", "i", "charCodeAt", "max", "min", "round", "displayName", "latest", "found", "find", "utilizationColorClass", "fiveHourItem", "pacingFraction", "CC_AccountUsagePacing_Util", "computePacingFraction", "nowMs", "util", "classification", "classifyPacing", "colorClassForPacing", "selectors", "hostAttrs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "CC_UsageDashboard_Component_Conditional_22_Template", "CC_UsageDashboard_Component_Conditional_23_Template", "CC_UsageDashboard_Component_Conditional_31_Template", "CC_UsageDashboard_Component_For_34_Template", "_forTrack0", "CC_UsageDashboard_Component_Conditional_42_Template", "CC_UsageDashboard_Component_For_44_Template", "_forTrack1", "$event", "isLoading_$", "tmp_9_0", "loadError_$", "tmp_15_0", "_c0", "CommonModule", "FormsModule", "DefaultValueAccessor", "NgControlStatus", "NgModel", "S_Modal_Component", "encapsulation"]
|
|
7
|
-
}
|