@whoz-oss/coday-client 0.122.0 → 0.123.0
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/3rdpartylicenses.txt +2 -2
- package/browser/chunk-5NUGIKIB.js +1 -0
- package/browser/chunk-5OMZQ4OZ.js +1 -0
- package/browser/chunk-6KXNYOC4.js +1 -0
- package/browser/{chunk-FCCT54AP.js → chunk-6Z6SJ4Y2.js} +1 -1
- package/browser/{chunk-VWD2QH4N.js → chunk-7QG3AKRT.js} +1 -1
- package/browser/{chunk-CBU7DNMV.js → chunk-7XMHOWLT.js} +1 -1
- package/browser/{chunk-MJEQQZDO.js → chunk-AKBSVQGQ.js} +1 -1
- package/browser/{chunk-JPWWZVYZ.js → chunk-AVD3CUGR.js} +1 -1
- package/browser/chunk-B4OTLKPN.js +1 -0
- package/browser/chunk-BYYYYB67.js +1 -0
- package/browser/chunk-CR4XXAY3.js +1 -0
- package/browser/{chunk-UMDZZGIC.js → chunk-DE3P5WR7.js} +1 -1
- package/browser/{chunk-UXXLDXN3.js → chunk-DSN23Y6D.js} +1 -1
- package/browser/chunk-DWEXNFR7.js +1 -0
- package/browser/chunk-EH7TPIXS.js +1 -0
- package/browser/chunk-GHOFO7YQ.js +1 -0
- package/browser/chunk-HAWWBYDG.js +1 -0
- package/browser/{chunk-GT5UFSUE.js → chunk-HIRSL5MY.js} +1 -1
- package/browser/chunk-HK2BLNG3.js +1 -0
- package/browser/chunk-HLLG2DDM.js +1 -0
- package/browser/{chunk-PKKHLHXJ.js → chunk-HVJQKHJC.js} +1 -1
- package/browser/chunk-I3QA4WXI.js +1 -0
- package/browser/{chunk-5CTKRMM2.js → chunk-IYJZ4CSD.js} +1 -1
- package/browser/{chunk-UGVRFJHC.js → chunk-IZRO2LMH.js} +1 -1
- package/browser/{chunk-VNGIXNER.js → chunk-JBAZQRNW.js} +1 -1
- package/browser/{chunk-MQ3QG7VF.js → chunk-JQSINAMU.js} +1 -1
- package/browser/chunk-L66AMHS4.js +13 -0
- package/browser/chunk-LEUHLZHG.js +1 -0
- package/browser/chunk-LPT4NEYN.js +1 -0
- package/browser/chunk-OGOX2BYJ.js +1 -0
- package/browser/{chunk-TE3JOGRA.js → chunk-P36TOKXO.js} +1 -1
- package/browser/chunk-PDZ2DBT6.js +1 -0
- package/browser/{chunk-4LFZBXC3.js → chunk-PWW4FOUT.js} +1 -1
- package/browser/{chunk-3TOJSAQM.js → chunk-Q56XXDIJ.js} +1 -1
- package/browser/{chunk-S5LR3GBS.js → chunk-RHMP25CV.js} +1 -1
- package/browser/chunk-RIKUGKVO.js +1 -0
- package/browser/{chunk-DJBCK5D7.js → chunk-RUEXWAWX.js} +2 -2
- package/browser/{chunk-P5TSPSCB.js → chunk-UGL3W65S.js} +1 -1
- package/browser/{chunk-5UOZGBZ2.js → chunk-VCDX36SM.js} +1 -1
- package/browser/{chunk-NO2ODJHX.js → chunk-VEOXUX7X.js} +1 -1
- package/browser/{chunk-KYPMYRHP.js → chunk-VU7RWHPC.js} +1 -1
- package/browser/{chunk-7RF7FEOC.js → chunk-W4XTZNHN.js} +1 -1
- package/browser/chunk-XL52MS6C.js +1 -0
- package/browser/{chunk-OMLFSDJ5.js → chunk-XNWPPTWL.js} +1 -1
- package/browser/chunk-Y3EGCKL7.js +1 -0
- package/browser/{chunk-PWN5O4WY.js → chunk-Y73HWDY3.js} +1 -1
- package/browser/{chunk-2DE3OXG3.js → chunk-ZK67B6NL.js} +1 -1
- package/browser/index.html +1 -1
- package/browser/main-RALP5G7L.js +359 -0
- package/package.json +1 -1
- package/browser/chunk-4OMSGXSL.js +0 -1
- package/browser/chunk-4UEZ3CNG.js +0 -1
- package/browser/chunk-6NFS2ZCV.js +0 -1
- package/browser/chunk-FPUSD6J7.js +0 -1
- package/browser/chunk-G5XS2TEE.js +0 -1
- package/browser/chunk-H2Q3V5BR.js +0 -1
- package/browser/chunk-IHHVFGPF.js +0 -1
- package/browser/chunk-JW6LSUP2.js +0 -1
- package/browser/chunk-LVEC3TBP.js +0 -1
- package/browser/chunk-N5LTGEF5.js +0 -1
- package/browser/chunk-OK747ZMT.js +0 -1
- package/browser/chunk-S3ZG6FUN.js +0 -1
- package/browser/chunk-SNTJSECZ.js +0 -1
- package/browser/chunk-T357ITNZ.js +0 -1
- package/browser/chunk-W4VYO3E2.js +0 -1
- package/browser/chunk-XPK5V34V.js +0 -1
- package/browser/chunk-YDXVLOQW.js +0 -11
- package/browser/chunk-Z7DC3UIO.js +0 -1
- package/browser/main-3X4E54YE.js +0 -361
package/3rdpartylicenses.txt
CHANGED
|
@@ -752,7 +752,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
752
752
|
THE SOFTWARE.
|
|
753
753
|
|
|
754
754
|
--------------------------------------------------------------------------------
|
|
755
|
-
Package: @angular/
|
|
755
|
+
Package: @angular/core
|
|
756
756
|
License: "MIT"
|
|
757
757
|
|
|
758
758
|
The MIT License
|
|
@@ -778,7 +778,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
778
778
|
THE SOFTWARE.
|
|
779
779
|
|
|
780
780
|
--------------------------------------------------------------------------------
|
|
781
|
-
Package: @angular/
|
|
781
|
+
Package: @angular/forms
|
|
782
782
|
License: "MIT"
|
|
783
783
|
|
|
784
784
|
The MIT License
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"./chunk-GHOFO7YQ.js";import"./chunk-VU7RWHPC.js";import"./chunk-L66AMHS4.js";import"./chunk-JBAZQRNW.js";import"./chunk-HVJQKHJC.js";import"./chunk-ZK67B6NL.js";import"./chunk-Y73HWDY3.js";import"./chunk-RUEXWAWX.js";export{a as CaseChatComponent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as Y}from"./chunk-BYYYYB67.js";import{d as K}from"./chunk-VU7RWHPC.js";import{$ as X,A as U,B as g}from"./chunk-L66AMHS4.js";import{b}from"./chunk-JBAZQRNW.js";import{a as A,b as H,c as G,d as J}from"./chunk-Y73HWDY3.js";import{A as R,Ab as c,Cb as m,Gb as N,Ha as l,Hb as k,Ib as L,Mb as V,Ob as F,Q as O,Qb as W,Rb as $,Ta as d,Ub as B,Vb as Q,Wb as j,Za as q,aa as p,ec as z,fa as u,ga as C,i as I,ib as P,jb as E,m as x,na as f,ob as _,pb as i,qb as s,rb as S,s as y,sa as M,ua as T,yb as h,z as D}from"./chunk-RUEXWAWX.js";var v=class o{case;static toListItem(e){return{id:e.id??"",name:e.id??"\u2014",description:void 0}}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=d({type:o,selectors:[["agentos-case-item"]],inputs:{case:"case"},decls:0,vars:0,template:function(t,n){},encapsulation:2,changeDetection:0})};var ne=["caseItemTpl"];function ae(o,e){if(o&1){let t=h();i(0,"button",3),c("click",function(){let a=u(t).$implicit,r=m();return C(r.onItemSelected(a.id))}),i(1,"span",4),W(2),s()()}if(o&2){let t=e.$implicit,n=m();F("case-drawer-item--active",t.id===n.activeCaseId),l(2),$(t.name)}}var w=class o{cases=[];activeCaseId=null;caseSelected=new f;createRequested=new f;closeRequested=new f;caseItemTpl;caseItems=[];ngOnChanges(e){e.cases&&(this.caseItems=this.cases.map(v.toListItem))}onItemSelected(e){this.caseSelected.emit(e)}onCreateRequested(){this.createRequested.emit()}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=d({type:o,selectors:[["agentos-case-drawer"]],viewQuery:function(t,n){if(t&1&&N(ne,7),t&2){let a;k(a=L())&&(n.caseItemTpl=a.first)}},inputs:{cases:"cases",activeCaseId:"activeCaseId"},outputs:{caseSelected:"caseSelected",createRequested:"createRequested",closeRequested:"closeRequested"},features:[T],decls:4,vars:3,consts:[["caseItemTpl",""],["title","Cases","emptyMessage","No cases yet. Start one below.","searchPlaceholder","Filter cases\u2026","cardMinWidth","220px","contentMaxWidth","100%",3,"itemSelected","createRequested","items","itemTemplate","showCreate"],["toolbar-start","","icon","chevron_left","variant","default","title","Close drawer",3,"action"],["type","button",1,"case-drawer-item",3,"click"],[1,"case-drawer-item__name"]],template:function(t,n){if(t&1&&(i(0,"ds-entity-list",1),c("itemSelected",function(r){return n.onItemSelected(r)})("createRequested",function(){return n.onCreateRequested()}),i(1,"ds-icon-button",2),c("action",function(){return n.closeRequested.emit()}),s()(),q(2,ae,3,3,"ng-template",null,0,z)),t&2){let a=V(3);_("items",n.caseItems)("itemTemplate",a)("showCreate",!0)}},dependencies:[X,g],styles:['.case-drawer-item[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.5rem .75rem;border-radius:8px;border:none;background:transparent;cursor:pointer;text-align:left;font-family:inherit;font-size:.875rem;color:var(--color-text, #1d1d1f);transition:background .12s ease;gap:.5rem}.case-drawer-item[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover, rgba(0, 0, 0, .05))}.case-drawer-item--active[_ngcontent-%COMP%]{background:var(--color-primary, #007aff);color:var(--color-text-inverse, #fff)}.case-drawer-item--active[_ngcontent-%COMP%] .case-drawer-item__status[_ngcontent-%COMP%]{color:#ffffffb3}.case-drawer-item--active[_ngcontent-%COMP%]:hover{background:var(--color-primary-hover, #0051d5)}.case-drawer-item__name[_ngcontent-%COMP%]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;font-family:var(--font-mono, ui-monospace, "SF Mono", monospace);font-size:.8rem}'],changeDetection:0})};function oe(o,e){if(o&1){let t=h();i(0,"div",7)(1,"ds-icon-button",8),c("action",function(){u(t);let a=m();return C(a.toggleDrawer())}),s()()}}var te=class o{router=p(J);route=p(H);caseController=p(K);namespaceId=this.route.snapshot.params.namespaceId;drawerOpen=M(!0);refresh$=new I(void 0);cases$=this.refresh$.pipe(O(()=>this.caseController.listByParentCase(this.namespaceId)));cases=b(this.cases$,{initialValue:[]});activeCaseId=b(D(x(this.router.url),this.router.events.pipe(R(e=>e instanceof A),y(e=>e.urlAfterRedirects))).pipe(y(e=>this.extractCaseId(e))),{initialValue:null});extractCaseId(e){return e.match(/\/cases\/([^/?#]+)/)?.[1]??null}toggleDrawer(){this.drawerOpen.update(e=>!e)}onCaseSelected(e){this.router.navigate([e],{relativeTo:this.route})}onCreateRequested(){this.router.navigate(["."],{relativeTo:this.route})}refreshCases(){this.refresh$.next()}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=d({type:o,selectors:[["agentos-case-shell"]],decls:9,vars:4,consts:[[1,"case-shell"],[1,"case-shell__header"],[1,"case-shell__body"],["drawerWidth","400px",3,"openChange","open"],["dsDrawerSide","",1,"case-shell__sidenav"],[3,"caseSelected","createRequested","closeRequested","cases","activeCaseId"],["dsDrawerContent","",1,"case-shell__content"],[1,"case-shell__toggle"],["icon","menu","variant","default","title","Open drawer",3,"action"]],template:function(t,n){t&1&&(i(0,"div",0),S(1,"agentos-header",1),i(2,"div",2)(3,"ds-drawer",3),j("openChange",function(r){return Q(n.drawerOpen,r)||(n.drawerOpen=r),r}),i(4,"div",4)(5,"agentos-case-drawer",5),c("caseSelected",function(r){return n.onCaseSelected(r)})("createRequested",function(){return n.onCreateRequested()})("closeRequested",function(){return n.toggleDrawer()}),s()(),i(6,"div",6),P(7,oe,2,0,"div",7),S(8,"router-outlet"),s()()()()),t&2&&(l(3),B("open",n.drawerOpen),l(2),_("cases",n.cases())("activeCaseId",n.activeCaseId()),l(2),E(n.drawerOpen()?-1:7))},dependencies:[G,U,w,Y,g],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100dvh}.case-shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%}.case-shell__header[_ngcontent-%COMP%]{flex-shrink:0}.case-shell__body[_ngcontent-%COMP%]{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.case-shell__sidenav[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden}.case-shell__content[_ngcontent-%COMP%]{position:relative;flex:1;display:flex;flex-direction:column;height:100%;overflow:hidden}.case-shell__toggle[_ngcontent-%COMP%]{position:absolute;top:.375rem;left:.5rem;z-index:10}"]})};export{v as a,w as b,te as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as L}from"./chunk-JQSINAMU.js";import{$ as E,B as q,fa as D}from"./chunk-L66AMHS4.js";import{a as U}from"./chunk-JBAZQRNW.js";import{d as T}from"./chunk-Y73HWDY3.js";import{Ab as a,Cb as m,Ha as d,Mb as R,Qb as C,Rb as h,Ta as c,Za as I,aa as p,ec as M,fa as y,ga as b,hc as S,ib as _,jb as f,la as x,na as v,ob as u,pb as r,qb as o,yb as w}from"./chunk-RUEXWAWX.js";function O(i,e){if(i&1&&(r(0,"span",3),C(1),o()),i&2){let t=m();d(),h(t.subtitle)}}var g=class i{user;editRequested=new v;deleteRequested=new v;menuItems=[{key:"edit",label:"Edit user",icon:"edit"},{key:"delete",label:"Delete user",icon:"delete",variant:"danger"}];get displayName(){let{firstname:e,lastname:t,email:n}=this.user;return[e,t].filter(Boolean).join(" ")||n||"\u2014"}get subtitle(){return this.user.email??this.user.externalId??""}onMenuAction(e){switch(e){case"edit":this.editRequested.emit(this.user);break;case"delete":confirm(`Delete user "${this.displayName}"?`)&&this.deleteRequested.emit(this.user);break}}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=c({type:i,selectors:[["agentos-user-item"]],inputs:{user:"user"},outputs:{editRequested:"editRequested",deleteRequested:"deleteRequested"},decls:7,vars:3,consts:[["role","listitem",1,"user-item"],[1,"user-item__body"],[1,"user-item__name"],[1,"user-item__subtitle"],[1,"user-item__actions"],[3,"itemSelected","items"]],template:function(t,n){t&1&&(r(0,"div",0)(1,"div",1)(2,"span",2),C(3),o(),_(4,O,2,1,"span",3),o(),r(5,"div",4)(6,"ds-kebab-menu",5),a("itemSelected",function(l){return n.onMenuAction(l)}),o()()()),t&2&&(d(3),h(n.displayName),d(),f(n.subtitle?4:-1),d(2),u("items",n.menuItems))},dependencies:[D],styles:[".user-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;width:100%;padding:1rem 1.25rem;background:var(--color-bg-secondary, rgba(255, 255, 255, .7));border:1px solid var(--color-border, rgba(0, 0, 0, .1));border-radius:12px;box-sizing:border-box;overflow:hidden;position:relative}.user-item__body[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-direction:column;gap:.25rem}.user-item__name[_ngcontent-%COMP%]{font-size:.9375rem;font-weight:600;color:var(--color-text, #1d1d1f);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-item__subtitle[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--color-text-secondary, #6e6e73);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-item__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.25rem;flex-shrink:0}"],changeDetection:0})};function B(i,e){if(i&1){let t=w();r(0,"agentos-user-item",4),a("editRequested",function(s){y(t);let l=m(2);return b(l.navigateToEdit(s))})("deleteRequested",function(s){y(t);let l=m(2);return b(l.deleteUser(s))}),o()}i&2&&u("user",e)}function P(i,e){if(i&1&&_(0,B,1,1,"agentos-user-item",3),i&2){let t,n=e.$implicit,s=m();f((t=s.resolveUser(n.id))?0:-1,t)}}var k=class i{router=p(T);destroyRef=p(x);userAdminState=p(L);isLoading=this.userAdminState.isLoading;userItems=S(()=>this.userAdminState.users().map(e=>({id:e.id??"",name:[e.firstname,e.lastname].filter(Boolean).join(" ")||e.email||"\u2014",description:e.email})));get usersById(){return new Map(this.userAdminState.users().map(e=>[e.id??"",e]))}ngOnInit(){this.userAdminState.loadAll().pipe(U(this.destroyRef)).subscribe()}goBack(){this.router.navigate(["/agentos"])}navigateToCreate(){this.router.navigate(["/agentos/admin/users/new"])}navigateToEdit(e){this.router.navigate(["/agentos/admin/users",e.id??"","edit"])}deleteUser(e){this.userAdminState.deleteUser(e.id??"").pipe(U(this.destroyRef)).subscribe()}resolveUser(e){return this.usersById.get(e)??null}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=c({type:i,selectors:[["agentos-user-list"]],decls:4,vars:3,consts:[["userItemTpl",""],["title","Users","emptyMessage","No users found.","cardMinWidth","320px",3,"createRequested","items","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],[3,"user"],[3,"editRequested","deleteRequested","user"]],template:function(t,n){if(t&1&&(r(0,"ds-entity-list",1),a("createRequested",function(){return n.navigateToCreate()}),r(1,"ds-icon-button",2),a("action",function(){return n.goBack()}),o()(),I(2,P,1,1,"ng-template",null,0,M)),t&2){let s=R(3);u("items",n.userItems())("showCreate",!0)("itemTemplate",s)}},dependencies:[E,g,q],encapsulation:2,changeDetection:0})};export{g as a,k as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Nc as g,T as c,X as p,aa as l,m as s,s as a}from"./chunk-
|
|
1
|
+
import{Nc as g,T as c,X as p,aa as l,m as s,s as a}from"./chunk-RUEXWAWX.js";var m=class n{http=l(g);agentsCache=new Map;getAgents(e){let t=this.agentsCache.get(e);return t?s(t):this.http.get(`/api/projects/${e}/agents`).pipe(c(r=>{this.agentsCache.set(e,r)}))}getAgentsAutocomplete(e,t){return this.getAgents(e).pipe(a(r=>{if(!t)return r;let o=t.toLowerCase();return r.filter(i=>{let h=i.name.toLowerCase(),u=i.description?.toLowerCase()||"";return h.includes(o)||u.includes(o)})}))}clearCache(e){this.agentsCache.delete(e)}clearAllCache(){this.agentsCache.clear()}static \u0275fac=function(t){return new(t||n)};static \u0275prov=p({token:n,factory:n.\u0275fac,providedIn:"root"})};export{m as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{e as $}from"./chunk-VU7RWHPC.js";import{$ as A,B as y}from"./chunk-L66AMHS4.js";import{a as x}from"./chunk-JBAZQRNW.js";import"./chunk-HVJQKHJC.js";import"./chunk-ZK67B6NL.js";import{b as q,d as I}from"./chunk-Y73HWDY3.js";import{Ab as s,Cb as c,Cc as B,Ha as d,Mb as P,Q as M,Qb as C,Rb as h,Ta as f,Za as k,Zb as N,aa as m,ac as S,bc as V,ec as O,fa as l,ga as g,i as w,ib as _,jb as u,la as E,na as T,ob as v,pb as r,qb as a,s as D,sa as R,yb as p}from"./chunk-RUEXWAWX.js";function U(n,t){if(n&1){let e=p();r(0,"span",5),C(1,"Delete?"),a(),r(2,"ds-icon-button",6),s("action",function(){l(e);let i=c();return g(i.onDeleteConfirmed())}),a(),r(3,"ds-icon-button",7),s("action",function(){l(e);let i=c();return g(i.onDeleteCancelled())}),a()}}function W(n,t){if(n&1){let e=p();r(0,"ds-icon-button",8),s("action",function(){l(e);let i=c();return g(i.onEdit())}),a(),r(1,"ds-icon-button",9),s("action",function(){l(e);let i=c();return g(i.onDeleteArmed())}),a()}}var b=class n{router=m(I);config;namespaceId;deleteRequested=new T;pendingDelete=R(!1);onEdit(){this.router.navigate(["/agentos",this.namespaceId,"integrations",this.config.id,"edit"])}onDeleteArmed(){this.pendingDelete.set(!0)}onDeleteConfirmed(){this.pendingDelete.set(!1),this.deleteRequested.emit(this.config)}onDeleteCancelled(){this.pendingDelete.set(!1)}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=f({type:n,selectors:[["agentos-integration-config-item"]],inputs:{config:"config",namespaceId:"namespaceId"},outputs:{deleteRequested:"deleteRequested"},decls:9,vars:3,consts:[["role","listitem",1,"integration-config-item"],[1,"integration-config-item__body"],[1,"integration-config-item__name"],[1,"integration-config-item__type"],[1,"integration-config-item__actions"],[1,"integration-config-item__confirm-label"],["icon","check","variant","danger","title","Confirm deletion",3,"action"],["icon","close","title","Cancel deletion",3,"action"],["icon","edit","title","Edit integration",3,"action"],["icon","delete","variant","danger","title","Delete integration",3,"action"]],template:function(e,o){e&1&&(r(0,"div",0)(1,"div",1)(2,"span",2),C(3),a(),r(4,"span",3),C(5),a()(),r(6,"div",4),_(7,U,4,0)(8,W,2,0),a()()),e&2&&(d(3),h(o.config.name),d(2),h(o.config.integrationType),d(2),u(o.pendingDelete()?7:8))},dependencies:[y],styles:[".integration-config-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;border-radius:10px;border:1px solid var(--color-border, rgba(0, 0, 0, .08));background:var(--glass-bg, rgba(255, 255, 255, .72));-webkit-backdrop-filter:var(--glass-backdrop-blur, blur(20px));backdrop-filter:var(--glass-backdrop-blur, blur(20px));transition:background .15s ease,border-color .15s ease}.integration-config-item[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover, rgba(0, 0, 0, .04));border-color:var(--color-primary, #007aff)}.integration-config-item__body[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.2rem;min-width:0}.integration-config-item__name[_ngcontent-%COMP%]{font-size:.95rem;font-weight:500;color:var(--color-text, #1d1d1f);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.integration-config-item__type[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-secondary, #6e6e73);font-family:monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.integration-config-item__actions[_ngcontent-%COMP%]{flex-shrink:0;display:flex;align-items:center;gap:.125rem;opacity:0;transition:opacity .15s ease}.integration-config-item[_ngcontent-%COMP%]:hover .integration-config-item__actions[_ngcontent-%COMP%], .integration-config-item[_ngcontent-%COMP%]:focus-within .integration-config-item__actions[_ngcontent-%COMP%]{opacity:1}.integration-config-item__confirm-label[_ngcontent-%COMP%]{font-size:.8rem;font-weight:500;color:var(--color-error, #ff3b30);margin-right:.25rem;white-space:nowrap}"],changeDetection:0})};var G=()=>[];function H(n,t){if(n&1){let e=p();r(0,"agentos-integration-config-item",4),s("deleteRequested",function(i){l(e);let j=c(2);return g(j.deleteConfig(i))}),a()}if(n&2){let e=c(2);v("config",t)("namespaceId",e.namespaceId)}}function J(n,t){if(n&1&&_(0,H,1,2,"agentos-integration-config-item",3),n&2){let e,o=t.$implicit,i=c();u((e=i.resolveConfig(o.id))?0:-1,e)}}var F=class n{route=m(q);router=m(I);destroyRef=m(E);integrationConfigController=m($);namespaceId=this.route.snapshot.params.namespaceId;refresh$=new w(void 0);configs$=this.refresh$.pipe(M(()=>this.integrationConfigController.listByParentIntegrationConfig(this.namespaceId)));configItems$=this.configs$.pipe(D(t=>t.map(e=>({id:e.id??"",name:e.name,description:e.integrationType}))));configsById=new Map;constructor(){this.configs$.pipe(x(this.destroyRef)).subscribe(t=>{this.configsById=new Map(t.map(e=>[e.id??"",e]))})}goBack(){this.router.navigate(["/agentos","namespaces"])}openCreateForm(){this.router.navigate(["/agentos",this.namespaceId,"integrations","new"])}deleteConfig(t){this.integrationConfigController.deleteIntegrationConfig(t.id??"").pipe(x(this.destroyRef)).subscribe(()=>this.refresh$.next())}resolveConfig(t){return this.configsById.get(t)??null}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=f({type:n,selectors:[["agentos-namespace-integrations"]],decls:5,vars:6,consts:[["integrationItemTpl",""],["title","Integrations","emptyMessage","No integrations configured yet. Add one above.","cardMinWidth","400px",3,"createRequested","items","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],[3,"config","namespaceId"],[3,"deleteRequested","config","namespaceId"]],template:function(e,o){if(e&1&&(r(0,"ds-entity-list",1),S(1,"async"),s("createRequested",function(){return o.openCreateForm()}),r(2,"ds-icon-button",2),s("action",function(){return o.goBack()}),a()(),k(3,J,1,1,"ng-template",null,0,O)),e&2){let i=P(4);v("items",V(1,3,o.configItems$)??N(5,G))("showCreate",!0)("itemTemplate",i)}},dependencies:[A,b,y,B],encapsulation:2})};export{F as NamespaceIntegrationsComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as L}from"./chunk-
|
|
1
|
+
import{a as L}from"./chunk-JQSINAMU.js";import{a as y}from"./chunk-JBAZQRNW.js";import{D as V,c as w,e as C,g as F,h as N,i as U,l as d,n as z,t as D,u as A}from"./chunk-ZK67B6NL.js";import{b as I,d as k}from"./chunk-Y73HWDY3.js";import{Ab as f,Cb as c,Ha as l,Qb as o,Rb as h,Sb as P,Ta as E,aa as u,fa as _,ga as p,ib as b,jb as v,la as M,ob as x,pb as r,qb as t,rb as m,sa as g,yb as O}from"./chunk-RUEXWAWX.js";function T(i,n){i&1&&(r(0,"p",5),o(1,"Loading\u2026"),t())}function G(i,n){if(i&1&&(r(0,"span",13),o(1),t()),i&2){let e=c(2);l(),h(e.form.controls.email.value)}}function B(i,n){i&1&&m(0,"input",14)}function q(i,n){if(i&1){let e=O();r(0,"form",7),f("ngSubmit",function(){_(e);let s=c();return p(s.save())}),r(1,"div",8)(2,"h2",9),o(3,"Identity"),t(),r(4,"div",10)(5,"label",11),o(6,"Email "),r(7,"span",12),o(8,"*"),t()(),b(9,G,2,1,"span",13)(10,B,1,0,"input",14),t(),r(11,"div",10)(12,"label",15),o(13,"External ID"),t(),m(14,"input",16),t()(),r(15,"div",8)(16,"h2",9),o(17,"Profile"),t(),r(18,"div",10)(19,"label",17),o(20,"First name"),t(),m(21,"input",18),t(),r(22,"div",10)(23,"label",19),o(24,"Last name"),t(),m(25,"input",20),t(),r(26,"div",21)(27,"label",22),o(28,"Bio"),t(),m(29,"textarea",23),t()(),r(30,"div",24)(31,"button",25),o(32),t(),r(33,"button",26),f("click",function(){_(e);let s=c();return p(s.cancel())}),o(34,"Cancel"),t()()()}if(i&2){let e=c();x("formGroup",e.form),l(9),v(e.isEditMode?9:10),l(22),x("disabled",e.form.invalid||e.isSaving()),l(),P(" ",e.isSaving()?"Saving\u2026":e.isEditMode?"Save changes":"Create user"," ")}}var R=class i{route=u(I);router=u(k);destroyRef=u(M);userAdminState=u(L);userId=this.route.snapshot.params.userId;isEditMode=!!this.userId;isSaving=g(!1);isLoading=g(!1);form=new U({email:new d("",{nonNullable:!0,validators:[C.required,C.email]}),externalId:new d("",{nonNullable:!0}),firstname:new d("",{nonNullable:!0}),lastname:new d("",{nonNullable:!0}),bio:new d("",{nonNullable:!0})});ngOnInit(){if(!this.isEditMode)return;let n=this.userAdminState.users().find(e=>e.id===this.userId);if(n){this.syncForm(n),this.form.controls.email.disable();return}this.isLoading.set(!0),this.userAdminState.loadAll().pipe(y(this.destroyRef)).subscribe({next:()=>{let e=this.userAdminState.users().find(a=>a.id===this.userId);e&&(this.syncForm(e),this.form.controls.email.disable()),this.isLoading.set(!1)},error:()=>this.isLoading.set(!1)})}get title(){return this.isEditMode?"Edit user":"New user"}save(){if(this.form.invalid||this.isSaving())return;this.isSaving.set(!0);let{email:n,externalId:e,firstname:a,lastname:s,bio:S}=this.form.getRawValue();(this.isEditMode?this.userAdminState.updateUser(this.userId,{externalId:e||void 0,firstname:a||void 0,lastname:s||void 0,bio:S||void 0}):this.userAdminState.createUser({email:n||void 0,externalId:e||void 0,firstname:a||void 0,lastname:s||void 0,bio:S||void 0})).pipe(y(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSaving.set(!1)})}cancel(){this.navigateBack()}navigateBack(){this.router.navigate(["/agentos/admin/users"])}syncForm(n){this.form.setValue({email:n.email??"",externalId:n.externalId??"",firstname:n.firstname??"",lastname:n.lastname??"",bio:n.bio??""})}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=E({type:i,selectors:[["agentos-user-form"]],decls:10,vars:2,consts:[[1,"user-form"],[1,"user-form__header"],["type","button","title","Back to users",1,"user-form__back",3,"click"],[1,"user-form__back-icon"],[1,"user-form__title"],[1,"user-form__loading"],[1,"user-form__body",3,"formGroup"],[1,"user-form__body",3,"ngSubmit","formGroup"],[1,"user-form__section"],[1,"user-form__section-title"],[1,"user-form__field"],["for","uf-email",1,"user-form__label"],[1,"user-form__required"],[1,"user-form__value","user-form__value--readonly"],["id","uf-email","type","email","placeholder","user@example.com","formControlName","email","autocomplete","email",1,"user-form__input"],["for","uf-externalId",1,"user-form__label"],["id","uf-externalId","type","text","placeholder","External identifier","formControlName","externalId",1,"user-form__input"],["for","uf-firstname",1,"user-form__label"],["id","uf-firstname","type","text","placeholder","First name","formControlName","firstname","autocomplete","given-name",1,"user-form__input"],["for","uf-lastname",1,"user-form__label"],["id","uf-lastname","type","text","placeholder","Last name","formControlName","lastname","autocomplete","family-name",1,"user-form__input"],[1,"user-form__field","user-form__field--bio"],["for","uf-bio",1,"user-form__label"],["id","uf-bio","placeholder","A short description","formControlName","bio","rows","4",1,"user-form__input","user-form__input--textarea"],[1,"user-form__actions"],["type","submit",1,"user-form__btn","user-form__btn--primary",3,"disabled"],["type","button",1,"user-form__btn",3,"click"]],template:function(e,a){e&1&&(r(0,"div",0)(1,"header",1)(2,"button",2),f("click",function(){return a.cancel()}),r(3,"span",3),o(4,"\u2190"),t(),o(5," Users "),t(),r(6,"h1",4),o(7),t()(),b(8,T,2,0,"p",5)(9,q,35,4,"form",6),t()),e&2&&(l(7),h(a.title),l(),v(a.isLoading()?8:9))},dependencies:[V,z,w,F,N,A,D],styles:[".user-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:560px;margin:0 auto;padding:2rem 1rem}.user-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.user-form__back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-primary, #007aff);font-family:inherit}.user-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.user-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.user-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:600;color:var(--color-text, #1d1d1f);letter-spacing:-.02em}.user-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);font-size:.9rem;margin:0}.user-form__body[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem}.user-form__section[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem}.user-form__section-title[_ngcontent-%COMP%]{margin:0;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-secondary, #6e6e73);border-bottom:1px solid var(--color-border-light, rgba(0, 0, 0, .06));padding-bottom:.5rem}.user-form__field[_ngcontent-%COMP%]{display:grid;grid-template-columns:140px 1fr;align-items:baseline;gap:.75rem}.user-form__field--bio[_ngcontent-%COMP%]{align-items:start}.user-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text-secondary, #6e6e73);white-space:nowrap}.user-form__required[_ngcontent-%COMP%]{color:var(--color-error, #ff3b30)}.user-form__value[_ngcontent-%COMP%]{font-size:.9375rem;color:var(--color-text, #1d1d1f)}.user-form__value--readonly[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);font-size:.875rem}.user-form__input[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .1));background:transparent;color:var(--color-text, #1d1d1f);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;transition:border-color .15s ease;resize:none}.user-form__input[_ngcontent-%COMP%]:focus{border-color:var(--color-primary, #007aff)}.user-form__input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary, #6e6e73)}.user-form__input--textarea[_ngcontent-%COMP%]{line-height:1.5;resize:vertical}.user-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.user-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .1));background:transparent;color:var(--color-text, #1d1d1f);font-size:.9375rem;font-family:inherit;cursor:pointer;transition:background .15s ease,border-color .15s ease}.user-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover, rgba(0, 0, 0, .04))}.user-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.user-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-primary, #007aff);border-color:var(--color-primary, #007aff);color:#fff}.user-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary-hover, #0051d5);border-color:var(--color-primary-hover, #0051d5)}"],changeDetection:0})};export{R as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{e as R,f as z}from"./chunk-VU7RWHPC.js";import{C as Q}from"./chunk-L66AMHS4.js";import{a as M,b as I}from"./chunk-JBAZQRNW.js";import"./chunk-HVJQKHJC.js";import{D as H,c as B,e as u,g as L,h as j,i as G,l as C,n as J,s as A,u as $,v as q,w as K,x as U}from"./chunk-ZK67B6NL.js";import{b as F,d as N}from"./chunk-Y73HWDY3.js";import{Ab as p,Cb as g,Ha as l,Qb as r,Rb as x,Sb as V,Ta as P,a as S,aa as c,b as O,fa as f,ga as _,hb as T,hc as D,ib as b,jb as y,la as k,mb as w,nb as E,ob as s,pb as i,qb as o,rb as h,sa as d,yb as v}from"./chunk-RUEXWAWX.js";function Y(a,t){a&1&&(i(0,"p",5),r(1,"Loading\u2026"),o())}function Z(a,t){if(a&1&&(i(0,"option",13),r(1),o()),a&2){let e=t.$implicit;s("value",e.type),l(),x(e.displayName)}}function ee(a,t){if(a&1){let e=v();i(0,"div",18)(1,"ds-json-schema-form",22),p("valueChange",function(m){f(e);let X=g(2);return _(X.onParamsChange(m))}),o()()}if(a&2){let e=g(2);l(),s("schema",t)("value",e.initialParams())}}function te(a,t){if(a&1){let e=v();i(0,"form",7),p("ngSubmit",function(){f(e);let m=g();return _(m.submit())}),i(1,"div",8)(2,"label",9),r(3,"Type "),i(4,"span",10),r(5,"*"),o()(),i(6,"select",11)(7,"option",12),r(8,"Select type"),o(),w(9,Z,2,2,"option",13,T().trackByType,!0),o()(),i(11,"div",8)(12,"label",14),r(13,"Name "),i(14,"span",10),r(15,"*"),o()(),h(16,"input",15),o(),i(17,"div",8)(18,"label",16),r(19,"Description"),o(),h(20,"textarea",17),o(),b(21,ee,2,2,"div",18),i(22,"div",19)(23,"button",20),r(24),o(),i(25,"button",21),p("click",function(){f(e);let m=g();return _(m.cancel())}),r(26,"Cancel"),o()()()}if(a&2){let e,n=g();s("formGroup",n.form),l(6),s("formControl",n.typeControl),l(3),E(n.integrationTypes()),l(7),s("formControl",n.nameControl),l(4),s("formControl",n.descriptionControl),l(),y((e=n.schema())?21:-1,e),l(2),s("disabled",n.nameControl.invalid||n.typeControl.invalid||n.isSubmitting()),l(),V(" ",n.isEditMode()?"Save changes":"Create"," ")}}var W=class a{route=c(F);router=c(N);destroyRef=c(k);integrationConfigController=c(R);integrationTypeController=c(z);namespaceId=this.route.snapshot.params.namespaceId;form=new G({name:new C("",{nonNullable:!0,validators:[u.required,u.minLength(1)]}),description:new C(null),type:new C("",{nonNullable:!0,validators:[u.required]})});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get typeControl(){return this.form.controls.type}isEditMode=d(!1);isSubmitting=d(!1);isLoading=d(!1);paramsValue=d(null);initialParams=d(null);integrationTypes=I(this.integrationTypeController.listTypesIntegrationType(),{initialValue:[]});selectedType=I(this.form.controls.type.valueChanges,{initialValue:this.form.controls.type.value});schema=D(()=>{let t=this.selectedType();return t?this.integrationTypes().find(n=>n.type===t)?.configSchema??null:null});existingConfig=null;ngOnInit(){let t=this.route.snapshot.paramMap.get("integrationId");t&&(this.isEditMode.set(!0),this.loadConfig(t))}loadConfig(t){this.isLoading.set(!0),this.integrationConfigController.getByIdIntegrationConfig(t).pipe(M(this.destroyRef)).subscribe({next:e=>{this.existingConfig=e,this.nameControl.setValue(e.name),this.descriptionControl.setValue(e.description??null),this.typeControl.setValue(e.integrationType),this.initialParams.set(e.parameters),this.paramsValue.set(e.parameters),this.isLoading.set(!1)},error:()=>{this.isLoading.set(!1),this.navigateBack()}})}onParamsChange(t){this.paramsValue.set(t)}submit(){if(this.nameControl.invalid||this.typeControl.invalid||this.isSubmitting())return;this.isSubmitting.set(!0),(this.isEditMode()?this.integrationConfigController.updateIntegrationConfig(this.existingConfig.id??"",O(S({},this.existingConfig),{name:this.nameControl.value.trim(),description:this.descriptionControl.value?.trim()||void 0,integrationType:this.typeControl.value,parameters:this.paramsValue()})):this.integrationConfigController.createIntegrationConfig({name:this.nameControl.value.trim(),description:this.descriptionControl.value?.trim()||void 0,integrationType:this.typeControl.value,namespaceId:this.namespaceId,parameters:this.paramsValue()})).pipe(M(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(!1)})}cancel(){this.navigateBack()}navigateBack(){this.router.navigate(["/agentos",this.namespaceId,"integrations"])}trackByType(t,e){return e.type}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=P({type:a,selectors:[["agentos-integration-form"]],decls:10,vars:2,consts:[[1,"integration-form"],[1,"integration-form__header"],["type","button","title","Back to integrations",1,"integration-form__back",3,"click"],[1,"integration-form__back-icon"],[1,"integration-form__title"],[1,"integration-form__loading"],[1,"integration-form__form",3,"formGroup"],[1,"integration-form__form",3,"ngSubmit","formGroup"],[1,"integration-form__field"],["for","integration-type",1,"integration-form__label"],["aria-hidden","true"],["id","integration-type",1,"integration-form__select",3,"formControl"],["value","","disabled",""],[3,"value"],["for","integration-name",1,"integration-form__label"],["id","integration-name","type","text","placeholder","Integration name","autocomplete","off",1,"integration-form__input",3,"formControl"],["for","integration-description",1,"integration-form__label"],["id","integration-description","placeholder","Optional description","rows","3",1,"integration-form__textarea",3,"formControl"],[1,"integration-form__schema-form"],[1,"integration-form__actions"],["type","submit",1,"integration-form__btn","integration-form__btn--primary",3,"disabled"],["type","button",1,"integration-form__btn",3,"click"],[3,"valueChange","schema","value"]],template:function(e,n){e&1&&(i(0,"div",0)(1,"header",1)(2,"button",2),p("click",function(){return n.cancel()}),i(3,"span",3),r(4,"\u2190"),o(),r(5," Integrations "),o(),i(6,"h1",4),r(7),o()(),b(8,Y,2,0,"p",5)(9,te,27,7,"form",6),o()),e&2&&(l(7),x(n.isEditMode()?"Edit integration":"New integration"),l(),y(n.isLoading()?8:9))},dependencies:[H,J,K,U,B,q,L,j,A,$,Q],styles:[".integration-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:560px;margin:0 auto;padding:2rem 1rem}.integration-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.integration-form__back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-primary, #007aff);font-family:inherit}.integration-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.integration-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.integration-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:600;color:var(--color-text, #1d1d1f);letter-spacing:-.02em}.integration-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);font-size:.9rem;margin:0}.integration-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.integration-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.integration-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text, #1d1d1f)}.integration-form__input[_ngcontent-%COMP%], .integration-form__textarea[_ngcontent-%COMP%], .integration-form__select[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .1));background:transparent;color:var(--color-text, #1d1d1f);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;transition:border-color .15s ease}.integration-form__input[_ngcontent-%COMP%]:focus, .integration-form__textarea[_ngcontent-%COMP%]:focus, .integration-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-primary, #007aff)}.integration-form__input[_ngcontent-%COMP%]::placeholder, .integration-form__textarea[_ngcontent-%COMP%]::placeholder, .integration-form__select[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary, #6e6e73)}.integration-form__textarea[_ngcontent-%COMP%]{resize:vertical;min-height:4.5rem;line-height:1.5}.integration-form__select[_ngcontent-%COMP%]{cursor:pointer}.integration-form__select[_ngcontent-%COMP%] option[disabled][_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73)}.integration-form__schema-form[_ngcontent-%COMP%]{padding:1rem;border-radius:10px;border:1px solid var(--color-border-light, rgba(0, 0, 0, .06));background:var(--glass-bg, rgba(255, 255, 255, .5));-webkit-backdrop-filter:var(--glass-backdrop-blur, blur(20px));backdrop-filter:var(--glass-backdrop-blur, blur(20px))}.integration-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.integration-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .1));background:transparent;color:var(--color-text, #1d1d1f);font-size:.9375rem;font-family:inherit;cursor:pointer;transition:background .15s ease,border-color .15s ease}.integration-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover, rgba(0, 0, 0, .04))}.integration-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.integration-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-primary, #007aff);border-color:var(--color-primary, #007aff);color:#fff}.integration-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary-hover, #0051d5);border-color:var(--color-primary-hover, #0051d5)}"],changeDetection:0})};export{W as IntegrationFormComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{L as ge,R as ue,S as he,T as fe}from"./chunk-PKKHLHXJ.js";import{C as ke,c as be,g as ve,m as ye,v as xe,w as Ce,x as Te}from"./chunk-2DE3OXG3.js";import{a as _e}from"./chunk-VNGIXNER.js";import{Ab as P,Bb as de,Cb as g,Ec as D,Ha as s,Mc as Z,Nb as me,Nc as pe,Qb as a,Rb as m,Sb as E,Ta as L,Wa as Q,X as H,a as R,aa as M,ac as x,b as A,cc as w,dc as G,fa as $,ga as V,gb as b,ha as O,hb as re,hc as p,ia as ae,ib as v,jb as y,la as ie,mb as I,nb as N,ob as S,pb as r,qb as l,rb as le,sa as h,sb as c,tb as _,ub as T,y as oe,yb as se,yc as ce}from"./chunk-DJBCK5D7.js";var Fe=(o,t)=>t.date,Re=(o,t)=>t.x,Ae=(o,t)=>t.label;function He(o,t){o&1&&(c(0,"div",0),a(1,"No daily data points for this period."),_())}function $e(o,t){if(o&1&&(O(),T(0,"rect",18)),o&2){let e=g().$implicit,n=g(2);b("x",e.w+6)("y",n.yBase-e.tokensStubH)("width",e.w)("height",e.tokensStubH)}}function Ve(o,t){if(o&1&&(O(),T(0,"rect",19)(1,"rect",20)),o&2){let e=g().$implicit,n=g(2);b("x",e.w+6)("y",n.yBase-(e.promptH??0))("width",e.w)("height",e.promptH??0),s(),b("x",e.w+6)("y",n.yBase-((e.promptH??0)+(e.completionH??0)))("width",e.w)("height",e.completionH??0)}}function Le(o,t){if(o&1){let e=se();O(),c(0,"g",15),de("mouseenter",function(i){let d=$(e).$implicit,u=g(2);return V(u.showTooltip(i,d.point))})("mousemove",function(i){let d=$(e).$implicit,u=g(2);return V(u.showTooltip(i,d.point))})("mouseleave",function(){$(e);let i=g(2);return V(i.hideTooltip())}),T(1,"rect",16)(2,"rect",17),v(3,$e,1,4,":svg:rect",18)(4,Ve,2,8),_()}if(o&2){let e=t.$implicit,n=g(2);b("transform","translate("+e.xGroup+",0)"),s(),b("y",n.yTop)("width",e.groupW)("height",n.yBase-n.yTop),s(),b("y",n.yBase-e.costH)("width",e.w)("height",e.costH),s(),y(e.tokensStubH!==null?3:4)}}function Ge(o,t){if(o&1&&(O(),c(0,"text",5),a(1),_()),o&2){let e=t.$implicit,n=g(2);b("x",e.x)("y",n.yAxis),s(),m(e.label)}}function Ye(o,t){if(o&1&&(c(0,"div",24),a(1),_(),c(2,"div",25),a(3),_()),o&2){let e=t.$implicit;s(),m(e.label),s(2),m(e.value)}}function We(o,t){if(o&1&&(c(0,"div",21)(1,"div",22),a(2),_(),c(3,"div",23),I(4,Ye,4,2,null,null,Ae),_()()),o&2){let e=g(2);me("left",e.tooltip().x+12,"px")("top",e.tooltip().y+12,"px"),s(2),m(e.tooltip().data.date),s(2),N(e.tooltipLines())}}function je(o,t){if(o&1&&(c(0,"div",8)(1,"span",10),a(2),_()()),o&2){let e=g(2);s(2),m(e.tokenCoverageLabel())}}function ze(o,t){if(o&1&&(c(0,"div",1),O(),c(1,"svg",2),T(2,"line",3)(3,"line",3),I(4,Le,5,8,":svg:g",4,Fe),I(6,Ge,2,3,":svg:text",5,Re),_(),v(8,We,6,5,"div",6),ae(),c(9,"div",7)(10,"div",8),T(11,"span",9),c(12,"span",10),a(13,"Cost (per day)"),_(),c(14,"span",11),a(15),_()(),c(16,"div",8),T(17,"span",12),c(18,"span",10),a(19,"Prompt tokens"),_()(),c(20,"div",8),T(21,"span",13),c(22,"span",10),a(23,"Completion tokens"),_()(),c(24,"div",8),T(25,"span",14),c(26,"span",10),a(27,"Tokens missing"),_()(),c(28,"div",8)(29,"span",10),a(30,"Tokens scale"),_(),c(31,"span",11),a(32),_()(),v(33,je,3,1,"div",8),_()()),o&2){let e=g();s(),b("viewBox",e.viewBox),s(),b("y1",e.yTop)("x2",720)("y2",e.yTop),s(),b("y1",e.yBase)("x2",720)("y2",e.yBase),s(),N(e.bars()),s(2),N(e.axisLabels()),s(2),y(e.tooltip().visible&&e.tooltip().data?8:-1),s(7),E("max ",e.maxCostLabel()),s(17),E("max ",e.maxTokensLabel()),s(),y(e.tokenCoverageLabel()?33:-1)}}var Y=class o{points=[];width=720;height=240;paddingX=12;paddingY=16;bottomAxisH=48;viewBox=`0 0 ${this.width} ${this.height}`;innerW=this.width-this.paddingX*2;innerH=this.height-this.paddingY*2-this.bottomAxisH;barGap=6;groupGap=14;safePoints=p(()=>(this.points??[]).filter(t=>!!t.date));maxCost=p(()=>Math.max(0,...this.safePoints().map(t=>t.cost??0)));maxTokens=p(()=>{let t=this.safePoints().map(e=>{let n=e.promptTokens??null,i=e.completionTokens??null;return n===null&&i===null?null:(n??0)+(i??0)}).filter(e=>e!==null);return Math.max(0,...t)});tokenCoverageLabel=p(()=>{let t=this.safePoints();return t.length===0?"":`Tokens available for ${t.filter(n=>n.promptTokens!==null||n.completionTokens!==null).length}/${t.length} days`});maxCostLabel=p(()=>"$"+(new D("en-US").transform(this.maxCost(),"1.2-2")??"0.00"));maxTokensLabel=p(()=>new D("en-US").transform(this.maxTokens(),"1.0-2")??"0");tooltip=h({visible:!1,x:0,y:0,data:null});toTooltipData(t){let e=t.promptTokens,n=t.completionTokens,i=e===null&&n===null?null:(e??0)+(n??0);return{date:t.date,cost:t.cost??0,promptTokens:e,completionTokens:n,totalTokens:i,callCount:t.callCount??0}}showTooltip(t,e){let i=t.currentTarget?.closest(".chart")?.getBoundingClientRect(),d=i?t.clientX-i.left:t.clientX,u=i?t.clientY-i.top:t.clientY,f=320,k=170,U=12,C=i?Math.max(0,i.width-f-U):d,B=i?Math.max(0,i.height-k-U):u,F=i?Math.min(Math.max(0,d),C):d,ee=i?Math.min(Math.max(0,u),B):u;this.tooltip.set({visible:!0,x:F,y:ee,data:this.toTooltipData(e)})}hideTooltip(){this.tooltip.update(t=>A(R({},t),{visible:!1}))}formatTokens(t){return t===null?"\u2014":new D("en-US").transform(t,"1.0-2")??"0"}formatCost(t){return"$"+(new D("en-US").transform(t??0,"1.2-2")??"0.00")}tooltipLines=p(()=>{let t=this.tooltip(),e=t.data;return!t.visible||!e?[]:[{label:"Cost",value:this.formatCost(e.cost)},{label:"Prompt tokens",value:this.formatTokens(e.promptTokens)},{label:"Completion tokens",value:this.formatTokens(e.completionTokens)},{label:"Total tokens",value:this.formatTokens(e.totalTokens)},{label:"Calls",value:`${e.callCount}`}]});bars=p(()=>{let t=this.safePoints(),e=t.length;if(e===0)return[];let n=(this.innerW-(e-1)*this.groupGap)/e,i=Math.max(2,n),d=(i-this.barGap)/2,u=Math.max(1,d),f=this.maxCost()||1,k=this.maxTokens()||1,U=45;return t.map((C,B)=>{let F=this.paddingX+B*(i+this.groupGap),Ee=(C.cost??0)/f*this.innerH,te=C.promptTokens,ne=C.completionTokens,K=te!==null||ne!==null,Oe=te??0,Ie=ne??0,Ne=K?Oe/k*this.innerH:null,Ue=K?Ie/k*this.innerH:null;return{date:C.date,point:C,xGroup:F,groupW:i,xCost:F,w:u,costH:Ee,xTokens:F+u+this.barGap,promptH:Ne,completionH:Ue,tokensStubH:K?null:U}})});axisLabels=p(()=>{let t=this.safePoints(),e=t.length;if(e===0)return[];let i=Math.max(1,Math.ceil(e/8)),d=(this.innerW-(e-1)*this.groupGap)/e,u=Math.max(2,d);return t.map((f,k)=>({p:f,i:k})).filter(({i:f})=>f%i===0||f===e-1).map(({p:f,i:k})=>{let C=this.paddingX+k*(u+this.groupGap)+u/2,B=f.date.slice(5);return{x:C,label:B}})});yTop=this.paddingY;yBase=this.paddingY+this.innerH;yAxis=this.yBase+28;static \u0275fac=function(e){return new(e||o)};static \u0275cmp=L({type:o,selectors:[["app-daily-series-chart"]],inputs:{points:"points"},decls:2,vars:1,consts:[[1,"muted"],[1,"chart"],["preserveAspectRatio","none","role","img","aria-label","Daily token and cost usage",1,"chart__svg"],["x1","0",1,"chart__grid"],[1,"chart__day"],["text-anchor","middle",1,"chart__axis-label"],[1,"chart__tooltip",3,"left","top"],[1,"chart__legend"],[1,"chart__legend-item"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--cost"],[1,"chart__legend-label"],[1,"chart__legend-value"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--prompt"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--completion"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--tokens-missing"],[1,"chart__day",3,"mouseenter","mousemove","mouseleave"],["x","0",1,"chart__hover"],["x","0",1,"chart__bar","chart__bar--cost"],[1,"chart__bar","chart__bar--tokens-missing"],[1,"chart__bar","chart__bar--prompt"],[1,"chart__bar","chart__bar--completion"],[1,"chart__tooltip"],[1,"chart__tooltip-title"],[1,"chart__tooltip-grid"],[1,"chart__tooltip-label"],[1,"chart__tooltip-value"]],template:function(e,n){e&1&&v(0,He,2,0,"div",0)(1,ze,34,11,"div",1),e&2&&y(n.safePoints().length===0?0:1)},styles:[".chart[_ngcontent-%COMP%]{display:grid;gap:.5rem;position:relative}.chart__svg[_ngcontent-%COMP%]{width:100%;height:260px;display:block;border-radius:12px;background:var(--color-bg-secondary, rgba(255, 255, 255, .72));border:1px solid var(--color-border-light, rgba(0, 0, 0, .08))}.chart__grid[_ngcontent-%COMP%]{stroke:var(--color-border-light, rgba(0, 0, 0, .08));stroke-width:1}.chart__day[_ngcontent-%COMP%]{cursor:default}.chart__hover[_ngcontent-%COMP%]{fill:transparent}.chart__day[_ngcontent-%COMP%]:hover .chart__hover[_ngcontent-%COMP%]{fill:var(--color-bg-hover, rgba(0, 0, 0, .03))}.chart__tooltip[_ngcontent-%COMP%]{position:absolute;z-index:2;min-width:220px;max-width:320px;padding:10px 12px;border-radius:12px;background:rgb(var(--color-bg-secondary-rgb, 255 255 255)/1);border:1px solid var(--color-border-light, rgba(0, 0, 0, .08));box-shadow:var(--glass-shadow, 0 8px 24px rgba(0, 0, 0, .12));pointer-events:none}.chart__tooltip-title[_ngcontent-%COMP%]{font-weight:650;margin-bottom:6px}.chart__tooltip-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr auto;column-gap:10px;row-gap:4px}.chart__tooltip-label[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.85rem}.chart__tooltip-value[_ngcontent-%COMP%]{font-variant-numeric:tabular-nums;text-align:right}.chart__bar[_ngcontent-%COMP%]{shape-rendering:geometricPrecision;rx:2;ry:2}.chart__bar--cost[_ngcontent-%COMP%]{fill:var(--color-primary, #007aff);opacity:.85}.chart__bar--prompt[_ngcontent-%COMP%]{fill:var(--color-success, #34c759);opacity:.85}.chart__bar--completion[_ngcontent-%COMP%]{fill:var(--color-warning, #ff9500);opacity:.85}.chart__bar--tokens-missing[_ngcontent-%COMP%]{fill:transparent;stroke:var(--color-text-secondary, rgba(29, 29, 31, .55));stroke-width:1.5;stroke-dasharray:4 3}.chart__axis-label[_ngcontent-%COMP%]{fill:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:12px;font-variant-numeric:tabular-nums}.chart__legend[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.chart__legend-item[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:baseline}.chart__legend-swatch[_ngcontent-%COMP%]{width:10px;height:10px;border-radius:3px;align-self:center}.chart__legend-swatch--cost[_ngcontent-%COMP%]{background:var(--color-primary, #007aff)}.chart__legend-swatch--prompt[_ngcontent-%COMP%]{background:var(--color-success, #34c759)}.chart__legend-swatch--completion[_ngcontent-%COMP%]{background:var(--color-warning, #ff9500)}.chart__legend-swatch--tokens-missing[_ngcontent-%COMP%]{background:transparent;border:1px dashed var(--color-text-secondary, rgba(29, 29, 31, .55))}.chart__legend-label[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.85rem}.chart__legend-value[_ngcontent-%COMP%]{font-variant-numeric:tabular-nums}.muted[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7))}"],changeDetection:0})};var j=class o{http=M(pe);getTokenUsage(t){let e=new Z;return t.from&&(e=e.set("from",t.from)),t.to&&(e=e.set("to",t.to)),this.http.get("/api/token-usage",{params:e})}getTokenUsageSeries(t){let e=new Z;return t.from&&(e=e.set("from",t.from)),t.to&&(e=e.set("to",t.to)),this.http.get("/api/token-usage/series",{params:e})}static \u0275fac=function(e){return new(e||o)};static \u0275prov=H({token:o,factory:o.\u0275fac,providedIn:"root"})};function Me(o){return`${o}`.padStart(2,"0")}function Se(o){return`${o.getUTCFullYear()}-${Me(o.getUTCMonth()+1)}-${Me(o.getUTCDate())}`}function Xe(o=new Date){return new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),1))}function Je(o=new Date){return new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth()+1,1))}var z=class o{api=M(j);destroyRef=M(ie);defaultFrom=Se(Xe());defaultTo=Se(Je());draftFilters=h({from:this.defaultFrom,to:this.defaultTo});appliedFilters=h({from:this.defaultFrom,to:this.defaultTo});loading=h(!1);error=h(null);aggregation=h(null);seriesResponse=h(null);series=h(null);tokenDataPartial=h(!1);aggregationByModelId=h(null);seriesByModelId=h(null);init(){this.reload()}setDraftFrom(t){this.draftFilters.update(e=>A(R({},e),{from:t}))}setDraftTo(t){this.draftFilters.update(e=>A(R({},e),{to:t}))}clearDraftFrom(){this.setDraftFrom(null)}clearDraftTo(){this.setDraftTo(null)}apply(){this.appliedFilters.set(this.draftFilters()),this.reload()}addNullableTokens(t,e){return t===null&&e===null?null:(t??0)+(e??0)}aggregateByModelId(t){let e=new Map;for(let n of t){let i=n.modelId,d=e.get(i);d?(d.promptTokens=this.addNullableTokens(d.promptTokens,n.promptTokens),d.completionTokens=this.addNullableTokens(d.completionTokens,n.completionTokens),d.totalTokens=this.addNullableTokens(d.totalTokens,n.totalTokens),d.callCount+=n.callCount??0,d.cost=(d.cost??0)+(n.cost??0)):e.set(i,{agentName:"All agents",providerName:"all",modelId:n.modelId,promptTokens:n.promptTokens,completionTokens:n.completionTokens,totalTokens:n.totalTokens,callCount:n.callCount??0,cost:n.cost??0})}return[...e.values()].sort((n,i)=>(i.totalTokens??0)-(n.totalTokens??0))}aggregateSeriesByModelId(t){let e=new Map;for(let n of t){let i=`${n.date}|${n.modelId}`,d=e.get(i);d?(d.promptTokens=this.addNullableTokens(d.promptTokens,n.promptTokens),d.completionTokens=this.addNullableTokens(d.completionTokens,n.completionTokens),d.totalTokens=this.addNullableTokens(d.totalTokens,n.totalTokens),d.callCount+=n.callCount??0,d.cost=(d.cost??0)+(n.cost??0)):e.set(i,{date:n.date,agentName:"All agents",providerName:"all",modelId:n.modelId,promptTokens:n.promptTokens,completionTokens:n.completionTokens,totalTokens:n.totalTokens,callCount:n.callCount??0,cost:n.cost??0})}return[...e.values()].sort((n,i)=>n.date<i.date?-1:1)}reload(){let{from:t,to:e}=this.appliedFilters();this.loading.set(!0),this.error.set(null),oe({aggregation:this.api.getTokenUsage({from:t,to:e}),series:this.api.getTokenUsageSeries({from:t,to:e})}).pipe(_e(this.destroyRef)).subscribe({next:({aggregation:n,series:i})=>{this.aggregation.set(n),this.seriesResponse.set(i);let d=i.points??[];this.series.set(d),this.tokenDataPartial.set(n.tokenDataPartial||i.tokenDataPartial);let u=this.aggregateByModelId(n.models??[]);this.aggregationByModelId.set(u),this.seriesByModelId.set(this.aggregateSeriesByModelId(d)),this.loading.set(!1)},error:n=>{this.loading.set(!1),this.aggregation.set(null),this.seriesResponse.set(null),this.series.set(null),this.tokenDataPartial.set(!1),this.aggregationByModelId.set(null),this.seriesByModelId.set(null),this.error.set(n instanceof Error?n.message:"Failed to load token usage")}})}static \u0275fac=function(e){return new(e||o)};static \u0275prov=H({token:o,factory:o.\u0275fac,providedIn:"root"})};var X=function(){throw new Error("DON'T USE this INSIDE A FUNCTION CALLED BY | call OR | apply IT MUST BE A PURE FUNCTION!")},Pe=typeof Proxy!="function"?Object.seal({}):new Proxy({},{get:X,set:X,deleteProperty:X,has:X}),J=class o{transform(t,e){if(typeof e!="function")throw new TypeError("You must pass a PURE function to | call");return e?.call(Pe,t)}static \u0275fac=function(e){return new(e||o)};static \u0275pipe=Q({name:"call",type:o,pure:!0})},q=class o{transform(t,...e){if(typeof t!="function")throw new TypeError("You must use | apply on a PURE function");return t.apply(Pe,e)}static \u0275fac=function(e){return new(e||o)};static \u0275pipe=Q({name:"apply",type:o,pure:!0})};function qe(o,t){o&1&&(r(0,"div",23),a(1," Partial data \u2014 token counts may not cover the full period "),l())}function Ke(o,t){o&1&&(r(0,"div",24),a(1," No token data collected for this period "),l())}function Qe(o,t){if(o&1&&(r(0,"div",19)(1,"div",20)(2,"div",21),a(3,"Total tokens"),l(),r(4,"div",22),a(5),x(6,"call"),l()(),r(7,"div",20)(8,"div",21),a(9,"Total calls"),l(),r(10,"div",22),a(11),l()(),r(12,"div",20)(13,"div",21),a(14,"Total cost"),l(),r(15,"div",22),a(16),x(17,"apply"),l()()(),v(18,qe,2,0,"div",23),v(19,Ke,2,0,"div",24)),o&2){let e=g();s(5),m(w(6,5,e.totalRow().totalTokens,e.formatTokenValue)),s(6),m(e.totalRow().callCount),s(5),m(G(17,8,e.formatCostValue,e.isMissingPeriod(),e.totalRow().cost)),s(2),y(e.isPartialPeriod()?18:-1),s(),y(e.isMissingPeriod()?19:-1)}}function Ze(o,t){o&1&&(r(0,"div",16)(1,"div",25),a(2,"Loading token usage\u2026"),l()())}function et(o,t){if(o&1&&(r(0,"div",17)(1,"div",26),a(2,"Failed to load"),l(),r(3,"div",25),a(4),l()()),o&2){let e=g();s(4),m(e.state.error())}}function tt(o,t){o&1&&(r(0,"div",16)(1,"div",26),a(2,"No data"),l(),r(3,"div",25),a(4,"No token usage recorded yet for this period."),l()())}function nt(o,t){if(o&1&&(r(0,"div",32)(1,"div",29),a(2),l(),r(3,"div",29),a(4),l(),r(5,"div",29),a(6),l(),r(7,"div",30),a(8),x(9,"call"),l(),r(10,"div",30),a(11),x(12,"call"),l(),r(13,"div",30),a(14),x(15,"call"),l(),r(16,"div",30),a(17),l(),r(18,"div",30),a(19),x(20,"apply"),l()()),o&2){let e=t.$implicit,n=g(2);s(2),m(e.agentName),s(2),m(e.providerName),s(2),m(e.modelId),s(2),m(w(9,8,e.promptTokens,n.formatTokenValue)),s(3),m(w(12,11,e.completionTokens,n.formatTokenValue)),s(3),m(w(15,14,e.totalTokens,n.formatTokenValue)),s(3),m(e.callCount),s(2),E(" ",G(20,17,n.formatCostValue,n.isMissingPeriod(),e.cost)," ")}}function ot(o,t){if(o&1&&(r(0,"div",33)(1,"div",29),a(2),l(),r(3,"div",29),a(4),l(),r(5,"div",29),a(6),l(),r(7,"div",30),a(8),x(9,"call"),l(),r(10,"div",30),a(11),x(12,"call"),l(),r(13,"div",30),a(14),x(15,"call"),l(),r(16,"div",30),a(17),l(),r(18,"div",30),a(19),x(20,"apply"),l()()),o&2){let e=g(2);s(2),m(e.totalRow().agentName),s(2),m(e.totalRow().providerName),s(2),m(e.totalRow().modelId),s(2),m(w(9,8,e.totalRow().promptTokens,e.formatTokenValue)),s(3),E(" ",w(12,11,e.totalRow().completionTokens,e.formatTokenValue)," "),s(3),m(w(15,14,e.totalRow().totalTokens,e.formatTokenValue)),s(3),m(e.totalRow().callCount),s(2),E(" ",G(20,17,e.formatCostValue,e.isMissingPeriod(),e.totalRow().cost)," ")}}function at(o,t){if(o&1&&(r(0,"div",18)(1,"section",16)(2,"div",26),a(3,"Summary"),l(),r(4,"div",27)(5,"div",28)(6,"div",29),a(7,"agentName"),l(),r(8,"div",29),a(9,"providerName"),l(),r(10,"div",29),a(11,"modelId"),l(),r(12,"div",30),a(13,"promptTokens"),l(),r(14,"div",30),a(15,"completionTokens"),l(),r(16,"div",30),a(17,"totalTokens"),l(),r(18,"div",30),a(19,"callCount"),l(),r(20,"div",30),a(21,"cost"),l()(),r(22,"div",31),I(23,nt,21,21,"div",32,re().trackRow,!0),v(25,ot,21,21,"div",33),l()()(),r(26,"section",16)(27,"div",26),a(28,"Daily series"),l(),le(29,"app-daily-series-chart",34),l()()),o&2){let e=g();s(23),N(e.rows()),s(2),y(e.totalRow()?25:-1),s(4),S("points",e.chartPoints())}}var we="\u2014",De=class o{location=M(ce);state=M(z);view=h("byModel");rowsByAgent=p(()=>this.state.aggregation()?.models??[]);totalRow=p(()=>this.state.aggregation()?.total??null);rowsByModel=p(()=>this.state.aggregationByModelId()??[]);chartPointsByAgent=p(()=>{let t=this.state.series()??[];return this.aggregateDailyPoints(t)});chartPointsByModel=p(()=>{let t=this.state.seriesByModelId()??[];return this.aggregateDailyPoints(t)});chartPoints=p(()=>this.view()==="byAgent"?this.chartPointsByAgent():this.chartPointsByModel());rows=p(()=>this.view()==="byAgent"?this.rowsByAgent():this.rowsByModel());isEmpty=p(()=>{let t=this.state.aggregation();return t?(t.models?.length??0)===0&&(t.total?.callCount??0)===0:!1});ngOnInit(){this.state.init()}onFromChange(t){this.state.setDraftFrom(t||null)}onToChange(t){this.state.setDraftTo(t||null)}clearFrom(){this.state.clearDraftFrom()}clearTo(){this.state.clearDraftTo()}apply(){this.state.apply()}aggregateDailyPoints(t){let e=new Map;for(let n of t){let i=e.get(n.date);if(!i)e.set(n.date,{date:n.date,promptTokens:n.promptTokens,completionTokens:n.completionTokens,cost:n.cost??0,callCount:n.callCount??0});else{let d=(u,f)=>u===null&&f===null?null:(u??0)+(f??0);i.promptTokens=d(i.promptTokens,n.promptTokens),i.completionTokens=d(i.completionTokens,n.completionTokens),i.cost=(i.cost??0)+(n.cost??0),i.callCount=(i.callCount??0)+(n.callCount??0)}}return[...e.values()].sort((n,i)=>n.date<i.date?-1:1)}trackRow(t,e){return`${e.agentName}|${e.providerName}|${e.modelId}`}isMissingPeriod=p(()=>{if(this.state.loading())return!1;let t=this.state.aggregation()?.total;return t?t.totalTokens===null&&(t.cost===null||t.cost===void 0):!1});isPartialPeriod=p(()=>!this.isMissingPeriod()&&this.state.tokenDataPartial());navigateBack(){this.location.back()}formatTokenValue(t){return t===null?we:new D("en-US").transform(t,"1.0-2")??"0"}formatCostValue(t,e){return t?we:"$"+(new D("en-US").transform(e??0,"1.2-2")??"0.00")}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=L({type:o,selectors:[["app-token-usage"]],decls:41,vars:8,consts:[[1,"page"],[1,"page__header"],[1,"page__title-block"],["mat-icon-button","","title","Back",3,"click"],[1,"page__title"],[1,"page__subtitle"],[1,"filters"],[1,"filters__field"],[1,"filters__label"],[1,"filters__control"],["type","date",1,"filters__input",3,"ngModelChange","ngModel"],["type","button",1,"filters__clear",3,"click","disabled"],[1,"filters__select",3,"ngModelChange","ngModel"],["value","byModel"],["value","byAgent"],["type","button",1,"filters__apply",3,"click","disabled"],[1,"card"],[1,"card","card--error"],[1,"grid"],[1,"kpis"],[1,"kpi"],[1,"kpi__label"],[1,"kpi__value"],["title","Some calls in this period were recorded before token tracking was enabled. Token counts reflect only the portion where data was collected.",1,"hint"],["title","No token usage data was collected for this period.",1,"hint"],[1,"muted"],[1,"card__title"],[1,"table"],[1,"table__head"],[1,"table__cell"],[1,"table__cell","table__cell--num"],[1,"table__body"],[1,"table__row"],[1,"table__row","table__row--total"],[3,"points"]],template:function(e,n){e&1&&(r(0,"section",0)(1,"header",1)(2,"div",2)(3,"button",3),P("click",function(){return n.navigateBack()}),r(4,"mat-icon"),a(5,"chevron_left"),l()(),r(6,"div")(7,"h1",4),a(8,"Token Usage"),l(),r(9,"p",5),a(10,"Track prompt and completion token usage by agent and model."),l()()(),r(11,"div",6)(12,"label",7)(13,"span",8),a(14,"From"),l(),r(15,"div",9)(16,"input",10),P("ngModelChange",function(d){return n.onFromChange(d)}),l(),r(17,"button",11),P("click",function(){return n.clearFrom()}),a(18," Clear "),l()()(),r(19,"label",7)(20,"span",8),a(21,"To"),l(),r(22,"div",9)(23,"input",10),P("ngModelChange",function(d){return n.onToChange(d)}),l(),r(24,"button",11),P("click",function(){return n.clearTo()}),a(25," Clear "),l()()(),r(26,"label",7)(27,"span",8),a(28,"View"),l(),r(29,"select",12),P("ngModelChange",function(d){return n.view.set(d)}),r(30,"option",13),a(31,"By model"),l(),r(32,"option",14),a(33,"By agent"),l()()(),r(34,"button",15),P("click",function(){return n.apply()}),a(35,"Apply"),l()()(),v(36,Qe,20,12),v(37,Ze,3,0,"div",16)(38,et,5,1,"div",17)(39,tt,5,0,"div",16)(40,at,30,2,"div",18),l()),e&2&&(s(16),S("ngModel",n.state.draftFilters().from),s(),S("disabled",!n.state.draftFilters().from),s(6),S("ngModel",n.state.draftFilters().to),s(),S("disabled",!n.state.draftFilters().to),s(5),S("ngModel",n.view()),s(5),S("disabled",n.state.loading()),s(2),y(n.totalRow()?36:-1),s(),y(n.state.loading()?37:n.state.error()?38:n.isEmpty()?39:40))},dependencies:[ke,Ce,Te,be,xe,ve,ye,Y,ue,ge,fe,he,J,q],styles:[".page[_ngcontent-%COMP%]{padding:1.5rem;color:var(--color-text, #1d1d1f)}.page__header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:1.5rem;margin-bottom:1rem}.page__title-block[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.75rem}.page__title[_ngcontent-%COMP%]{margin:0;font-size:1.25rem;font-weight:650}.page__subtitle[_ngcontent-%COMP%]{margin:.25rem 0 0;color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.95rem}.filters[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:flex-end;gap:.75rem}.filters__field[_ngcontent-%COMP%]{display:grid;gap:.25rem}.filters__label[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7))}.filters__control[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}.filters__input[_ngcontent-%COMP%], .filters__select[_ngcontent-%COMP%]{height:34px;padding:0 .5rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .12));background:var(--color-bg-secondary, rgba(255, 255, 255, .72));color:var(--color-text, #1d1d1f)}.filters__apply[_ngcontent-%COMP%], .filters__clear[_ngcontent-%COMP%]{height:34px;padding:0 .75rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .12));background:var(--color-bg-secondary, rgba(255, 255, 255, .72));color:var(--color-text, #1d1d1f);cursor:pointer}.kpis[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin:.75rem 0 1rem}@media(max-width:900px){.kpis[_ngcontent-%COMP%]{grid-template-columns:1fr}}.kpi[_ngcontent-%COMP%]{border-radius:14px;padding:.75rem 1rem;background:var(--glass-bg, rgba(255, 255, 255, .72));border:1px solid var(--glass-border, rgba(255, 255, 255, .18));box-shadow:var(--glass-shadow, 0 8px 24px rgba(0, 0, 0, .08))}.kpi__label[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7))}.kpi__value[_ngcontent-%COMP%]{margin-top:.25rem;font-size:1.2rem;font-weight:650;font-variant-numeric:tabular-nums}.filters__apply[_ngcontent-%COMP%]{border-color:var(--color-primary, #007aff);background:var(--color-primary, #007aff);color:var(--color-text-inverse, #ffffff)}.filters__apply[_ngcontent-%COMP%]:disabled, .filters__clear[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1.5fr 1fr;gap:1rem;align-items:start}@media(max-width:1100px){.grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.card[_ngcontent-%COMP%]{border-radius:14px;padding:1rem;background:var(--glass-bg, rgba(255, 255, 255, .72));border:1px solid var(--glass-border, rgba(255, 255, 255, .18));box-shadow:var(--glass-shadow, 0 8px 24px rgba(0, 0, 0, .08))}.card--error[_ngcontent-%COMP%]{border-color:var(--color-error, #ff3b30)}.card__title[_ngcontent-%COMP%]{font-weight:650;margin-bottom:.75rem}.muted[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7))}.table[_ngcontent-%COMP%]{overflow-x:auto}.table__head[_ngcontent-%COMP%], .table__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr 2fr 1fr 1fr 1fr .7fr 1fr;gap:.5rem;align-items:center}.table__head[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7));padding:.25rem 0;border-bottom:1px solid var(--color-border-light, rgba(0, 0, 0, .08))}.table__row[_ngcontent-%COMP%]{padding:.5rem 0;border-bottom:1px solid var(--color-border-light, rgba(0, 0, 0, .08))}.table__row--total[_ngcontent-%COMP%]{font-weight:650;background:var(--color-bg-hover, rgba(0, 0, 0, .03));border-radius:10px;padding:.6rem .5rem;border-bottom:none;margin-top:.5rem}.table__cell[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table__cell--num[_ngcontent-%COMP%]{text-align:right;font-variant-numeric:tabular-nums}.hint[_ngcontent-%COMP%]{margin:.25rem 0 1rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.85rem}"]})};export{De as TokenUsageComponent};
|
|
1
|
+
import{a as _e}from"./chunk-JBAZQRNW.js";import{L as ge,R as ue,S as he,T as fe}from"./chunk-HVJQKHJC.js";import{C as ke,c as be,g as ve,m as ye,v as xe,w as Ce,x as Te}from"./chunk-ZK67B6NL.js";import{Ab as P,Bb as de,Cb as g,Ec as D,Ha as s,Mc as Z,Nb as me,Nc as pe,Qb as a,Rb as m,Sb as E,Ta as L,Wa as Q,X as H,a as R,aa as M,ac as x,b as A,cc as w,dc as G,fa as $,ga as V,gb as b,ha as O,hb as re,hc as p,ia as ae,ib as v,jb as y,la as ie,mb as I,nb as N,ob as S,pb as r,qb as l,rb as le,sa as h,sb as c,tb as _,ub as T,y as oe,yb as se,yc as ce}from"./chunk-RUEXWAWX.js";var Fe=(o,t)=>t.date,Re=(o,t)=>t.x,Ae=(o,t)=>t.label;function He(o,t){o&1&&(c(0,"div",0),a(1,"No daily data points for this period."),_())}function $e(o,t){if(o&1&&(O(),T(0,"rect",18)),o&2){let e=g().$implicit,n=g(2);b("x",e.w+6)("y",n.yBase-e.tokensStubH)("width",e.w)("height",e.tokensStubH)}}function Ve(o,t){if(o&1&&(O(),T(0,"rect",19)(1,"rect",20)),o&2){let e=g().$implicit,n=g(2);b("x",e.w+6)("y",n.yBase-(e.promptH??0))("width",e.w)("height",e.promptH??0),s(),b("x",e.w+6)("y",n.yBase-((e.promptH??0)+(e.completionH??0)))("width",e.w)("height",e.completionH??0)}}function Le(o,t){if(o&1){let e=se();O(),c(0,"g",15),de("mouseenter",function(i){let d=$(e).$implicit,u=g(2);return V(u.showTooltip(i,d.point))})("mousemove",function(i){let d=$(e).$implicit,u=g(2);return V(u.showTooltip(i,d.point))})("mouseleave",function(){$(e);let i=g(2);return V(i.hideTooltip())}),T(1,"rect",16)(2,"rect",17),v(3,$e,1,4,":svg:rect",18)(4,Ve,2,8),_()}if(o&2){let e=t.$implicit,n=g(2);b("transform","translate("+e.xGroup+",0)"),s(),b("y",n.yTop)("width",e.groupW)("height",n.yBase-n.yTop),s(),b("y",n.yBase-e.costH)("width",e.w)("height",e.costH),s(),y(e.tokensStubH!==null?3:4)}}function Ge(o,t){if(o&1&&(O(),c(0,"text",5),a(1),_()),o&2){let e=t.$implicit,n=g(2);b("x",e.x)("y",n.yAxis),s(),m(e.label)}}function Ye(o,t){if(o&1&&(c(0,"div",24),a(1),_(),c(2,"div",25),a(3),_()),o&2){let e=t.$implicit;s(),m(e.label),s(2),m(e.value)}}function We(o,t){if(o&1&&(c(0,"div",21)(1,"div",22),a(2),_(),c(3,"div",23),I(4,Ye,4,2,null,null,Ae),_()()),o&2){let e=g(2);me("left",e.tooltip().x+12,"px")("top",e.tooltip().y+12,"px"),s(2),m(e.tooltip().data.date),s(2),N(e.tooltipLines())}}function je(o,t){if(o&1&&(c(0,"div",8)(1,"span",10),a(2),_()()),o&2){let e=g(2);s(2),m(e.tokenCoverageLabel())}}function ze(o,t){if(o&1&&(c(0,"div",1),O(),c(1,"svg",2),T(2,"line",3)(3,"line",3),I(4,Le,5,8,":svg:g",4,Fe),I(6,Ge,2,3,":svg:text",5,Re),_(),v(8,We,6,5,"div",6),ae(),c(9,"div",7)(10,"div",8),T(11,"span",9),c(12,"span",10),a(13,"Cost (per day)"),_(),c(14,"span",11),a(15),_()(),c(16,"div",8),T(17,"span",12),c(18,"span",10),a(19,"Prompt tokens"),_()(),c(20,"div",8),T(21,"span",13),c(22,"span",10),a(23,"Completion tokens"),_()(),c(24,"div",8),T(25,"span",14),c(26,"span",10),a(27,"Tokens missing"),_()(),c(28,"div",8)(29,"span",10),a(30,"Tokens scale"),_(),c(31,"span",11),a(32),_()(),v(33,je,3,1,"div",8),_()()),o&2){let e=g();s(),b("viewBox",e.viewBox),s(),b("y1",e.yTop)("x2",720)("y2",e.yTop),s(),b("y1",e.yBase)("x2",720)("y2",e.yBase),s(),N(e.bars()),s(2),N(e.axisLabels()),s(2),y(e.tooltip().visible&&e.tooltip().data?8:-1),s(7),E("max ",e.maxCostLabel()),s(17),E("max ",e.maxTokensLabel()),s(),y(e.tokenCoverageLabel()?33:-1)}}var Y=class o{points=[];width=720;height=240;paddingX=12;paddingY=16;bottomAxisH=48;viewBox=`0 0 ${this.width} ${this.height}`;innerW=this.width-this.paddingX*2;innerH=this.height-this.paddingY*2-this.bottomAxisH;barGap=6;groupGap=14;safePoints=p(()=>(this.points??[]).filter(t=>!!t.date));maxCost=p(()=>Math.max(0,...this.safePoints().map(t=>t.cost??0)));maxTokens=p(()=>{let t=this.safePoints().map(e=>{let n=e.promptTokens??null,i=e.completionTokens??null;return n===null&&i===null?null:(n??0)+(i??0)}).filter(e=>e!==null);return Math.max(0,...t)});tokenCoverageLabel=p(()=>{let t=this.safePoints();return t.length===0?"":`Tokens available for ${t.filter(n=>n.promptTokens!==null||n.completionTokens!==null).length}/${t.length} days`});maxCostLabel=p(()=>"$"+(new D("en-US").transform(this.maxCost(),"1.2-2")??"0.00"));maxTokensLabel=p(()=>new D("en-US").transform(this.maxTokens(),"1.0-2")??"0");tooltip=h({visible:!1,x:0,y:0,data:null});toTooltipData(t){let e=t.promptTokens,n=t.completionTokens,i=e===null&&n===null?null:(e??0)+(n??0);return{date:t.date,cost:t.cost??0,promptTokens:e,completionTokens:n,totalTokens:i,callCount:t.callCount??0}}showTooltip(t,e){let i=t.currentTarget?.closest(".chart")?.getBoundingClientRect(),d=i?t.clientX-i.left:t.clientX,u=i?t.clientY-i.top:t.clientY,f=320,k=170,U=12,C=i?Math.max(0,i.width-f-U):d,B=i?Math.max(0,i.height-k-U):u,F=i?Math.min(Math.max(0,d),C):d,ee=i?Math.min(Math.max(0,u),B):u;this.tooltip.set({visible:!0,x:F,y:ee,data:this.toTooltipData(e)})}hideTooltip(){this.tooltip.update(t=>A(R({},t),{visible:!1}))}formatTokens(t){return t===null?"\u2014":new D("en-US").transform(t,"1.0-2")??"0"}formatCost(t){return"$"+(new D("en-US").transform(t??0,"1.2-2")??"0.00")}tooltipLines=p(()=>{let t=this.tooltip(),e=t.data;return!t.visible||!e?[]:[{label:"Cost",value:this.formatCost(e.cost)},{label:"Prompt tokens",value:this.formatTokens(e.promptTokens)},{label:"Completion tokens",value:this.formatTokens(e.completionTokens)},{label:"Total tokens",value:this.formatTokens(e.totalTokens)},{label:"Calls",value:`${e.callCount}`}]});bars=p(()=>{let t=this.safePoints(),e=t.length;if(e===0)return[];let n=(this.innerW-(e-1)*this.groupGap)/e,i=Math.max(2,n),d=(i-this.barGap)/2,u=Math.max(1,d),f=this.maxCost()||1,k=this.maxTokens()||1,U=45;return t.map((C,B)=>{let F=this.paddingX+B*(i+this.groupGap),Ee=(C.cost??0)/f*this.innerH,te=C.promptTokens,ne=C.completionTokens,K=te!==null||ne!==null,Oe=te??0,Ie=ne??0,Ne=K?Oe/k*this.innerH:null,Ue=K?Ie/k*this.innerH:null;return{date:C.date,point:C,xGroup:F,groupW:i,xCost:F,w:u,costH:Ee,xTokens:F+u+this.barGap,promptH:Ne,completionH:Ue,tokensStubH:K?null:U}})});axisLabels=p(()=>{let t=this.safePoints(),e=t.length;if(e===0)return[];let i=Math.max(1,Math.ceil(e/8)),d=(this.innerW-(e-1)*this.groupGap)/e,u=Math.max(2,d);return t.map((f,k)=>({p:f,i:k})).filter(({i:f})=>f%i===0||f===e-1).map(({p:f,i:k})=>{let C=this.paddingX+k*(u+this.groupGap)+u/2,B=f.date.slice(5);return{x:C,label:B}})});yTop=this.paddingY;yBase=this.paddingY+this.innerH;yAxis=this.yBase+28;static \u0275fac=function(e){return new(e||o)};static \u0275cmp=L({type:o,selectors:[["app-daily-series-chart"]],inputs:{points:"points"},decls:2,vars:1,consts:[[1,"muted"],[1,"chart"],["preserveAspectRatio","none","role","img","aria-label","Daily token and cost usage",1,"chart__svg"],["x1","0",1,"chart__grid"],[1,"chart__day"],["text-anchor","middle",1,"chart__axis-label"],[1,"chart__tooltip",3,"left","top"],[1,"chart__legend"],[1,"chart__legend-item"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--cost"],[1,"chart__legend-label"],[1,"chart__legend-value"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--prompt"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--completion"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--tokens-missing"],[1,"chart__day",3,"mouseenter","mousemove","mouseleave"],["x","0",1,"chart__hover"],["x","0",1,"chart__bar","chart__bar--cost"],[1,"chart__bar","chart__bar--tokens-missing"],[1,"chart__bar","chart__bar--prompt"],[1,"chart__bar","chart__bar--completion"],[1,"chart__tooltip"],[1,"chart__tooltip-title"],[1,"chart__tooltip-grid"],[1,"chart__tooltip-label"],[1,"chart__tooltip-value"]],template:function(e,n){e&1&&v(0,He,2,0,"div",0)(1,ze,34,11,"div",1),e&2&&y(n.safePoints().length===0?0:1)},styles:[".chart[_ngcontent-%COMP%]{display:grid;gap:.5rem;position:relative}.chart__svg[_ngcontent-%COMP%]{width:100%;height:260px;display:block;border-radius:12px;background:var(--color-bg-secondary, rgba(255, 255, 255, .72));border:1px solid var(--color-border-light, rgba(0, 0, 0, .08))}.chart__grid[_ngcontent-%COMP%]{stroke:var(--color-border-light, rgba(0, 0, 0, .08));stroke-width:1}.chart__day[_ngcontent-%COMP%]{cursor:default}.chart__hover[_ngcontent-%COMP%]{fill:transparent}.chart__day[_ngcontent-%COMP%]:hover .chart__hover[_ngcontent-%COMP%]{fill:var(--color-bg-hover, rgba(0, 0, 0, .03))}.chart__tooltip[_ngcontent-%COMP%]{position:absolute;z-index:2;min-width:220px;max-width:320px;padding:10px 12px;border-radius:12px;background:rgb(var(--color-bg-secondary-rgb, 255 255 255)/1);border:1px solid var(--color-border-light, rgba(0, 0, 0, .08));box-shadow:var(--glass-shadow, 0 8px 24px rgba(0, 0, 0, .12));pointer-events:none}.chart__tooltip-title[_ngcontent-%COMP%]{font-weight:650;margin-bottom:6px}.chart__tooltip-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr auto;column-gap:10px;row-gap:4px}.chart__tooltip-label[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.85rem}.chart__tooltip-value[_ngcontent-%COMP%]{font-variant-numeric:tabular-nums;text-align:right}.chart__bar[_ngcontent-%COMP%]{shape-rendering:geometricPrecision;rx:2;ry:2}.chart__bar--cost[_ngcontent-%COMP%]{fill:var(--color-primary, #007aff);opacity:.85}.chart__bar--prompt[_ngcontent-%COMP%]{fill:var(--color-success, #34c759);opacity:.85}.chart__bar--completion[_ngcontent-%COMP%]{fill:var(--color-warning, #ff9500);opacity:.85}.chart__bar--tokens-missing[_ngcontent-%COMP%]{fill:transparent;stroke:var(--color-text-secondary, rgba(29, 29, 31, .55));stroke-width:1.5;stroke-dasharray:4 3}.chart__axis-label[_ngcontent-%COMP%]{fill:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:12px;font-variant-numeric:tabular-nums}.chart__legend[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.chart__legend-item[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:baseline}.chart__legend-swatch[_ngcontent-%COMP%]{width:10px;height:10px;border-radius:3px;align-self:center}.chart__legend-swatch--cost[_ngcontent-%COMP%]{background:var(--color-primary, #007aff)}.chart__legend-swatch--prompt[_ngcontent-%COMP%]{background:var(--color-success, #34c759)}.chart__legend-swatch--completion[_ngcontent-%COMP%]{background:var(--color-warning, #ff9500)}.chart__legend-swatch--tokens-missing[_ngcontent-%COMP%]{background:transparent;border:1px dashed var(--color-text-secondary, rgba(29, 29, 31, .55))}.chart__legend-label[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.85rem}.chart__legend-value[_ngcontent-%COMP%]{font-variant-numeric:tabular-nums}.muted[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7))}"],changeDetection:0})};var j=class o{http=M(pe);getTokenUsage(t){let e=new Z;return t.from&&(e=e.set("from",t.from)),t.to&&(e=e.set("to",t.to)),this.http.get("/api/token-usage",{params:e})}getTokenUsageSeries(t){let e=new Z;return t.from&&(e=e.set("from",t.from)),t.to&&(e=e.set("to",t.to)),this.http.get("/api/token-usage/series",{params:e})}static \u0275fac=function(e){return new(e||o)};static \u0275prov=H({token:o,factory:o.\u0275fac,providedIn:"root"})};function Me(o){return`${o}`.padStart(2,"0")}function Se(o){return`${o.getUTCFullYear()}-${Me(o.getUTCMonth()+1)}-${Me(o.getUTCDate())}`}function Xe(o=new Date){return new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),1))}function Je(o=new Date){return new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth()+1,1))}var z=class o{api=M(j);destroyRef=M(ie);defaultFrom=Se(Xe());defaultTo=Se(Je());draftFilters=h({from:this.defaultFrom,to:this.defaultTo});appliedFilters=h({from:this.defaultFrom,to:this.defaultTo});loading=h(!1);error=h(null);aggregation=h(null);seriesResponse=h(null);series=h(null);tokenDataPartial=h(!1);aggregationByModelId=h(null);seriesByModelId=h(null);init(){this.reload()}setDraftFrom(t){this.draftFilters.update(e=>A(R({},e),{from:t}))}setDraftTo(t){this.draftFilters.update(e=>A(R({},e),{to:t}))}clearDraftFrom(){this.setDraftFrom(null)}clearDraftTo(){this.setDraftTo(null)}apply(){this.appliedFilters.set(this.draftFilters()),this.reload()}addNullableTokens(t,e){return t===null&&e===null?null:(t??0)+(e??0)}aggregateByModelId(t){let e=new Map;for(let n of t){let i=n.modelId,d=e.get(i);d?(d.promptTokens=this.addNullableTokens(d.promptTokens,n.promptTokens),d.completionTokens=this.addNullableTokens(d.completionTokens,n.completionTokens),d.totalTokens=this.addNullableTokens(d.totalTokens,n.totalTokens),d.callCount+=n.callCount??0,d.cost=(d.cost??0)+(n.cost??0)):e.set(i,{agentName:"All agents",providerName:"all",modelId:n.modelId,promptTokens:n.promptTokens,completionTokens:n.completionTokens,totalTokens:n.totalTokens,callCount:n.callCount??0,cost:n.cost??0})}return[...e.values()].sort((n,i)=>(i.totalTokens??0)-(n.totalTokens??0))}aggregateSeriesByModelId(t){let e=new Map;for(let n of t){let i=`${n.date}|${n.modelId}`,d=e.get(i);d?(d.promptTokens=this.addNullableTokens(d.promptTokens,n.promptTokens),d.completionTokens=this.addNullableTokens(d.completionTokens,n.completionTokens),d.totalTokens=this.addNullableTokens(d.totalTokens,n.totalTokens),d.callCount+=n.callCount??0,d.cost=(d.cost??0)+(n.cost??0)):e.set(i,{date:n.date,agentName:"All agents",providerName:"all",modelId:n.modelId,promptTokens:n.promptTokens,completionTokens:n.completionTokens,totalTokens:n.totalTokens,callCount:n.callCount??0,cost:n.cost??0})}return[...e.values()].sort((n,i)=>n.date<i.date?-1:1)}reload(){let{from:t,to:e}=this.appliedFilters();this.loading.set(!0),this.error.set(null),oe({aggregation:this.api.getTokenUsage({from:t,to:e}),series:this.api.getTokenUsageSeries({from:t,to:e})}).pipe(_e(this.destroyRef)).subscribe({next:({aggregation:n,series:i})=>{this.aggregation.set(n),this.seriesResponse.set(i);let d=i.points??[];this.series.set(d),this.tokenDataPartial.set(n.tokenDataPartial||i.tokenDataPartial);let u=this.aggregateByModelId(n.models??[]);this.aggregationByModelId.set(u),this.seriesByModelId.set(this.aggregateSeriesByModelId(d)),this.loading.set(!1)},error:n=>{this.loading.set(!1),this.aggregation.set(null),this.seriesResponse.set(null),this.series.set(null),this.tokenDataPartial.set(!1),this.aggregationByModelId.set(null),this.seriesByModelId.set(null),this.error.set(n instanceof Error?n.message:"Failed to load token usage")}})}static \u0275fac=function(e){return new(e||o)};static \u0275prov=H({token:o,factory:o.\u0275fac,providedIn:"root"})};var X=function(){throw new Error("DON'T USE this INSIDE A FUNCTION CALLED BY | call OR | apply IT MUST BE A PURE FUNCTION!")},Pe=typeof Proxy!="function"?Object.seal({}):new Proxy({},{get:X,set:X,deleteProperty:X,has:X}),J=class o{transform(t,e){if(typeof e!="function")throw new TypeError("You must pass a PURE function to | call");return e?.call(Pe,t)}static \u0275fac=function(e){return new(e||o)};static \u0275pipe=Q({name:"call",type:o,pure:!0})},q=class o{transform(t,...e){if(typeof t!="function")throw new TypeError("You must use | apply on a PURE function");return t.apply(Pe,e)}static \u0275fac=function(e){return new(e||o)};static \u0275pipe=Q({name:"apply",type:o,pure:!0})};function qe(o,t){o&1&&(r(0,"div",23),a(1," Partial data \u2014 token counts may not cover the full period "),l())}function Ke(o,t){o&1&&(r(0,"div",24),a(1," No token data collected for this period "),l())}function Qe(o,t){if(o&1&&(r(0,"div",19)(1,"div",20)(2,"div",21),a(3,"Total tokens"),l(),r(4,"div",22),a(5),x(6,"call"),l()(),r(7,"div",20)(8,"div",21),a(9,"Total calls"),l(),r(10,"div",22),a(11),l()(),r(12,"div",20)(13,"div",21),a(14,"Total cost"),l(),r(15,"div",22),a(16),x(17,"apply"),l()()(),v(18,qe,2,0,"div",23),v(19,Ke,2,0,"div",24)),o&2){let e=g();s(5),m(w(6,5,e.totalRow().totalTokens,e.formatTokenValue)),s(6),m(e.totalRow().callCount),s(5),m(G(17,8,e.formatCostValue,e.isMissingPeriod(),e.totalRow().cost)),s(2),y(e.isPartialPeriod()?18:-1),s(),y(e.isMissingPeriod()?19:-1)}}function Ze(o,t){o&1&&(r(0,"div",16)(1,"div",25),a(2,"Loading token usage\u2026"),l()())}function et(o,t){if(o&1&&(r(0,"div",17)(1,"div",26),a(2,"Failed to load"),l(),r(3,"div",25),a(4),l()()),o&2){let e=g();s(4),m(e.state.error())}}function tt(o,t){o&1&&(r(0,"div",16)(1,"div",26),a(2,"No data"),l(),r(3,"div",25),a(4,"No token usage recorded yet for this period."),l()())}function nt(o,t){if(o&1&&(r(0,"div",32)(1,"div",29),a(2),l(),r(3,"div",29),a(4),l(),r(5,"div",29),a(6),l(),r(7,"div",30),a(8),x(9,"call"),l(),r(10,"div",30),a(11),x(12,"call"),l(),r(13,"div",30),a(14),x(15,"call"),l(),r(16,"div",30),a(17),l(),r(18,"div",30),a(19),x(20,"apply"),l()()),o&2){let e=t.$implicit,n=g(2);s(2),m(e.agentName),s(2),m(e.providerName),s(2),m(e.modelId),s(2),m(w(9,8,e.promptTokens,n.formatTokenValue)),s(3),m(w(12,11,e.completionTokens,n.formatTokenValue)),s(3),m(w(15,14,e.totalTokens,n.formatTokenValue)),s(3),m(e.callCount),s(2),E(" ",G(20,17,n.formatCostValue,n.isMissingPeriod(),e.cost)," ")}}function ot(o,t){if(o&1&&(r(0,"div",33)(1,"div",29),a(2),l(),r(3,"div",29),a(4),l(),r(5,"div",29),a(6),l(),r(7,"div",30),a(8),x(9,"call"),l(),r(10,"div",30),a(11),x(12,"call"),l(),r(13,"div",30),a(14),x(15,"call"),l(),r(16,"div",30),a(17),l(),r(18,"div",30),a(19),x(20,"apply"),l()()),o&2){let e=g(2);s(2),m(e.totalRow().agentName),s(2),m(e.totalRow().providerName),s(2),m(e.totalRow().modelId),s(2),m(w(9,8,e.totalRow().promptTokens,e.formatTokenValue)),s(3),E(" ",w(12,11,e.totalRow().completionTokens,e.formatTokenValue)," "),s(3),m(w(15,14,e.totalRow().totalTokens,e.formatTokenValue)),s(3),m(e.totalRow().callCount),s(2),E(" ",G(20,17,e.formatCostValue,e.isMissingPeriod(),e.totalRow().cost)," ")}}function at(o,t){if(o&1&&(r(0,"div",18)(1,"section",16)(2,"div",26),a(3,"Summary"),l(),r(4,"div",27)(5,"div",28)(6,"div",29),a(7,"agentName"),l(),r(8,"div",29),a(9,"providerName"),l(),r(10,"div",29),a(11,"modelId"),l(),r(12,"div",30),a(13,"promptTokens"),l(),r(14,"div",30),a(15,"completionTokens"),l(),r(16,"div",30),a(17,"totalTokens"),l(),r(18,"div",30),a(19,"callCount"),l(),r(20,"div",30),a(21,"cost"),l()(),r(22,"div",31),I(23,nt,21,21,"div",32,re().trackRow,!0),v(25,ot,21,21,"div",33),l()()(),r(26,"section",16)(27,"div",26),a(28,"Daily series"),l(),le(29,"app-daily-series-chart",34),l()()),o&2){let e=g();s(23),N(e.rows()),s(2),y(e.totalRow()?25:-1),s(4),S("points",e.chartPoints())}}var we="\u2014",De=class o{location=M(ce);state=M(z);view=h("byModel");rowsByAgent=p(()=>this.state.aggregation()?.models??[]);totalRow=p(()=>this.state.aggregation()?.total??null);rowsByModel=p(()=>this.state.aggregationByModelId()??[]);chartPointsByAgent=p(()=>{let t=this.state.series()??[];return this.aggregateDailyPoints(t)});chartPointsByModel=p(()=>{let t=this.state.seriesByModelId()??[];return this.aggregateDailyPoints(t)});chartPoints=p(()=>this.view()==="byAgent"?this.chartPointsByAgent():this.chartPointsByModel());rows=p(()=>this.view()==="byAgent"?this.rowsByAgent():this.rowsByModel());isEmpty=p(()=>{let t=this.state.aggregation();return t?(t.models?.length??0)===0&&(t.total?.callCount??0)===0:!1});ngOnInit(){this.state.init()}onFromChange(t){this.state.setDraftFrom(t||null)}onToChange(t){this.state.setDraftTo(t||null)}clearFrom(){this.state.clearDraftFrom()}clearTo(){this.state.clearDraftTo()}apply(){this.state.apply()}aggregateDailyPoints(t){let e=new Map;for(let n of t){let i=e.get(n.date);if(!i)e.set(n.date,{date:n.date,promptTokens:n.promptTokens,completionTokens:n.completionTokens,cost:n.cost??0,callCount:n.callCount??0});else{let d=(u,f)=>u===null&&f===null?null:(u??0)+(f??0);i.promptTokens=d(i.promptTokens,n.promptTokens),i.completionTokens=d(i.completionTokens,n.completionTokens),i.cost=(i.cost??0)+(n.cost??0),i.callCount=(i.callCount??0)+(n.callCount??0)}}return[...e.values()].sort((n,i)=>n.date<i.date?-1:1)}trackRow(t,e){return`${e.agentName}|${e.providerName}|${e.modelId}`}isMissingPeriod=p(()=>{if(this.state.loading())return!1;let t=this.state.aggregation()?.total;return t?t.totalTokens===null&&(t.cost===null||t.cost===void 0):!1});isPartialPeriod=p(()=>!this.isMissingPeriod()&&this.state.tokenDataPartial());navigateBack(){this.location.back()}formatTokenValue(t){return t===null?we:new D("en-US").transform(t,"1.0-2")??"0"}formatCostValue(t,e){return t?we:"$"+(new D("en-US").transform(e??0,"1.2-2")??"0.00")}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=L({type:o,selectors:[["app-token-usage"]],decls:41,vars:8,consts:[[1,"page"],[1,"page__header"],[1,"page__title-block"],["mat-icon-button","","title","Back",3,"click"],[1,"page__title"],[1,"page__subtitle"],[1,"filters"],[1,"filters__field"],[1,"filters__label"],[1,"filters__control"],["type","date",1,"filters__input",3,"ngModelChange","ngModel"],["type","button",1,"filters__clear",3,"click","disabled"],[1,"filters__select",3,"ngModelChange","ngModel"],["value","byModel"],["value","byAgent"],["type","button",1,"filters__apply",3,"click","disabled"],[1,"card"],[1,"card","card--error"],[1,"grid"],[1,"kpis"],[1,"kpi"],[1,"kpi__label"],[1,"kpi__value"],["title","Some calls in this period were recorded before token tracking was enabled. Token counts reflect only the portion where data was collected.",1,"hint"],["title","No token usage data was collected for this period.",1,"hint"],[1,"muted"],[1,"card__title"],[1,"table"],[1,"table__head"],[1,"table__cell"],[1,"table__cell","table__cell--num"],[1,"table__body"],[1,"table__row"],[1,"table__row","table__row--total"],[3,"points"]],template:function(e,n){e&1&&(r(0,"section",0)(1,"header",1)(2,"div",2)(3,"button",3),P("click",function(){return n.navigateBack()}),r(4,"mat-icon"),a(5,"chevron_left"),l()(),r(6,"div")(7,"h1",4),a(8,"Token Usage"),l(),r(9,"p",5),a(10,"Track prompt and completion token usage by agent and model."),l()()(),r(11,"div",6)(12,"label",7)(13,"span",8),a(14,"From"),l(),r(15,"div",9)(16,"input",10),P("ngModelChange",function(d){return n.onFromChange(d)}),l(),r(17,"button",11),P("click",function(){return n.clearFrom()}),a(18," Clear "),l()()(),r(19,"label",7)(20,"span",8),a(21,"To"),l(),r(22,"div",9)(23,"input",10),P("ngModelChange",function(d){return n.onToChange(d)}),l(),r(24,"button",11),P("click",function(){return n.clearTo()}),a(25," Clear "),l()()(),r(26,"label",7)(27,"span",8),a(28,"View"),l(),r(29,"select",12),P("ngModelChange",function(d){return n.view.set(d)}),r(30,"option",13),a(31,"By model"),l(),r(32,"option",14),a(33,"By agent"),l()()(),r(34,"button",15),P("click",function(){return n.apply()}),a(35,"Apply"),l()()(),v(36,Qe,20,12),v(37,Ze,3,0,"div",16)(38,et,5,1,"div",17)(39,tt,5,0,"div",16)(40,at,30,2,"div",18),l()),e&2&&(s(16),S("ngModel",n.state.draftFilters().from),s(),S("disabled",!n.state.draftFilters().from),s(6),S("ngModel",n.state.draftFilters().to),s(),S("disabled",!n.state.draftFilters().to),s(5),S("ngModel",n.view()),s(5),S("disabled",n.state.loading()),s(2),y(n.totalRow()?36:-1),s(),y(n.state.loading()?37:n.state.error()?38:n.isEmpty()?39:40))},dependencies:[ke,Ce,Te,be,xe,ve,ye,Y,ue,ge,fe,he,J,q],styles:[".page[_ngcontent-%COMP%]{padding:1.5rem;color:var(--color-text, #1d1d1f)}.page__header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:1.5rem;margin-bottom:1rem}.page__title-block[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.75rem}.page__title[_ngcontent-%COMP%]{margin:0;font-size:1.25rem;font-weight:650}.page__subtitle[_ngcontent-%COMP%]{margin:.25rem 0 0;color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.95rem}.filters[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:flex-end;gap:.75rem}.filters__field[_ngcontent-%COMP%]{display:grid;gap:.25rem}.filters__label[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7))}.filters__control[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}.filters__input[_ngcontent-%COMP%], .filters__select[_ngcontent-%COMP%]{height:34px;padding:0 .5rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .12));background:var(--color-bg-secondary, rgba(255, 255, 255, .72));color:var(--color-text, #1d1d1f)}.filters__apply[_ngcontent-%COMP%], .filters__clear[_ngcontent-%COMP%]{height:34px;padding:0 .75rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .12));background:var(--color-bg-secondary, rgba(255, 255, 255, .72));color:var(--color-text, #1d1d1f);cursor:pointer}.kpis[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin:.75rem 0 1rem}@media(max-width:900px){.kpis[_ngcontent-%COMP%]{grid-template-columns:1fr}}.kpi[_ngcontent-%COMP%]{border-radius:14px;padding:.75rem 1rem;background:var(--glass-bg, rgba(255, 255, 255, .72));border:1px solid var(--glass-border, rgba(255, 255, 255, .18));box-shadow:var(--glass-shadow, 0 8px 24px rgba(0, 0, 0, .08))}.kpi__label[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7))}.kpi__value[_ngcontent-%COMP%]{margin-top:.25rem;font-size:1.2rem;font-weight:650;font-variant-numeric:tabular-nums}.filters__apply[_ngcontent-%COMP%]{border-color:var(--color-primary, #007aff);background:var(--color-primary, #007aff);color:var(--color-text-inverse, #ffffff)}.filters__apply[_ngcontent-%COMP%]:disabled, .filters__clear[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1.5fr 1fr;gap:1rem;align-items:start}@media(max-width:1100px){.grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.card[_ngcontent-%COMP%]{border-radius:14px;padding:1rem;background:var(--glass-bg, rgba(255, 255, 255, .72));border:1px solid var(--glass-border, rgba(255, 255, 255, .18));box-shadow:var(--glass-shadow, 0 8px 24px rgba(0, 0, 0, .08))}.card--error[_ngcontent-%COMP%]{border-color:var(--color-error, #ff3b30)}.card__title[_ngcontent-%COMP%]{font-weight:650;margin-bottom:.75rem}.muted[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7))}.table[_ngcontent-%COMP%]{overflow-x:auto}.table__head[_ngcontent-%COMP%], .table__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr 2fr 1fr 1fr 1fr .7fr 1fr;gap:.5rem;align-items:center}.table__head[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7));padding:.25rem 0;border-bottom:1px solid var(--color-border-light, rgba(0, 0, 0, .08))}.table__row[_ngcontent-%COMP%]{padding:.5rem 0;border-bottom:1px solid var(--color-border-light, rgba(0, 0, 0, .08))}.table__row--total[_ngcontent-%COMP%]{font-weight:650;background:var(--color-bg-hover, rgba(0, 0, 0, .03));border-radius:10px;padding:.6rem .5rem;border-bottom:none;margin-top:.5rem}.table__cell[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table__cell--num[_ngcontent-%COMP%]{text-align:right;font-variant-numeric:tabular-nums}.hint[_ngcontent-%COMP%]{margin:.25rem 0 1rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.85rem}"]})};export{De as TokenUsageComponent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"./chunk-DWEXNFR7.js";import"./chunk-VU7RWHPC.js";import"./chunk-L66AMHS4.js";import"./chunk-JBAZQRNW.js";import"./chunk-HVJQKHJC.js";import"./chunk-ZK67B6NL.js";import"./chunk-Y73HWDY3.js";import"./chunk-RUEXWAWX.js";export{a as CaseHomeComponent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as w}from"./chunk-UGL3W65S.js";import{h as M}from"./chunk-VU7RWHPC.js";import{a as S}from"./chunk-JBAZQRNW.js";import{d as O}from"./chunk-Y73HWDY3.js";import{Ab as u,Cb as k,Ha as a,Ob as x,Qb as l,Rb as P,Ta as d,aa as i,ib as p,jb as m,la as f,ob as v,pb as r,qb as s,rb as b,sa as h,sb as y,tb as C,ub as g}from"./chunk-RUEXWAWX.js";function H(e,t){e&1&&g(0,"span",1)}function D(e,t){e&1&&g(0,"span",2)}function B(e,t){e&1&&g(0,"span",3)}var _=class e{pluginService=i(M);online=h(null);ngOnInit(){this.pluginService.getAllPlugins().subscribe({next:()=>this.online.set(!0),error:()=>this.online.set(!1)})}static \u0275fac=function(n){return new(n||e)};static \u0275cmp=d({type:e,selectors:[["agentos-backend-status"]],decls:4,vars:1,consts:[[1,"backend-status"],["title","AgentOS online",1,"dot","dot--online"],["title","AgentOS offline",1,"dot","dot--offline"],["title","Checking\u2026",1,"dot","dot--checking"]],template:function(n,o){if(n&1&&(y(0,"div",0),p(1,H,1,0,"span",1)(2,D,1,0,"span",2)(3,B,1,0,"span",3),C()),n&2){let c;a(),m((c=o.online())===!0?1:c===!1?2:3)}},styles:[".backend-status[_ngcontent-%COMP%]{display:flex;align-items:center}.dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;flex-shrink:0}.dot--online[_ngcontent-%COMP%]{background:var(--color-success, #34c759)}.dot--offline[_ngcontent-%COMP%]{background:var(--color-error, #ff3b30)}.dot--checking[_ngcontent-%COMP%]{background:var(--color-text-secondary, #6e6e73);opacity:.5;animation:_ngcontent-%COMP%_pulse 1.2s ease-in-out infinite}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:.5}50%{opacity:1}}"]})};function U(e,t){if(e&1&&(r(0,"span",8),l(1),s()),e&2){let n=k();a(),P(n.userInitials)}}function A(e,t){e&1&&(r(0,"span",9),l(1,"\u25EF"),s())}var E=class e{router=i(O);userState=i(w);destroyRef=i(f);currentUser=this.userState.currentUser;navigateHome(){this.router.navigate(["/agentos"])}navigateToAdmin(){this.router.navigate(["/agentos/admin/users"])}ngOnInit(){this.currentUser()||this.userState.loadMe().pipe(S(this.destroyRef)).subscribe()}get userInitials(){let t=this.currentUser();if(!t)return"";let n=t.firstname?.[0]??"",o=t.lastname?.[0]??"";return(n+o).toUpperCase()||t.email?.[0]?.toUpperCase()||"?"}get isOnProfilePage(){return this.router.url.startsWith("/agentos/me")}toggleProfile(){this.isOnProfilePage?window.history.length>1?window.history.back():this.router.navigate(["/agentos"]):this.router.navigate(["/agentos/me"])}static \u0275fac=function(n){return new(n||e)};static \u0275cmp=d({type:e,selectors:[["agentos-header"]],decls:13,vars:4,consts:[[1,"header"],["type","button","title","Home",1,"header__brand",3,"click"],["src","CODAY-Logo.png","alt","Coday",1,"header__logo-img"],[1,"header__logo-text"],[1,"header__nav"],["type","button","title","Admin",1,"header__admin-btn",3,"click"],[1,"header__admin-icon"],["type","button",1,"header__user-btn",3,"click","title"],[1,"header__user-initials"],[1,"header__user-icon"]],template:function(n,o){n&1&&(r(0,"header",0)(1,"button",1),u("click",function(){return o.navigateHome()}),b(2,"img",2),r(3,"span",3),l(4,"Coday"),s()(),r(5,"nav",4),b(6,"agentos-backend-status"),r(7,"button",5),u("click",function(){return o.navigateToAdmin()}),r(8,"span",6),l(9,"\u2699\uFE0F"),s()(),r(10,"button",7),u("click",function(){return o.toggleProfile()}),p(11,U,2,1,"span",8)(12,A,2,0,"span",9),s()()()),n&2&&(a(10),x("header__user-btn--active",o.isOnProfilePage),v("title",o.isOnProfilePage?"Back":"My profile"),a(),m(o.userInitials?11:12))},dependencies:[_],styles:[".header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:0 1.5rem;height:56px;background:var(--glass-bg, rgba(255, 255, 255, .72));border-bottom:1px solid var(--glass-border, rgba(255, 255, 255, .18));backdrop-filter:var(--glass-backdrop-blur, blur(20px));-webkit-backdrop-filter:var(--glass-backdrop-blur, blur(20px));position:sticky;top:0;z-index:100}.header__brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;background:none;border:none;padding:0;cursor:pointer;border-radius:6px;transition:opacity .15s ease}.header__brand[_ngcontent-%COMP%]:hover{opacity:.7}.header__logo-img[_ngcontent-%COMP%]{width:24px;height:24px;object-fit:contain}.header__logo-text[_ngcontent-%COMP%]{font-size:1rem;font-weight:600;letter-spacing:-.02em;color:var(--color-text, #1d1d1f)}.header__nav[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}.header__admin-btn[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;border:1.5px solid var(--color-border, rgba(0, 0, 0, .1));background:var(--color-bg-secondary, rgba(0, 0, 0, .04));cursor:pointer;transition:background .15s ease,border-color .15s ease;padding:0;font-family:inherit;font-size:1rem;line-height:1}.header__admin-btn[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover, rgba(0, 0, 0, .08));border-color:var(--color-primary, #007aff)}.header__admin-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.header__user-btn[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;border:1.5px solid var(--color-border, rgba(0, 0, 0, .1));background:var(--color-bg-secondary, rgba(0, 0, 0, .04));cursor:pointer;transition:background .15s ease,border-color .15s ease;padding:0;font-family:inherit}.header__user-btn[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover, rgba(0, 0, 0, .08));border-color:var(--color-primary, #007aff)}.header__user-btn--active[_ngcontent-%COMP%]{background:var(--color-primary, #007aff);border-color:var(--color-primary, #007aff)}.header__user-btn--active[_ngcontent-%COMP%] .header__user-initials[_ngcontent-%COMP%], .header__user-btn--active[_ngcontent-%COMP%] .header__user-icon[_ngcontent-%COMP%]{color:#fff}.header__user-initials[_ngcontent-%COMP%]{font-size:.75rem;font-weight:600;color:var(--color-text, #1d1d1f);line-height:1;letter-spacing:.02em}.header__user-icon[_ngcontent-%COMP%]{font-size:1rem;color:var(--color-text-secondary, #6e6e73);line-height:1}"]})};export{_ as a,E as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"./chunk-7XMHOWLT.js";import"./chunk-JQSINAMU.js";import"./chunk-VU7RWHPC.js";import"./chunk-JBAZQRNW.js";import"./chunk-ZK67B6NL.js";import"./chunk-Y73HWDY3.js";import"./chunk-RUEXWAWX.js";export{a as UserFormComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{D as ee,c as G,e as g,g as $,h as q,i as j,l as s,n as U,o as H,s as J,u as K,v as Q,w as W,x as X,y as Y,z as Z}from"./chunk-2DE3OXG3.js";import{b as B,c as z}from"./chunk-KYPMYRHP.js";import{a as h,b as R}from"./chunk-VNGIXNER.js";import{a as D,c as L}from"./chunk-PWN5O4WY.js";import{Ab as _,C as k,Cb as p,Ha as a,Qb as r,Rb as N,Sb as V,Ta as A,Tb as T,a as x,aa as c,b as M,fa as v,ga as b,hb as E,hc as F,ib as C,jb as y,la as S,m as P,mb as O,nb as I,ob as l,pb as i,qb as o,rb as m,sa as u,yb as w}from"./chunk-DJBCK5D7.js";function te(n,t){n&1&&(i(0,"p",5),r(1,"Loading\u2026"),o())}function ie(n,t){if(n&1&&m(0,"input",11),n&2){let e=p(2);l("value",e.selectedProviderLabel())}}function re(n,t){if(n&1&&(i(0,"option",30),r(1),o()),n&2){let e=t.$implicit;l("value",e.id),a(),T("",e.name," (",e.apiType,")")}}function ne(n,t){if(n&1&&(i(0,"select",12)(1,"option",29),r(2,"Select provider"),o(),O(3,re,2,3,"option",30,E().trackByProvider,!0),o()),n&2){let e=p(2);l("formControl",e.aiProviderIdControl),a(3),I(e.providers())}}function ae(n,t){if(n&1){let e=w();i(0,"form",7),_("ngSubmit",function(){v(e);let f=p();return b(f.submit())}),i(1,"div",8)(2,"label",9),r(3," Provider "),i(4,"span",10),r(5,"*"),o()(),C(6,ie,1,1,"input",11)(7,ne,5,1,"select",12),o(),i(8,"div",8)(9,"label",13),r(10," API name "),i(11,"span",10),r(12,"*"),o()(),m(13,"input",14),o(),i(14,"div",8)(15,"label",15),r(16,"Description"),o(),m(17,"input",16),o(),i(18,"div",8)(19,"label",17),r(20,"Alias"),o(),m(21,"input",18),o(),i(22,"div",8)(23,"label",19),r(24,"Priority"),o(),m(25,"input",20),o(),i(26,"div",21)(27,"div",8)(28,"label",22),r(29,"Temperature"),o(),m(30,"input",23),o(),i(31,"div",8)(32,"label",24),r(33,"Max tokens"),o(),m(34,"input",25),o()(),i(35,"div",26)(36,"button",27),r(37),o(),i(38,"button",28),_("click",function(){v(e);let f=p();return b(f.cancel())}),r(39,"Cancel"),o()()()}if(n&2){let e=p();l("formGroup",e.form),a(6),y(e.isEditMode()?6:7),a(7),l("formControl",e.apiModelNameControl),a(4),l("formControl",e.descriptionControl),a(4),l("formControl",e.aliasControl),a(4),l("formControl",e.priorityControl),a(5),l("formControl",e.temperatureControl),a(4),l("formControl",e.maxTokensControl),a(2),l("disabled",e.form.invalid||e.isSubmitting()),a(),V(" ",e.isEditMode()?"Save changes":"Create"," ")}}var oe=class n{route=c(D);router=c(L);destroyRef=c(S);aiModelController=c(B);aiProviderController=c(z);namespaceId=this.route.snapshot.params.namespaceId;providers=R(this.aiProviderController.listByParentAiProvider(this.namespaceId).pipe(k(()=>P([]))),{initialValue:[]});form=new j({aiProviderId:new s("",{nonNullable:!0,validators:[g.required]}),apiModelName:new s("",{nonNullable:!0,validators:[g.required,g.minLength(1)]}),description:new s(null),alias:new s("",{nonNullable:!0}),priority:new s(0,{nonNullable:!0}),temperature:new s(null),maxTokens:new s(null)});get aiProviderIdControl(){return this.form.controls.aiProviderId}get apiModelNameControl(){return this.form.controls.apiModelName}get descriptionControl(){return this.form.controls.description}get aliasControl(){return this.form.controls.alias}get priorityControl(){return this.form.controls.priority}get temperatureControl(){return this.form.controls.temperature}get maxTokensControl(){return this.form.controls.maxTokens}isEditMode=u(!1);isSubmitting=u(!1);isLoading=u(!1);selectedProviderLabel=F(()=>{let t=this.aiProviderIdControl.value,e=this.providers().find(d=>d.id===t);return e?`${e.name} (${e.apiType})`:t});existingModel=null;ngOnInit(){let t=this.route.snapshot.paramMap.get("modelId");t&&(this.isEditMode.set(!0),this.loadModel(t))}loadModel(t){this.isLoading.set(!0),this.aiModelController.getByIdAiModel(t).pipe(h(this.destroyRef)).subscribe({next:e=>{this.existingModel=e,this.aiProviderIdControl.setValue(e.aiProviderId),this.aiProviderIdControl.disable(),this.apiModelNameControl.setValue(e.apiModelName),this.descriptionControl.setValue(e.description??null),this.aliasControl.setValue(e.alias??""),this.priorityControl.setValue(e.priority??0),this.temperatureControl.setValue(e.temperature??null),this.maxTokensControl.setValue(e.maxTokens??null),this.isLoading.set(!1)},error:()=>{this.isLoading.set(!1),this.navigateBack()}})}submit(){if(this.form.invalid||this.isSubmitting())return;this.isSubmitting.set(!0);let t=this.form.getRawValue(),e=M(x({},this.existingModel??{}),{aiProviderId:t.aiProviderId,apiModelName:t.apiModelName.trim(),description:t.description?.trim()||void 0,alias:t.alias.trim()||void 0,priority:t.priority,temperature:t.temperature??void 0,maxTokens:t.maxTokens??void 0});(this.isEditMode()?this.aiModelController.updateAiModel(this.existingModel.id??"",e):this.aiModelController.createAiModel(e)).pipe(h(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(!1)})}cancel(){this.navigateBack()}navigateBack(){this.router.navigate(["/agentos",this.namespaceId,"ai-models"])}trackByProvider(t,e){return e.id??""}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=A({type:n,selectors:[["agentos-ai-model-form"]],decls:10,vars:2,consts:[[1,"ai-model-form"],[1,"ai-model-form__header"],["type","button","title","Back to AI models",1,"ai-model-form__back",3,"click"],[1,"ai-model-form__back-icon"],[1,"ai-model-form__title"],[1,"ai-model-form__loading"],[1,"ai-model-form__form",3,"formGroup"],[1,"ai-model-form__form",3,"ngSubmit","formGroup"],[1,"ai-model-form__field"],["for","model-provider",1,"ai-model-form__label"],["aria-hidden","true"],["id","model-provider","type","text","readonly","","tabindex","-1",1,"ai-model-form__input","ai-model-form__input--readonly",3,"value"],["id","model-provider",1,"ai-model-form__select",3,"formControl"],["for","model-api-name",1,"ai-model-form__label"],["id","model-api-name","type","text","placeholder","e.g. gpt-4o, claude-3-5-sonnet-20241022","autocomplete","off",1,"ai-model-form__input","ai-model-form__input--mono",3,"formControl"],["for","model-description",1,"ai-model-form__label"],["id","model-description","type","text","placeholder","Optional \u2014 short description of this model config","autocomplete","off",1,"ai-model-form__input",3,"formControl"],["for","model-alias",1,"ai-model-form__label"],["id","model-alias","type","text","placeholder","e.g. fast, smart \u2014 short identifier used internally","autocomplete","off",1,"ai-model-form__input",3,"formControl"],["for","model-priority",1,"ai-model-form__label"],["id","model-priority","type","number","placeholder","0 \u2014 higher wins when multiple configs share the same alias","min","0","step","1",1,"ai-model-form__input",3,"formControl"],[1,"ai-model-form__row"],["for","model-temperature",1,"ai-model-form__label"],["id","model-temperature","type","number","placeholder","0 \u2013 2","min","0","max","2","step","0.1",1,"ai-model-form__input",3,"formControl"],["for","model-max-tokens",1,"ai-model-form__label"],["id","model-max-tokens","type","number","placeholder","e.g. 4096","min","1","step","1",1,"ai-model-form__input",3,"formControl"],[1,"ai-model-form__actions"],["type","submit",1,"ai-model-form__btn","ai-model-form__btn--primary",3,"disabled"],["type","button",1,"ai-model-form__btn",3,"click"],["value","","disabled",""],[3,"value"]],template:function(e,d){e&1&&(i(0,"div",0)(1,"header",1)(2,"button",2),_("click",function(){return d.cancel()}),i(3,"span",3),r(4,"\u2190"),o(),r(5," AI models "),o(),i(6,"h1",4),r(7),o()(),C(8,te,2,0,"p",5)(9,ae,40,10,"form",6),o()),e&2&&(a(7),N(d.isEditMode()?"Edit AI model":"New AI model"),a(),y(d.isLoading()?8:9))},dependencies:[ee,U,W,X,G,H,Q,$,q,Z,Y,J,K],styles:[".ai-model-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:480px;margin:0 auto;padding:2rem 1rem}.ai-model-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-model-form__back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-primary, #007aff);font-family:inherit}.ai-model-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-model-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.ai-model-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:600;color:var(--color-text, #1d1d1f);letter-spacing:-.02em}.ai-model-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);font-size:.9rem;margin:0}.ai-model-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.ai-model-form__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.ai-model-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.ai-model-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text, #1d1d1f)}.ai-model-form__input[_ngcontent-%COMP%], .ai-model-form__select[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .1));background:transparent;color:var(--color-text, #1d1d1f);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;transition:border-color .15s ease}.ai-model-form__input[_ngcontent-%COMP%]:focus, .ai-model-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-primary, #007aff)}.ai-model-form__input[_ngcontent-%COMP%]::placeholder, .ai-model-form__select[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary, #6e6e73)}.ai-model-form__input--mono[_ngcontent-%COMP%]{font-family:monospace}.ai-model-form__input--readonly[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);cursor:default;background:var(--color-surface-muted, rgba(0, 0, 0, .03))}.ai-model-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.ai-model-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .1));background:transparent;color:var(--color-text, #1d1d1f);font-size:.9375rem;font-family:inherit;cursor:pointer;transition:background .15s ease,border-color .15s ease}.ai-model-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover, rgba(0, 0, 0, .04))}.ai-model-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.ai-model-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-primary, #007aff);border-color:var(--color-primary, #007aff);color:#fff}.ai-model-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary-hover, #0051d5);border-color:var(--color-primary-hover, #0051d5)}"],changeDetection:0})};export{oe as AiModelFormComponent};
|
|
1
|
+
import{b as B,c as z}from"./chunk-VU7RWHPC.js";import{a as h,b as R}from"./chunk-JBAZQRNW.js";import{D as ee,c as G,e as g,g as $,h as q,i as j,l as s,n as U,o as H,s as J,u as K,v as Q,w as W,x as X,y as Y,z as Z}from"./chunk-ZK67B6NL.js";import{b as D,d as L}from"./chunk-Y73HWDY3.js";import{Ab as _,C as k,Cb as p,Ha as a,Qb as r,Rb as N,Sb as V,Ta as A,Tb as T,a as x,aa as c,b as M,fa as v,ga as b,hb as E,hc as F,ib as C,jb as y,la as S,m as P,mb as O,nb as I,ob as l,pb as i,qb as o,rb as m,sa as u,yb as w}from"./chunk-RUEXWAWX.js";function te(n,t){n&1&&(i(0,"p",5),r(1,"Loading\u2026"),o())}function ie(n,t){if(n&1&&m(0,"input",11),n&2){let e=p(2);l("value",e.selectedProviderLabel())}}function re(n,t){if(n&1&&(i(0,"option",30),r(1),o()),n&2){let e=t.$implicit;l("value",e.id),a(),T("",e.name," (",e.apiType,")")}}function ne(n,t){if(n&1&&(i(0,"select",12)(1,"option",29),r(2,"Select provider"),o(),O(3,re,2,3,"option",30,E().trackByProvider,!0),o()),n&2){let e=p(2);l("formControl",e.aiProviderIdControl),a(3),I(e.providers())}}function ae(n,t){if(n&1){let e=w();i(0,"form",7),_("ngSubmit",function(){v(e);let f=p();return b(f.submit())}),i(1,"div",8)(2,"label",9),r(3," Provider "),i(4,"span",10),r(5,"*"),o()(),C(6,ie,1,1,"input",11)(7,ne,5,1,"select",12),o(),i(8,"div",8)(9,"label",13),r(10," API name "),i(11,"span",10),r(12,"*"),o()(),m(13,"input",14),o(),i(14,"div",8)(15,"label",15),r(16,"Description"),o(),m(17,"input",16),o(),i(18,"div",8)(19,"label",17),r(20,"Alias"),o(),m(21,"input",18),o(),i(22,"div",8)(23,"label",19),r(24,"Priority"),o(),m(25,"input",20),o(),i(26,"div",21)(27,"div",8)(28,"label",22),r(29,"Temperature"),o(),m(30,"input",23),o(),i(31,"div",8)(32,"label",24),r(33,"Max tokens"),o(),m(34,"input",25),o()(),i(35,"div",26)(36,"button",27),r(37),o(),i(38,"button",28),_("click",function(){v(e);let f=p();return b(f.cancel())}),r(39,"Cancel"),o()()()}if(n&2){let e=p();l("formGroup",e.form),a(6),y(e.isEditMode()?6:7),a(7),l("formControl",e.apiModelNameControl),a(4),l("formControl",e.descriptionControl),a(4),l("formControl",e.aliasControl),a(4),l("formControl",e.priorityControl),a(5),l("formControl",e.temperatureControl),a(4),l("formControl",e.maxTokensControl),a(2),l("disabled",e.form.invalid||e.isSubmitting()),a(),V(" ",e.isEditMode()?"Save changes":"Create"," ")}}var oe=class n{route=c(D);router=c(L);destroyRef=c(S);aiModelController=c(B);aiProviderController=c(z);namespaceId=this.route.snapshot.params.namespaceId;providers=R(this.aiProviderController.listByParentAiProvider(this.namespaceId).pipe(k(()=>P([]))),{initialValue:[]});form=new j({aiProviderId:new s("",{nonNullable:!0,validators:[g.required]}),apiModelName:new s("",{nonNullable:!0,validators:[g.required,g.minLength(1)]}),description:new s(null),alias:new s("",{nonNullable:!0}),priority:new s(0,{nonNullable:!0}),temperature:new s(null),maxTokens:new s(null)});get aiProviderIdControl(){return this.form.controls.aiProviderId}get apiModelNameControl(){return this.form.controls.apiModelName}get descriptionControl(){return this.form.controls.description}get aliasControl(){return this.form.controls.alias}get priorityControl(){return this.form.controls.priority}get temperatureControl(){return this.form.controls.temperature}get maxTokensControl(){return this.form.controls.maxTokens}isEditMode=u(!1);isSubmitting=u(!1);isLoading=u(!1);selectedProviderLabel=F(()=>{let t=this.aiProviderIdControl.value,e=this.providers().find(d=>d.id===t);return e?`${e.name} (${e.apiType})`:t});existingModel=null;ngOnInit(){let t=this.route.snapshot.paramMap.get("modelId");t&&(this.isEditMode.set(!0),this.loadModel(t))}loadModel(t){this.isLoading.set(!0),this.aiModelController.getByIdAiModel(t).pipe(h(this.destroyRef)).subscribe({next:e=>{this.existingModel=e,this.aiProviderIdControl.setValue(e.aiProviderId),this.aiProviderIdControl.disable(),this.apiModelNameControl.setValue(e.apiModelName),this.descriptionControl.setValue(e.description??null),this.aliasControl.setValue(e.alias??""),this.priorityControl.setValue(e.priority??0),this.temperatureControl.setValue(e.temperature??null),this.maxTokensControl.setValue(e.maxTokens??null),this.isLoading.set(!1)},error:()=>{this.isLoading.set(!1),this.navigateBack()}})}submit(){if(this.form.invalid||this.isSubmitting())return;this.isSubmitting.set(!0);let t=this.form.getRawValue(),e=M(x({},this.existingModel??{}),{aiProviderId:t.aiProviderId,apiModelName:t.apiModelName.trim(),description:t.description?.trim()||void 0,alias:t.alias.trim()||void 0,priority:t.priority,temperature:t.temperature??void 0,maxTokens:t.maxTokens??void 0});(this.isEditMode()?this.aiModelController.updateAiModel(this.existingModel.id??"",e):this.aiModelController.createAiModel(e)).pipe(h(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(!1)})}cancel(){this.navigateBack()}navigateBack(){this.router.navigate(["/agentos",this.namespaceId,"ai-models"])}trackByProvider(t,e){return e.id??""}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=A({type:n,selectors:[["agentos-ai-model-form"]],decls:10,vars:2,consts:[[1,"ai-model-form"],[1,"ai-model-form__header"],["type","button","title","Back to AI models",1,"ai-model-form__back",3,"click"],[1,"ai-model-form__back-icon"],[1,"ai-model-form__title"],[1,"ai-model-form__loading"],[1,"ai-model-form__form",3,"formGroup"],[1,"ai-model-form__form",3,"ngSubmit","formGroup"],[1,"ai-model-form__field"],["for","model-provider",1,"ai-model-form__label"],["aria-hidden","true"],["id","model-provider","type","text","readonly","","tabindex","-1",1,"ai-model-form__input","ai-model-form__input--readonly",3,"value"],["id","model-provider",1,"ai-model-form__select",3,"formControl"],["for","model-api-name",1,"ai-model-form__label"],["id","model-api-name","type","text","placeholder","e.g. gpt-4o, claude-3-5-sonnet-20241022","autocomplete","off",1,"ai-model-form__input","ai-model-form__input--mono",3,"formControl"],["for","model-description",1,"ai-model-form__label"],["id","model-description","type","text","placeholder","Optional \u2014 short description of this model config","autocomplete","off",1,"ai-model-form__input",3,"formControl"],["for","model-alias",1,"ai-model-form__label"],["id","model-alias","type","text","placeholder","e.g. fast, smart \u2014 short identifier used internally","autocomplete","off",1,"ai-model-form__input",3,"formControl"],["for","model-priority",1,"ai-model-form__label"],["id","model-priority","type","number","placeholder","0 \u2014 higher wins when multiple configs share the same alias","min","0","step","1",1,"ai-model-form__input",3,"formControl"],[1,"ai-model-form__row"],["for","model-temperature",1,"ai-model-form__label"],["id","model-temperature","type","number","placeholder","0 \u2013 2","min","0","max","2","step","0.1",1,"ai-model-form__input",3,"formControl"],["for","model-max-tokens",1,"ai-model-form__label"],["id","model-max-tokens","type","number","placeholder","e.g. 4096","min","1","step","1",1,"ai-model-form__input",3,"formControl"],[1,"ai-model-form__actions"],["type","submit",1,"ai-model-form__btn","ai-model-form__btn--primary",3,"disabled"],["type","button",1,"ai-model-form__btn",3,"click"],["value","","disabled",""],[3,"value"]],template:function(e,d){e&1&&(i(0,"div",0)(1,"header",1)(2,"button",2),_("click",function(){return d.cancel()}),i(3,"span",3),r(4,"\u2190"),o(),r(5," AI models "),o(),i(6,"h1",4),r(7),o()(),C(8,te,2,0,"p",5)(9,ae,40,10,"form",6),o()),e&2&&(a(7),N(d.isEditMode()?"Edit AI model":"New AI model"),a(),y(d.isLoading()?8:9))},dependencies:[ee,U,W,X,G,H,Q,$,q,Z,Y,J,K],styles:[".ai-model-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:480px;margin:0 auto;padding:2rem 1rem}.ai-model-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-model-form__back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-primary, #007aff);font-family:inherit}.ai-model-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-model-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.ai-model-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:600;color:var(--color-text, #1d1d1f);letter-spacing:-.02em}.ai-model-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);font-size:.9rem;margin:0}.ai-model-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.ai-model-form__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.ai-model-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.ai-model-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text, #1d1d1f)}.ai-model-form__input[_ngcontent-%COMP%], .ai-model-form__select[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .1));background:transparent;color:var(--color-text, #1d1d1f);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;transition:border-color .15s ease}.ai-model-form__input[_ngcontent-%COMP%]:focus, .ai-model-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-primary, #007aff)}.ai-model-form__input[_ngcontent-%COMP%]::placeholder, .ai-model-form__select[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary, #6e6e73)}.ai-model-form__input--mono[_ngcontent-%COMP%]{font-family:monospace}.ai-model-form__input--readonly[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);cursor:default;background:var(--color-surface-muted, rgba(0, 0, 0, .03))}.ai-model-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.ai-model-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .1));background:transparent;color:var(--color-text, #1d1d1f);font-size:.9375rem;font-family:inherit;cursor:pointer;transition:background .15s ease,border-color .15s ease}.ai-model-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover, rgba(0, 0, 0, .04))}.ai-model-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.ai-model-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-primary, #007aff);border-color:var(--color-primary, #007aff);color:#fff}.ai-model-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary-hover, #0051d5);border-color:var(--color-primary-hover, #0051d5)}"],changeDetection:0})};export{oe as AiModelFormComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as r}from"./chunk-Y73HWDY3.js";import{Ta as t,rb as o}from"./chunk-RUEXWAWX.js";var s=class n{static \u0275fac=function(e){return new(e||n)};static \u0275cmp=t({type:n,selectors:[["agentos-shell"]],decls:1,vars:0,template:function(e,i){e&1&&o(0,"router-outlet")},dependencies:[r],styles:[".shell-loader[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:1rem;color:var(--color-text-secondary, #6e6e73);font-size:.9rem}.shell-loader[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0}.spinner[_ngcontent-%COMP%]{width:32px;height:32px;border:3px solid var(--color-border, rgba(0, 0, 0, .1));border-top-color:var(--color-primary, #007aff);border-radius:50%;animation:_ngcontent-%COMP%_spin .8s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}"]})};export{s as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as E}from"./chunk-VU7RWHPC.js";import{B as k}from"./chunk-L66AMHS4.js";import{a as I}from"./chunk-JBAZQRNW.js";import{b as w,d as M}from"./chunk-Y73HWDY3.js";import{Ab as d,Gb as y,Ha as m,Hb as v,Ib as C,Ja as _,Nc as x,Q as f,Qb as l,Ta as b,aa as n,la as g,ob as p,pb as a,qb as i,s as h,sa as c}from"./chunk-RUEXWAWX.js";var H=["composerInput"],P=class u{http=n(x);router=n(M);route=n(w);config=n(E);destroyRef=n(g);composerInput;namespaceId=this.route.snapshot.params.namespaceId;inputValue=c("");isCreating=c(!1);constructor(){_(()=>{this.composerInput?.nativeElement.focus()})}get canSend(){return!!this.inputValue().trim()&&!this.isCreating()}onInput(t){this.inputValue.set(t.target.value)}onKeydown(t){t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),this.submit())}submit(){if(!this.canSend)return;let t=this.inputValue().trim();this.inputValue.set(""),this.isCreating.set(!0),this.http.post(`${this.config.basePath}/api/cases`,{namespaceId:this.namespaceId,metadata:{}}).pipe(f(e=>this.http.post(`${this.config.basePath}/api/cases/${e.id}/messages`,{content:t,userId:"default-user"}).pipe(h(()=>e))),I(this.destroyRef)).subscribe({next:e=>{this.router.navigate([e.id??""],{relativeTo:this.route})},error:e=>{console.error("[CaseHome] Failed to create case or send first message",e),this.isCreating.set(!1),this.inputValue.set(t)}})}static \u0275fac=function(e){return new(e||u)};static \u0275cmp=b({type:u,selectors:[["agentos-case-home"]],viewQuery:function(e,o){if(e&1&&y(H,5),e&2){let r;v(r=C())&&(o.composerInput=r.first)}},decls:11,vars:3,consts:[["composerInput",""],[1,"case-home"],[1,"case-home__hero"],[1,"case-home__headline"],[1,"case-home__composer"],["placeholder","Describe your task or ask a question\u2026","rows","4",1,"case-home__input",3,"input","keydown","value","disabled"],[1,"case-home__composer-footer"],[1,"case-home__hint"],["icon","send","variant","primary","title","Start case (Enter)",3,"action","disabled"]],template:function(e,o){e&1&&(a(0,"div",1)(1,"div",2)(2,"h1",3),l(3,"What can I help you with?"),i(),a(4,"div",4)(5,"textarea",5,0),d("input",function(s){return o.onInput(s)})("keydown",function(s){return o.onKeydown(s)}),i(),a(7,"div",6)(8,"span",7),l(9,"Enter to send\xA0\xA0\xB7\xA0\xA0Shift+Enter for new line"),i(),a(10,"ds-icon-button",8),d("action",function(){return o.submit()}),i()()()()()),e&2&&(m(5),p("value",o.inputValue())("disabled",o.isCreating()),m(5),p("disabled",!o.canSend))},dependencies:[k],styles:[".case-home[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;align-items:center;justify-content:center}.case-home__hero[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:2rem;padding:2rem 1.5rem 4rem;max-width:680px;width:100%}.case-home__headline[_ngcontent-%COMP%]{margin:0;font-size:clamp(1.5rem,4vw,2.25rem);font-weight:700;letter-spacing:-.03em;color:var(--color-text, #1d1d1f);text-align:center}.case-home__composer[_ngcontent-%COMP%]{width:100%;display:flex;flex-direction:column;background:var(--glass-bg, rgba(255, 255, 255, .72));border:1px solid var(--glass-border, rgba(255, 255, 255, .18));backdrop-filter:var(--glass-backdrop-blur, blur(20px));-webkit-backdrop-filter:var(--glass-backdrop-blur, blur(20px));border-radius:16px;box-shadow:0 4px 24px #00000012;overflow:hidden;transition:box-shadow .2s ease,border-color .2s ease}.case-home__composer[_ngcontent-%COMP%]:focus-within{box-shadow:0 4px 32px #007aff26;border-color:var(--color-primary, #007aff)}.case-home__input[_ngcontent-%COMP%]{width:100%;resize:none;padding:1rem 1.25rem .5rem;border:none;background:transparent;color:var(--color-text, #1d1d1f);font-size:1rem;font-family:inherit;line-height:1.6;outline:none;box-sizing:border-box}.case-home__input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary, #6e6e73)}.case-home__input[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.case-home__composer-footer[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:.5rem .5rem .5rem 1.25rem}.case-home__hint[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary, #6e6e73);opacity:.7}"]})};export{P as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as m}from"./chunk-BYYYYB67.js";import{c as l}from"./chunk-Y73HWDY3.js";import{Ta as a,pb as t,qb as i,rb as o}from"./chunk-RUEXWAWX.js";var s=class n{static \u0275fac=function(e){return new(e||n)};static \u0275cmp=a({type:n,selectors:[["agentos-layout"]],decls:4,vars:0,consts:[[1,"layout"],[1,"layout__content"]],template:function(e,u){e&1&&(t(0,"div",0),o(1,"agentos-header"),t(2,"main",1),o(3,"router-outlet"),i()())},dependencies:[l,m],styles:[".layout[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-height:100vh}.layout__content[_ngcontent-%COMP%]{flex:1;overflow-y:auto}"]})};export{s as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as Q}from"./chunk-VU7RWHPC.js";import{B}from"./chunk-L66AMHS4.js";import{a as j}from"./chunk-JBAZQRNW.js";import{b as K}from"./chunk-Y73HWDY3.js";import{Ab as b,Cb as p,Gb as V,Ha as l,Hb as z,Ib as $,Nc as L,Ob as w,Qb as d,Rb as C,Ta as N,aa as y,fa as S,ga as E,gb as A,hc as k,ib as g,jb as h,la as I,mb as D,nb as F,oa as P,ob as T,pb as i,qb as r,rb as q,sa as v,ta as R,yb as M}from"./chunk-RUEXWAWX.js";var U=["composerInput"],Y=(o,t)=>t.kind==="message"?t.event.id:t.kind==="tool"?t.call.requestId:"streaming";function J(o,t){o&1&&(i(0,"div",3)(1,"p"),d(2,"No messages yet."),r()())}function Z(o,t){if(o&1&&(i(0,"div",14)(1,"span",15),d(2),r(),i(3,"p",16),d(4),r()()),o&2){let e=p().$implicit,n=p(2);w("case-chat__message--user",e.event.actor.role==="USER")("case-chat__message--agent",e.event.actor.role==="AGENT"),l(2),C(e.event.actor.displayName),l(2),C(n.extractText(e.event))}}function W(o,t){if(o&1&&(i(0,"div",12)(1,"span",15),d(2),r(),i(3,"p",16),d(4),r()()),o&2){let e=p().$implicit,n=p(2);l(2),C(n.agentDisplayName()),l(2),C(e.text)}}function X(o,t){o&1&&d(0," \u23F3 ")}function ee(o,t){o&1&&d(0," \u2705 ")}function te(o,t){o&1&&d(0," \u274C ")}function ne(o,t){if(o&1&&(i(0,"div",23)(1,"span",24),d(2,"Payload"),r(),i(3,"pre"),d(4),r()()),o&2){let e=p(3).$implicit;l(4),C(e.call.args)}}function oe(o,t){o&1&&(i(0,"pre"),d(1),r()),o&2&&(l(),C(t))}function ae(o,t){o&1&&(i(0,"span",25),d(1,"Running\u2026"),r())}function ie(o,t){o&1&&(i(0,"span",26),d(1,"No output"),r())}function se(o,t){if(o&1&&(i(0,"div",22),g(1,ne,5,1,"div",23),i(2,"div",23)(3,"span",24),d(4,"Output"),r(),g(5,oe,2,1,"pre")(6,ae,2,0,"span",25)(7,ie,2,0,"span",26),r()()),o&2){let e,n=p(2).$implicit,a=p(2);l(),h(n.call.args?1:-1),l(4),h((e=a.extractToolOutput(n.call))?5:n.call.response?7:6,e)}}function re(o,t){if(o&1){let e=M();i(0,"div",17)(1,"button",18),b("click",function(){S(e);let a=p().$implicit,_=p(2);return E(_.toggleToolCall(a.call.requestId))}),i(2,"span",19),g(3,X,1,0)(4,ee,1,0)(5,te,1,0),r(),i(6,"span",20),d(7),r(),i(8,"span",21),d(9),r()(),g(10,se,8,2,"div",22),r()}if(o&2){let e=p().$implicit,n=p(2);w("case-chat__tool-call--pending",!e.call.response)("case-chat__tool-call--success",(e.call.response==null?null:e.call.response.success)===!0)("case-chat__tool-call--error",(e.call.response==null?null:e.call.response.success)===!1),l(),A("aria-expanded",n.isToolCallExpanded(e.call.requestId)),l(2),h(e.call.response?e.call.response.success?4:5:3),l(4),C(e.call.toolName),l(2),C(n.isToolCallExpanded(e.call.requestId)?"\u25BC":"\u25B6"),l(),h(n.isToolCallExpanded(e.call.requestId)?10:-1)}}function le(o,t){if(o&1&&g(0,Z,5,6,"div",11)(1,W,5,2,"div",12)(2,re,11,11,"div",13),o&2){let e=t.$implicit;h(e.kind==="message"?0:e.kind==="streaming"?1:2)}}function ce(o,t){if(o&1&&D(0,le,3,1,null,null,Y),o&2){let e=p();F(e.timeline())}}function de(o,t){o&1&&(i(0,"div",4),q(1,"span",27)(2,"span",27)(3,"span",27),r())}function pe(o,t){if(o&1){let e=M();i(0,"ds-icon-button",28),b("action",function(){S(e);let a=p();return E(a.interrupt())}),r()}}function me(o,t){if(o&1){let e=M();i(0,"ds-icon-button",29),b("action",function(){S(e);let a=p();return E(a.submit())}),r()}if(o&2){let e=p();T("disabled",!e.canSend)}}var G=class o{route=y(K);http=y(L);zone=y(P);destroyRef=y(I);config=y(Q);caseId=this.route.snapshot.params.caseId;namespaceId=this.route.snapshot.params.namespaceId;agentDisplayName=k(()=>{let t=this.events();for(let e=t.length-1;e>=0;e--){let n=t[e];if(n){if(n.type==="AgentRunningEvent"||n.type==="AgentSelectedEvent"||n.type==="AgentFinishedEvent"){let a=n.agentName;if(a&&a.trim().length>0)return a}if(n.type==="MessageEvent"){let a=n;if(a.actor?.role==="AGENT"&&a.actor.displayName)return a.actor.displayName}}}return"Assistant"});eventSource=null;composerInput;events=v([]);inputValue=v("");isRunning=v(!1);isTerminal=v(!1);streamingText=v("");collapsedTools=v(new Set);constructor(){R(()=>{this.isRunning()||this.isTerminal()||queueMicrotask(()=>this.composerInput?.nativeElement.focus())})}timeline=k(()=>{let t=this.events(),e=this.streamingText(),n=new Map;for(let c of t)if(c.type==="ToolRequestEvent"){let m=c,s=m.toolRequestId??c.id,f=n.get(s);n.set(s,{requestId:s,toolName:m.toolName??"unknown",args:m.args??null,response:f?.response})}else if(c.type==="ToolResponseEvent"){let m=c,s=m.toolRequestId??c.id,f=n.get(s);n.set(s,{requestId:s,toolName:f?.toolName??m.toolName??"unknown",args:f?.args??null,response:m})}let a=[],_=new Set;for(let c of t)if(c.type==="MessageEvent")a.push({kind:"message",event:c});else if(c.type==="ToolRequestEvent"||c.type==="ToolResponseEvent"){let s=c.toolRequestId??c.id;_.has(s)||(_.add(s),a.push({kind:"tool",call:n.get(s)}))}return e.trim().length>0&&a.push({kind:"streaming",text:e}),a});get canSend(){return!!this.inputValue().trim()&&!this.isRunning()&&!this.isTerminal()}ngOnInit(){this.connectSse(),this.route.params.pipe(j(this.destroyRef)).subscribe(t=>{let e=t.caseId;e&&e!==this.caseId&&(this.caseId=e,this.reinitialise())})}ngOnDestroy(){this.eventSource?.close()}connectSse(){let t=`${this.config.basePath}/api/cases/${this.caseId}/events`;console.log("[AgentOS SSE] connecting",{url:t,basePath:this.config.basePath,caseId:this.caseId,namespaceId:this.namespaceId,now:new Date().toISOString()}),this.eventSource=this.zone.runOutsideAngular(()=>new EventSource(t));let e=a=>{let _=performance.now(),c=a.type,m=a.data;console.log("[AgentOS SSE] frame received",{sseEventName:c,dataLength:m?.length??0,dataPreview:m?.slice(0,120),receivedAtMs:_});try{let s=JSON.parse(m);this.zone.run(()=>{let f=this.events().length;this.events.update(u=>u.some(x=>x.id===s.id)?u:[...u,s]);let H=this.events().length;if(console.log("[AgentOS SSE] event processed",{sseEventName:c,eventType:s.type,eventId:s.id,beforeLen:f,afterLen:H,running:this.isRunning(),terminal:this.isTerminal()}),s.type==="TextChunkEvent"){let u=s.chunk;u&&this.streamingText.update(x=>x+u);return}if(s.type==="CaseStatusEvent"){let u=s.status,x=u==="KILLED"||u==="ERROR";if(this.isTerminal.set(x),x)this.isRunning.set(!1),this.eventSource?.close(),this.eventSource=null;else{let O=u==="RUNNING";this.isRunning.set(O),O||this.streamingText.set("")}return}if(s.type==="AgentFinishedEvent"){this.isRunning.set(!1),this.streamingText.set("");return}})}catch(s){console.warn("[AgentOS SSE] failed to parse event data",{sseEventName:c,error:s,dataPreview:m?.slice(0,500)})}},n=["MessageEvent","CaseStatusEvent","AgentSelectedEvent","AgentRunningEvent","AgentFinishedEvent","ThinkingEvent","TextChunkEvent","ToolRequestEvent","ToolResponseEvent"];for(let a of n)console.log("[AgentOS SSE] addEventListener",a),this.eventSource.addEventListener(a,e);this.eventSource.onopen=()=>{console.log("[AgentOS SSE] connection open",{readyState:this.eventSource?.readyState,at:new Date().toISOString()})},this.eventSource.onmessage=a=>{console.log("[AgentOS SSE] onmessage (unnamed event) received",{dataLength:a.data?.length??0,dataPreview:a.data?.slice(0,120)})},this.eventSource.onerror=a=>{console.warn("[AgentOS SSE] connection error",{err:a,readyState:this.eventSource?.readyState,at:new Date().toISOString()}),this.zone.run(()=>{this.isRunning.set(!1)})}}onInput(t){this.inputValue.set(t.target.value)}onKeydown(t){t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),this.submit())}reinitialise(){this.eventSource?.close(),this.eventSource=null,this.events.set([]),this.inputValue.set(""),this.isRunning.set(!1),this.isTerminal.set(!1),this.streamingText.set(""),this.collapsedTools.set(new Set),this.connectSse()}submit(){if(!this.canSend)return;let t=this.inputValue().trim();this.inputValue.set(""),this.sendMessage(t)}sendMessage(t){this.isRunning.set(!0),this.streamingText.set(""),this.http.post(`${this.config.basePath}/api/cases/${this.caseId}/messages`,{content:t,userId:"default-user"}).subscribe({error:e=>{console.error("[CaseChat] Failed to send message",e),this.isRunning.set(!1)}})}interrupt(){this.http.post(`${this.config.basePath}/api/cases/${this.caseId}/interrupt`,{}).subscribe({error:t=>console.error("[CaseChat] Failed to interrupt case",t)})}kill(){this.http.post(`${this.config.basePath}/api/cases/${this.caseId}/kill`,{}).subscribe({error:t=>console.error("[CaseChat] Failed to kill case",t)})}extractText(t){return t.content?.filter(e=>"content"in e).map(e=>e.content).join("")??""}extractToolOutput(t){if(!t.response)return null;let e=t.response.output;return e?e.content??null:null}toggleToolCall(t){this.collapsedTools.update(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n})}isToolCallExpanded(t){return this.collapsedTools().has(t)}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=N({type:o,selectors:[["agentos-case-chat"]],viewQuery:function(e,n){if(e&1&&V(U,5),e&2){let a;z(a=$())&&(n.composerInput=a.first)}},decls:12,vars:6,consts:[["composerInput",""],[1,"case-chat"],[1,"case-chat__messages"],[1,"case-chat__empty"],[1,"case-chat__thinking"],[1,"case-chat__composer"],["placeholder","Reply\u2026","rows","3",1,"case-chat__input",3,"input","keydown","value","disabled"],[1,"case-chat__actions"],["icon","stop","variant","danger","title","Interrupt"],["icon","send","variant","primary","title","Send (Enter)",3,"disabled"],["icon","cancel","variant","danger","title","Kill",3,"action","disabled"],[1,"case-chat__message",3,"case-chat__message--user","case-chat__message--agent"],[1,"case-chat__message","case-chat__message--agent","case-chat__message--streaming"],[1,"case-chat__tool-call",3,"case-chat__tool-call--pending","case-chat__tool-call--success","case-chat__tool-call--error"],[1,"case-chat__message"],[1,"case-chat__message-author"],[1,"case-chat__message-text"],[1,"case-chat__tool-call"],["type","button",1,"case-chat__tool-call-header",3,"click"],[1,"case-chat__tool-call-icon"],[1,"case-chat__tool-call-name"],[1,"case-chat__tool-call-chevron"],[1,"case-chat__tool-call-output"],[1,"case-chat__tool-call-section"],[1,"case-chat__tool-call-label"],[1,"case-chat__tool-call-pending"],[1,"case-chat__tool-call-empty"],[1,"thinking-dot"],["icon","stop","variant","danger","title","Interrupt",3,"action"],["icon","send","variant","primary","title","Send (Enter)",3,"action","disabled"]],template:function(e,n){e&1&&(i(0,"div",1)(1,"div",2),g(2,J,3,0,"div",3)(3,ce,2,0),g(4,de,4,0,"div",4),r(),i(5,"div",5)(6,"textarea",6,0),b("input",function(_){return n.onInput(_)})("keydown",function(_){return n.onKeydown(_)}),r(),i(8,"div",7),g(9,pe,1,0,"ds-icon-button",8)(10,me,1,1,"ds-icon-button",9),i(11,"ds-icon-button",10),b("action",function(){return n.kill()}),r()()()()),e&2&&(l(2),h(n.timeline().length===0?2:3),l(2),h(n.isRunning()?4:-1),l(2),T("value",n.inputValue())("disabled",n.isRunning()||n.isTerminal()),l(3),h(n.isRunning()?9:10),l(2),T("disabled",n.isTerminal()))},dependencies:[B],styles:['.case-chat[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;max-width:800px;margin:0 auto;padding:1.5rem;gap:1rem}.case-chat__messages[_ngcontent-%COMP%]{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:.75rem;padding-bottom:.5rem}.case-chat__empty[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;flex:1}.case-chat__empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);font-size:.9rem;margin:0}.case-chat__tool-calls[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.4rem;margin-top:.25rem}.case-chat__tool-call[_ngcontent-%COMP%]{border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .1));background:var(--glass-bg, rgba(255, 255, 255, .72));font-size:.8rem;overflow:hidden;transition:border-color .2s ease}.case-chat__tool-call--pending[_ngcontent-%COMP%]{border-color:var(--color-warning, #f5a623);opacity:.8}.case-chat__tool-call--success[_ngcontent-%COMP%]{border-color:var(--color-success, #34c759)}.case-chat__tool-call--error[_ngcontent-%COMP%]{border-color:var(--color-error, #ff3b30)}.case-chat__tool-call-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.4rem;width:100%;padding:.4rem .6rem;background:transparent;border:none;cursor:pointer;text-align:left;color:var(--color-text, #1d1d1f);font-family:inherit;font-size:.8rem}.case-chat__tool-call-header[_ngcontent-%COMP%]:hover{background:#0000000a}.case-chat__tool-call-icon[_ngcontent-%COMP%]{flex-shrink:0;font-size:.75rem}.case-chat__tool-call-name[_ngcontent-%COMP%]{font-weight:600;font-family:var(--font-mono, ui-monospace, "SF Mono", monospace);color:var(--color-primary, #0071e3);flex-shrink:0}.case-chat__tool-call-args[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);font-family:var(--font-mono, ui-monospace, "SF Mono", monospace);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.case-chat__tool-call-chevron[_ngcontent-%COMP%]{flex-shrink:0;font-size:.6rem;color:var(--color-text-secondary, #6e6e73);margin-left:auto}.case-chat__tool-call-output[_ngcontent-%COMP%]{border-top:1px solid var(--color-border, rgba(0, 0, 0, .08));display:flex;flex-direction:column}.case-chat__tool-call-section[_ngcontent-%COMP%]{padding:.4rem .6rem .5rem}.case-chat__tool-call-section[_ngcontent-%COMP%] + .case-chat__tool-call-section[_ngcontent-%COMP%]{border-top:1px solid var(--color-border, rgba(0, 0, 0, .06))}.case-chat__tool-call-section[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{margin:.25rem 0 0;white-space:pre-wrap;word-break:break-all;font-family:var(--font-mono, ui-monospace, "SF Mono", monospace);font-size:.75rem;color:var(--color-text, #1d1d1f);max-height:200px;overflow-y:auto}.case-chat__tool-call-label[_ngcontent-%COMP%]{display:block;font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary, #6e6e73)}.case-chat__tool-call-pending[_ngcontent-%COMP%], .case-chat__tool-call-empty[_ngcontent-%COMP%]{display:block;margin-top:.25rem;color:var(--color-text-secondary, #6e6e73);font-style:italic;font-size:.75rem}.case-chat__thinking[_ngcontent-%COMP%]{display:flex;gap:.3rem;padding:.75rem 1rem;align-self:flex-start}.case-chat__message--streaming[_ngcontent-%COMP%]{opacity:.95}.case-chat__composer[_ngcontent-%COMP%]{display:flex;align-items:flex-end;gap:.5rem;background:var(--glass-bg, rgba(255, 255, 255, .72));border:1px solid var(--glass-border, rgba(255, 255, 255, .18));backdrop-filter:var(--glass-backdrop-blur, blur(20px));-webkit-backdrop-filter:var(--glass-backdrop-blur, blur(20px));border-radius:16px;padding:.5rem .5rem .5rem 1rem}.case-chat__input[_ngcontent-%COMP%]{flex:1;resize:none;padding:.5rem 0;border:none;background:transparent;color:var(--color-text, #1d1d1f);font-size:.95rem;font-family:inherit;line-height:1.5;outline:none;min-height:40px}.case-chat__input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary, #6e6e73)}.case-chat__input[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.case-chat__actions[_ngcontent-%COMP%]{display:flex;align-items:center;flex-shrink:0}.thinking-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;background:var(--color-text-secondary, #6e6e73);animation:_ngcontent-%COMP%_thinking-bounce 1.2s ease-in-out infinite}.thinking-dot[_ngcontent-%COMP%]:nth-child(2){animation-delay:.2s}.thinking-dot[_ngcontent-%COMP%]:nth-child(3){animation-delay:.4s}@keyframes _ngcontent-%COMP%_thinking-bounce{0%,80%,to{transform:translateY(0);opacity:.4}40%{transform:translateY(-6px);opacity:1}}']})};export{G as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as $}from"./chunk-VU7RWHPC.js";import{$ as F,B as h,fa as z}from"./chunk-L66AMHS4.js";import{a as I}from"./chunk-JBAZQRNW.js";import"./chunk-HVJQKHJC.js";import"./chunk-ZK67B6NL.js";import{b as q,d as y}from"./chunk-Y73HWDY3.js";import{Ab as d,Cb as s,Cc as V,Ha as l,Mb as R,Q as M,Qb as g,Rb as b,Ta as C,Za as E,Zb as S,aa as c,ac as N,bc as O,ec as B,fa as p,ga as m,i as w,ib as _,jb as v,la as D,na as k,ob as f,pb as r,qb as a,s as A,sa as T,yb as u}from"./chunk-RUEXWAWX.js";function U(i,t){if(i&1&&(r(0,"span",4),g(1),a()),i&2){let e=s();l(),b(e.config.baseUrl)}}function W(i,t){if(i&1){let e=u();r(0,"span",7),g(1,"Delete?"),a(),r(2,"ds-icon-button",8),d("action",function(){p(e);let o=s();return m(o.onDeleteConfirmed())}),a(),r(3,"ds-icon-button",9),d("action",function(){p(e);let o=s();return m(o.onDeleteCancelled())}),a()}}function G(i,t){if(i&1){let e=u();r(0,"ds-kebab-menu",10),d("itemSelected",function(o){p(e);let P=s();return m(P.onMenuAction(o))}),a()}if(i&2){let e=s();f("items",e.menuItems)}}var x=class i{router=c(y);config;namespaceId;deleteRequested=new k;pendingDelete=T(!1);menuItems=[{key:"edit",label:"Edit provider",icon:"edit"},{key:"delete",label:"Delete provider",icon:"delete",variant:"danger"}];onMenuAction(t){switch(t){case"edit":this.router.navigate(["/agentos",this.namespaceId,"ai-providers",this.config.id,"edit"]);break;case"delete":this.pendingDelete.set(!0);break}}onDeleteConfirmed(){this.pendingDelete.set(!1),this.deleteRequested.emit(this.config)}onDeleteCancelled(){this.pendingDelete.set(!1)}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=C({type:i,selectors:[["agentos-ai-provider-item"]],inputs:{config:"config",namespaceId:"namespaceId"},outputs:{deleteRequested:"deleteRequested"},decls:10,vars:4,consts:[["role","listitem",1,"ai-provider-item"],[1,"ai-provider-item__body"],[1,"ai-provider-item__name"],[1,"ai-provider-item__type"],[1,"ai-provider-item__url"],[1,"ai-provider-item__actions"],[3,"items"],[1,"ai-provider-item__confirm-label"],["icon","check","variant","danger","title","Confirm deletion",3,"action"],["icon","close","title","Cancel deletion",3,"action"],[3,"itemSelected","items"]],template:function(e,n){e&1&&(r(0,"div",0)(1,"div",1)(2,"span",2),g(3),a(),r(4,"span",3),g(5),a(),_(6,U,2,1,"span",4),a(),r(7,"div",5),_(8,W,4,0)(9,G,1,1,"ds-kebab-menu",6),a()()),e&2&&(l(3),b(n.config.name),l(2),b(n.config.apiType),l(),v(n.config.baseUrl?6:-1),l(2),v(n.pendingDelete()?8:9))},dependencies:[z,h],styles:[".ai-provider-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;border-radius:10px;border:1px solid var(--color-border, rgba(0, 0, 0, .08));background:var(--glass-bg, rgba(255, 255, 255, .72));-webkit-backdrop-filter:var(--glass-backdrop-blur, blur(20px));backdrop-filter:var(--glass-backdrop-blur, blur(20px));transition:background .15s ease,border-color .15s ease}.ai-provider-item[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover, rgba(0, 0, 0, .04));border-color:var(--color-primary, #007aff)}.ai-provider-item__body[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.2rem;min-width:0}.ai-provider-item__name[_ngcontent-%COMP%]{font-size:.95rem;font-weight:500;color:var(--color-text, #1d1d1f);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-provider-item__type[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-secondary, #6e6e73);font-family:monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-provider-item__url[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary, #6e6e73);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-provider-item__actions[_ngcontent-%COMP%]{flex-shrink:0;display:flex;align-items:center;gap:.125rem;opacity:0;transition:opacity .15s ease}.ai-provider-item[_ngcontent-%COMP%]:hover .ai-provider-item__actions[_ngcontent-%COMP%], .ai-provider-item[_ngcontent-%COMP%]:focus-within .ai-provider-item__actions[_ngcontent-%COMP%]{opacity:1}.ai-provider-item__confirm-label[_ngcontent-%COMP%]{font-size:.8rem;font-weight:500;color:var(--color-error, #ff3b30);margin-right:.25rem;white-space:nowrap}"],changeDetection:0})};var H=()=>[];function J(i,t){if(i&1){let e=u();r(0,"agentos-ai-provider-item",4),d("deleteRequested",function(o){p(e);let P=s(2);return m(P.deleteConfig(o))}),a()}if(i&2){let e=s(2);f("config",t)("namespaceId",e.namespaceId)}}function Q(i,t){if(i&1&&_(0,J,1,2,"agentos-ai-provider-item",3),i&2){let e,n=t.$implicit,o=s();v((e=o.resolveConfig(n.id))?0:-1,e)}}var j=class i{route=c(q);router=c(y);destroyRef=c(D);aiProviderController=c($);namespaceId=this.route.snapshot.params.namespaceId;refresh$=new w(void 0);configs$=this.refresh$.pipe(M(()=>this.aiProviderController.listByParentAiProvider(this.namespaceId)));configItems$=this.configs$.pipe(A(t=>t.map(e=>({id:e.id??"",name:e.name,description:e.apiType}))));configsById=new Map;constructor(){this.configs$.pipe(I(this.destroyRef)).subscribe(t=>{this.configsById=new Map(t.map(e=>[e.id??"",e]))})}goBack(){this.router.navigate(["/agentos","namespaces"])}openCreateForm(){this.router.navigate(["/agentos",this.namespaceId,"ai-providers","new"])}deleteConfig(t){this.aiProviderController.deleteAiProvider(t.id??"").pipe(I(this.destroyRef)).subscribe(()=>this.refresh$.next())}resolveConfig(t){return this.configsById.get(t)??null}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=C({type:i,selectors:[["agentos-namespace-ai-providers"]],decls:5,vars:6,consts:[["aiProviderItemTpl",""],["title","AI Providers","emptyMessage","No AI providers configured yet. Add one above.","cardMinWidth","400px",3,"createRequested","items","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],[3,"config","namespaceId"],[3,"deleteRequested","config","namespaceId"]],template:function(e,n){if(e&1&&(r(0,"ds-entity-list",1),N(1,"async"),d("createRequested",function(){return n.openCreateForm()}),r(2,"ds-icon-button",2),d("action",function(){return n.goBack()}),a()(),E(3,Q,1,1,"ng-template",null,0,B)),e&2){let o=R(4);f("items",O(1,3,n.configItems$)??S(5,H))("showCreate",!0)("itemTemplate",o)}},dependencies:[F,x,h,V],encapsulation:2,changeDetection:0})};export{j as NamespaceAiProvidersComponent};
|