@futdevpro/ccap 1.1.3472 → 1.1.3477
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client-dist/{agent-instances.module-ORETU4C4.js → agent-instances.module-HSH54NLX.js} +2 -2
- package/client-dist/{ca.module-XU3RU5WI.js → ca.module-HQS5LOEI.js} +2 -2
- package/client-dist/{cc-usage-dashboard.component-XZMV7C2A.js → cc-usage-dashboard.component-P2GJ7UJQ.js} +2 -2
- package/client-dist/cc-usage-dashboard.component-P2GJ7UJQ.js.map +7 -0
- package/client-dist/{cc.module-OVYH7HDX.js → cc.module-UV6ASJZ3.js} +2 -2
- package/client-dist/{cc.module-OVYH7HDX.js.map → cc.module-UV6ASJZ3.js.map} +1 -1
- package/client-dist/{chunk-Y3VM3QEL.js → chunk-24X5GVWP.js} +2 -2
- package/client-dist/{chunk-JEM5PIVF.js → chunk-2FWDA5RB.js} +2 -2
- package/client-dist/{chunk-OWCLRJKX.js → chunk-37BHVQGU.js} +2 -2
- package/client-dist/{chunk-CKVU7IOJ.js → chunk-3GC3BYAX.js} +2 -2
- package/client-dist/{chunk-MYUJTKZZ.js → chunk-3INNFYRN.js} +2 -2
- package/client-dist/{chunk-W7KUBZJ2.js → chunk-3UY2UL7V.js} +2 -2
- package/client-dist/{chunk-MUH7O4WZ.js → chunk-4PJL5REB.js} +2 -2
- package/client-dist/{chunk-GFJXVSYA.js → chunk-53KUWBKA.js} +2 -2
- package/client-dist/{chunk-NIAHCU6O.js → chunk-55K3CUGK.js} +2 -2
- package/client-dist/{chunk-QPN5U5DL.js → chunk-57RWU3W7.js} +2 -2
- package/client-dist/{chunk-XXUXHU2G.js → chunk-5FZO5YES.js} +2 -2
- package/client-dist/{chunk-LLHIPXPK.js → chunk-6EQND5C5.js} +2 -2
- package/client-dist/{chunk-JTJ64BYT.js → chunk-6QY3BZFH.js} +2 -2
- package/client-dist/{chunk-B6FRLDT6.js → chunk-6TX3PELE.js} +2 -2
- package/client-dist/{chunk-RQZKWSZ5.js → chunk-7LFLZC5X.js} +2 -2
- package/client-dist/{chunk-RBIRZL76.js → chunk-7UYRRI34.js} +2 -2
- package/client-dist/{chunk-3O5EFMMB.js → chunk-AAIMB6CE.js} +2 -2
- package/client-dist/{chunk-D7YVQJMU.js → chunk-AUSJMRA5.js} +2 -2
- package/client-dist/{chunk-6ULWDTUR.js → chunk-B5I2H36C.js} +2 -2
- package/client-dist/{chunk-XVQGBI7F.js → chunk-CBCO3ULA.js} +2 -2
- package/client-dist/{chunk-CVIKSKEP.js → chunk-DAKLGYM6.js} +2 -2
- package/client-dist/{chunk-JU2WSBTO.js → chunk-DTR5ZUAY.js} +2 -2
- package/client-dist/{chunk-5AJE5M6X.js → chunk-EOQCPRY6.js} +2 -2
- package/client-dist/{chunk-WUNSZS5D.js → chunk-F46PDDLD.js} +2 -2
- package/client-dist/{chunk-YGQUW5IK.js → chunk-GKDQUW6S.js} +2 -2
- package/client-dist/{chunk-GGWONO6R.js → chunk-GMPBEFNG.js} +2 -2
- package/client-dist/{chunk-F5WKTR3W.js → chunk-GX6BYUC4.js} +2 -2
- package/client-dist/{chunk-PK6TSNGP.js → chunk-HE6ZJH2J.js} +2 -2
- package/client-dist/{chunk-SUQBC6CV.js → chunk-HWPA7Y4E.js} +2 -2
- package/client-dist/{chunk-GQHC47CX.js → chunk-J4NUXLQQ.js} +2 -2
- package/client-dist/{chunk-GQHC47CX.js.map → chunk-J4NUXLQQ.js.map} +1 -1
- package/client-dist/{chunk-6SMRFEEE.js → chunk-JMYSNBKL.js} +2 -2
- package/client-dist/{chunk-BLBZDQAC.js → chunk-K5XY4ZYM.js} +2 -2
- package/client-dist/{chunk-JUVY4GXD.js → chunk-KAVG5CVZ.js} +2 -2
- package/client-dist/{chunk-HMYWRRZU.js → chunk-KIUDX7Y2.js} +2 -2
- package/client-dist/{chunk-U6PK7K5R.js → chunk-LM34PTUB.js} +2 -2
- package/client-dist/{chunk-6DFM4DSL.js → chunk-MGD2AIPS.js} +2 -2
- package/client-dist/{chunk-27YSKWMH.js → chunk-NZNEM4MO.js} +2 -2
- package/client-dist/{chunk-CCVAQETK.js → chunk-O4MYOI6Z.js} +2 -2
- package/client-dist/chunk-O4MYOI6Z.js.map +7 -0
- package/client-dist/{chunk-KGYWMIQJ.js → chunk-OHLYKJGB.js} +2 -2
- package/client-dist/{chunk-JHMZKIVG.js → chunk-QNP27MNW.js} +2 -2
- package/client-dist/{chunk-EYAKADSX.js → chunk-QYUWLPZK.js} +2 -2
- package/client-dist/{chunk-SY2VZTPV.js → chunk-ROYBCT3T.js} +2 -2
- package/client-dist/{chunk-X64MACZF.js → chunk-S6ULUM2K.js} +2 -2
- package/client-dist/{chunk-NAXRLDMX.js → chunk-SSQGM3W6.js} +2 -2
- package/client-dist/{chunk-THHFPFSJ.js → chunk-T6Q6U33A.js} +2 -2
- package/client-dist/{chunk-Y732BBLW.js → chunk-TM3DMIGC.js} +2 -2
- package/client-dist/{chunk-MW4WZMOK.js → chunk-TQI6JABZ.js} +2 -2
- package/client-dist/{chunk-BYYD4WGI.js → chunk-UAH6CGWI.js} +2 -2
- package/client-dist/{chunk-W7LI4RRE.js → chunk-URSDQZCS.js} +2 -2
- package/client-dist/{chunk-PJ7XFZCP.js → chunk-W2CI7PN5.js} +2 -2
- package/client-dist/{chunk-USRQOKZS.js → chunk-WAKH5DS3.js} +2 -2
- package/client-dist/{chunk-6PZRPTLP.js → chunk-WMSBQSOM.js} +2 -2
- package/client-dist/{chunk-LBGGD6N4.js → chunk-X2XBMJET.js} +2 -2
- package/client-dist/{chunk-PLVVQ4WV.js → chunk-XEWMT22J.js} +2 -2
- package/client-dist/{chunk-7BDJCDI2.js → chunk-XLXRXH5T.js} +2 -2
- package/client-dist/{chunk-HMWMKVGQ.js → chunk-YY6KEDYZ.js} +2 -2
- package/client-dist/{chunk-FUAZESUI.js → chunk-ZDAJ4AGL.js} +2 -2
- package/client-dist/{consultant.module-ASUOHDQO.js → consultant.module-CEVGHHL7.js} +2 -2
- package/client-dist/{crd.module-65NWPZMN.js → crd.module-PMDXEMXC.js} +2 -2
- package/client-dist/{dashboard.module-TLFGGUJK.js → dashboard.module-6MWIZRNM.js} +2 -2
- package/client-dist/{do.module-BOKGM5BZ.js → do.module-VPALVGJJ.js} +2 -2
- package/client-dist/{document-library.module-KANUFXKK.js → document-library.module-FCPKMVW6.js} +2 -2
- package/client-dist/{embedding-eval.module-5DMMIQGY.js → embedding-eval.module-S3472JDK.js} +2 -2
- package/client-dist/{embedding-registry.module-SYLRYPCY.js → embedding-registry.module-KOGSDQ4W.js} +2 -2
- package/client-dist/{err.module-N4YUGIO5.js → err.module-JEM6QRWA.js} +2 -2
- package/client-dist/{feedback.module-JPXS2M76.js → feedback.module-4YDS32EY.js} +2 -2
- package/client-dist/{host-runtime-mcp.module-43GMPPSN.js → host-runtime-mcp.module-AGLDF3MB.js} +2 -2
- package/client-dist/index.html +1 -1
- package/client-dist/{live-dev-pipeline.module-RGNYG3KM.js → live-dev-pipeline.module-WAWA6T2V.js} +2 -2
- package/client-dist/{logs.module-EUB7CCIQ.js → logs.module-M6QW2EMA.js} +2 -2
- package/client-dist/{main-GE66ZGJY.js → main-6M5KMSJD.js} +3 -3
- package/client-dist/{master-control-remote-poc.module-2QTXC5ON.js → master-control-remote-poc.module-XDJ5EIPB.js} +2 -2
- package/client-dist/{mobile-app.module-JFHYQ6W6.js → mobile-app.module-VI3K3UVL.js} +2 -2
- package/client-dist/{model-registry.module-J3RV3VHM.js → model-registry.module-LAK6U65V.js} +2 -2
- package/client-dist/{oc.module-2TBBPTBU.js → oc.module-24ALP3HM.js} +2 -2
- package/client-dist/{orc.module-K4L3D7TZ.js → orc.module-UPN6TYRT.js} +2 -2
- package/client-dist/{project-management.module-NUN7ZVFO.js → project-management.module-BVRPBTIB.js} +2 -2
- package/client-dist/project-source-routed.module-HZNFT7DX.js +2 -0
- package/client-dist/{scheduler.module-REFQKPR5.js → scheduler.module-YWKK5AIF.js} +2 -2
- package/client-dist/{session.module-7MIPVZ2I.js → session.module-WI3GQYR3.js} +2 -2
- package/client-dist/{set.module-KMRWBSUE.js → set.module-YIFFM5WT.js} +2 -2
- package/client-dist/{setup.module-4KH5G6AL.js → setup.module-OF2BYYTF.js} +2 -2
- package/client-dist/{terminals.module-TZIA3COB.js → terminals.module-QFV4EDWV.js} +2 -2
- package/client-dist/{voice-notes-poc.module-RHHQKPRU.js → voice-notes-poc.module-HYHKDSWA.js} +2 -2
- package/client-dist/{wfs.module-GMA66N2F.js → wfs.module-324CJNFF.js} +2 -2
- package/package.json +1 -1
- package/server/build/src/app.server.d.ts.map +1 -1
- package/server/build/src/app.server.js +4 -9
- package/server/build/src/app.server.js.map +1 -1
- package/client-dist/cc-usage-dashboard.component-XZMV7C2A.js.map +0 -7
- package/client-dist/chunk-CCVAQETK.js.map +0 -7
- package/client-dist/project-source-routed.module-VWUKBPAC.js +0 -2
- /package/client-dist/{agent-instances.module-ORETU4C4.js.map → agent-instances.module-HSH54NLX.js.map} +0 -0
- /package/client-dist/{ca.module-XU3RU5WI.js.map → ca.module-HQS5LOEI.js.map} +0 -0
- /package/client-dist/{chunk-Y3VM3QEL.js.map → chunk-24X5GVWP.js.map} +0 -0
- /package/client-dist/{chunk-JEM5PIVF.js.map → chunk-2FWDA5RB.js.map} +0 -0
- /package/client-dist/{chunk-OWCLRJKX.js.map → chunk-37BHVQGU.js.map} +0 -0
- /package/client-dist/{chunk-CKVU7IOJ.js.map → chunk-3GC3BYAX.js.map} +0 -0
- /package/client-dist/{chunk-MYUJTKZZ.js.map → chunk-3INNFYRN.js.map} +0 -0
- /package/client-dist/{chunk-W7KUBZJ2.js.map → chunk-3UY2UL7V.js.map} +0 -0
- /package/client-dist/{chunk-MUH7O4WZ.js.map → chunk-4PJL5REB.js.map} +0 -0
- /package/client-dist/{chunk-GFJXVSYA.js.map → chunk-53KUWBKA.js.map} +0 -0
- /package/client-dist/{chunk-NIAHCU6O.js.map → chunk-55K3CUGK.js.map} +0 -0
- /package/client-dist/{chunk-QPN5U5DL.js.map → chunk-57RWU3W7.js.map} +0 -0
- /package/client-dist/{chunk-XXUXHU2G.js.map → chunk-5FZO5YES.js.map} +0 -0
- /package/client-dist/{chunk-LLHIPXPK.js.map → chunk-6EQND5C5.js.map} +0 -0
- /package/client-dist/{chunk-JTJ64BYT.js.map → chunk-6QY3BZFH.js.map} +0 -0
- /package/client-dist/{chunk-B6FRLDT6.js.map → chunk-6TX3PELE.js.map} +0 -0
- /package/client-dist/{chunk-RQZKWSZ5.js.map → chunk-7LFLZC5X.js.map} +0 -0
- /package/client-dist/{chunk-RBIRZL76.js.map → chunk-7UYRRI34.js.map} +0 -0
- /package/client-dist/{chunk-3O5EFMMB.js.map → chunk-AAIMB6CE.js.map} +0 -0
- /package/client-dist/{chunk-D7YVQJMU.js.map → chunk-AUSJMRA5.js.map} +0 -0
- /package/client-dist/{chunk-6ULWDTUR.js.map → chunk-B5I2H36C.js.map} +0 -0
- /package/client-dist/{chunk-XVQGBI7F.js.map → chunk-CBCO3ULA.js.map} +0 -0
- /package/client-dist/{chunk-CVIKSKEP.js.map → chunk-DAKLGYM6.js.map} +0 -0
- /package/client-dist/{chunk-JU2WSBTO.js.map → chunk-DTR5ZUAY.js.map} +0 -0
- /package/client-dist/{chunk-5AJE5M6X.js.map → chunk-EOQCPRY6.js.map} +0 -0
- /package/client-dist/{chunk-WUNSZS5D.js.map → chunk-F46PDDLD.js.map} +0 -0
- /package/client-dist/{chunk-YGQUW5IK.js.map → chunk-GKDQUW6S.js.map} +0 -0
- /package/client-dist/{chunk-GGWONO6R.js.map → chunk-GMPBEFNG.js.map} +0 -0
- /package/client-dist/{chunk-F5WKTR3W.js.map → chunk-GX6BYUC4.js.map} +0 -0
- /package/client-dist/{chunk-PK6TSNGP.js.map → chunk-HE6ZJH2J.js.map} +0 -0
- /package/client-dist/{chunk-SUQBC6CV.js.map → chunk-HWPA7Y4E.js.map} +0 -0
- /package/client-dist/{chunk-6SMRFEEE.js.map → chunk-JMYSNBKL.js.map} +0 -0
- /package/client-dist/{chunk-BLBZDQAC.js.map → chunk-K5XY4ZYM.js.map} +0 -0
- /package/client-dist/{chunk-JUVY4GXD.js.map → chunk-KAVG5CVZ.js.map} +0 -0
- /package/client-dist/{chunk-HMYWRRZU.js.map → chunk-KIUDX7Y2.js.map} +0 -0
- /package/client-dist/{chunk-U6PK7K5R.js.map → chunk-LM34PTUB.js.map} +0 -0
- /package/client-dist/{chunk-6DFM4DSL.js.map → chunk-MGD2AIPS.js.map} +0 -0
- /package/client-dist/{chunk-27YSKWMH.js.map → chunk-NZNEM4MO.js.map} +0 -0
- /package/client-dist/{chunk-KGYWMIQJ.js.map → chunk-OHLYKJGB.js.map} +0 -0
- /package/client-dist/{chunk-JHMZKIVG.js.map → chunk-QNP27MNW.js.map} +0 -0
- /package/client-dist/{chunk-EYAKADSX.js.map → chunk-QYUWLPZK.js.map} +0 -0
- /package/client-dist/{chunk-SY2VZTPV.js.map → chunk-ROYBCT3T.js.map} +0 -0
- /package/client-dist/{chunk-X64MACZF.js.map → chunk-S6ULUM2K.js.map} +0 -0
- /package/client-dist/{chunk-NAXRLDMX.js.map → chunk-SSQGM3W6.js.map} +0 -0
- /package/client-dist/{chunk-THHFPFSJ.js.map → chunk-T6Q6U33A.js.map} +0 -0
- /package/client-dist/{chunk-Y732BBLW.js.map → chunk-TM3DMIGC.js.map} +0 -0
- /package/client-dist/{chunk-MW4WZMOK.js.map → chunk-TQI6JABZ.js.map} +0 -0
- /package/client-dist/{chunk-BYYD4WGI.js.map → chunk-UAH6CGWI.js.map} +0 -0
- /package/client-dist/{chunk-W7LI4RRE.js.map → chunk-URSDQZCS.js.map} +0 -0
- /package/client-dist/{chunk-PJ7XFZCP.js.map → chunk-W2CI7PN5.js.map} +0 -0
- /package/client-dist/{chunk-USRQOKZS.js.map → chunk-WAKH5DS3.js.map} +0 -0
- /package/client-dist/{chunk-6PZRPTLP.js.map → chunk-WMSBQSOM.js.map} +0 -0
- /package/client-dist/{chunk-LBGGD6N4.js.map → chunk-X2XBMJET.js.map} +0 -0
- /package/client-dist/{chunk-PLVVQ4WV.js.map → chunk-XEWMT22J.js.map} +0 -0
- /package/client-dist/{chunk-7BDJCDI2.js.map → chunk-XLXRXH5T.js.map} +0 -0
- /package/client-dist/{chunk-HMWMKVGQ.js.map → chunk-YY6KEDYZ.js.map} +0 -0
- /package/client-dist/{chunk-FUAZESUI.js.map → chunk-ZDAJ4AGL.js.map} +0 -0
- /package/client-dist/{consultant.module-ASUOHDQO.js.map → consultant.module-CEVGHHL7.js.map} +0 -0
- /package/client-dist/{crd.module-65NWPZMN.js.map → crd.module-PMDXEMXC.js.map} +0 -0
- /package/client-dist/{dashboard.module-TLFGGUJK.js.map → dashboard.module-6MWIZRNM.js.map} +0 -0
- /package/client-dist/{do.module-BOKGM5BZ.js.map → do.module-VPALVGJJ.js.map} +0 -0
- /package/client-dist/{document-library.module-KANUFXKK.js.map → document-library.module-FCPKMVW6.js.map} +0 -0
- /package/client-dist/{embedding-eval.module-5DMMIQGY.js.map → embedding-eval.module-S3472JDK.js.map} +0 -0
- /package/client-dist/{embedding-registry.module-SYLRYPCY.js.map → embedding-registry.module-KOGSDQ4W.js.map} +0 -0
- /package/client-dist/{err.module-N4YUGIO5.js.map → err.module-JEM6QRWA.js.map} +0 -0
- /package/client-dist/{feedback.module-JPXS2M76.js.map → feedback.module-4YDS32EY.js.map} +0 -0
- /package/client-dist/{host-runtime-mcp.module-43GMPPSN.js.map → host-runtime-mcp.module-AGLDF3MB.js.map} +0 -0
- /package/client-dist/{live-dev-pipeline.module-RGNYG3KM.js.map → live-dev-pipeline.module-WAWA6T2V.js.map} +0 -0
- /package/client-dist/{logs.module-EUB7CCIQ.js.map → logs.module-M6QW2EMA.js.map} +0 -0
- /package/client-dist/{main-GE66ZGJY.js.map → main-6M5KMSJD.js.map} +0 -0
- /package/client-dist/{master-control-remote-poc.module-2QTXC5ON.js.map → master-control-remote-poc.module-XDJ5EIPB.js.map} +0 -0
- /package/client-dist/{mobile-app.module-JFHYQ6W6.js.map → mobile-app.module-VI3K3UVL.js.map} +0 -0
- /package/client-dist/{model-registry.module-J3RV3VHM.js.map → model-registry.module-LAK6U65V.js.map} +0 -0
- /package/client-dist/{oc.module-2TBBPTBU.js.map → oc.module-24ALP3HM.js.map} +0 -0
- /package/client-dist/{orc.module-K4L3D7TZ.js.map → orc.module-UPN6TYRT.js.map} +0 -0
- /package/client-dist/{project-management.module-NUN7ZVFO.js.map → project-management.module-BVRPBTIB.js.map} +0 -0
- /package/client-dist/{project-source-routed.module-VWUKBPAC.js.map → project-source-routed.module-HZNFT7DX.js.map} +0 -0
- /package/client-dist/{scheduler.module-REFQKPR5.js.map → scheduler.module-YWKK5AIF.js.map} +0 -0
- /package/client-dist/{session.module-7MIPVZ2I.js.map → session.module-WI3GQYR3.js.map} +0 -0
- /package/client-dist/{set.module-KMRWBSUE.js.map → set.module-YIFFM5WT.js.map} +0 -0
- /package/client-dist/{setup.module-4KH5G6AL.js.map → setup.module-OF2BYYTF.js.map} +0 -0
- /package/client-dist/{terminals.module-TZIA3COB.js.map → terminals.module-QFV4EDWV.js.map} +0 -0
- /package/client-dist/{voice-notes-poc.module-RHHQKPRU.js.map → voice-notes-poc.module-HYHKDSWA.js.map} +0 -0
- /package/client-dist/{wfs.module-GMA66N2F.js.map → wfs.module-324CJNFF.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{e as rt}from"./chunk-6DFM4DSL.js";import{I as st}from"./chunk-GQHC47CX.js";import{$a as K,C,D as Z,Fa as u,Ga as V,Ha as T,J as G,K as L,L as S,M as q,Pa as W,Qa as B,R as J,Ra as U,Ta as tt,Ua as et,Z as o,aa as x,bb as N,da as y,fa as v,ga as H,ha as R,hb as nt,ia as A,ja as E,jb as j,k as p,la as g,na as Q,oa as k,p as m,pa as D,pb as it,qa as s,ra as a,sa as b,ua as P,ub as ot,va as F,wa as d,xb as at,y as O}from"./chunk-TBMJSIBB.js";var lt=(()=>{class n{baseUrl=`${st.api.baseUrl}/cc-account`;http=C(at);listAccounts(){return m(this.http.get(`${this.baseUrl}/list`))}listAccountsByIdentity(){return m(this.http.get(`${this.baseUrl}/list-by-identity`))}backfillIdentity(){return m(this.http.post(`${this.baseUrl}/backfill-identity`,{}))}auditIdentityDuplicates(){return m(this.http.get(`${this.baseUrl}/identity-audit`))}refreshLocalAccounts(){return m(this.http.post(`${this.baseUrl}/refresh`,{}))}getInstanceMapping(){return m(this.http.get(`${this.baseUrl}/instance-mapping`))}getAccount(t){return m(this.http.get(`${this.baseUrl}/${t}`))}getAccountUsage(t){return m(this.http.get(`${this.baseUrl}/${t}/usage`))}getAccountUsageHistory(t){let e=[];t.windowType!=null&&t.windowType!==""&&e.push(`windowType=${encodeURIComponent(t.windowType)}`),t.fromMs!=null&&e.push(`fromMs=${t.fromMs}`),t.toMs!=null&&e.push(`toMs=${t.toMs}`);let i=e.length>0?`?${e.join("&")}`:"";return m(this.http.get(`${this.baseUrl}/${t.accountKey}/usage-history${i}`))}refreshAccountUsage(t){return m(this.http.post(`${this.baseUrl}/${t}/refresh-usage`,{}))}renameAccount(t){let e={};return t.displayName!==void 0&&(e.displayName=t.displayName),t.email!==void 0&&(e.email=t.email),m(this.http.patch(`${this.baseUrl}/${t.accountKey}`,e))}static \u0275fac=function(e){return new(e||n)};static \u0275prov=O({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var pt="cc:account-usage-update",_t="cc:account-list-update",ut=(()=>{class n{account_AS=C(lt);socket_CS=C(rt);ngZone=C(J);socketSubscription=null;accounts_$=x([]);accountUsageMap_$=x(new Map);instanceMapping_$=x(null);usageHistoryMap_$=x(new Map);identityGroups_$=x([]);isLoading_$=x(!1);loadError_$=x(null);loadDashboardBootstrap(){return p(this,null,function*(){this.isLoading_$.set(!0),this.loadError_$.set(null);try{let[t,e,i]=yield Promise.all([this.account_AS.listAccounts(),this.account_AS.getInstanceMapping(),this.account_AS.listAccountsByIdentity()]);this.accounts_$.set(t.items),this.instanceMapping_$.set(e),this.identityGroups_$.set(i.groups);let r=new Map(this.accountUsageMap_$());for(let _ of i.groups)r.set(_.primary.accountKey,_.mergedUsage);this.accountUsageMap_$.set(r)}catch(t){this.loadError_$.set(this.errorMessageOf(t))}finally{this.isLoading_$.set(!1)}})}loadIdentityGroups(){return p(this,null,function*(){try{let t=yield this.account_AS.listAccountsByIdentity();this.identityGroups_$.set(t.groups);let e=new Map(this.accountUsageMap_$());for(let i of t.groups)e.set(i.primary.accountKey,i.mergedUsage);this.accountUsageMap_$.set(e)}catch(t){this.loadError_$.set(this.errorMessageOf(t))}})}loadAccounts(){return p(this,null,function*(){try{let t=yield this.account_AS.listAccounts();this.accounts_$.set(t.items)}catch(t){this.loadError_$.set(this.errorMessageOf(t))}})}loadAccountUsage(t){return p(this,null,function*(){try{let e=yield this.account_AS.getAccountUsage(t),i=new Map(this.accountUsageMap_$());i.set(t,e.items),this.accountUsageMap_$.set(i)}catch(e){this.loadError_$.set(this.errorMessageOf(e))}})}loadAccountUsageHistory(t){return p(this,null,function*(){try{let e=yield this.account_AS.getAccountUsageHistory(t),i=new Map(this.usageHistoryMap_$());i.set(t.accountKey,e.items),this.usageHistoryMap_$.set(i)}catch(e){this.loadError_$.set(this.errorMessageOf(e))}})}loadInstanceMapping(){return p(this,null,function*(){try{let t=yield this.account_AS.getInstanceMapping();this.instanceMapping_$.set(t)}catch(t){this.loadError_$.set(this.errorMessageOf(t))}})}refreshAccounts(){return p(this,null,function*(){this.isLoading_$.set(!0),this.loadError_$.set(null);try{let t=yield this.account_AS.refreshLocalAccounts();return yield this.loadAccounts(),t}catch(t){return this.loadError_$.set(this.errorMessageOf(t)),{refreshedKeys:[],scannedPaths:0}}finally{this.isLoading_$.set(!1)}})}refreshAccountUsage(t){return p(this,null,function*(){try{let e=yield this.account_AS.refreshAccountUsage(t);return yield this.loadAccountUsage(t),yield this.loadAccounts(),e}catch(e){return this.loadError_$.set(this.errorMessageOf(e)),{status:"error",windowsUpserted:0,email:null}}})}renameAccount(t){return p(this,null,function*(){try{let e=yield this.account_AS.renameAccount(t),i=this.accounts_$().map(r=>r.accountKey===t.accountKey?e:r);this.accounts_$.set(i)}catch(e){this.loadError_$.set(this.errorMessageOf(e))}})}startLiveUpdates(){this.socketSubscription==null&&(this.socketSubscription=this.socket_CS.event$.subscribe(t=>{this.ngZone.run(()=>{t.event===pt?this.handleAccountUsageUpdate(t.payload):t.event===_t&&this.handleAccountListUpdate(t.payload)})}))}stopLiveUpdates(){this.socketSubscription!=null&&(this.socketSubscription.unsubscribe(),this.socketSubscription=null)}ngOnDestroy(){this.stopLiveUpdates()}handleAccountUsageUpdate(t){let e=t.accountKey,i=t.windowType;if(typeof e!="string"||e===""||typeof i!="string")return;let r={accountKey:e,windowType:i,utilization:typeof t.utilization=="number"?t.utilization:void 0,resetsAtMs:typeof t.resetsAtMs=="number"?t.resetsAtMs:void 0,lastObservedStatus:typeof t.lastObservedStatus=="string"?t.lastObservedStatus:void 0,observedAt:typeof t.observedAt=="string"?t.observedAt:void 0,lastObservedByCcapId:typeof t.lastObservedByCcapId=="string"?t.lastObservedByCcapId:void 0,lastObservedBySessionId:typeof t.lastObservedBySessionId=="string"?t.lastObservedBySessionId:void 0},_=new Map(this.accountUsageMap_$()),l=(_.get(e)??[]).filter(f=>f.windowType!==i);l.push(r),_.set(e,l),this.accountUsageMap_$.set(_)}handleAccountListUpdate(t){this.loadAccounts(),this.loadIdentityGroups()}errorMessageOf(t){if(t instanceof Error)return t.message;if(typeof t=="object"&&t!==null){let e=t;if(typeof e.message=="string")return e.message}return String(t)}static \u0275fac=function(e){return new(e||n)};static \u0275prov=O({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var $=(()=>{class n{static CHART_WIDTH=100;static CHART_HEIGHT=40;static COLOR_MAP={five_hour:"#10b981",seven_day:"#06b6d4",seven_day_opus:"#a855f7",seven_day_sonnet:"#f59e0b",extra_usage:"#f43f5e"};static WINDOW_LABEL_MAP={five_hour:"5h",seven_day:"Weekly",seven_day_opus:"Opus",seven_day_sonnet:"Sonnet",extra_usage:"Extra"};static WINDOW_ORDER=["five_hour","seven_day","seven_day_opus","seven_day_sonnet","extra_usage"];static buildChart(t){let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,r=0;for(let l of t){if(typeof l.observedAt!="string"||l.observedAt===""||typeof l.utilization!="number"||!isFinite(l.utilization))continue;let f=Date.parse(l.observedAt);isFinite(f)&&(f<e&&(e=f),f>i&&(i=f),r++)}if(r===0)return{lines:n.WINDOW_ORDER.map(l=>({windowType:l,label:n.WINDOW_LABEL_MAP[l]??l,colorHex:n.COLOR_MAP[l]??"#9ca3af",pathPoints:"",hasData:!1,pointCount:0,lastX:0,lastY:0})),hasAnyData:!1,minTimeMs:0,maxTimeMs:0};i-e<1&&(i=e+36e5);let _=i-e,M=n.WINDOW_ORDER.map(l=>{let f=[];for(let h of t){if(h.windowType!==l||typeof h.observedAt!="string"||h.observedAt===""||typeof h.utilization!="number"||!isFinite(h.utilization))continue;let w=Date.parse(h.observedAt);isFinite(w)&&f.push({t:w,u:Math.max(0,Math.min(1,h.utilization))})}f.sort((h,w)=>h.t-w.t);let I=[],z=0,Y=0;for(let h of f){let w=(h.t-e)/_*n.CHART_WIDTH,X=n.CHART_HEIGHT-h.u*n.CHART_HEIGHT;I.push(`${w.toFixed(2)},${X.toFixed(2)}`),z=w,Y=X}return{windowType:l,label:n.WINDOW_LABEL_MAP[l]??l,colorHex:n.COLOR_MAP[l]??"#9ca3af",pathPoints:I.join(" "),hasData:I.length>0,pointCount:I.length,lastX:z,lastY:Y}});return{lines:M,hasAnyData:M.some(l=>l.hasData),minTimeMs:e,maxTimeMs:i}}}return n})();var dt=(n,c)=>c.windowType,ht=()=>["five_hour","seven_day","seven_day_opus","seven_day_sonnet","extra_usage"];function mt(n,c){if(n&1&&b(0,"div"),n&2){d();let t=U(0),e=d();E("h-full transition-all "+e.utilizationBarColorClass(t.utilization)),R("width",e.utilizationPercent(t.utilization),"%")}}function ft(n,c){if(n&1&&(W(0),s(1,"div")(2,"div",4),u(3),a(),s(4,"div",5)(5,"div"),y(6,mt,1,4,"div",6),a(),s(7,"span",7),u(8),a()(),s(9,"div",8),u(10),a()()),n&2){let t,e=c.$implicit,i=d(),r=B(i.usageItemOfWindow(e));o(),E(i.compact?"grid grid-cols-[90px_1fr_56px] items-center gap-2 text-[10px]":"grid grid-cols-[110px_1fr_64px] items-center gap-2 text-[11px]"),A("opacity-50",!r),o(),H("title",e),o(),T(" ",i.windowLabelOf(e)," "),o(2),E(i.compact?"flex-1 h-1.5 bg-neutral-800 rounded-full overflow-hidden":"flex-1 h-2 bg-neutral-800 rounded-full overflow-hidden"),o(),g(r?6:-1),o(),E(i.compact?"w-8 text-[10px]":"w-9"),o(),T(" ",i.formatUtilization((t=r==null?null:r.utilization)!==null&&t!==void 0?t:null)," "),o(),H("title","Resets in "+i.formatResetCountdown(r==null?null:r.resetsAtMs)),o(),T(" ",i.formatResetCountdown(r==null?null:r.resetsAtMs)," ")}}function gt(n,c){n&1&&(s(0,"div",2),u(1," No data yet \u2014 click "),s(2,"strong",9),u(3,"Pull"),a(),u(4," or wait for the next rate-limit event. "),a())}function xt(n,c){n&1&&(s(0,"div",14),u(1," No graph data yet \u2014 pull usage or wait for a CC session rate-limit event. "),a())}function yt(n,c){if(n&1&&(S(),b(0,"circle",25)),n&2){let t=d(2).$implicit;v("cx",t.lastX)("cy",t.lastY)("fill",t.colorHex)}}function Ct(n,c){if(n&1&&(S(),b(0,"polyline",26)(1,"circle",27)),n&2){let t=d(2).$implicit;v("points",t.pathPoints)("stroke",t.colorHex),o(),v("cx",t.lastX)("cy",t.lastY)("fill",t.colorHex)}}function vt(n,c){if(n&1&&y(0,yt,1,3,":svg:circle",25)(1,Ct,2,5),n&2){let t=d().$implicit;g(t.pointCount===1?0:1)}}function wt(n,c){if(n&1&&y(0,vt,2,1),n&2){let t=c.$implicit;g(t.hasData?0:-1)}}function At(n,c){if(n&1&&(s(0,"span",31),u(1,"\xB7"),a(),s(2,"span",32),u(3),a()),n&2){let t=d().$implicit,e=d(4);o(3),T(" ",((e.chartH-t.lastY)/e.chartH*100).toFixed(0),"% ")}}function bt(n,c){if(n&1&&(s(0,"div",28),b(1,"span",29),s(2,"span",30),u(3),a(),y(4,At,4,1),a()),n&2){let t=c.$implicit;A("opacity-40",!t.hasData),o(),R("background-color",t.colorHex),o(2),V(t.label),o(),g(t.hasData?4:-1)}}function $t(n,c){if(n&1&&(s(0,"span"),u(1),K(2,"date"),a()),n&2){d(2);let t=U(0);o(),V(N(2,1,t.minTimeMs,"yyyy-MM-dd HH:mm"))}}function Mt(n,c){n&1&&(s(0,"span"),u(1,"\u2014"),a())}function Tt(n,c){if(n&1&&(s(0,"span"),u(1),K(2,"date"),a()),n&2){d(2);let t=U(0);o(),V(N(2,1,t.maxTimeMs,"yyyy-MM-dd HH:mm"))}}function St(n,c){n&1&&(s(0,"span"),u(1,"\u2014"),a())}function Et(n,c){if(n&1){let t=P();s(0,"div",15),S(),s(1,"svg",16),b(2,"line",17)(3,"line",18)(4,"line",19),k(5,wt,1,1,null,null,dt),a(),q(),s(7,"div",20)(8,"span"),u(9,"100%"),a(),s(10,"span"),u(11,"50%"),a(),s(12,"span"),u(13,"0%"),a()()(),s(14,"div",21),k(15,bt,5,6,"div",22,dt),a(),s(17,"div",23),y(18,$t,3,4,"span")(19,Mt,2,0,"span"),s(20,"button",24),F("click",function(){G(t);let i=d(3);return L(i.handleRefreshGraph())}),u(21," \u21BB Refresh "),a(),y(22,Tt,3,4,"span")(23,St,2,0,"span"),a()}if(n&2){d();let t=U(0),e=d(2);o(),A("h-24",e.compact)("h-32",!e.compact),v("viewBox",e.chartViewBox),o(),v("y1",e.chartH)("x2",e.chartW)("y2",e.chartH),o(),v("y1",e.chartMidY)("x2",e.chartW)("y2",e.chartMidY),o(),v("x2",e.chartW),o(),D(t.lines),o(10),D(t.lines),o(3),g(t.minTimeMs?18:19),o(4),g(t.maxTimeMs?22:23)}}function Ut(n,c){if(n&1&&(W(0),s(1,"div",13),y(2,xt,2,0,"div",14)(3,Et,24,14),a()),n&2){let t=B(d(2).chart_$());o(2),g(t.hasAnyData?3:2)}}function It(n,c){if(n&1){let t=P();s(0,"div",3)(1,"button",10),F("click",function(){G(t);let i=d();return L(i.handleToggleGraph())}),S(),s(2,"svg",11),b(3,"path",12),a(),u(4),a(),y(5,Ut,4,2,"div",13),a()}if(n&2){let t=d();o(),H("title",t.isGraphOpen_$()?"Hide usage graph":"Show usage graph (utilization over time per window)"),o(),A("rotate-90",t.isGraphOpen_$()),o(2),T(" \u{1F4C8} ",t.isGraphOpen_$()?"Hide":"Show"," graph "),o(),g(t.isGraphOpen_$()?5:-1)}}var Jt=(()=>{class n{account_DS=C(ut);accountKey="";compact=!1;showGraphToggle=!0;initiallyOpenGraph=!1;isGraphOpen_$=x(!1);chart_$=nt(()=>$.buildChart(this.account_DS.usageHistoryMap_$().get(this.accountKey)??[]));chartViewBox=`0 0 ${$.CHART_WIDTH} ${$.CHART_HEIGHT}`;chartW=$.CHART_WIDTH;chartH=$.CHART_HEIGHT;chartMidY=$.CHART_HEIGHT/2;usageEffect=j(()=>{let t=this.accountKey;t&&(this.account_DS.accountUsageMap_$().has(t)||this.account_DS.loadAccountUsage(t))});initialOpenEffect=j(()=>{this.initiallyOpenGraph&&this.isGraphOpen_$.set(!0)});handleToggleGraph(){return p(this,null,function*(){let t=!this.isGraphOpen_$();this.isGraphOpen_$.set(t),t&&!this.account_DS.usageHistoryMap_$().has(this.accountKey)&&(yield this.account_DS.loadAccountUsageHistory({accountKey:this.accountKey}))})}handleRefreshGraph(){return p(this,null,function*(){yield this.account_DS.loadAccountUsageHistory({accountKey:this.accountKey})})}usageItemOfWindow(t){let e=this.account_DS.accountUsageMap_$().get(this.accountKey)??[];for(let i of e)if(i.windowType===t)return i;return null}hasAnyUsageData(){return(this.account_DS.accountUsageMap_$().get(this.accountKey)??[]).length>0}windowLabelOf(t){switch(t){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 t}}utilizationPercent(t){return t==null||!isFinite(t)?0:Math.max(0,Math.min(100,Math.round(t*100)))}formatUtilization(t){return t==null?"\u2014":`${Math.round(t*100)}%`}utilizationBarColorClass(t){return t==null||!isFinite(t)?"bg-neutral-600":t>=.85?"bg-red-500":t>=.5?"bg-amber-500":"bg-emerald-500"}formatResetCountdown(t){if(t==null||!isFinite(t)||t<=0)return"\u2014";let e=t-Date.now();if(e<=0)return"expired";let i=Math.floor(e/6e4),r=Math.floor(i/(60*24)),_=Math.floor(i%(60*24)/60),M=i%60;return r>0?`${r}d ${_}h`:_>0?`${_}h ${M}m`:`${M}m`}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=Z({type:n,selectors:[["app-cc-account-usage-view"]],inputs:{accountKey:"accountKey",compact:"compact",showGraphToggle:"showGraphToggle",initiallyOpenGraph:"initiallyOpenGraph"},standalone:!0,features:[tt],decls:6,vars:11,consts:[[1,"flex","flex-col"],[3,"class","opacity-50"],[1,"text-[10px]","text-neutral-500","italic","pt-1","border-t","border-neutral-800/40"],[1,"border-t","border-neutral-800/40","pt-2"],[1,"text-neutral-300","font-medium","truncate",3,"title"],[1,"flex","items-center","gap-2","min-w-0"],[3,"class","width"],[1,"font-mono","text-neutral-200","text-right","shrink-0"],[1,"font-mono","text-neutral-500","text-right","text-[10px]","truncate",3,"title"],[1,"text-neutral-400"],["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,"mt-2","rounded-md","border","border-neutral-800","bg-neutral-950/40","p-2"],[1,"text-[11px]","text-neutral-500","italic","px-2","py-3","text-center"],[1,"relative","w-full"],["preserveAspectRatio","none",1,"w-full","block"],["x1","0","stroke","#3f3f46","stroke-width","0.3"],["x1","0","stroke","#3f3f46","stroke-width","0.2","stroke-dasharray","1,1"],["x1","0","y1","0","y2","0","stroke","#3f3f46","stroke-width","0.2","stroke-dasharray","1,1"],[1,"absolute","inset-y-0","left-0","flex","flex-col","justify-between","text-[8px]","text-neutral-600","font-mono","pointer-events-none"],[1,"mt-2","flex","flex-wrap","items-center","gap-2","text-[10px]"],[1,"flex","items-center","gap-1",3,"opacity-40"],[1,"mt-1","flex","items-center","justify-between","text-[9px]","text-neutral-600"],["type","button","title","Re-fetch usage event history for this graph.",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",3,"click"],["r","0.8"],["fill","none","stroke-width","0.6","stroke-linecap","round","stroke-linejoin","round","vector-effect","non-scaling-stroke"],["r","0.6"],[1,"flex","items-center","gap-1"],[1,"inline-block","w-2","h-2","rounded-sm"],[1,"text-neutral-300"],[1,"text-neutral-500"],[1,"font-mono","text-neutral-400"]],template:function(e,i){e&1&&(s(0,"div",0)(1,"div"),k(2,ft,11,15,"div",1,Q),a(),y(4,gt,5,0,"div",2)(5,It,6,5,"div",3),a()),e&2&&(A("gap-1",i.compact)("gap-2",!i.compact),o(),A("space-y-1",i.compact)("space-y-2",!i.compact),o(),D(et(10,ht)),o(2),g(i.hasAnyUsageData()?-1:4),o(),g(i.showGraphToggle?5:-1))},dependencies:[ot,it],encapsulation:2})}return n})();export{ut as a,Jt as b};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{e as rt}from"./chunk-MGD2AIPS.js";import{I as st}from"./chunk-J4NUXLQQ.js";import{$a as K,C,D as Z,Fa as u,Ga as V,Ha as T,J as G,K as L,L as S,M as q,Pa as W,Qa as B,R as J,Ra as U,Ta as tt,Ua as et,Z as o,aa as x,bb as N,da as y,fa as v,ga as H,ha as R,hb as nt,ia as A,ja as E,jb as j,k as p,la as g,na as Q,oa as k,p as m,pa as D,pb as it,qa as s,ra as a,sa as b,ua as P,ub as ot,va as F,wa as d,xb as at,y as O}from"./chunk-TBMJSIBB.js";var lt=(()=>{class n{baseUrl=`${st.api.baseUrl}/cc-account`;http=C(at);listAccounts(){return m(this.http.get(`${this.baseUrl}/list`))}listAccountsByIdentity(){return m(this.http.get(`${this.baseUrl}/list-by-identity`))}backfillIdentity(){return m(this.http.post(`${this.baseUrl}/backfill-identity`,{}))}auditIdentityDuplicates(){return m(this.http.get(`${this.baseUrl}/identity-audit`))}refreshLocalAccounts(){return m(this.http.post(`${this.baseUrl}/refresh`,{}))}getInstanceMapping(){return m(this.http.get(`${this.baseUrl}/instance-mapping`))}getAccount(t){return m(this.http.get(`${this.baseUrl}/${t}`))}getAccountUsage(t){return m(this.http.get(`${this.baseUrl}/${t}/usage`))}getAccountUsageHistory(t){let e=[];t.windowType!=null&&t.windowType!==""&&e.push(`windowType=${encodeURIComponent(t.windowType)}`),t.fromMs!=null&&e.push(`fromMs=${t.fromMs}`),t.toMs!=null&&e.push(`toMs=${t.toMs}`);let i=e.length>0?`?${e.join("&")}`:"";return m(this.http.get(`${this.baseUrl}/${t.accountKey}/usage-history${i}`))}refreshAccountUsage(t){return m(this.http.post(`${this.baseUrl}/${t}/refresh-usage`,{}))}renameAccount(t){let e={};return t.displayName!==void 0&&(e.displayName=t.displayName),t.email!==void 0&&(e.email=t.email),m(this.http.patch(`${this.baseUrl}/${t.accountKey}`,e))}static \u0275fac=function(e){return new(e||n)};static \u0275prov=O({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var pt="cc:account-usage-update",_t="cc:account-list-update",ut=(()=>{class n{account_AS=C(lt);socket_CS=C(rt);ngZone=C(J);socketSubscription=null;accounts_$=x([]);accountUsageMap_$=x(new Map);instanceMapping_$=x(null);usageHistoryMap_$=x(new Map);identityGroups_$=x([]);isLoading_$=x(!1);loadError_$=x(null);loadDashboardBootstrap(){return p(this,null,function*(){this.isLoading_$.set(!0),this.loadError_$.set(null);try{let[t,e,i]=yield Promise.all([this.account_AS.listAccounts(),this.account_AS.getInstanceMapping(),this.account_AS.listAccountsByIdentity()]);this.accounts_$.set(t.items),this.instanceMapping_$.set(e),this.identityGroups_$.set(i.groups);let r=new Map(this.accountUsageMap_$());for(let _ of i.groups)r.set(_.primary.accountKey,_.mergedUsage);this.accountUsageMap_$.set(r)}catch(t){this.loadError_$.set(this.errorMessageOf(t))}finally{this.isLoading_$.set(!1)}})}loadIdentityGroups(){return p(this,null,function*(){try{let t=yield this.account_AS.listAccountsByIdentity();this.identityGroups_$.set(t.groups);let e=new Map(this.accountUsageMap_$());for(let i of t.groups)e.set(i.primary.accountKey,i.mergedUsage);this.accountUsageMap_$.set(e)}catch(t){this.loadError_$.set(this.errorMessageOf(t))}})}loadAccounts(){return p(this,null,function*(){try{let t=yield this.account_AS.listAccounts();this.accounts_$.set(t.items)}catch(t){this.loadError_$.set(this.errorMessageOf(t))}})}loadAccountUsage(t){return p(this,null,function*(){try{let e=yield this.account_AS.getAccountUsage(t),i=new Map(this.accountUsageMap_$());i.set(t,e.items),this.accountUsageMap_$.set(i)}catch(e){this.loadError_$.set(this.errorMessageOf(e))}})}loadAccountUsageHistory(t){return p(this,null,function*(){try{let e=yield this.account_AS.getAccountUsageHistory(t),i=new Map(this.usageHistoryMap_$());i.set(t.accountKey,e.items),this.usageHistoryMap_$.set(i)}catch(e){this.loadError_$.set(this.errorMessageOf(e))}})}loadInstanceMapping(){return p(this,null,function*(){try{let t=yield this.account_AS.getInstanceMapping();this.instanceMapping_$.set(t)}catch(t){this.loadError_$.set(this.errorMessageOf(t))}})}refreshAccounts(){return p(this,null,function*(){this.isLoading_$.set(!0),this.loadError_$.set(null);try{let t=yield this.account_AS.refreshLocalAccounts();return yield this.loadAccounts(),t}catch(t){return this.loadError_$.set(this.errorMessageOf(t)),{refreshedKeys:[],scannedPaths:0}}finally{this.isLoading_$.set(!1)}})}refreshAccountUsage(t){return p(this,null,function*(){try{let e=yield this.account_AS.refreshAccountUsage(t);return yield this.loadAccountUsage(t),yield this.loadAccounts(),e}catch(e){return this.loadError_$.set(this.errorMessageOf(e)),{status:"error",windowsUpserted:0,email:null}}})}renameAccount(t){return p(this,null,function*(){try{let e=yield this.account_AS.renameAccount(t),i=this.accounts_$().map(r=>r.accountKey===t.accountKey?e:r);this.accounts_$.set(i)}catch(e){this.loadError_$.set(this.errorMessageOf(e))}})}startLiveUpdates(){this.socketSubscription==null&&(this.socketSubscription=this.socket_CS.event$.subscribe(t=>{this.ngZone.run(()=>{t.event===pt?this.handleAccountUsageUpdate(t.payload):t.event===_t&&this.handleAccountListUpdate(t.payload)})}))}stopLiveUpdates(){this.socketSubscription!=null&&(this.socketSubscription.unsubscribe(),this.socketSubscription=null)}ngOnDestroy(){this.stopLiveUpdates()}handleAccountUsageUpdate(t){let e=t.accountKey,i=t.windowType;if(typeof e!="string"||e===""||typeof i!="string")return;let r={accountKey:e,windowType:i,utilization:typeof t.utilization=="number"?t.utilization:void 0,resetsAtMs:typeof t.resetsAtMs=="number"?t.resetsAtMs:void 0,lastObservedStatus:typeof t.lastObservedStatus=="string"?t.lastObservedStatus:void 0,observedAt:typeof t.observedAt=="string"?t.observedAt:void 0,lastObservedByCcapId:typeof t.lastObservedByCcapId=="string"?t.lastObservedByCcapId:void 0,lastObservedBySessionId:typeof t.lastObservedBySessionId=="string"?t.lastObservedBySessionId:void 0},_=new Map(this.accountUsageMap_$()),l=(_.get(e)??[]).filter(f=>f.windowType!==i);l.push(r),_.set(e,l),this.accountUsageMap_$.set(_)}handleAccountListUpdate(t){this.loadAccounts(),this.loadIdentityGroups()}errorMessageOf(t){if(t instanceof Error)return t.message;if(typeof t=="object"&&t!==null){let e=t;if(typeof e.message=="string")return e.message}return String(t)}static \u0275fac=function(e){return new(e||n)};static \u0275prov=O({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var $=(()=>{class n{static CHART_WIDTH=100;static CHART_HEIGHT=40;static COLOR_MAP={five_hour:"#10b981",seven_day:"#06b6d4",seven_day_opus:"#a855f7",seven_day_sonnet:"#f59e0b",extra_usage:"#f43f5e"};static WINDOW_LABEL_MAP={five_hour:"5h",seven_day:"Weekly",seven_day_opus:"Opus",seven_day_sonnet:"Sonnet",extra_usage:"Extra"};static WINDOW_ORDER=["five_hour","seven_day","seven_day_opus","seven_day_sonnet","extra_usage"];static buildChart(t){let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,r=0;for(let l of t){if(typeof l.observedAt!="string"||l.observedAt===""||typeof l.utilization!="number"||!isFinite(l.utilization))continue;let f=Date.parse(l.observedAt);isFinite(f)&&(f<e&&(e=f),f>i&&(i=f),r++)}if(r===0)return{lines:n.WINDOW_ORDER.map(l=>({windowType:l,label:n.WINDOW_LABEL_MAP[l]??l,colorHex:n.COLOR_MAP[l]??"#9ca3af",pathPoints:"",hasData:!1,pointCount:0,lastX:0,lastY:0})),hasAnyData:!1,minTimeMs:0,maxTimeMs:0};i-e<1&&(i=e+36e5);let _=i-e,M=n.WINDOW_ORDER.map(l=>{let f=[];for(let h of t){if(h.windowType!==l||typeof h.observedAt!="string"||h.observedAt===""||typeof h.utilization!="number"||!isFinite(h.utilization))continue;let w=Date.parse(h.observedAt);isFinite(w)&&f.push({t:w,u:Math.max(0,Math.min(1,h.utilization))})}f.sort((h,w)=>h.t-w.t);let I=[],z=0,Y=0;for(let h of f){let w=(h.t-e)/_*n.CHART_WIDTH,X=n.CHART_HEIGHT-h.u*n.CHART_HEIGHT;I.push(`${w.toFixed(2)},${X.toFixed(2)}`),z=w,Y=X}return{windowType:l,label:n.WINDOW_LABEL_MAP[l]??l,colorHex:n.COLOR_MAP[l]??"#9ca3af",pathPoints:I.join(" "),hasData:I.length>0,pointCount:I.length,lastX:z,lastY:Y}});return{lines:M,hasAnyData:M.some(l=>l.hasData),minTimeMs:e,maxTimeMs:i}}}return n})();var dt=(n,c)=>c.windowType,ht=()=>["five_hour","seven_day","seven_day_opus","seven_day_sonnet","extra_usage"];function mt(n,c){if(n&1&&b(0,"div"),n&2){d();let t=U(0),e=d();E("h-full transition-all "+e.utilizationBarColorClass(t.utilization)),R("width",e.utilizationPercent(t.utilization),"%")}}function ft(n,c){if(n&1&&(W(0),s(1,"div")(2,"div",4),u(3),a(),s(4,"div",5)(5,"div"),y(6,mt,1,4,"div",6),a(),s(7,"span",7),u(8),a()(),s(9,"div",8),u(10),a()()),n&2){let t,e=c.$implicit,i=d(),r=B(i.usageItemOfWindow(e));o(),E(i.compact?"grid grid-cols-[90px_1fr_56px] items-center gap-2 text-[10px]":"grid grid-cols-[110px_1fr_64px] items-center gap-2 text-[11px]"),A("opacity-50",!r),o(),H("title",e),o(),T(" ",i.windowLabelOf(e)," "),o(2),E(i.compact?"flex-1 h-1.5 bg-neutral-800 rounded-full overflow-hidden":"flex-1 h-2 bg-neutral-800 rounded-full overflow-hidden"),o(),g(r?6:-1),o(),E(i.compact?"w-8 text-[10px]":"w-9"),o(),T(" ",i.formatUtilization((t=r==null?null:r.utilization)!==null&&t!==void 0?t:null)," "),o(),H("title","Resets in "+i.formatResetCountdown(r==null?null:r.resetsAtMs)),o(),T(" ",i.formatResetCountdown(r==null?null:r.resetsAtMs)," ")}}function gt(n,c){n&1&&(s(0,"div",2),u(1," No data yet \u2014 click "),s(2,"strong",9),u(3,"Pull"),a(),u(4," or wait for the next rate-limit event. "),a())}function xt(n,c){n&1&&(s(0,"div",14),u(1," No graph data yet \u2014 pull usage or wait for a CC session rate-limit event. "),a())}function yt(n,c){if(n&1&&(S(),b(0,"circle",25)),n&2){let t=d(2).$implicit;v("cx",t.lastX)("cy",t.lastY)("fill",t.colorHex)}}function Ct(n,c){if(n&1&&(S(),b(0,"polyline",26)(1,"circle",27)),n&2){let t=d(2).$implicit;v("points",t.pathPoints)("stroke",t.colorHex),o(),v("cx",t.lastX)("cy",t.lastY)("fill",t.colorHex)}}function vt(n,c){if(n&1&&y(0,yt,1,3,":svg:circle",25)(1,Ct,2,5),n&2){let t=d().$implicit;g(t.pointCount===1?0:1)}}function wt(n,c){if(n&1&&y(0,vt,2,1),n&2){let t=c.$implicit;g(t.hasData?0:-1)}}function At(n,c){if(n&1&&(s(0,"span",31),u(1,"\xB7"),a(),s(2,"span",32),u(3),a()),n&2){let t=d().$implicit,e=d(4);o(3),T(" ",((e.chartH-t.lastY)/e.chartH*100).toFixed(0),"% ")}}function bt(n,c){if(n&1&&(s(0,"div",28),b(1,"span",29),s(2,"span",30),u(3),a(),y(4,At,4,1),a()),n&2){let t=c.$implicit;A("opacity-40",!t.hasData),o(),R("background-color",t.colorHex),o(2),V(t.label),o(),g(t.hasData?4:-1)}}function $t(n,c){if(n&1&&(s(0,"span"),u(1),K(2,"date"),a()),n&2){d(2);let t=U(0);o(),V(N(2,1,t.minTimeMs,"yyyy-MM-dd HH:mm"))}}function Mt(n,c){n&1&&(s(0,"span"),u(1,"\u2014"),a())}function Tt(n,c){if(n&1&&(s(0,"span"),u(1),K(2,"date"),a()),n&2){d(2);let t=U(0);o(),V(N(2,1,t.maxTimeMs,"yyyy-MM-dd HH:mm"))}}function St(n,c){n&1&&(s(0,"span"),u(1,"\u2014"),a())}function Et(n,c){if(n&1){let t=P();s(0,"div",15),S(),s(1,"svg",16),b(2,"line",17)(3,"line",18)(4,"line",19),k(5,wt,1,1,null,null,dt),a(),q(),s(7,"div",20)(8,"span"),u(9,"100%"),a(),s(10,"span"),u(11,"50%"),a(),s(12,"span"),u(13,"0%"),a()()(),s(14,"div",21),k(15,bt,5,6,"div",22,dt),a(),s(17,"div",23),y(18,$t,3,4,"span")(19,Mt,2,0,"span"),s(20,"button",24),F("click",function(){G(t);let i=d(3);return L(i.handleRefreshGraph())}),u(21," \u21BB Refresh "),a(),y(22,Tt,3,4,"span")(23,St,2,0,"span"),a()}if(n&2){d();let t=U(0),e=d(2);o(),A("h-24",e.compact)("h-32",!e.compact),v("viewBox",e.chartViewBox),o(),v("y1",e.chartH)("x2",e.chartW)("y2",e.chartH),o(),v("y1",e.chartMidY)("x2",e.chartW)("y2",e.chartMidY),o(),v("x2",e.chartW),o(),D(t.lines),o(10),D(t.lines),o(3),g(t.minTimeMs?18:19),o(4),g(t.maxTimeMs?22:23)}}function Ut(n,c){if(n&1&&(W(0),s(1,"div",13),y(2,xt,2,0,"div",14)(3,Et,24,14),a()),n&2){let t=B(d(2).chart_$());o(2),g(t.hasAnyData?3:2)}}function It(n,c){if(n&1){let t=P();s(0,"div",3)(1,"button",10),F("click",function(){G(t);let i=d();return L(i.handleToggleGraph())}),S(),s(2,"svg",11),b(3,"path",12),a(),u(4),a(),y(5,Ut,4,2,"div",13),a()}if(n&2){let t=d();o(),H("title",t.isGraphOpen_$()?"Hide usage graph":"Show usage graph (utilization over time per window)"),o(),A("rotate-90",t.isGraphOpen_$()),o(2),T(" \u{1F4C8} ",t.isGraphOpen_$()?"Hide":"Show"," graph "),o(),g(t.isGraphOpen_$()?5:-1)}}var Jt=(()=>{class n{account_DS=C(ut);accountKey="";compact=!1;showGraphToggle=!0;initiallyOpenGraph=!1;isGraphOpen_$=x(!1);chart_$=nt(()=>$.buildChart(this.account_DS.usageHistoryMap_$().get(this.accountKey)??[]));chartViewBox=`0 0 ${$.CHART_WIDTH} ${$.CHART_HEIGHT}`;chartW=$.CHART_WIDTH;chartH=$.CHART_HEIGHT;chartMidY=$.CHART_HEIGHT/2;usageEffect=j(()=>{let t=this.accountKey;t&&(this.account_DS.accountUsageMap_$().has(t)||this.account_DS.loadAccountUsage(t))});initialOpenEffect=j(()=>{this.initiallyOpenGraph&&this.isGraphOpen_$.set(!0)});handleToggleGraph(){return p(this,null,function*(){let t=!this.isGraphOpen_$();this.isGraphOpen_$.set(t),t&&!this.account_DS.usageHistoryMap_$().has(this.accountKey)&&(yield this.account_DS.loadAccountUsageHistory({accountKey:this.accountKey}))})}handleRefreshGraph(){return p(this,null,function*(){yield this.account_DS.loadAccountUsageHistory({accountKey:this.accountKey})})}usageItemOfWindow(t){let e=this.account_DS.accountUsageMap_$().get(this.accountKey)??[];for(let i of e)if(i.windowType===t)return i;return null}hasAnyUsageData(){return(this.account_DS.accountUsageMap_$().get(this.accountKey)??[]).length>0}windowLabelOf(t){switch(t){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 t}}utilizationPercent(t){return t==null||!isFinite(t)?0:Math.max(0,Math.min(100,Math.round(t*100)))}formatUtilization(t){return t==null?"\u2014":`${Math.round(t*100)}%`}utilizationBarColorClass(t){return t==null||!isFinite(t)?"bg-neutral-600":t>=.85?"bg-red-500":t>=.5?"bg-amber-500":"bg-emerald-500"}formatResetCountdown(t){if(t==null||!isFinite(t)||t<=0)return"\u2014";let e=t-Date.now();if(e<=0)return"expired";let i=Math.floor(e/6e4),r=Math.floor(i/(60*24)),_=Math.floor(i%(60*24)/60),M=i%60;return r>0?`${r}d ${_}h`:_>0?`${_}h ${M}m`:`${M}m`}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=Z({type:n,selectors:[["app-cc-account-usage-view"]],inputs:{accountKey:"accountKey",compact:"compact",showGraphToggle:"showGraphToggle",initiallyOpenGraph:"initiallyOpenGraph"},standalone:!0,features:[tt],decls:6,vars:11,consts:[[1,"flex","flex-col"],[3,"class","opacity-50"],[1,"text-[10px]","text-neutral-500","italic","pt-1","border-t","border-neutral-800/40"],[1,"border-t","border-neutral-800/40","pt-2"],[1,"text-neutral-300","font-medium","truncate",3,"title"],[1,"flex","items-center","gap-2","min-w-0"],[3,"class","width"],[1,"font-mono","text-neutral-200","text-right","shrink-0"],[1,"font-mono","text-neutral-500","text-right","text-[10px]","truncate",3,"title"],[1,"text-neutral-400"],["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,"mt-2","rounded-md","border","border-neutral-800","bg-neutral-950/40","p-2"],[1,"text-[11px]","text-neutral-500","italic","px-2","py-3","text-center"],[1,"relative","w-full"],["preserveAspectRatio","none",1,"w-full","block"],["x1","0","stroke","#3f3f46","stroke-width","0.3"],["x1","0","stroke","#3f3f46","stroke-width","0.2","stroke-dasharray","1,1"],["x1","0","y1","0","y2","0","stroke","#3f3f46","stroke-width","0.2","stroke-dasharray","1,1"],[1,"absolute","inset-y-0","left-0","flex","flex-col","justify-between","text-[8px]","text-neutral-600","font-mono","pointer-events-none"],[1,"mt-2","flex","flex-wrap","items-center","gap-2","text-[10px]"],[1,"flex","items-center","gap-1",3,"opacity-40"],[1,"mt-1","flex","items-center","justify-between","text-[9px]","text-neutral-600"],["type","button","title","Re-fetch usage event history for this graph.",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",3,"click"],["r","0.8"],["fill","none","stroke-width","0.6","stroke-linecap","round","stroke-linejoin","round","vector-effect","non-scaling-stroke"],["r","0.6"],[1,"flex","items-center","gap-1"],[1,"inline-block","w-2","h-2","rounded-sm"],[1,"text-neutral-300"],[1,"text-neutral-500"],[1,"font-mono","text-neutral-400"]],template:function(e,i){e&1&&(s(0,"div",0)(1,"div"),k(2,ft,11,15,"div",1,Q),a(),y(4,gt,5,0,"div",2)(5,It,6,5,"div",3),a()),e&2&&(A("gap-1",i.compact)("gap-2",!i.compact),o(),A("space-y-1",i.compact)("space-y-2",!i.compact),o(),D(et(10,ht)),o(2),g(i.hasAnyUsageData()?-1:4),o(),g(i.showGraphToggle?5:-1))},dependencies:[ot,it],encapsulation:2})}return n})();export{ut as a,Jt as b};
|
|
2
|
+
//# sourceMappingURL=chunk-O4MYOI6Z.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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-chart.util.ts", "src/app/_modules/external-sessions/_modules/claude-code/_components/cc-account-usage-view/cc-account-usage-view.component.ts", "src/app/_modules/external-sessions/_modules/claude-code/_components/cc-account-usage-view/cc-account-usage-view.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/cc-account.interface';\nimport { CC_AccountUsageEvent_Response } from '../_models/interfaces/cc-account/cc-account-usage-event.interface';\nimport {\n CC_AccountInstanceMapping_Response,\n CC_AccountUsageState_Response,\n} from '../_models/interfaces/cc-account/cc-account-usage-state.interface';\nimport { CC_AccountIdentityList_Response } from '../_models/interfaces/cc-account/cc-account-identity-group.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 /**\n * GET /cc-account/list-by-identity — REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 3\n * part-1 (cycle 890): account-lista accountIdentity szerint csoportosítva.\n * A Dashboard ezt használja a per-email view-hoz (a token-rotation\n * duplikátumok egyetlen kártyán).\n */\n listAccountsByIdentity(): Promise<CC_AccountIdentityList_Response> {\n return firstValueFrom(\n this.http.get<CC_AccountIdentityList_Response>(`${this.baseUrl}/list-by-identity`),\n );\n }\n\n /**\n * POST /cc-account/backfill-identity — REQ-CC-ACCOUNT-IDENTITY-EMAIL-001\n * Slice 2 (cycle 889): manuális identity-backfill trigger.\n */\n backfillIdentity(): Promise<{\n totalScanned: number;\n alreadyPopulated: number;\n populated: number;\n skippedMissingFile: number;\n skippedInvalidPayload: number;\n failures: number;\n }> {\n return firstValueFrom(\n this.http.post<{\n totalScanned: number;\n alreadyPopulated: number;\n populated: number;\n skippedMissingFile: number;\n skippedInvalidPayload: number;\n failures: number;\n }>(`${this.baseUrl}/backfill-identity`, {}),\n );\n }\n\n /**\n * GET /cc-account/identity-audit — REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 2\n * (cycle 889): identity-duplikáció audit.\n */\n auditIdentityDuplicates(): Promise<{\n duplicateGroups: { accountIdentity: string; accountKeys: string[]; count: number }[];\n totalDuplicates: number;\n uniqueIdentities: number;\n recordsWithoutIdentity: number;\n }> {\n return firstValueFrom(\n this.http.get<{\n duplicateGroups: { accountIdentity: string; accountKeys: string[]; count: number }[];\n totalDuplicates: number;\n uniqueIdentities: number;\n recordsWithoutIdentity: number;\n }>(`${this.baseUrl}/identity-audit`),\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/cc-account.interface';\nimport { CC_AccountUsageEvent_Response } from '../_models/interfaces/cc-account/cc-account-usage-event.interface';\nimport {\n CC_AccountInstanceMapping_Response,\n CC_AccountUsageState_Response,\n} from '../_models/interfaces/cc-account/cc-account-usage-state.interface';\nimport {\n CC_AccountIdentityGroup_Response,\n} from '../_models/interfaces/cc-account/cc-account-identity-group.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 /**\n * REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 3 part-1 (cycle 890): identity-\n * csoportosított account-lista — per-email view a Dashboard-on. A\n * `accounts_$` (raw rekordok, duplikátumokkal) MELLETT él; a Dashboard a\n * `identityGroups_$`-ot rendereli (egy kártya / identity), az `accounts_$`\n * audit / admin-célokra megmarad.\n */\n readonly identityGroups_$ = signal<CC_AccountIdentityGroup_Response[]>([]);\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 /**\n * Bootstrap fetch: account-list + instance-mapping párhuzamosan, majd a\n * megismert account-okhoz az 5 windowType-os usage state-eket is lehúzzuk\n * (REQ-CC-USAGE-DASHBOARD-001 cycle 883). Ez biztosítja, hogy a Dashboard\n * megnyitásakor azonnal látszanak az utolsó perzisztált usage értékek —\n * nem kell auto-pull socket-eventre vagy manuális Pull-clickre várni.\n */\n async loadDashboardBootstrap(): Promise<void> {\n this.isLoading_$.set(true);\n this.loadError_$.set(null);\n try {\n // REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 3 part-1 (cycle 890): a Dashboard\n // most az identity-group endpoint-ot is használja a per-email view-hoz.\n // Párhuzamosan az accountsList + instance-mapping + identity-groups.\n const [accountsResp, mappingResp, groupsResp] = await Promise.all([\n this.account_AS.listAccounts(),\n this.account_AS.getInstanceMapping(),\n this.account_AS.listAccountsByIdentity(),\n ]);\n this.accounts_$.set(accountsResp.items);\n this.instanceMapping_$.set(mappingResp);\n this.identityGroups_$.set(groupsResp.groups);\n // A `accountUsageMap_$` cache-be a group merged-usage-eket is beleírjuk\n // — a `<app-cc-account-usage-view [accountKey]>` komponens (per identity-group\n // a primary.accountKey-vel) ezt olvassa.\n const nextMap: Map<string, CC_AccountUsageState_Response[]> = new Map(this.accountUsageMap_$());\n for (const group of groupsResp.groups) {\n nextMap.set(group.primary.accountKey, group.mergedUsage);\n }\n this.accountUsageMap_$.set(nextMap);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n } finally {\n this.isLoading_$.set(false);\n }\n }\n\n /**\n * REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 3 part-1 (cycle 890): csak az\n * identity-groups refetch-je (a refresh-after-pull / list-update szocketnél).\n */\n async loadIdentityGroups(): Promise<void> {\n try {\n const resp = await this.account_AS.listAccountsByIdentity();\n this.identityGroups_$.set(resp.groups);\n // Merged-usage cache update is.\n const nextMap: Map<string, CC_AccountUsageState_Response[]> = new Map(this.accountUsageMap_$());\n for (const group of resp.groups) {\n nextMap.set(group.primary.accountKey, group.mergedUsage);\n }\n this.accountUsageMap_$.set(nextMap);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\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 // REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 3 part-1 (cycle 890): a Dashboard\n // identity-groups view is frissül a socket-eventre — egyébként új account\n // (vagy backfill utáni identity-update) nem jutna el a Dashboard kártyáira.\n void this.loadIdentityGroups();\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", "import { CC_AccountUsageEvent_Response } from '../_models/interfaces/cc-account/cc-account-usage-event.interface';\nimport {\n CC_AccountUsageChartLine_Interface,\n CC_AccountUsageChart_Result,\n} from '../_models/interfaces/cc-account/cc-account-usage-chart.interface';\n\n/**\n * Account usage-history → SVG chart-line projektor (REQ-CC-USAGE-DASHBOARD-001\n * cycle 884). Az event-eket windowType-onként szétválogatja, observedAt szerint\n * növekvő sorrendbe rendezi, majd a `(t, utilization)` párokat egy 100×40 unit-os\n * viewBox-ba projektálja (x: 0..100 idő-tengely, y: 0=tele/100% .. 40=üres/0%).\n *\n * A 5 fix windowType-onkénti szín stabil (a Dashboard-kártyák és a Session-info\n * popover is ugyanezt használja, mint vizuális SSOT).\n */\nexport class CC_AccountUsageChart_Util {\n\n static readonly CHART_WIDTH: number = 100;\n static readonly CHART_HEIGHT: number = 40;\n\n /** Fix windowType-onkénti szín-paletta (stroke hex). */\n static readonly COLOR_MAP: Record<string, string> = {\n five_hour: '#10b981',\n seven_day: '#06b6d4',\n seven_day_opus: '#a855f7',\n seven_day_sonnet: '#f59e0b',\n extra_usage: '#f43f5e',\n };\n\n static readonly WINDOW_LABEL_MAP: Record<string, string> = {\n five_hour: '5h',\n seven_day: 'Weekly',\n seven_day_opus: 'Opus',\n seven_day_sonnet: 'Sonnet',\n extra_usage: 'Extra',\n };\n\n /** Fix windowType render-sorrend (stabil legend-sorrend). */\n static readonly WINDOW_ORDER: string[] = [\n 'five_hour',\n 'seven_day',\n 'seven_day_opus',\n 'seven_day_sonnet',\n 'extra_usage',\n ];\n\n /**\n * Account-history events → chart-line projektálás.\n * Üres input → üres result (`hasAnyData=false`); a hívó tudja kezelni az\n * \"no data yet\" placeholder render-t.\n */\n static buildChart(events: CC_AccountUsageEvent_Response[]): CC_AccountUsageChart_Result {\n // Idő-tartomány + érvényes pontok detektálása egy menetben.\n let minT: number = Number.POSITIVE_INFINITY;\n let maxT: number = Number.NEGATIVE_INFINITY;\n let validCount: number = 0;\n for (const e of events) {\n if (typeof e.observedAt !== 'string' || e.observedAt === '') {\n continue;\n }\n if (typeof e.utilization !== 'number' || !isFinite(e.utilization)) {\n continue;\n }\n const t: number = Date.parse(e.observedAt);\n if (!isFinite(t)) {\n continue;\n }\n if (t < minT) {\n minT = t;\n }\n if (t > maxT) {\n maxT = t;\n }\n validCount++;\n }\n\n if (validCount === 0) {\n return {\n lines: CC_AccountUsageChart_Util.WINDOW_ORDER.map(\n (wt: string): CC_AccountUsageChartLine_Interface => ({\n windowType: wt,\n label: CC_AccountUsageChart_Util.WINDOW_LABEL_MAP[wt] ?? wt,\n colorHex: CC_AccountUsageChart_Util.COLOR_MAP[wt] ?? '#9ca3af',\n pathPoints: '',\n hasData: false,\n pointCount: 0,\n lastX: 0,\n lastY: 0,\n }),\n ),\n hasAnyData: false,\n minTimeMs: 0,\n maxTimeMs: 0,\n };\n }\n\n // Degenerate eset: minden esemény ugyanabban a ms-ben — expand-eljük 1h-vel,\n // hogy a vízszintes vonalak ne 0-szélességűek legyenek.\n if (maxT - minT < 1) {\n maxT = minT + 3_600_000;\n }\n const range: number = maxT - minT;\n\n const lines: CC_AccountUsageChartLine_Interface[] =\n CC_AccountUsageChart_Util.WINDOW_ORDER.map((wt: string): CC_AccountUsageChartLine_Interface => {\n // windowType-onkénti gyűjtés + növekvő idő szerinti rendezés.\n const points: { t: number; u: number }[] = [];\n for (const e of events) {\n if (e.windowType !== wt) {\n continue;\n }\n if (typeof e.observedAt !== 'string' || e.observedAt === '') {\n continue;\n }\n if (typeof e.utilization !== 'number' || !isFinite(e.utilization)) {\n continue;\n }\n const t: number = Date.parse(e.observedAt);\n if (!isFinite(t)) {\n continue;\n }\n points.push({ t: t, u: Math.max(0, Math.min(1, e.utilization)) });\n }\n points.sort((a: { t: number; u: number }, b: { t: number; u: number }): number => a.t - b.t);\n\n const coords: string[] = [];\n let lastX: number = 0;\n let lastY: number = 0;\n for (const p of points) {\n const x: number = ((p.t - minT) / range) * CC_AccountUsageChart_Util.CHART_WIDTH;\n const y: number = CC_AccountUsageChart_Util.CHART_HEIGHT\n - (p.u * CC_AccountUsageChart_Util.CHART_HEIGHT);\n coords.push(`${x.toFixed(2)},${y.toFixed(2)}`);\n lastX = x;\n lastY = y;\n }\n\n return {\n windowType: wt,\n label: CC_AccountUsageChart_Util.WINDOW_LABEL_MAP[wt] ?? wt,\n colorHex: CC_AccountUsageChart_Util.COLOR_MAP[wt] ?? '#9ca3af',\n pathPoints: coords.join(' '),\n hasData: coords.length > 0,\n pointCount: coords.length,\n lastX: lastX,\n lastY: lastY,\n };\n });\n\n return {\n lines: lines,\n hasAnyData: lines.some((l: CC_AccountUsageChartLine_Interface): boolean => l.hasData),\n minTimeMs: minT,\n maxTimeMs: maxT,\n };\n }\n}\n", "import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, Input, signal, Signal } from '@angular/core';\n\nimport { CC_Account_DataService } from '../../_services/cc-account.data-service';\nimport { CC_AccountUsageState_Response } from '../../_models/interfaces/cc-account/cc-account-usage-state.interface';\nimport { CC_AccountUsageChart_Result } from '../../_models/interfaces/cc-account/cc-account-usage-chart.interface';\nimport { CC_AccountUsageChart_Util } from '../../_collections/cc-account-usage-chart.util';\n\n/**\n * CC Account Usage View — megosztott komponens (REQ-CC-USAGE-DASHBOARD-001 cycle 885).\n *\n * Egy account `accountKey`-éhez tartozó 5 windowType-os usage státusz + opcionális\n * időbeli SVG-graph render. Több helyen használt:\n * - CC Usage Dashboard (account-cards) — `compact=false`, graph elérhető\n * - CC Session info-panel popover — `compact=true` szűk popover-hez\n * - bárhol ahol egy accountKey-hez kell mutatni a usage-snapshot-ot\n *\n * SSOT: a `CC_Account_DataService.accountUsageMap_$` és `usageHistoryMap_$` signal-okat\n * olvassa. Lazy-fetch saját maga: ha a state cache-ben még nincs, indítja a\n * `loadAccountUsage`-t. A history-fetch csak akkor fut, ha a graph megnyílik.\n */\n@Component({\n selector: 'app-cc-account-usage-view',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './cc-account-usage-view.component.html',\n})\n/**\n * REQ-CC-USAGE-DASHBOARD-001 (cycle 885) — shared CC account-usage megjelenítő.\n * Egyetlen komponens a per-account utilization graph + status egységes renderéhez,\n * amit a Dashboard és a CC Session info-panel egyaránt használ (graph + status\n * SSOT). Csak Render-only: state-et a `CC_Account_DataService`-ből olvas.\n */\nexport class CC_AccountUsageView_Component {\n\n private readonly account_DS: CC_Account_DataService = inject(CC_Account_DataService);\n\n /** Account stable kulcs — kötelező input. */\n @Input({ required: true }) accountKey: string = '';\n\n /** Kompakt layout (kisebb fontok, szűkebb padding) — popover-be javasolt. */\n @Input() compact: boolean = false;\n\n /** Igaz → a graph toggle gomb meg fog jelenni (default: true). */\n @Input() showGraphToggle: boolean = true;\n\n /** Igaz → a graph-panel induláskor nyitva (default: false → lezárt). */\n @Input() initiallyOpenGraph: boolean = false;\n\n /** Lokális UI state: a graph-panel nyitva/zárva. */\n readonly isGraphOpen_$ = signal<boolean>(false);\n\n /** SVG chart-data builder az adott account-history cache-éből. */\n readonly chart_$: Signal<CC_AccountUsageChart_Result> = computed(\n (): CC_AccountUsageChart_Result => {\n return CC_AccountUsageChart_Util.buildChart(\n this.account_DS.usageHistoryMap_$().get(this.accountKey) ?? [],\n );\n },\n );\n\n /** SVG viewBox literal (a template használja). */\n readonly chartViewBox: string = `0 0 ${CC_AccountUsageChart_Util.CHART_WIDTH} ${CC_AccountUsageChart_Util.CHART_HEIGHT}`;\n readonly chartW: number = CC_AccountUsageChart_Util.CHART_WIDTH;\n readonly chartH: number = CC_AccountUsageChart_Util.CHART_HEIGHT;\n readonly chartMidY: number = CC_AccountUsageChart_Util.CHART_HEIGHT / 2;\n\n /**\n * Reaktív lazy-fetch: ha az accountKey változik vagy a cache üres, lekérjük\n * a perzisztált usage state-et. Ez azoknál a használati helyeknél kritikus\n * (popover, CC sessions dashboard), ahol a Dashboard-bootstrap NEM futott.\n */\n private readonly usageEffect = effect((): void => {\n const key: string = this.accountKey;\n if (!key) {\n return;\n }\n if (!this.account_DS.accountUsageMap_$().has(key)) {\n void this.account_DS.loadAccountUsage(key);\n }\n });\n\n /** initiallyOpenGraph input alkalmazása az isGraphOpen_$-ra. */\n private readonly initialOpenEffect = effect((): void => {\n if (this.initiallyOpenGraph) {\n this.isGraphOpen_$.set(true);\n }\n });\n\n /** Graph-toggle handler — első megnyitás-kor history-fetch. */\n async handleToggleGraph(): Promise<void> {\n const next: boolean = !this.isGraphOpen_$();\n this.isGraphOpen_$.set(next);\n if (next && !this.account_DS.usageHistoryMap_$().has(this.accountKey)) {\n await this.account_DS.loadAccountUsageHistory({ accountKey: this.accountKey });\n }\n }\n\n /** Explicit refresh — history-fetch reload. */\n async handleRefreshGraph(): Promise<void> {\n await this.account_DS.loadAccountUsageHistory({ accountKey: this.accountKey });\n }\n\n /** Egy adott windowType state-jét adja vissza, vagy null. */\n usageItemOfWindow(windowType: string): CC_AccountUsageState_Response | null {\n const items: CC_AccountUsageState_Response[] = this.account_DS.accountUsageMap_$().get(this.accountKey) ?? [];\n for (const item of items) {\n if (item.windowType === windowType) {\n return item;\n }\n }\n return null;\n }\n\n /** True ha legalább egy windowType-ra van adat. */\n hasAnyUsageData(): boolean {\n const items: CC_AccountUsageState_Response[] = this.account_DS.accountUsageMap_$().get(this.accountKey) ?? [];\n return items.length > 0;\n }\n\n /** Window-typeName → emberi label (pure mapping). */\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 /** Utilization → progress-bar width (0..100%, 0 ha null). */\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 /** Utilization fraction (0..1) → percent string '42%'. null → '—'. */\n formatUtilization(utilization: number | null | undefined): string {\n if (utilization == null) {\n return '—';\n }\n return `${Math.round(utilization * 100)}%`;\n }\n\n /** Progress-bar szín-osztály utilization alapján (zöld/sárga/piros). */\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 /** Reset countdown — 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", "<!-- CC Account Usage View — megosztott komponens (cycle 885).\n A 5 usage-sor mindig látszik (placeholder ha üres), a graph opcionális toggle-able. -->\n<div class=\"flex flex-col\" [class.gap-1]=\"compact\" [class.gap-2]=\"!compact\">\n <!-- 5 usage-sor: a mindig-látható status block. -->\n <div [class.space-y-1]=\"compact\" [class.space-y-2]=\"!compact\">\n @for (windowType of ['five_hour', 'seven_day', 'seven_day_opus', 'seven_day_sonnet', 'extra_usage']; track windowType) {\n @let item = usageItemOfWindow(windowType);\n <div [class]=\"compact ? 'grid grid-cols-[90px_1fr_56px] items-center gap-2 text-[10px]' : '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]=\"compact ? 'flex-1 h-1.5 bg-neutral-800 rounded-full overflow-hidden' : 'flex-1 h-2 bg-neutral-800 rounded-full overflow-hidden'\">\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 shrink-0\"\n [class]=\"compact ? 'w-8 text-[10px]' : 'w-9'\">\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\n @if (!hasAnyUsageData()) {\n <div class=\"text-[10px] text-neutral-500 italic pt-1 border-t border-neutral-800/40\">\n No data yet — click <strong class=\"text-neutral-400\">Pull</strong> or wait for the next rate-limit event.\n </div>\n }\n\n <!-- Graph toggle + SVG line-chart (cycle 884 portolva ide). -->\n @if (showGraphToggle) {\n <div class=\"border-t border-neutral-800/40 pt-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)=\"handleToggleGraph()\"\n [title]=\"isGraphOpen_$() ? 'Hide usage graph' : 'Show usage graph (utilization over time per window)'\"\n >\n <svg class=\"w-3 h-3 transition-transform\"\n [class.rotate-90]=\"isGraphOpen_$()\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"/>\n </svg>\n 📈 {{ isGraphOpen_$() ? 'Hide' : 'Show' }} graph\n </button>\n\n @if (isGraphOpen_$()) {\n @let chart = chart_$();\n <div class=\"mt-2 rounded-md border border-neutral-800 bg-neutral-950/40 p-2\">\n @if (!chart.hasAnyData) {\n <div class=\"text-[11px] text-neutral-500 italic px-2 py-3 text-center\">\n No graph data yet — pull usage or wait for a CC session rate-limit event.\n </div>\n } @else {\n <div class=\"relative w-full\">\n <svg [attr.viewBox]=\"chartViewBox\" preserveAspectRatio=\"none\"\n class=\"w-full block\"\n [class.h-24]=\"compact\"\n [class.h-32]=\"!compact\">\n <!-- Háttér + 0%, 50%, 100% referencia-vonalak. -->\n <line x1=\"0\" [attr.y1]=\"chartH\" [attr.x2]=\"chartW\" [attr.y2]=\"chartH\"\n stroke=\"#3f3f46\" stroke-width=\"0.3\"/>\n <line x1=\"0\" [attr.y1]=\"chartMidY\" [attr.x2]=\"chartW\" [attr.y2]=\"chartMidY\"\n stroke=\"#3f3f46\" stroke-width=\"0.2\" stroke-dasharray=\"1,1\"/>\n <line x1=\"0\" y1=\"0\" [attr.x2]=\"chartW\" y2=\"0\"\n stroke=\"#3f3f46\" stroke-width=\"0.2\" stroke-dasharray=\"1,1\"/>\n @for (line of chart.lines; track line.windowType) {\n @if (line.hasData) {\n @if (line.pointCount === 1) {\n <circle [attr.cx]=\"line.lastX\" [attr.cy]=\"line.lastY\" r=\"0.8\" [attr.fill]=\"line.colorHex\"/>\n } @else {\n <polyline [attr.points]=\"line.pathPoints\"\n [attr.stroke]=\"line.colorHex\"\n fill=\"none\" stroke-width=\"0.6\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\"\n vector-effect=\"non-scaling-stroke\"/>\n <circle [attr.cx]=\"line.lastX\" [attr.cy]=\"line.lastY\" r=\"0.6\" [attr.fill]=\"line.colorHex\"/>\n }\n }\n }\n </svg>\n <div class=\"absolute inset-y-0 left-0 flex flex-col justify-between text-[8px] text-neutral-600 font-mono pointer-events-none\">\n <span>100%</span>\n <span>50%</span>\n <span>0%</span>\n </div>\n </div>\n <div class=\"mt-2 flex flex-wrap items-center gap-2 text-[10px]\">\n @for (line of chart.lines; track line.windowType) {\n <div class=\"flex items-center gap-1\" [class.opacity-40]=\"!line.hasData\">\n <span class=\"inline-block w-2 h-2 rounded-sm\" [style.background-color]=\"line.colorHex\"></span>\n <span class=\"text-neutral-300\">{{ line.label }}</span>\n @if (line.hasData) {\n <span class=\"text-neutral-500\">·</span>\n <span class=\"font-mono text-neutral-400\">\n {{ ((chartH - line.lastY) / chartH * 100).toFixed(0) }}%\n </span>\n }\n </div>\n }\n </div>\n <div class=\"mt-1 flex items-center justify-between text-[9px] text-neutral-600\">\n @if (chart.minTimeMs) {\n <span>{{ chart.minTimeMs | date:'yyyy-MM-dd HH:mm' }}</span>\n } @else {\n <span>—</span>\n }\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 (click)=\"handleRefreshGraph()\"\n title=\"Re-fetch usage event history for this graph.\"\n >\n ↻ Refresh\n </button>\n @if (chart.maxTimeMs) {\n <span>{{ chart.maxTimeMs | date:'yyyy-MM-dd HH:mm' }}</span>\n } @else {\n <span>—</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["CC_Account_ApiService", "baseUrl", "environment", "api", "http", "inject", "HttpClient", "listAccounts", "firstValueFrom", "get", "listAccountsByIdentity", "backfillIdentity", "post", "auditIdentityDuplicates", "refreshLocalAccounts", "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_$", "identityGroups_$", "isLoading_$", "loadError_$", "loadDashboardBootstrap", "__async", "set", "accountsResp", "mappingResp", "groupsResp", "Promise", "all", "listAccounts", "getInstanceMapping", "listAccountsByIdentity", "items", "groups", "nextMap", "group", "primary", "accountKey", "mergedUsage", "err", "errorMessageOf", "loadIdentityGroups", "resp", "loadAccounts", "loadAccountUsage", "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_AccountUsageChart_Util", "CHART_WIDTH", "CHART_HEIGHT", "COLOR_MAP", "five_hour", "seven_day", "seven_day_opus", "seven_day_sonnet", "extra_usage", "WINDOW_LABEL_MAP", "WINDOW_ORDER", "buildChart", "events", "minT", "Number", "POSITIVE_INFINITY", "maxT", "NEGATIVE_INFINITY", "validCount", "e", "observedAt", "utilization", "isFinite", "t", "Date", "parse", "lines", "map", "wt", "windowType", "label", "colorHex", "pathPoints", "hasData", "pointCount", "lastX", "lastY", "hasAnyData", "minTimeMs", "maxTimeMs", "range", "points", "push", "u", "Math", "max", "min", "sort", "a", "b", "coords", "p", "x", "y", "toFixed", "join", "length", "some", "l", "\u0275\u0275element", "\u0275\u0275classMap", "ctx_r1", "utilizationBarColorClass", "item_r1", "utilization", "\u0275\u0275styleProp", "utilizationPercent", "\u0275\u0275declareLet", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275template", "CC_AccountUsageView_Component_For_3_Conditional_6_Template", "\u0275\u0275storeLet", "usageItemOfWindow", "windowType_r3", "\u0275\u0275advance", "compact", "\u0275\u0275classProp", "item_r4", "\u0275\u0275property", "\u0275\u0275textInterpolate1", "windowLabelOf", "\u0275\u0275conditional", "formatUtilization", "tmp_18_0", "undefined", "formatResetCountdown", "resetsAtMs", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_6_Conditional_0_Conditional_0_Template", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_6_Conditional_0_Conditional_1_Template", "line_r7", "pointCount", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_6_Conditional_0_Template", "hasData", "chartH", "line_r8", "lastY", "toFixed", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_16_Conditional_4_Template", "colorHex", "\u0275\u0275textInterpolate", "label", "\u0275\u0275pipeBind2", "chart_r9", "minTimeMs", "maxTimeMs", "\u0275\u0275repeaterCreate", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_6_Template", "_forTrack0", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_16_Template", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_Conditional_18_Template", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_Conditional_19_Template", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r6", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleRefreshGraph", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_Conditional_22_Template", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_Conditional_23_Template", "\u0275\u0275repeater", "lines", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_2_Template", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_Template", "chart_$", "chart_r10", "hasAnyData", "_r5", "handleToggleGraph", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Template", "isGraphOpen_$", "CC_AccountUsageView_Component", "account_DS", "inject", "CC_Account_DataService", "accountKey", "showGraphToggle", "initiallyOpenGraph", "signal", "computed", "CC_AccountUsageChart_Util", "buildChart", "usageHistoryMap_$", "get", "chartViewBox", "CHART_WIDTH", "CHART_HEIGHT", "chartW", "chartMidY", "usageEffect", "effect", "key", "accountUsageMap_$", "has", "loadAccountUsage", "initialOpenEffect", "set", "__async", "next", "loadAccountUsageHistory", "windowType", "items", "item", "hasAnyUsageData", "length", "isFinite", "Math", "max", "min", "round", "diffMs", "Date", "now", "totalMinutes", "floor", "days", "hours", "minutes", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "CC_AccountUsageView_Component_For_3_Template", "\u0275\u0275repeaterTrackByIdentity", "CC_AccountUsageView_Component_Conditional_4_Template", "CC_AccountUsageView_Component_Conditional_5_Template", "\u0275\u0275pureFunction0", "_c0", "CommonModule", "DatePipe", "encapsulation"]
|
|
7
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{a as S}from"./chunk-
|
|
1
|
+
import{a as S}from"./chunk-T6Q6U33A.js";import{M as m,t as g}from"./chunk-J4NUXLQQ.js";import{C as y,N as h,a as i,aa as u,b as c,k as d,y as f}from"./chunk-TBMJSIBB.js";function I(){return{instanceId:crypto.randomUUID(),label:"default",gatewayUrl:"ws://127.0.0.1:18789",authToken:void 0,isPrimary:!1,autoConnect:!1,testState:"idle"}}function p(o){let l=[],s=o.gatewayUrl??"",t=(o.message??"").toLowerCase(),e=o.failureType??"";return s.startsWith("wss://")&&(e==="ws-error"||e==="ws-close")&&l.push('A gateway wss:// (TLS) protokollt haszn\xE1l \u2014 ha self-signed certificate-et haszn\xE1l, enged\xE9lyezd az "Allow self-signed TLS" opci\xF3t.'),s.startsWith("ws://")&&!s.startsWith("wss://")&&(e==="ws-error"||e==="ws-close")&&l.push("Ha a gateway TLS-t (wss://) haszn\xE1l, cser\xE9ld az URL-t ws:// helyett wss://-re."),e==="timeout"&&l.push("A gateway nem v\xE1laszolt id\u0151ben. Ellen\u0151rizd, hogy fut-e a gateway process \xE9s el\xE9rhet\u0151-e a megadott c\xEDmen."),e==="ws-error"&&!l.length&&l.push("Nem siker\xFClt csatlakozni. Ellen\u0151rizd: 1) fut-e a gateway, 2) helyes-e az URL \xE9s port, 3) nincs-e t\u0171zfal az \xFAtban."),(t.includes("econnrefused")||t.includes("connection refused"))&&l.push("A kapcsolat visszautas\xEDtva \u2014 a gateway nem hallgat a megadott c\xEDmen/porton."),(t.includes("certificate")||t.includes("cert")||t.includes("ssl")||t.includes("tls"))&&l.push('TLS tan\xFAs\xEDtv\xE1ny hiba \u2014 self-signed certificate eset\xE9n enged\xE9lyezd az "Allow self-signed TLS" opci\xF3t.'),l.length?`
|
|
2
2
|
|
|
3
3
|
`+l.join(`
|
|
4
4
|
`):""}var _=(()=>{class o extends m{ociData_AS=y(S);section_$=u({form:{instances:[]}});updateForm(s){this.section_$.update(t=>c(i({},t),{form:i(i({},t.form),s)}))}setSection(s){this.section_$.set(s)}getSectionId(){return g.openclawRegistry}getSection_$(){return this.section_$}doLoad(){return d(this,null,function*(){let s=new Map;for(let a of this.section_$().form.instances)s.set(a.instanceId,{testState:a.testState,testLatencyMs:a.testLatencyMs,testError:a.testError,testResultMessage:a.testResultMessage,authTokenEditMode:a.authTokenEditMode,pairState:a.pairState,pairError:a.pairError,pairMessage:a.pairMessage,pairResultMessage:a.pairResultMessage,connectionStatus:a.connectionStatus,lastConnectedAt:a.lastConnectedAt});let e=(yield this.settings_AS.getSection(g.openclawRegistry)).instances,n=Array.isArray(e)?e.map(a=>{let r=s.get(a.instanceId);return c(i({},a),{authToken:void 0,testState:r?.testState??"idle",testLatencyMs:r?.testLatencyMs,testError:r?.testError,testResultMessage:r?.testResultMessage,authTokenEditMode:r?.authTokenEditMode??!1,pairState:r?.pairState??"idle",pairError:r?.pairError,pairMessage:r?.pairMessage,pairResultMessage:r?.pairResultMessage,connectionStatus:r?.connectionStatus,lastConnectedAt:r?.lastConnectedAt})}):[];this.section_$.set({form:{instances:n}}),this.enrichWithOciStatus().catch(()=>{})})}enrichWithOciStatus(){return d(this,null,function*(){let s=yield this.ociData_AS.listInstances(),t=new Map;for(let e of s.list)t.set(e.instanceId,e);this.section_$.update(e=>c(i({},e),{form:{instances:e.form.instances.map(n=>{let a=t.get(n.instanceId);return a?c(i({},n),{connectionStatus:a.connectionStatus,lastConnectedAt:a.lastConnectedAt}):n})}}))})}buildSaveBody(){return{instances:this.section_$().form.instances.map(t=>({instanceId:t.instanceId,label:t.label,gatewayUrl:t.gatewayUrl,authToken:t.authToken,isPrimary:t.isPrimary,autoConnect:t.autoConnect,allowSelfSignedTls:t.allowSelfSignedTls}))}}savingInstanceId_$=u(null);buildSaveBodyForInstance(s){let t=this.section_$().form.instances.find(e=>e.instanceId===s);return t?{openclawRegistrySaveScope:"instance",targetInstanceId:s,instances:[{instanceId:t.instanceId,label:t.label,gatewayUrl:t.gatewayUrl,authToken:t.authToken,isPrimary:t.isPrimary,autoConnect:t.autoConnect,allowSelfSignedTls:t.allowSelfSignedTls}]}:{}}saveInstance(s){return d(this,null,function*(){this.savingInstanceId_$.set(s),this.saveError_$.set(null);try{let t=this.buildSaveBodyForInstance(s);yield this.doSave(t),yield this.load()}catch(t){this.saveError_$.set(o.getErrorMessage(t))}finally{this.savingInstanceId_$.set(null)}})}addInstance(){let s=I();this.section_$().form.instances.length||(s.isPrimary=!0),this.section_$.update(t=>c(i({},t),{form:{instances:[...t.form.instances,s]}}))}removeInstance(s){this.section_$.update(t=>{let e=t.form.instances.filter((a,r)=>r!==s);return(t.form.instances[s]?.isPrimary??!1)&&e.length>0&&(e[0]=c(i({},e[0]),{isPrimary:!0})),c(i({},t),{form:{instances:e}})})}updateInstance(s,t){this.section_$.update(e=>{let n=e.form.instances.map((a,r)=>r!==s?a:i(i({},a),t));return c(i({},e),{form:{instances:n}})})}setPrimary(s){this.section_$.update(t=>{let e=t.form.instances.map((n,a)=>c(i({},n),{isPrimary:a===s}));return c(i({},t),{form:{instances:e}})})}testConnection(s){return d(this,null,function*(){let t=this.section_$().form.instances[s];if(t){this.updateInstance(s,{testState:"testing",testLatencyMs:void 0,testError:void 0,testResultMessage:void 0});try{let e=yield this.settings_AS.testOpenclawConnection({gatewayUrl:t.gatewayUrl,authToken:t.authToken,allowSelfSignedTls:t.allowSelfSignedTls,instanceId:t.instanceId});if(e.success){let n=e.checks,a=n?" | WS: OK | v3 Handshake: OK | Sessions: OK"+(typeof n.sessionCount=="number"?` (${n.sessionCount} session)`:""):"";this.updateInstance(s,{testState:"ok",testLatencyMs:e.latencyMs,testError:void 0,testResultMessage:`Gateway el\xE9rhet\u0151 \u2014 v\xE1laszid\u0151: ${e.latencyMs}ms${a}`})}else{let n=e.error?.context?.failureType?String(e.error.context.failureType):"unknown",a=p({failureType:n,gatewayUrl:typeof e.error?.context?.gatewayUrl=="string"?e.error.context.gatewayUrl:t.gatewayUrl,message:e.error?.message});this.updateInstance(s,{testState:"error",testLatencyMs:void 0,testError:e.error??new Error("Connection failed"),testResultMessage:`Kapcsol\xF3d\xE1s sikertelen (${n}): ${e.error?.message??"ismeretlen hiba"}${a}`})}}catch(e){let n=e&&typeof e=="object"&&"error"in e?e.error:void 0,a=n?.message?String(n.message):e instanceof Error?e.message:String(e),r=p({gatewayUrl:t.gatewayUrl,message:a});this.updateInstance(s,{testState:"error",testError:n??e,testResultMessage:`Teszt hiba: ${a}${r}`})}}})}pairingInstanceId_$=u(null);pairInstance(s){return d(this,null,function*(){let t=this.section_$().form.instances[s];if(t){this.pairingInstanceId_$.set(t.instanceId),this.updateInstance(s,{pairState:"pairing",pairError:void 0,pairMessage:void 0});try{let e=yield this.settings_AS.pairOpenclawInstance({instanceId:t.instanceId});if(e.status==="paired")this.updateInstance(s,{pairState:"paired",pairingStatus:"paired",pairedAt:e.pairedAt,deviceTokenMasked:e.deviceTokenMasked,ccapDeviceId:e.ccapDeviceId,pairMessage:e.message,pairError:void 0,pairResultMessage:`Sikeresen p\xE1ros\xEDtva \u2014 device token megkapva${e.pairedAt?" ("+e.pairedAt+")":""}`});else if(e.status==="pending")this.updateInstance(s,{pairState:"pending",pairingStatus:"pending",ccapDeviceId:e.ccapDeviceId,pairingRequestId:e.pairingRequestId,pairMessage:e.message,pairError:void 0,pairResultMessage:`J\xF3v\xE1hagy\xE1sra v\xE1r a gateway-en \u2014 Device ID: ${e.ccapDeviceId??"N/A"}`});else if(e.status==="rejected")this.updateInstance(s,{pairState:"rejected",pairingStatus:"rejected",ccapDeviceId:e.ccapDeviceId,pairMessage:e.message,pairError:void 0,pairResultMessage:`A gateway elutas\xEDtotta a p\xE1ros\xEDt\xE1st: ${e.message??"ismeretlen ok"}`});else{let n=e.error?.context,a=p({failureType:typeof n?.failureType=="string"?n.failureType:void 0,gatewayUrl:typeof n?.gatewayUrl=="string"?n.gatewayUrl:t.gatewayUrl,message:e.message??e.error?.message});this.updateInstance(s,{pairState:"error",pairError:e.error??new Error(e.message??"Pairing failed"),pairMessage:e.message,pairResultMessage:`P\xE1ros\xEDt\xE1s hiba: ${e.message??e.error?.message??"ismeretlen hiba"}${a}`})}yield this.load()}catch(e){let n=e&&typeof e=="object"&&"error"in e?e.error:void 0,a=n?.message?String(n.message):e instanceof Error?e.message:String(e),r=n?.context,w=p({failureType:typeof r?.failureType=="string"?r.failureType:void 0,gatewayUrl:typeof r?.gatewayUrl=="string"?r.gatewayUrl:t.gatewayUrl,message:a});this.updateInstance(s,{pairState:"error",pairError:n??e,pairMessage:void 0,pairResultMessage:`P\xE1ros\xEDt\xE1s hiba: ${a}${w}`})}finally{this.pairingInstanceId_$.set(null)}}})}static \u0275fac=(()=>{let s;return function(e){return(s||(s=h(o)))(e||o)}})();static \u0275prov=f({token:o,factory:o.\u0275fac,providedIn:"root"})}return o})();export{_ as a};
|
|
5
|
-
//# sourceMappingURL=chunk-
|
|
5
|
+
//# sourceMappingURL=chunk-OHLYKJGB.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{I as a}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{I as a}from"./chunk-J4NUXLQQ.js";import{C as n,p as t,xb as o,y as i}from"./chunk-TBMJSIBB.js";var m=(()=>{class r{baseUrl=`${a.api.baseUrl}/setup`;http=n(o);getSetupStatus(){return t(this.http.get(`${this.baseUrl}/status`))}getVaultStatus(){return t(this.http.get(`${this.baseUrl}/vault-status`))}getVaultKeyGenerate(){return t(this.http.get(`${this.baseUrl}/vault-key/generate`))}postVaultKey(e){return t(this.http.post(`${this.baseUrl}/vault-key`,{vaultKey:e}))}postSetup(e){return t(this.http.post(this.baseUrl,e))}putSetupConfig(e){let s=`${a.api.baseUrl}/settings`;return t(this.http.put(`${s}/config`,e))}static \u0275fac=function(s){return new(s||r)};static \u0275prov=i({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();export{m as a};
|
|
2
|
+
//# sourceMappingURL=chunk-QNP27MNW.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{p as o}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{p as o}from"./chunk-J4NUXLQQ.js";import{h as r}from"./chunk-TBMJSIBB.js";var a=function(t){return t.created="created",t.alreadyLinked="already-linked",t.userMarked="user-marked",t.errorNotFound="error-not-found",t}(a||{});var m=function(t){return t.confirm="confirm",t.optionSelect="option-select",t.question="question",t}(m||{});var e=r(o());var d=new e.DyFM_DataModel_Params({dataName:"ccap_setting",properties:{ccapId:{type:"string"},sectionId:{type:"string",required:!0,index:!0},sectionProtectionFlag:{type:"string",required:!0,unique:!0},payload:{type:"object",required:!0}}});var p=r(o());var S=new p.DyFM_DataModel_Params({dataName:"pm_project",properties:{ccapId:{type:"string",index:!0},name:{type:"string",required:!0,index:!0},githubRepoUrl:{type:"string"},description:{type:"string"},localPath:{type:"string"},isActive:{type:"boolean"},preferredBugsMdRelativePath:{type:"string"},gitBranch:{type:"string"},gitStatus:{type:"string"},gitAheadBehind:{type:"string"},gitLastCommitDate:{type:"string"},gitLastCommitMessage:{type:"string"},gitLastCommitAuthor:{type:"string"},gitRemoteUrl:{type:"string"},gitInfo:{type:"object"},packageVersion:{type:"string"},packageScripts:{type:"array"},packageDependencyCount:{type:"number"},packageDevDependencyCount:{type:"number"},packageInfo:{type:"object"},artifacts:{type:"object"},lastSyncAt:{type:"string"},lastSyncStatus:{type:"string"},lastSyncSummary:{type:"string"},lastSyncDurationMs:{type:"number"},lastSyncErrors:{type:"array"},githubOwner:{type:"string"},githubRepo:{type:"string"},githubIssueSyncEnabled:{type:"boolean"},githubIssueSyncAt:{type:"string"},githubIssueSyncStatus:{type:"string"},githubIssueSyncSummary:{type:"string"},githubIssueSyncConfig:{type:"object"},githubPrSyncEnabled:{type:"boolean"},githubPrSyncAt:{type:"string"}}});var n=r(o());var P=new n.DyFM_DataModel_Params({dataName:"pm_user_request",properties:{projectId:{type:"string",required:!0,index:!0},content:{type:"string",required:!0},title:{type:"string"},type:{type:"string"},code:{type:"string"},priority:{type:"string"},area:{type:"string"},phase:{type:"string"},status:{type:"string"},specStatus:{type:"string"},implStatus:{type:"string"},testStatus:{type:"string"},completeStatus:{type:"string"},githubIssueNumber:{type:"number",index:!0},githubIssueUrl:{type:"string"},githubIssueId:{type:"number"},githubSyncedAt:{type:"string"},githubSyncDirection:{type:"string"}}});var s=r(o());var k=new s.DyFM_DataModel_Params({dataName:"ccap_quick_input",properties:{projectId:{type:"string",required:!0,index:!0},rawContent:{type:"string",required:!0},title:{type:"string"},status:{type:"string",required:!0,index:!0},promotedUserRequestId:{type:"string"},promotedBugCode:{type:"string"},predictedProjectId:{type:"string",index:!0},predictedType:{type:"string"},predictedCleanDescription:{type:"string"},taskDifficulty:{type:"string"},priority:{type:"string"},area:{type:"string"},createdAtVersion:{type:"string"}}});var x=r(o());var q=new x.DyFM_DataModel_Params({dataName:"pm_project_group",properties:{ccapId:{type:"string",index:!0},name:{type:"string",required:!0,index:!0},scanPath:{type:"string",required:!0},description:{type:"string"}}});var i=r(o());var A=new i.DyFM_DataModel_Params({dataName:"pm_project_group_file",properties:{groupId:{type:"string",required:!0,index:!0},ccapId:{type:"string",index:!0},relativePath:{type:"string",required:!0},sizeBytes:{type:"number"},lastModifiedAt:{type:"string"},fileHash:{type:"string"},isDirectory:{type:"boolean"}}});export{a,m as b};
|
|
2
|
+
//# sourceMappingURL=chunk-QYUWLPZK.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as x}from"./chunk-LLHIPXPK.js";import{a as T}from"./chunk-UFBTR2BG.js";import{a as P}from"./chunk-Y732BBLW.js";import{e as D}from"./chunk-6DFM4DSL.js";import{G as C,I as v,p as N}from"./chunk-GQHC47CX.js";import{C as p,a as g,aa as o,b as I,h as O,jb as k,k as a,l as b,p as u,vb as S,xb as w,y as E}from"./chunk-TBMJSIBB.js";var A=class{static computeSocketUrlFromStatus(m,e){return e}};var L=class{static toDisplayString(m){if(m==null)return"";if(typeof m=="string")return m;if(typeof m=="object"&&m!==null){let t=m;if(typeof t.message=="string"&&t.message.trim().length>0)return t.message.trim();if(typeof t.error=="string"&&t.error.trim().length>0)return t.error.trim();if(typeof t.detail=="string"&&t.detail.trim().length>0)return t.detail.trim()}let e=String(m);return e==="[object Object]"?"\u2014":e}};var h=O(N());var F=(()=>{class r{baseUrl=`${v.api.baseUrl}/session`;http=p(w);getMessages(e){return u(this.http.get(`${this.baseUrl}/${e.sessionId}/messages`,{params:{viewMode:e.viewMode}}))}getMessagesChunked(e){let t={viewMode:e.viewMode};return e.beforeIndex!=null&&(t.beforeIndex=String(e.beforeIndex)),e.limit!=null&&(t.limit=String(e.limit)),e.latest&&(t.latest="1"),e.archiveScope&&(t.archiveScope=e.archiveScope),u(this.http.get(`${this.baseUrl}/${e.sessionId}/messages/chunk`,{params:t}))}sendMessage(e){return u(this.http.post(`${this.baseUrl}/${e.sessionId}/messages`,{content:e.content,imageAttachments:e.imageAttachments}))}static \u0275fac=function(t){return new(t||r)};static \u0275prov=E({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var R=(()=>{class r{baseUrl=`${v.api.baseUrl}/session`;http=p(w);peiContext_DS=p(P);currentCcapId(){return this.peiContext_DS.activeCcapId_$()}withCcapId(e){let t=this.currentCcapId();return t?e.set("ccapId",t):e}listSessions(){let e=this.withCcapId(new S);return u(this.http.get(this.baseUrl,{params:e}))}listArchivedSessions(){let e=this.withCcapId(new S);return e=e.set("archived","true"),u(this.http.get(this.baseUrl,{params:e}))}createSession(e){let t={},s=e?.name!==void 0?e.name.trim():void 0;s!==void 0&&s.length>0&&(t.name=s);let n=this.withCcapId(new S);return u(this.http.post(this.baseUrl,t,{params:n}))}getSession(e){let t=this.withCcapId(new S);return u(this.http.get(`${this.baseUrl}/${e}`,{params:t}))}updateSession(e){let t=this.withCcapId(new S);return u(this.http.patch(`${this.baseUrl}/${e.sessionId}`,e.updates,{params:t}))}getSessionInfo(e){let t=this.withCcapId(new S);return u(this.http.get(`${this.baseUrl}/${e}/session-info`,{params:t}))}copySession(e){let t={};e.name&&(t.name=e.name),e.forkUntilMessageKey&&(t.forkUntilMessageKey=e.forkUntilMessageKey);let s=this.withCcapId(new S);return u(this.http.post(`${this.baseUrl}/${e.sessionId}/copy`,t,{params:s}))}stopExecution(e){let t=this.withCcapId(new S);return u(this.http.post(`${this.baseUrl}/${e}/stop-execution`,{},{params:t}))}getLlmDebugTrace(e){let t=this.withCcapId(new S);return t=t.set("runId",e.runId),u(this.http.get(`${this.baseUrl}/${e.sessionId}/llm-debug-trace`,{params:t}))}static \u0275fac=function(t){return new(t||r)};static \u0275prov=E({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var B="answer",V="notify-user",j="agent-events",z="context:updated",H="monitoring:event",G="user-interaction:request",q="user-interaction:resolved",W="ccap_notification",Q="notification-sent",X="waiting-for-user",Ce=(()=>{class r{sessionDetailBySessionId=new Map;sessionInfoBySessionId=new Map;activeSessionId_$=o("");requestSidebarCloseOnMobileBump_$=o(0);sessions_$=o([]);sessionsLoadError_$=o(null);sessionsLoading_$=o(!1);archivedSessions_$=o([]);archivedSessionsLoading_$=o(!1);messages_$=o([]);messagesLoading_$=o(!1);messagesLoadError_$=o(null);currentArchiveScope_$=o("active");chunkState_$=o({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:0});agentEvents_$=o({});activeRunExecutionMode_$=o("");contextUpdated_$=o(null);monitoringEvent_$=o(null);monitoringEvent_S=new b;pendingInteraction_$=o(null);pendingNotification_$=o(null);sessionDetailMap_$=o(new Map);sessionDetailLoading_$=o(!1);sessionInfoMap_$=o(new Map);sessionInfoLoading_$=o(!1);sessionInfoLoadError_$=o(null);llmDebugTraceEntries_$=o([]);llmDebugTraceLoading_$=o(!1);llmDebugTraceLoadError_$=o(null);eventSubscription=null;connectedEffectRef=null;session_AS=p(R);conversation_AS=p(F);serverStatus_AS=p(x);socket_CS=p(D);get connected_$(){return this.socket_CS.connected_$}get socketStatus_$(){return this.socket_CS.status_$}get lastSocketError_$(){return this.socket_CS.lastError_$}get connectAttemptCount_$(){return this.socket_CS.connectAttemptCount_$}diagnoseConnection(){return this.socket_CS.diagnoseConnection()}constructor(){this.eventSubscription=this.socket_CS.event$.subscribe(e=>{this.handleSocketEvent(e)}),this.connectedEffectRef=k(()=>{this.socket_CS.connected_$()&&this.getActiveSessionId()&&this.socket_CS.emit("session:attach",{sessionId:this.getActiveSessionId()})})}handleSocketEvent(e){let t=e.payload??{},s=this.getActiveSessionId(),n=typeof t.channelId=="string"?t.channelId:void 0,c=typeof t.sessionId=="string"?t.sessionId:void 0,_=!n&&!c||n===s||c===s;if(e.event===B&&_){let i=typeof t.content=="string"?t.content:"",d=typeof t.timestamp=="string"?t.timestamp:new Date().toISOString(),l=typeof t.runId=="string"?t.runId:void 0,y={role:"assistant",content:i,timestamp:new Date(d)},f=l?I(g({},y),{runId:l}):y,$=this.ensureClientListKey(f);this.messages_$.set([...this.messages_$(),$]);return}if(e.event===V&&_){let i=typeof t.content=="string"?t.content:"";h.DyFM_Log.info(`CCAP_SessionDS | notify-user received: ${i.substring(0,120)}\u2026`);let d=this.ensureClientListKey({role:"system",content:i,timestamp:new Date});this.messages_$.set([...this.messages_$(),d]);return}if(e.event===j){let i=typeof t.eventData=="object"&&t.eventData!==null?t.eventData:{};this.agentEvents_$.set(i),this.applyAgentEventRunExecutionModeLatch(i);let d=typeof i.toolId=="string"?i.toolId:"",l=typeof i.phase=="string"?i.phase:"";l==="runInitialization"&&_&&this.transitionLatestUserMessageToProcessing(),d===W&&(l===Q||l===X)?this.pendingNotification_$.set({phase:l,notificationTitle:typeof i.notificationTitle=="string"?i.notificationTitle:"",notificationType:typeof i.notificationType=="string"?i.notificationType:"",notificationPriority:typeof i.notificationPriority=="string"?i.notificationPriority:"info"}):this.pendingNotification_$()&&this.pendingNotification_$.set(null);let y=i.toolError,f=n??i.channelId,$=!f||f===s,M=L.toDisplayString(y).trim();if(M.length>0&&$){h.DyFM_Log.info(`CCAP_SessionDS | toolError from agent-events, pushing to chat: ${M.substring(0,80)}\u2026`);let K=this.ensureClientListKey({role:"system",content:M,timestamp:new Date});this.messages_$.set([...this.messages_$(),K])}return}if(e.event===z){let i=typeof t.sessionId=="string"?t.sessionId:"",d=typeof t.contextState=="object"&&t.contextState!==null?t.contextState:{};this.contextUpdated_$.set({sessionId:i,contextState:d});return}if(e.event===H){let i=typeof t.sessionId=="string"?t.sessionId:"",d=typeof t.event=="object"&&t.event!==null?t.event:{},l={sessionId:i,event:d};this.monitoringEvent_$.set(l),this.monitoringEvent_S.next(l);return}if(e.event===G&&_){this.pendingInteraction_$.set(t);return}if(e.event===q&&_){let i=typeof t.interactionId=="string"?t.interactionId:void 0;if(!i)return;this.pendingInteraction_$()?.interactionId===i&&this.pendingInteraction_$.set(null);return}}loadSessions(){return a(this,null,function*(){this.sessionsLoading_$.set(!0);try{this.sessionsLoadError_$.set(null);let e=yield this.session_AS.listSessions();return this.sessions_$.set(e.sessions),e.sessions}catch(e){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load sessions",e),this.sessionsLoadError_$.set(e),[]}finally{this.sessionsLoading_$.set(!1)}})}createSession(e){return a(this,null,function*(){let t=yield this.session_AS.createSession(e);return yield this.loadSessions(),t.session})}copySession(e){return a(this,null,function*(){let t=yield this.session_AS.copySession(e);return yield this.loadSessions(),t.session})}forkSession(e){return a(this,null,function*(){let t=yield this.session_AS.copySession({sessionId:e.sessionId,name:e.name,forkUntilMessageKey:e.forkUntilMessageKey});return yield this.loadSessions(),t.session})}loadArchivedSessions(){return a(this,null,function*(){this.archivedSessionsLoading_$.set(!0);try{let e=yield this.session_AS.listArchivedSessions();return this.archivedSessions_$.set(e.sessions),e.sessions}catch(e){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load archived sessions",e),this.archivedSessions_$.set([]),[]}finally{this.archivedSessionsLoading_$.set(!1)}})}setActiveSession(e){this.activeSessionId_$()!==e&&(this.activeSessionId_$.set(e),this.clearMessages(),this.pendingInteraction_$.set(null),this.activeRunExecutionMode_$.set("")),this.socket_CS.emit("session:attach",{sessionId:e})}getActiveSessionId(){return this.activeSessionId_$()}reconnectSocket(){return a(this,null,function*(){try{let e=yield this.serverStatus_AS.getStatus(),t=typeof window<"u"?window.location.origin:"",s=A.computeSocketUrlFromStatus({httpPort:e.httpPort,socketPort:e.socketPort},t),n=v.socketUrl??t;if(s!==n&&typeof window<"u"){v.socketUrl=s,h.DyFM_Log.info("CCAP_SessionDS | socketUrl changed on reconnect, reloading",s),window.location.reload();return}}catch{}this.socket_CS.reconnect()})}stopExecution(e){return a(this,null,function*(){try{return(yield this.session_AS.stopExecution(e)).success}catch(t){return h.DyFM_Error.logSimple("CCAP_Session_DS | stopExecution failed",t),!1}})}sendMessageViaSocket(e,t){return a(this,null,function*(){let s=e.trim();if(s==="/new")return{newSession:yield this.createSession(),sent:!0};let n=this.activeSessionId_$();if(!n)return{sent:!1};let c=(t?.length??0)>0;if(!s.length&&!c)return{sent:!1};let _={role:"user",content:e,timestamp:new Date,processingStatus:"sending"},i=this.ensureClientListKey(_);this.messages_$.set([...this.messages_$(),i]);try{let l=(yield this.conversation_AS.sendMessage({sessionId:n,content:e,imageAttachments:t})).message,y=this.messages_$().map(f=>{if(f.clientListKey!==i.clientListKey)return f;let $=g({},f);return $.processingStatus="sent",l?.messageKey&&($.messageKey=l.messageKey),l?.hasTtsAudio!==void 0&&($.hasTtsAudio=l.hasTtsAudio),$});return this.messages_$.set(y),{sent:!0}}catch(d){h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to send message via REST",d);let l=this.messages_$().filter(f=>f.clientListKey!==i.clientListKey);return this.messages_$.set(l),{sent:!1,error:d instanceof Error?d.message:"\xDCzenet k\xFCld\xE9se sikertelen."}}})}sendMessageToSession(e){return a(this,null,function*(){yield this.conversation_AS.sendMessage({sessionId:e.sessionId,content:e.content})})}sendInteractionResponse(e){this.socket_CS.emit("user-interaction:response",e),this.pendingInteraction_$.set(null)}clearMessages(){this.messages_$.set([]),this.chunkState_$.set({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:0}),this.currentArchiveScope_$.set("active")}setMessages(e){let s=(e??[]).map(n=>this.ensureClientListKey(n));this.messages_$.set(s)}transitionLatestUserMessageToProcessing(){let e=this.messages_$(),t=-1;for(let c=e.length-1;c>=0;c=c-1)if(e[c].role==="user"){t=c;break}if(t<0||e[t].processingStatus!=="sent")return;let n=e.map((c,_)=>_!==t?c:I(g({},c),{processingStatus:"processing"}));this.messages_$.set(n)}ensureClientListKey(e){if(e.clientListKey?.trim()?.length)return e;let s=e.messageKey?.trim();return s?.length?I(g({},e),{clientListKey:s}):I(g({},e),{clientListKey:globalThis.crypto.randomUUID()})}setMessageTtsCached(e){let s=this.messages_$().map(n=>n.messageKey===e?I(g({},n),{hasTtsAudio:!0}):n);this.messages_$.set(s)}loadMessagesForView(e){return a(this,null,function*(){this.messagesLoading_$.set(!0),this.messagesLoadError_$.set(null);try{let s=(yield this.conversation_AS.getMessages({sessionId:e,viewMode:"conversationFull"})).messages??[];return e===this.activeSessionId_$()&&this.setMessages(s),s}catch(t){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load messages for view",t),this.messagesLoadError_$.set(t),[]}finally{this.messagesLoading_$.set(!1)}})}loadInitialChunk(e){return a(this,null,function*(){this.messagesLoading_$.set(!0),this.messagesLoadError_$.set(null);try{let t=yield this.conversation_AS.getMessagesChunked({sessionId:e.sessionId,viewMode:e.viewMode??"conversationFull",latest:!0,limit:e.limit??50,archiveScope:e.archiveScope});return e.sessionId===this.activeSessionId_$()&&(this.setMessages(t.messages??[]),this.chunkState_$.set({total:t.total,hasMore:t.hasMore,nextBeforeIndex:t.nextBeforeIndex,isLoadingOlder:!1,archivedTotal:t.archivedTotal})),t}catch(t){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load initial chunk",t),this.messagesLoadError_$.set(t),null}finally{this.messagesLoading_$.set(!1)}})}loadOlderChunk(e){return a(this,null,function*(){let t=this.chunkState_$();if(!t.hasMore||t.nextBeforeIndex==null||t.isLoadingOlder)return null;this.chunkState_$.set(I(g({},t),{isLoadingOlder:!0}));try{let s=yield this.conversation_AS.getMessagesChunked({sessionId:e.sessionId,viewMode:e.viewMode??"conversationFull",beforeIndex:t.nextBeforeIndex,limit:e.limit??50,archiveScope:e.archiveScope});if(e.sessionId===this.activeSessionId_$()){let n=(s.messages??[]).map(c=>this.ensureClientListKey(c));this.messages_$.set([...n,...this.messages_$()]),this.chunkState_$.set({total:s.total,hasMore:s.hasMore,nextBeforeIndex:s.nextBeforeIndex,isLoadingOlder:!1,archivedTotal:s.archivedTotal})}else this.chunkState_$.set(I(g({},t),{isLoadingOlder:!1}));return s}catch(s){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load older chunk",s),this.messagesLoadError_$.set(s),this.chunkState_$.set(I(g({},t),{isLoadingOlder:!1})),null}})}switchToArchiveView(e){return a(this,null,function*(){this.currentArchiveScope_$.set("archive");let t=this.chunkState_$().archivedTotal;return this.messages_$.set([]),this.chunkState_$.set({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:t}),this.loadInitialChunk({sessionId:e,archiveScope:"archive"})})}switchToActiveView(e){return a(this,null,function*(){return this.currentArchiveScope_$.set("active"),this.messages_$.set([]),this.chunkState_$.set({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:0}),this.loadInitialChunk({sessionId:e,archiveScope:"active"})})}loadSessionDetail(e){return a(this,null,function*(){if(!e)return null;this.sessionDetailLoading_$.set(!0);try{let t=yield this.session_AS.getSession(e),s={session:t.session,lastRun:t.lastRun??null};return this.sessionDetailBySessionId.set(e,s),this.sessionDetailMap_$.set(new Map(this.sessionDetailBySessionId)),s}catch(t){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load session detail",t),null}finally{this.sessionDetailLoading_$.set(!1)}})}getCachedSessionDetail(e){return this.sessionDetailBySessionId.get(e)??null}loadSessionInfo(e){return a(this,null,function*(){if(!e)return null;this.sessionInfoLoading_$.set(!0),this.sessionInfoLoadError_$.set(null);try{let t=yield this.session_AS.getSessionInfo(e);return this.sessionInfoBySessionId.set(e,t),this.sessionInfoMap_$.set(new Map(this.sessionInfoBySessionId)),t}catch(t){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load session info",t),this.sessionInfoLoadError_$.set(t),null}finally{this.sessionInfoLoading_$.set(!1)}})}getCachedSessionInfo(e){return this.sessionInfoBySessionId.get(e)??null}fetchLlmDebugTraceEntriesForRun(e){return a(this,null,function*(){let t=e.sessionId?.trim()??"",s=e.runId?.trim()??"";if(!t||!s)return[];try{return(yield this.session_AS.getLlmDebugTrace({sessionId:t,runId:s})).entries??[]}catch{return[]}})}loadLlmDebugTrace(e){return a(this,null,function*(){let t=e.sessionId?.trim()??"",s=e.runId?.trim()??"";if(!t||!s){this.llmDebugTraceEntries_$.set([]);return}this.llmDebugTraceLoading_$.set(!0),this.llmDebugTraceLoadError_$.set(null);try{let n=yield this.session_AS.getLlmDebugTrace({sessionId:t,runId:s});this.llmDebugTraceEntries_$.set(n.entries)}catch(n){h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load LLM debug trace",n),this.llmDebugTraceLoadError_$.set(n),this.llmDebugTraceEntries_$.set([])}finally{this.llmDebugTraceLoading_$.set(!1)}})}updateSession(e){return a(this,null,function*(){try{let t=yield this.session_AS.updateSession(e),s=e.updates.archived;return s===!0||s===!1?(yield this.loadSessions(),yield this.loadArchivedSessions()):yield this.loadSessions(),t.session}catch(t){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to update session",t),null}})}applyAgentEventRunExecutionModeLatch(e){let t=e.phase,s=typeof t=="string"?t.trim():"";if(s===T.analyzeResult){let n=e.runExecutionMode;if(typeof n=="string"&&n.trim()!==""){let c=r.normalizeRunExecutionModeSocketValue(n);c!==void 0&&this.activeRunExecutionMode_$.set(c)}return}(s===T.runFlowComplete||s===T.runInitialization)&&this.activeRunExecutionMode_$.set("")}static normalizeRunExecutionModeSocketValue(e){let t=e.trim(),s=[C.instant,C.agenticAny,C.ask,C.plan];for(let n of s)if(t===n)return n}ngOnDestroy(){this.monitoringEvent_S.complete(),this.eventSubscription&&(this.eventSubscription.unsubscribe(),this.eventSubscription=null),this.connectedEffectRef&&(this.connectedEffectRef.destroy(),this.connectedEffectRef=null)}static \u0275fac=function(t){return new(t||r)};static \u0275prov=E({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();export{A as a,L as b,Ce as c};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as x}from"./chunk-6EQND5C5.js";import{a as T}from"./chunk-UFBTR2BG.js";import{a as P}from"./chunk-TM3DMIGC.js";import{e as D}from"./chunk-MGD2AIPS.js";import{G as C,I as v,p as N}from"./chunk-J4NUXLQQ.js";import{C as p,a as g,aa as o,b as I,h as O,jb as k,k as a,l as b,p as u,vb as S,xb as w,y as E}from"./chunk-TBMJSIBB.js";var A=class{static computeSocketUrlFromStatus(m,e){return e}};var L=class{static toDisplayString(m){if(m==null)return"";if(typeof m=="string")return m;if(typeof m=="object"&&m!==null){let t=m;if(typeof t.message=="string"&&t.message.trim().length>0)return t.message.trim();if(typeof t.error=="string"&&t.error.trim().length>0)return t.error.trim();if(typeof t.detail=="string"&&t.detail.trim().length>0)return t.detail.trim()}let e=String(m);return e==="[object Object]"?"\u2014":e}};var h=O(N());var F=(()=>{class r{baseUrl=`${v.api.baseUrl}/session`;http=p(w);getMessages(e){return u(this.http.get(`${this.baseUrl}/${e.sessionId}/messages`,{params:{viewMode:e.viewMode}}))}getMessagesChunked(e){let t={viewMode:e.viewMode};return e.beforeIndex!=null&&(t.beforeIndex=String(e.beforeIndex)),e.limit!=null&&(t.limit=String(e.limit)),e.latest&&(t.latest="1"),e.archiveScope&&(t.archiveScope=e.archiveScope),u(this.http.get(`${this.baseUrl}/${e.sessionId}/messages/chunk`,{params:t}))}sendMessage(e){return u(this.http.post(`${this.baseUrl}/${e.sessionId}/messages`,{content:e.content,imageAttachments:e.imageAttachments}))}static \u0275fac=function(t){return new(t||r)};static \u0275prov=E({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var R=(()=>{class r{baseUrl=`${v.api.baseUrl}/session`;http=p(w);peiContext_DS=p(P);currentCcapId(){return this.peiContext_DS.activeCcapId_$()}withCcapId(e){let t=this.currentCcapId();return t?e.set("ccapId",t):e}listSessions(){let e=this.withCcapId(new S);return u(this.http.get(this.baseUrl,{params:e}))}listArchivedSessions(){let e=this.withCcapId(new S);return e=e.set("archived","true"),u(this.http.get(this.baseUrl,{params:e}))}createSession(e){let t={},s=e?.name!==void 0?e.name.trim():void 0;s!==void 0&&s.length>0&&(t.name=s);let n=this.withCcapId(new S);return u(this.http.post(this.baseUrl,t,{params:n}))}getSession(e){let t=this.withCcapId(new S);return u(this.http.get(`${this.baseUrl}/${e}`,{params:t}))}updateSession(e){let t=this.withCcapId(new S);return u(this.http.patch(`${this.baseUrl}/${e.sessionId}`,e.updates,{params:t}))}getSessionInfo(e){let t=this.withCcapId(new S);return u(this.http.get(`${this.baseUrl}/${e}/session-info`,{params:t}))}copySession(e){let t={};e.name&&(t.name=e.name),e.forkUntilMessageKey&&(t.forkUntilMessageKey=e.forkUntilMessageKey);let s=this.withCcapId(new S);return u(this.http.post(`${this.baseUrl}/${e.sessionId}/copy`,t,{params:s}))}stopExecution(e){let t=this.withCcapId(new S);return u(this.http.post(`${this.baseUrl}/${e}/stop-execution`,{},{params:t}))}getLlmDebugTrace(e){let t=this.withCcapId(new S);return t=t.set("runId",e.runId),u(this.http.get(`${this.baseUrl}/${e.sessionId}/llm-debug-trace`,{params:t}))}static \u0275fac=function(t){return new(t||r)};static \u0275prov=E({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var B="answer",V="notify-user",j="agent-events",z="context:updated",H="monitoring:event",G="user-interaction:request",q="user-interaction:resolved",W="ccap_notification",Q="notification-sent",X="waiting-for-user",Ce=(()=>{class r{sessionDetailBySessionId=new Map;sessionInfoBySessionId=new Map;activeSessionId_$=o("");requestSidebarCloseOnMobileBump_$=o(0);sessions_$=o([]);sessionsLoadError_$=o(null);sessionsLoading_$=o(!1);archivedSessions_$=o([]);archivedSessionsLoading_$=o(!1);messages_$=o([]);messagesLoading_$=o(!1);messagesLoadError_$=o(null);currentArchiveScope_$=o("active");chunkState_$=o({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:0});agentEvents_$=o({});activeRunExecutionMode_$=o("");contextUpdated_$=o(null);monitoringEvent_$=o(null);monitoringEvent_S=new b;pendingInteraction_$=o(null);pendingNotification_$=o(null);sessionDetailMap_$=o(new Map);sessionDetailLoading_$=o(!1);sessionInfoMap_$=o(new Map);sessionInfoLoading_$=o(!1);sessionInfoLoadError_$=o(null);llmDebugTraceEntries_$=o([]);llmDebugTraceLoading_$=o(!1);llmDebugTraceLoadError_$=o(null);eventSubscription=null;connectedEffectRef=null;session_AS=p(R);conversation_AS=p(F);serverStatus_AS=p(x);socket_CS=p(D);get connected_$(){return this.socket_CS.connected_$}get socketStatus_$(){return this.socket_CS.status_$}get lastSocketError_$(){return this.socket_CS.lastError_$}get connectAttemptCount_$(){return this.socket_CS.connectAttemptCount_$}diagnoseConnection(){return this.socket_CS.diagnoseConnection()}constructor(){this.eventSubscription=this.socket_CS.event$.subscribe(e=>{this.handleSocketEvent(e)}),this.connectedEffectRef=k(()=>{this.socket_CS.connected_$()&&this.getActiveSessionId()&&this.socket_CS.emit("session:attach",{sessionId:this.getActiveSessionId()})})}handleSocketEvent(e){let t=e.payload??{},s=this.getActiveSessionId(),n=typeof t.channelId=="string"?t.channelId:void 0,c=typeof t.sessionId=="string"?t.sessionId:void 0,_=!n&&!c||n===s||c===s;if(e.event===B&&_){let i=typeof t.content=="string"?t.content:"",d=typeof t.timestamp=="string"?t.timestamp:new Date().toISOString(),l=typeof t.runId=="string"?t.runId:void 0,y={role:"assistant",content:i,timestamp:new Date(d)},f=l?I(g({},y),{runId:l}):y,$=this.ensureClientListKey(f);this.messages_$.set([...this.messages_$(),$]);return}if(e.event===V&&_){let i=typeof t.content=="string"?t.content:"";h.DyFM_Log.info(`CCAP_SessionDS | notify-user received: ${i.substring(0,120)}\u2026`);let d=this.ensureClientListKey({role:"system",content:i,timestamp:new Date});this.messages_$.set([...this.messages_$(),d]);return}if(e.event===j){let i=typeof t.eventData=="object"&&t.eventData!==null?t.eventData:{};this.agentEvents_$.set(i),this.applyAgentEventRunExecutionModeLatch(i);let d=typeof i.toolId=="string"?i.toolId:"",l=typeof i.phase=="string"?i.phase:"";l==="runInitialization"&&_&&this.transitionLatestUserMessageToProcessing(),d===W&&(l===Q||l===X)?this.pendingNotification_$.set({phase:l,notificationTitle:typeof i.notificationTitle=="string"?i.notificationTitle:"",notificationType:typeof i.notificationType=="string"?i.notificationType:"",notificationPriority:typeof i.notificationPriority=="string"?i.notificationPriority:"info"}):this.pendingNotification_$()&&this.pendingNotification_$.set(null);let y=i.toolError,f=n??i.channelId,$=!f||f===s,M=L.toDisplayString(y).trim();if(M.length>0&&$){h.DyFM_Log.info(`CCAP_SessionDS | toolError from agent-events, pushing to chat: ${M.substring(0,80)}\u2026`);let K=this.ensureClientListKey({role:"system",content:M,timestamp:new Date});this.messages_$.set([...this.messages_$(),K])}return}if(e.event===z){let i=typeof t.sessionId=="string"?t.sessionId:"",d=typeof t.contextState=="object"&&t.contextState!==null?t.contextState:{};this.contextUpdated_$.set({sessionId:i,contextState:d});return}if(e.event===H){let i=typeof t.sessionId=="string"?t.sessionId:"",d=typeof t.event=="object"&&t.event!==null?t.event:{},l={sessionId:i,event:d};this.monitoringEvent_$.set(l),this.monitoringEvent_S.next(l);return}if(e.event===G&&_){this.pendingInteraction_$.set(t);return}if(e.event===q&&_){let i=typeof t.interactionId=="string"?t.interactionId:void 0;if(!i)return;this.pendingInteraction_$()?.interactionId===i&&this.pendingInteraction_$.set(null);return}}loadSessions(){return a(this,null,function*(){this.sessionsLoading_$.set(!0);try{this.sessionsLoadError_$.set(null);let e=yield this.session_AS.listSessions();return this.sessions_$.set(e.sessions),e.sessions}catch(e){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load sessions",e),this.sessionsLoadError_$.set(e),[]}finally{this.sessionsLoading_$.set(!1)}})}createSession(e){return a(this,null,function*(){let t=yield this.session_AS.createSession(e);return yield this.loadSessions(),t.session})}copySession(e){return a(this,null,function*(){let t=yield this.session_AS.copySession(e);return yield this.loadSessions(),t.session})}forkSession(e){return a(this,null,function*(){let t=yield this.session_AS.copySession({sessionId:e.sessionId,name:e.name,forkUntilMessageKey:e.forkUntilMessageKey});return yield this.loadSessions(),t.session})}loadArchivedSessions(){return a(this,null,function*(){this.archivedSessionsLoading_$.set(!0);try{let e=yield this.session_AS.listArchivedSessions();return this.archivedSessions_$.set(e.sessions),e.sessions}catch(e){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load archived sessions",e),this.archivedSessions_$.set([]),[]}finally{this.archivedSessionsLoading_$.set(!1)}})}setActiveSession(e){this.activeSessionId_$()!==e&&(this.activeSessionId_$.set(e),this.clearMessages(),this.pendingInteraction_$.set(null),this.activeRunExecutionMode_$.set("")),this.socket_CS.emit("session:attach",{sessionId:e})}getActiveSessionId(){return this.activeSessionId_$()}reconnectSocket(){return a(this,null,function*(){try{let e=yield this.serverStatus_AS.getStatus(),t=typeof window<"u"?window.location.origin:"",s=A.computeSocketUrlFromStatus({httpPort:e.httpPort,socketPort:e.socketPort},t),n=v.socketUrl??t;if(s!==n&&typeof window<"u"){v.socketUrl=s,h.DyFM_Log.info("CCAP_SessionDS | socketUrl changed on reconnect, reloading",s),window.location.reload();return}}catch{}this.socket_CS.reconnect()})}stopExecution(e){return a(this,null,function*(){try{return(yield this.session_AS.stopExecution(e)).success}catch(t){return h.DyFM_Error.logSimple("CCAP_Session_DS | stopExecution failed",t),!1}})}sendMessageViaSocket(e,t){return a(this,null,function*(){let s=e.trim();if(s==="/new")return{newSession:yield this.createSession(),sent:!0};let n=this.activeSessionId_$();if(!n)return{sent:!1};let c=(t?.length??0)>0;if(!s.length&&!c)return{sent:!1};let _={role:"user",content:e,timestamp:new Date,processingStatus:"sending"},i=this.ensureClientListKey(_);this.messages_$.set([...this.messages_$(),i]);try{let l=(yield this.conversation_AS.sendMessage({sessionId:n,content:e,imageAttachments:t})).message,y=this.messages_$().map(f=>{if(f.clientListKey!==i.clientListKey)return f;let $=g({},f);return $.processingStatus="sent",l?.messageKey&&($.messageKey=l.messageKey),l?.hasTtsAudio!==void 0&&($.hasTtsAudio=l.hasTtsAudio),$});return this.messages_$.set(y),{sent:!0}}catch(d){h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to send message via REST",d);let l=this.messages_$().filter(f=>f.clientListKey!==i.clientListKey);return this.messages_$.set(l),{sent:!1,error:d instanceof Error?d.message:"\xDCzenet k\xFCld\xE9se sikertelen."}}})}sendMessageToSession(e){return a(this,null,function*(){yield this.conversation_AS.sendMessage({sessionId:e.sessionId,content:e.content})})}sendInteractionResponse(e){this.socket_CS.emit("user-interaction:response",e),this.pendingInteraction_$.set(null)}clearMessages(){this.messages_$.set([]),this.chunkState_$.set({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:0}),this.currentArchiveScope_$.set("active")}setMessages(e){let s=(e??[]).map(n=>this.ensureClientListKey(n));this.messages_$.set(s)}transitionLatestUserMessageToProcessing(){let e=this.messages_$(),t=-1;for(let c=e.length-1;c>=0;c=c-1)if(e[c].role==="user"){t=c;break}if(t<0||e[t].processingStatus!=="sent")return;let n=e.map((c,_)=>_!==t?c:I(g({},c),{processingStatus:"processing"}));this.messages_$.set(n)}ensureClientListKey(e){if(e.clientListKey?.trim()?.length)return e;let s=e.messageKey?.trim();return s?.length?I(g({},e),{clientListKey:s}):I(g({},e),{clientListKey:globalThis.crypto.randomUUID()})}setMessageTtsCached(e){let s=this.messages_$().map(n=>n.messageKey===e?I(g({},n),{hasTtsAudio:!0}):n);this.messages_$.set(s)}loadMessagesForView(e){return a(this,null,function*(){this.messagesLoading_$.set(!0),this.messagesLoadError_$.set(null);try{let s=(yield this.conversation_AS.getMessages({sessionId:e,viewMode:"conversationFull"})).messages??[];return e===this.activeSessionId_$()&&this.setMessages(s),s}catch(t){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load messages for view",t),this.messagesLoadError_$.set(t),[]}finally{this.messagesLoading_$.set(!1)}})}loadInitialChunk(e){return a(this,null,function*(){this.messagesLoading_$.set(!0),this.messagesLoadError_$.set(null);try{let t=yield this.conversation_AS.getMessagesChunked({sessionId:e.sessionId,viewMode:e.viewMode??"conversationFull",latest:!0,limit:e.limit??50,archiveScope:e.archiveScope});return e.sessionId===this.activeSessionId_$()&&(this.setMessages(t.messages??[]),this.chunkState_$.set({total:t.total,hasMore:t.hasMore,nextBeforeIndex:t.nextBeforeIndex,isLoadingOlder:!1,archivedTotal:t.archivedTotal})),t}catch(t){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load initial chunk",t),this.messagesLoadError_$.set(t),null}finally{this.messagesLoading_$.set(!1)}})}loadOlderChunk(e){return a(this,null,function*(){let t=this.chunkState_$();if(!t.hasMore||t.nextBeforeIndex==null||t.isLoadingOlder)return null;this.chunkState_$.set(I(g({},t),{isLoadingOlder:!0}));try{let s=yield this.conversation_AS.getMessagesChunked({sessionId:e.sessionId,viewMode:e.viewMode??"conversationFull",beforeIndex:t.nextBeforeIndex,limit:e.limit??50,archiveScope:e.archiveScope});if(e.sessionId===this.activeSessionId_$()){let n=(s.messages??[]).map(c=>this.ensureClientListKey(c));this.messages_$.set([...n,...this.messages_$()]),this.chunkState_$.set({total:s.total,hasMore:s.hasMore,nextBeforeIndex:s.nextBeforeIndex,isLoadingOlder:!1,archivedTotal:s.archivedTotal})}else this.chunkState_$.set(I(g({},t),{isLoadingOlder:!1}));return s}catch(s){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load older chunk",s),this.messagesLoadError_$.set(s),this.chunkState_$.set(I(g({},t),{isLoadingOlder:!1})),null}})}switchToArchiveView(e){return a(this,null,function*(){this.currentArchiveScope_$.set("archive");let t=this.chunkState_$().archivedTotal;return this.messages_$.set([]),this.chunkState_$.set({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:t}),this.loadInitialChunk({sessionId:e,archiveScope:"archive"})})}switchToActiveView(e){return a(this,null,function*(){return this.currentArchiveScope_$.set("active"),this.messages_$.set([]),this.chunkState_$.set({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:0}),this.loadInitialChunk({sessionId:e,archiveScope:"active"})})}loadSessionDetail(e){return a(this,null,function*(){if(!e)return null;this.sessionDetailLoading_$.set(!0);try{let t=yield this.session_AS.getSession(e),s={session:t.session,lastRun:t.lastRun??null};return this.sessionDetailBySessionId.set(e,s),this.sessionDetailMap_$.set(new Map(this.sessionDetailBySessionId)),s}catch(t){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load session detail",t),null}finally{this.sessionDetailLoading_$.set(!1)}})}getCachedSessionDetail(e){return this.sessionDetailBySessionId.get(e)??null}loadSessionInfo(e){return a(this,null,function*(){if(!e)return null;this.sessionInfoLoading_$.set(!0),this.sessionInfoLoadError_$.set(null);try{let t=yield this.session_AS.getSessionInfo(e);return this.sessionInfoBySessionId.set(e,t),this.sessionInfoMap_$.set(new Map(this.sessionInfoBySessionId)),t}catch(t){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load session info",t),this.sessionInfoLoadError_$.set(t),null}finally{this.sessionInfoLoading_$.set(!1)}})}getCachedSessionInfo(e){return this.sessionInfoBySessionId.get(e)??null}fetchLlmDebugTraceEntriesForRun(e){return a(this,null,function*(){let t=e.sessionId?.trim()??"",s=e.runId?.trim()??"";if(!t||!s)return[];try{return(yield this.session_AS.getLlmDebugTrace({sessionId:t,runId:s})).entries??[]}catch{return[]}})}loadLlmDebugTrace(e){return a(this,null,function*(){let t=e.sessionId?.trim()??"",s=e.runId?.trim()??"";if(!t||!s){this.llmDebugTraceEntries_$.set([]);return}this.llmDebugTraceLoading_$.set(!0),this.llmDebugTraceLoadError_$.set(null);try{let n=yield this.session_AS.getLlmDebugTrace({sessionId:t,runId:s});this.llmDebugTraceEntries_$.set(n.entries)}catch(n){h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load LLM debug trace",n),this.llmDebugTraceLoadError_$.set(n),this.llmDebugTraceEntries_$.set([])}finally{this.llmDebugTraceLoading_$.set(!1)}})}updateSession(e){return a(this,null,function*(){try{let t=yield this.session_AS.updateSession(e),s=e.updates.archived;return s===!0||s===!1?(yield this.loadSessions(),yield this.loadArchivedSessions()):yield this.loadSessions(),t.session}catch(t){return h.DyFM_Error.logSimple("CCAP_SessionDS | Failed to update session",t),null}})}applyAgentEventRunExecutionModeLatch(e){let t=e.phase,s=typeof t=="string"?t.trim():"";if(s===T.analyzeResult){let n=e.runExecutionMode;if(typeof n=="string"&&n.trim()!==""){let c=r.normalizeRunExecutionModeSocketValue(n);c!==void 0&&this.activeRunExecutionMode_$.set(c)}return}(s===T.runFlowComplete||s===T.runInitialization)&&this.activeRunExecutionMode_$.set("")}static normalizeRunExecutionModeSocketValue(e){let t=e.trim(),s=[C.instant,C.agenticAny,C.ask,C.plan];for(let n of s)if(t===n)return n}ngOnDestroy(){this.monitoringEvent_S.complete(),this.eventSubscription&&(this.eventSubscription.unsubscribe(),this.eventSubscription=null),this.connectedEffectRef&&(this.connectedEffectRef.destroy(),this.connectedEffectRef=null)}static \u0275fac=function(t){return new(t||r)};static \u0275prov=E({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();export{A as a,L as b,Ce as c};
|
|
2
|
+
//# sourceMappingURL=chunk-ROYBCT3T.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as k}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as k}from"./chunk-6QY3BZFH.js";import{a as C}from"./chunk-V3VQWJQL.js";import{I as U,L as P,t as A}from"./chunk-J4NUXLQQ.js";import{C as h,k as m,p as a,xb as M,y as b}from"./chunk-TBMJSIBB.js";var y=class{static readLlmCloudBucketsFromSectionResponse(n){return{anthropicLlm:v(n.anthropicSettings,{includeBaseUrl:!1}),googleLlm:v(n.googleSettings,{includeBaseUrl:!1}),deepseekLlm:v(n.deepseekSettings,{includeBaseUrl:!1}),fdpaiLlm:v(n.fdpaiSettings,{includeBaseUrl:!0})}}};function v(s,n){if(s==null||typeof s!="object"||Array.isArray(s))return{enabled:!1,defaultModel:"",baseUrl:"",apiKey:"",apiKeyMasked:""};let e=Reflect.get(s,"defaultModel"),o=Reflect.get(s,"apiKeyMasked"),i=Reflect.get(s,"baseUrl");return{enabled:Reflect.get(s,"enabled")===!0,defaultModel:typeof e=="string"?e:"",baseUrl:n.includeBaseUrl&&typeof i=="string"?i:"",apiKey:"",apiKeyMasked:typeof o=="string"?o:""}}var S=class{static parseLlmSettingsSectionForUi(n){let e=n.openAiSettings,o=!1,i="gpt-4o";if(e!=null&&typeof e=="object"&&!Array.isArray(e)){o=Reflect.get(e,"enabled")===!0;let t=Reflect.get(e,"defaultModel");typeof t=="string"&&(i=t)}let c=(Array.isArray(n.localAiSettings)?n.localAiSettings:[]).filter(t=>t!=null&&typeof t=="object"&&!Array.isArray(t)).map(t=>{let g=typeof t.key=="string"?t.key.trim():"";if(!g.length)return null;let L=typeof t.name=="string"?t.name:"",$=k.build({localAiKey:g}),T=L.trim().length>0?L.trim():"Local AI",_=t.enabled!==!1;return{id:$,baseUrl:(typeof t.baseUrl=="string"?t.baseUrl:"").trim(),model:(typeof t.defaultModel=="string"?t.defaultModel:"").trim(),label:T,enabled:_}}).filter(t=>t!=null),d=y.readLlmCloudBucketsFromSectionResponse(n),l=[];o&&l.push("open-ai"),d.anthropicLlm.enabled&&l.push("anthropic"),d.googleLlm.enabled&&l.push("google"),d.deepseekLlm.enabled&&l.push("deepseek"),d.fdpaiLlm.enabled&&l.push("fdp-ai");for(let t of c)t.enabled&&l.push(t.id);l.length===0&&l.push("open-ai");let F=c.map(t=>({id:t.id,label:t.label})),V=l.map(t=>({value:t,label:C.resolve(t,F)})),p=typeof n.defaultLlmProvider=="string"?n.defaultLlmProvider:"open-ai",u="";if(p==="open-ai")u=i;else if(p==="anthropic")u=d.anthropicLlm.defaultModel;else if(p==="google")u=d.googleLlm.defaultModel;else if(p==="deepseek")u=d.deepseekLlm.defaultModel;else if(p==="fdp-ai")u=d.fdpaiLlm.defaultModel;else{let t=c.find(g=>g.id===p);t&&(u=t.model)}return{enabledLlmProviderIds:l,llmProviderSelectOptions:V,defaultLlmProvider:p.trim(),defaultLlmModel:u.trim()}}};var I=(()=>{class s{baseUrl=`${U.api.baseUrl}/voice`;http=h(M);fetchVoiceNotesPoc(){return a(this.http.get(`${this.baseUrl}/poc/get-notes`))}fetchVoiceNotesQaSettings(){return a(this.http.get(`${this.baseUrl}/notes/qa-settings`))}saveVoiceNotesQaSettings(e){return a(this.http.put(`${this.baseUrl}/notes/qa-settings`,e,{headers:{"Content-Type":"application/json"}}))}saveVoiceNotesPoc(e){return a(this.http.put(`${this.baseUrl}/notes/poc`,e))}transcribeVoiceChunk(e){let o={qa:e.qaEnabled===!0?"1":"0",skip_classification:e.skipClassification!==!1?"true":"false"};e.confidenceThreshold!==void 0&&(o.confidence_threshold=String(e.confidenceThreshold)),e.noteContext!==void 0&&(o.note_context=e.noteContext);let i=Object.keys(o).map(c=>`${encodeURIComponent(c)}=${encodeURIComponent(o[c])}`).join("&"),f=`${this.baseUrl}/notes/transcribe${i?`?${i}`:""}`,r={"Content-Type":e.mimeType,Filename:e.filename};return e.overlapPrevMs!==void 0&&e.overlapPrevMs>0&&(r["X-Overlap-Prev-Ms"]=String(e.overlapPrevMs)),a(this.http.post(f,e.blob,{headers:r}))}generateTtsSpeechBlob(e){return a(this.http.post(`${this.baseUrl}/tts/speech`,{input:e.text},{responseType:"blob"}))}getTtsMessageAudioUrl(e){let o=typeof e=="string"?e.trim():"";return o?`${this.baseUrl}/tts/message-audio/${encodeURIComponent(o)}`:""}getOrCreateTtsMessageAudio(e){return a(this.http.post(`${this.baseUrl}/tts/message-audio`,{sessionId:e.sessionId,role:e.role,content:e.content,timestamp:e.timestamp},{responseType:"blob",headers:{"Content-Type":"application/json"}}))}getVoiceSettings(){return a(this.http.get(`${this.baseUrl}/settings`))}saveTtsProvider(e){return a(this.http.post(`${this.baseUrl}/settings/tts-provider`,{provider:e}))}saveElevenLabsKey(e){return a(this.http.post(`${this.baseUrl}/settings/elevenlabs-key`,{apiKey:e}))}testElevenLabsApiKey(){return a(this.http.post(`${this.baseUrl}/settings/test-elevenlabs-key`,{}))}saveVoiceConfig(e){return a(this.http.post(`${this.baseUrl}/settings/voice-config`,{elevenLabsModelId:e.elevenLabsModelId,elevenLabsVoiceId:e.elevenLabsVoiceId}))}static \u0275fac=function(o){return new(o||s)};static \u0275prov=b({token:s,factory:s.\u0275fac,providedIn:"root"})}return s})();var Y=(()=>{class s{voice_AS=h(I);settings_AS=h(P);fetchQaEnabledFlag(){return m(this,null,function*(){try{return(yield this.voice_AS.fetchVoiceNotesQaSettings()).qaEnabled===!0}catch{return!1}})}loadSttQaSettingsPanelState(){return m(this,null,function*(){let e=yield this.voice_AS.fetchVoiceNotesQaSettings(),o=yield this.settings_AS.getSection(A.llmProviders),i=S.parseLlmSettingsSectionForUi(o),f=(e.providerName??"").trim(),r=[],c="";if(f.length>0){let d=yield this.fetchLlmModelsListForSttQa(f);r=[...d.models],c=d.errorMessage;let l=(e.modelName??"").trim();l.length>0&&!r.includes(l)&&(r=[l,...r])}return{qa:e,llmProviderSelectOptions:i.llmProviderSelectOptions,defaultLlmProvider:i.defaultLlmProvider,defaultLlmModel:i.defaultLlmModel,qaModelsForProvider:r,qaModelsListFetchError:c}})}fetchLlmModelsListForSttQa(e){return m(this,null,function*(){let o=e.trim();if(!o.length)return{models:[],errorMessage:""};try{let i=yield this.settings_AS.postListLlmModels({providerId:o}),f=i.models??[],r=typeof i.error=="string"?i.error.trim():"",c=i.success===!1;return f.length>0?{models:f,errorMessage:c?r.length>0?r:"Model list request failed.":""}:c?{models:[],errorMessage:r.length>0?r:"Model list request failed."}:{models:[],errorMessage:r}}catch(i){let f=i instanceof Error?i.message:String(i);return{models:[],errorMessage:f}}})}fetchLlmModelIdsForProvider(e){return m(this,null,function*(){return(yield this.fetchLlmModelsListForSttQa(e)).models})}normalizeConfusionMapEntries(e){return e.map(o=>({from:String(o.from).trim(),to:String(o.to).trim()})).filter(o=>o.from.length>0||o.to.length>0)}saveVoiceNotesQaSettings(e){return m(this,null,function*(){yield this.voice_AS.saveVoiceNotesQaSettings(e)})}fetchVoiceNotesPoc(){return this.voice_AS.fetchVoiceNotesPoc()}saveVoiceNotesPoc(e){return this.voice_AS.saveVoiceNotesPoc(e)}transcribeVoiceChunk(e){return this.voice_AS.transcribeVoiceChunk(e)}getTtsMessageAudioUrl(e){return this.voice_AS.getTtsMessageAudioUrl(e)}getOrCreateTtsMessageAudio(e){return this.voice_AS.getOrCreateTtsMessageAudio(e)}static \u0275fac=function(o){return new(o||s)};static \u0275prov=b({token:s,factory:s.\u0275fac,providedIn:"root"})}return s})();export{y as a,I as b,Y as c};
|
|
2
|
+
//# sourceMappingURL=chunk-S6ULUM2K.js.map
|