@whoz-oss/coday-client 0.162.2 → 0.163.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/browser/{chunk-4RMKYA7C.js → chunk-2KOOD34U.js} +1 -1
- package/browser/{chunk-OXXWNVGU.js → chunk-2R3GIDFR.js} +1 -1
- package/browser/{chunk-RF7IRXXE.js → chunk-2SIIKYD5.js} +1 -1
- package/browser/{chunk-WPGSXQ5M.js → chunk-3KIPBCWM.js} +1 -1
- package/browser/chunk-56V4XP2P.js +1 -0
- package/browser/{chunk-IJ2PFSZT.js → chunk-66WXJJKC.js} +1 -1
- package/browser/{chunk-5ETOAW5I.js → chunk-6BJTNH3R.js} +1 -1
- package/browser/{chunk-AKNP533G.js → chunk-6SUY2MJB.js} +1 -1
- package/browser/{chunk-WP6SVXZC.js → chunk-7VWRWXNK.js} +1 -1
- package/browser/{chunk-Q7MOXRND.js → chunk-BUM3GLAX.js} +1 -1
- package/browser/{chunk-44ROPJW7.js → chunk-CEFULUJY.js} +1 -1
- package/browser/{chunk-OD5UXNU5.js → chunk-DHNR5YXZ.js} +1 -1
- package/browser/{chunk-Y2JOUXVN.js → chunk-FD73WVQF.js} +1 -1
- package/browser/{chunk-JK7XVLXN.js → chunk-G7E3IFW3.js} +1 -1
- package/browser/{chunk-MRYQF7JC.js → chunk-M6MA42JA.js} +1 -1
- package/browser/{chunk-QIURQTGU.js → chunk-OOGVHCZ2.js} +1 -1
- package/browser/{chunk-CFTOIYSG.js → chunk-PBLZIIUO.js} +1 -1
- package/browser/{chunk-LEIES4AA.js → chunk-QZKTERKZ.js} +1 -1
- package/browser/{chunk-ZKUCVZCJ.js → chunk-REE2C7LL.js} +1 -1
- package/browser/{chunk-GTNTE2V7.js → chunk-RL4KFYQP.js} +1 -1
- package/browser/{chunk-VIFGZQZS.js → chunk-SGFUH5UA.js} +1 -1
- package/browser/{chunk-7INOPTJ6.js → chunk-T3I7NTOQ.js} +1 -1
- package/browser/{chunk-VKFTCAHS.js → chunk-TENYI4EC.js} +1 -1
- package/browser/{chunk-NBZFBJ7T.js → chunk-UFEQT6BE.js} +1 -1
- package/browser/{chunk-5DYITBLP.js → chunk-UYZM2V6A.js} +1 -1
- package/browser/{chunk-ZTTTDVEL.js → chunk-V73M5X7I.js} +1 -1
- package/browser/{chunk-UOGHINOM.js → chunk-WHD2IW2X.js} +1 -1
- package/browser/{chunk-GIMSVKQM.js → chunk-WSSS5C5X.js} +1 -1
- package/browser/{chunk-IKNFRB6Z.js → chunk-X22JI4VZ.js} +1 -1
- package/browser/{chunk-XV6SOT4A.js → chunk-XT4M6T63.js} +1 -1
- package/browser/{chunk-EQGMNQH5.js → chunk-Y4QTMCUV.js} +1 -1
- package/browser/{chunk-73XLCIE3.js → chunk-ZMHXU7WR.js} +1 -1
- package/browser/index.html +1 -1
- package/browser/{main-FLHOTSKQ.js → main-R4ATV5FL.js} +1 -1
- package/package.json +1 -1
- package/browser/chunk-SPSXBYO3.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as z,f as D}from"./chunk-ZTTTDVEL.js";import{b as V,d as T}from"./chunk-UARV2YUR.js";import{a as M}from"./chunk-WJFUKUVD.js";import{F as U,b as L,c as $,e as O,g as B,h as G,i as W,l as d,n as j,s as q,w as J}from"./chunk-F4YDJMK7.js";import{Bb as E,Db as h,Fb as s,Ka as a,Tb as r,Ub as w,Vb as R,Wa as A,a as k,b as I,ca as p,ga as v,ha as y,lb as C,ma as P,mb as b,pb as F,qb as N,rb as c,sb as o,ta as _,tb as n,ub as f,z as S}from"./chunk-QPN22TF2.js";var K=(i,t)=>t.config.id;function Q(i,t){i&1&&(o(0,"p",5),r(1,"Loading\u2026"),n())}function X(i,t){if(i&1&&(o(0,"span",32),r(1),n()),i&2){let e=s().$implicit;a(),w(e.config.integrationType)}}function Y(i,t){if(i&1&&f(0,"input",33),i&2){let e=s().$implicit;c("formControl",e.toolsControl)}}function Z(i,t){if(i&1){let e=E();o(0,"div",28)(1,"label",29)(2,"input",30),h("change",function(){let g=v(e).$implicit,m=s(3);return y(m.toggleIntegration(g))}),n(),o(3,"span",31),r(4),n(),C(5,X,2,1,"span",32),n(),C(6,Y,1,1,"input",33),n()}if(i&2){let e=t.$implicit;a(2),c("checked",e.enabled()),a(2),w(e.config.name),a(),b(e.config.integrationType?5:-1),a(),b(e.enabled()?6:-1)}}function ee(i,t){if(i&1&&(o(0,"fieldset",18)(1,"legend",26),r(2,"Integrations"),n(),o(3,"p",27),r(4," Select which integrations this agent can use. Leave tool names empty to allow all tools from an integration. "),n(),F(5,Z,7,4,"div",28,K),n()),i&2){let e=s(2);a(5),N(e.integrationRows())}}function ne(i,t){if(i&1){let e=E();o(0,"form",7),h("ngSubmit",function(){v(e);let g=s();return y(g.submit())}),o(1,"div",8)(2,"label",9),r(3,"Name "),o(4,"span",10),r(5,"*"),n()(),f(6,"input",11),n(),o(7,"div",8)(8,"label",12),r(9,"Description"),n(),f(10,"input",13),n(),o(11,"div",8)(12,"label",14),r(13,"Model name"),n(),f(14,"input",15),n(),o(15,"div",8)(16,"label",16),r(17,"Instructions"),n(),f(18,"textarea",17),n(),C(19,ee,7,0,"fieldset",18),o(20,"div",8)(21,"label",19),f(22,"input",20),o(23,"span",21),r(24,"Advanced mode"),n()(),o(25,"p",22),r(26," When enabled, this agent uses a multi-step reasoning loop instead of a single LLM call. "),n()(),o(27,"div",23)(28,"button",24),r(29),n(),o(30,"button",25),h("click",function(){v(e);let g=s();return y(g.cancel())}),r(31,"Cancel"),n()()()}if(i&2){let e=s();c("formGroup",e.form),a(6),c("formControl",e.nameControl),a(4),c("formControl",e.descriptionControl),a(4),c("formControl",e.modelNameControl),a(4),c("formControl",e.instructionsControl),a(),b(e.integrationRows().length>0?19:-1),a(3),c("formControl",e.advancedExecutionControl),a(6),c("disabled",e.form.invalid||e.isSubmitting()),a(),R(" ",e.isEditMode()?"Save changes":"Create"," ")}}var H=class i{route=p(V);router=p(T);destroyRef=p(P);agentConfigController=p(z);integrationConfigController=p(D);namespaceId=this.route.snapshot.params.namespaceId;form=new W({name:new d("",{nonNullable:!0,validators:[O.required,O.minLength(1)]}),description:new d(null),modelName:new d(null),instructions:new d(null),advancedExecution:new d(!1,{nonNullable:!0})});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get modelNameControl(){return this.form.controls.modelName}get instructionsControl(){return this.form.controls.instructions}get advancedExecutionControl(){return this.form.controls.advancedExecution}isEditMode=_(!1);isSubmitting=_(!1);isLoading=_(!1);integrationRows=_([]);existingConfig=null;ngOnInit(){let t=this.route.snapshot.paramMap.get("agentConfigId");t?(this.isEditMode.set(!0),this.loadConfigAndIntegrations(t)):this.loadIntegrations(void 0)}loadConfigAndIntegrations(t){this.isLoading.set(!0),S({config:this.agentConfigController.getByIdAgentConfig(t),integrations:this.integrationConfigController.listIntegrationConfig(this.namespaceId)}).pipe(M(this.destroyRef)).subscribe({next:({config:e,integrations:l})=>{this.existingConfig=e,this.nameControl.setValue(e.name),this.descriptionControl.setValue(e.description??null),this.modelNameControl.setValue(e.modelName??null),this.instructionsControl.setValue(e.instructions??null),this.advancedExecutionControl.setValue(e.advancedExecution??!1),this.integrationRows.set(this.buildIntegrationRows(l,e.integrations??void 0)),this.isLoading.set(!1)},error:()=>{this.isLoading.set(!1),this.navigateBack()}})}loadIntegrations(t){this.integrationConfigController.listIntegrationConfig(this.namespaceId).pipe(M(this.destroyRef)).subscribe({next:e=>{this.integrationRows.set(this.buildIntegrationRows(e,t??void 0))}})}buildIntegrationRows(t,e){return t.map(l=>{let g=l.name??"",m=e?.[g],x=e!=null&&g in e,u=Array.isArray(m)?m.join(", "):"";return{config:l,enabled:_(x),toolsControl:new d(u,{nonNullable:!0})}})}toggleIntegration(t){t.enabled.update(e=>!e)}buildIntegrationsPayload(){let e=this.integrationRows().filter(g=>g.enabled());if(e.length===0)return;let l={};for(let g of e){let m=g.config.name??"",x=g.toolsControl.value.trim();x===""?l[m]=null:l[m]=x.split(",").map(u=>u.trim()).filter(u=>u.length>0)}return l}submit(){if(this.form.invalid||this.isSubmitting())return;this.isSubmitting.set(!0);let t=I(k({},this.existingConfig??{}),{namespaceId:this.namespaceId,name:this.nameControl.value.trim(),description:this.descriptionControl.value?.trim()||void 0,modelName:this.modelNameControl.value?.trim()||void 0,instructions:this.instructionsControl.value?.trim()||void 0,integrations:this.buildIntegrationsPayload(),advancedExecution:this.advancedExecutionControl.value});(this.isEditMode()?this.agentConfigController.updateAgentConfig(this.existingConfig.id??"",t):this.agentConfigController.createAgentConfig(t)).pipe(M(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(!1)})}cancel(){this.navigateBack()}navigateBack(){this.router.navigate(["/agentos",this.namespaceId,"agent-configs"])}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=A({type:i,selectors:[["agentos-agent-config-form"]],decls:10,vars:2,consts:[[1,"agent-config-form"],[1,"agent-config-form__header"],["type","button","title","Back to agent configs",1,"agent-config-form__back",3,"click"],[1,"agent-config-form__back-icon"],[1,"agent-config-form__title"],[1,"agent-config-form__loading"],[1,"agent-config-form__form",3,"formGroup"],[1,"agent-config-form__form",3,"ngSubmit","formGroup"],[1,"agent-config-form__field"],["for","agent-config-name",1,"agent-config-form__label"],["aria-hidden","true"],["id","agent-config-name","type","text","placeholder","e.g. Support agent","autocomplete","off",1,"agent-config-form__input",3,"formControl"],["for","agent-config-description",1,"agent-config-form__label"],["id","agent-config-description","type","text","placeholder","Optional \u2014 short description of this agent","autocomplete","off",1,"agent-config-form__input",3,"formControl"],["for","agent-config-model-name",1,"agent-config-form__label"],["id","agent-config-model-name","type","text","placeholder","Optional \u2014 model alias or name to use","autocomplete","off",1,"agent-config-form__input",3,"formControl"],["for","agent-config-instructions",1,"agent-config-form__label"],["id","agent-config-instructions","rows","6","placeholder","Optional \u2014 system instructions for this agent",1,"agent-config-form__textarea",3,"formControl"],[1,"agent-config-form__integrations"],[1,"agent-config-form__toggle-label"],["type","checkbox",1,"agent-config-form__toggle-checkbox",3,"formControl"],[1,"agent-config-form__toggle-text"],[1,"agent-config-form__toggle-hint"],[1,"agent-config-form__actions"],["type","submit",1,"agent-config-form__btn","agent-config-form__btn--primary",3,"disabled"],["type","button",1,"agent-config-form__btn",3,"click"],[1,"agent-config-form__label"],[1,"agent-config-form__integrations-hint"],[1,"agent-config-form__integration-row"],[1,"agent-config-form__integration-toggle"],["type","checkbox",1,"agent-config-form__integration-checkbox",3,"change","checked"],[1,"agent-config-form__integration-name"],[1,"agent-config-form__integration-type"],["type","text","placeholder","Tool names, comma-separated (empty = all tools)","autocomplete","off",1,"agent-config-form__input","agent-config-form__integration-tools",3,"formControl"]],template:function(e,l){e&1&&(o(0,"div",0)(1,"header",1)(2,"button",2),h("click",function(){return l.cancel()}),o(3,"span",3),r(4,"\u2190"),n(),r(5," Agent Configs "),n(),o(6,"h1",4),r(7),n()(),C(8,Q,2,0,"p",5)(9,ne,32,9,"form",6),n()),e&2&&(a(7),w(l.isEditMode()?"Edit agent config":"New agent config"),a(),b(l.isLoading()?8:9))},dependencies:[U,j,$,L,B,G,q,J],styles:[".agent-config-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:560px;margin:0 auto;padding:2rem 1rem}.agent-config-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.agent-config-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}.agent-config-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.agent-config-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.agent-config-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:600;color:var(--color-text, #1d1d1f);letter-spacing:-.02em}.agent-config-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);font-size:.9rem;margin:0}.agent-config-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.agent-config-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.agent-config-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text, #1d1d1f)}.agent-config-form__input[_ngcontent-%COMP%], .agent-config-form__textarea[_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}.agent-config-form__input[_ngcontent-%COMP%]:focus, .agent-config-form__textarea[_ngcontent-%COMP%]:focus{border-color:var(--color-primary, #007aff)}.agent-config-form__input[_ngcontent-%COMP%]::placeholder, .agent-config-form__textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary, #6e6e73)}.agent-config-form__textarea[_ngcontent-%COMP%]{resize:vertical;min-height:120px;line-height:1.5}.agent-config-form__integrations[_ngcontent-%COMP%]{border:1px solid var(--color-border, rgba(0, 0, 0, .1));border-radius:8px;padding:1rem;margin:0;display:flex;flex-direction:column;gap:.75rem}.agent-config-form__integrations-hint[_ngcontent-%COMP%]{margin:0;font-size:.8rem;color:var(--color-text-secondary, #6e6e73);line-height:1.4}.agent-config-form__integration-row[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.agent-config-form__integration-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.agent-config-form__integration-checkbox[_ngcontent-%COMP%]{width:1rem;height:1rem;flex-shrink:0;accent-color:var(--color-primary, #007aff);cursor:pointer}.agent-config-form__integration-name[_ngcontent-%COMP%]{font-size:.9rem;font-weight:500;color:var(--color-text, #1d1d1f)}.agent-config-form__integration-type[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary, #6e6e73);font-family:monospace}.agent-config-form__integration-tools[_ngcontent-%COMP%]{margin-left:1.5rem;font-size:.875rem}.agent-config-form__toggle-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.agent-config-form__toggle-checkbox[_ngcontent-%COMP%]{width:1rem;height:1rem;flex-shrink:0;accent-color:var(--color-primary, #007aff);cursor:pointer}.agent-config-form__toggle-text[_ngcontent-%COMP%]{font-size:.9rem;font-weight:500;color:var(--color-text, #1d1d1f)}.agent-config-form__toggle-hint[_ngcontent-%COMP%]{margin:.25rem 0 0 1.5rem;font-size:.8rem;color:var(--color-text-secondary, #6e6e73);line-height:1.4}.agent-config-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.agent-config-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}.agent-config-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover, rgba(0, 0, 0, .04))}.agent-config-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.agent-config-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-primary, #007aff);border-color:var(--color-primary, #007aff);color:#fff}.agent-config-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary-hover, #0051d5);border-color:var(--color-primary-hover, #0051d5)}"],changeDetection:0})};export{H as AgentConfigFormComponent};
|
|
1
|
+
import{b as z,f as D}from"./chunk-V73M5X7I.js";import{b as V,d as T}from"./chunk-UARV2YUR.js";import{a as M}from"./chunk-WJFUKUVD.js";import{F as U,b as L,c as $,e as O,g as B,h as G,i as W,l as d,n as j,s as q,w as J}from"./chunk-F4YDJMK7.js";import{Bb as E,Db as h,Fb as s,Ka as a,Tb as r,Ub as w,Vb as R,Wa as A,a as k,b as I,ca as p,ga as v,ha as y,lb as C,ma as P,mb as b,pb as F,qb as N,rb as c,sb as o,ta as _,tb as n,ub as f,z as S}from"./chunk-QPN22TF2.js";var K=(i,t)=>t.config.id;function Q(i,t){i&1&&(o(0,"p",5),r(1,"Loading\u2026"),n())}function X(i,t){if(i&1&&(o(0,"span",32),r(1),n()),i&2){let e=s().$implicit;a(),w(e.config.integrationType)}}function Y(i,t){if(i&1&&f(0,"input",33),i&2){let e=s().$implicit;c("formControl",e.toolsControl)}}function Z(i,t){if(i&1){let e=E();o(0,"div",28)(1,"label",29)(2,"input",30),h("change",function(){let g=v(e).$implicit,m=s(3);return y(m.toggleIntegration(g))}),n(),o(3,"span",31),r(4),n(),C(5,X,2,1,"span",32),n(),C(6,Y,1,1,"input",33),n()}if(i&2){let e=t.$implicit;a(2),c("checked",e.enabled()),a(2),w(e.config.name),a(),b(e.config.integrationType?5:-1),a(),b(e.enabled()?6:-1)}}function ee(i,t){if(i&1&&(o(0,"fieldset",18)(1,"legend",26),r(2,"Integrations"),n(),o(3,"p",27),r(4," Select which integrations this agent can use. Leave tool names empty to allow all tools from an integration. "),n(),F(5,Z,7,4,"div",28,K),n()),i&2){let e=s(2);a(5),N(e.integrationRows())}}function ne(i,t){if(i&1){let e=E();o(0,"form",7),h("ngSubmit",function(){v(e);let g=s();return y(g.submit())}),o(1,"div",8)(2,"label",9),r(3,"Name "),o(4,"span",10),r(5,"*"),n()(),f(6,"input",11),n(),o(7,"div",8)(8,"label",12),r(9,"Description"),n(),f(10,"input",13),n(),o(11,"div",8)(12,"label",14),r(13,"Model name"),n(),f(14,"input",15),n(),o(15,"div",8)(16,"label",16),r(17,"Instructions"),n(),f(18,"textarea",17),n(),C(19,ee,7,0,"fieldset",18),o(20,"div",8)(21,"label",19),f(22,"input",20),o(23,"span",21),r(24,"Advanced mode"),n()(),o(25,"p",22),r(26," When enabled, this agent uses a multi-step reasoning loop instead of a single LLM call. "),n()(),o(27,"div",23)(28,"button",24),r(29),n(),o(30,"button",25),h("click",function(){v(e);let g=s();return y(g.cancel())}),r(31,"Cancel"),n()()()}if(i&2){let e=s();c("formGroup",e.form),a(6),c("formControl",e.nameControl),a(4),c("formControl",e.descriptionControl),a(4),c("formControl",e.modelNameControl),a(4),c("formControl",e.instructionsControl),a(),b(e.integrationRows().length>0?19:-1),a(3),c("formControl",e.advancedExecutionControl),a(6),c("disabled",e.form.invalid||e.isSubmitting()),a(),R(" ",e.isEditMode()?"Save changes":"Create"," ")}}var H=class i{route=p(V);router=p(T);destroyRef=p(P);agentConfigController=p(z);integrationConfigController=p(D);namespaceId=this.route.snapshot.params.namespaceId;form=new W({name:new d("",{nonNullable:!0,validators:[O.required,O.minLength(1)]}),description:new d(null),modelName:new d(null),instructions:new d(null),advancedExecution:new d(!1,{nonNullable:!0})});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get modelNameControl(){return this.form.controls.modelName}get instructionsControl(){return this.form.controls.instructions}get advancedExecutionControl(){return this.form.controls.advancedExecution}isEditMode=_(!1);isSubmitting=_(!1);isLoading=_(!1);integrationRows=_([]);existingConfig=null;ngOnInit(){let t=this.route.snapshot.paramMap.get("agentConfigId");t?(this.isEditMode.set(!0),this.loadConfigAndIntegrations(t)):this.loadIntegrations(void 0)}loadConfigAndIntegrations(t){this.isLoading.set(!0),S({config:this.agentConfigController.getByIdAgentConfig(t),integrations:this.integrationConfigController.listIntegrationConfig(this.namespaceId)}).pipe(M(this.destroyRef)).subscribe({next:({config:e,integrations:l})=>{this.existingConfig=e,this.nameControl.setValue(e.name),this.descriptionControl.setValue(e.description??null),this.modelNameControl.setValue(e.modelName??null),this.instructionsControl.setValue(e.instructions??null),this.advancedExecutionControl.setValue(e.advancedExecution??!1),this.integrationRows.set(this.buildIntegrationRows(l,e.integrations??void 0)),this.isLoading.set(!1)},error:()=>{this.isLoading.set(!1),this.navigateBack()}})}loadIntegrations(t){this.integrationConfigController.listIntegrationConfig(this.namespaceId).pipe(M(this.destroyRef)).subscribe({next:e=>{this.integrationRows.set(this.buildIntegrationRows(e,t??void 0))}})}buildIntegrationRows(t,e){return t.map(l=>{let g=l.name??"",m=e?.[g],x=e!=null&&g in e,u=Array.isArray(m)?m.join(", "):"";return{config:l,enabled:_(x),toolsControl:new d(u,{nonNullable:!0})}})}toggleIntegration(t){t.enabled.update(e=>!e)}buildIntegrationsPayload(){let e=this.integrationRows().filter(g=>g.enabled());if(e.length===0)return;let l={};for(let g of e){let m=g.config.name??"",x=g.toolsControl.value.trim();x===""?l[m]=null:l[m]=x.split(",").map(u=>u.trim()).filter(u=>u.length>0)}return l}submit(){if(this.form.invalid||this.isSubmitting())return;this.isSubmitting.set(!0);let t=I(k({},this.existingConfig??{}),{namespaceId:this.namespaceId,name:this.nameControl.value.trim(),description:this.descriptionControl.value?.trim()||void 0,modelName:this.modelNameControl.value?.trim()||void 0,instructions:this.instructionsControl.value?.trim()||void 0,integrations:this.buildIntegrationsPayload(),advancedExecution:this.advancedExecutionControl.value});(this.isEditMode()?this.agentConfigController.updateAgentConfig(this.existingConfig.id??"",t):this.agentConfigController.createAgentConfig(t)).pipe(M(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(!1)})}cancel(){this.navigateBack()}navigateBack(){this.router.navigate(["/agentos",this.namespaceId,"agent-configs"])}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=A({type:i,selectors:[["agentos-agent-config-form"]],decls:10,vars:2,consts:[[1,"agent-config-form"],[1,"agent-config-form__header"],["type","button","title","Back to agent configs",1,"agent-config-form__back",3,"click"],[1,"agent-config-form__back-icon"],[1,"agent-config-form__title"],[1,"agent-config-form__loading"],[1,"agent-config-form__form",3,"formGroup"],[1,"agent-config-form__form",3,"ngSubmit","formGroup"],[1,"agent-config-form__field"],["for","agent-config-name",1,"agent-config-form__label"],["aria-hidden","true"],["id","agent-config-name","type","text","placeholder","e.g. Support agent","autocomplete","off",1,"agent-config-form__input",3,"formControl"],["for","agent-config-description",1,"agent-config-form__label"],["id","agent-config-description","type","text","placeholder","Optional \u2014 short description of this agent","autocomplete","off",1,"agent-config-form__input",3,"formControl"],["for","agent-config-model-name",1,"agent-config-form__label"],["id","agent-config-model-name","type","text","placeholder","Optional \u2014 model alias or name to use","autocomplete","off",1,"agent-config-form__input",3,"formControl"],["for","agent-config-instructions",1,"agent-config-form__label"],["id","agent-config-instructions","rows","6","placeholder","Optional \u2014 system instructions for this agent",1,"agent-config-form__textarea",3,"formControl"],[1,"agent-config-form__integrations"],[1,"agent-config-form__toggle-label"],["type","checkbox",1,"agent-config-form__toggle-checkbox",3,"formControl"],[1,"agent-config-form__toggle-text"],[1,"agent-config-form__toggle-hint"],[1,"agent-config-form__actions"],["type","submit",1,"agent-config-form__btn","agent-config-form__btn--primary",3,"disabled"],["type","button",1,"agent-config-form__btn",3,"click"],[1,"agent-config-form__label"],[1,"agent-config-form__integrations-hint"],[1,"agent-config-form__integration-row"],[1,"agent-config-form__integration-toggle"],["type","checkbox",1,"agent-config-form__integration-checkbox",3,"change","checked"],[1,"agent-config-form__integration-name"],[1,"agent-config-form__integration-type"],["type","text","placeholder","Tool names, comma-separated (empty = all tools)","autocomplete","off",1,"agent-config-form__input","agent-config-form__integration-tools",3,"formControl"]],template:function(e,l){e&1&&(o(0,"div",0)(1,"header",1)(2,"button",2),h("click",function(){return l.cancel()}),o(3,"span",3),r(4,"\u2190"),n(),r(5," Agent Configs "),n(),o(6,"h1",4),r(7),n()(),C(8,Q,2,0,"p",5)(9,ne,32,9,"form",6),n()),e&2&&(a(7),w(l.isEditMode()?"Edit agent config":"New agent config"),a(),b(l.isLoading()?8:9))},dependencies:[U,j,$,L,B,G,q,J],styles:[".agent-config-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:560px;margin:0 auto;padding:2rem 1rem}.agent-config-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.agent-config-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}.agent-config-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.agent-config-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.agent-config-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:600;color:var(--color-text, #1d1d1f);letter-spacing:-.02em}.agent-config-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);font-size:.9rem;margin:0}.agent-config-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.agent-config-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.agent-config-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text, #1d1d1f)}.agent-config-form__input[_ngcontent-%COMP%], .agent-config-form__textarea[_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}.agent-config-form__input[_ngcontent-%COMP%]:focus, .agent-config-form__textarea[_ngcontent-%COMP%]:focus{border-color:var(--color-primary, #007aff)}.agent-config-form__input[_ngcontent-%COMP%]::placeholder, .agent-config-form__textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary, #6e6e73)}.agent-config-form__textarea[_ngcontent-%COMP%]{resize:vertical;min-height:120px;line-height:1.5}.agent-config-form__integrations[_ngcontent-%COMP%]{border:1px solid var(--color-border, rgba(0, 0, 0, .1));border-radius:8px;padding:1rem;margin:0;display:flex;flex-direction:column;gap:.75rem}.agent-config-form__integrations-hint[_ngcontent-%COMP%]{margin:0;font-size:.8rem;color:var(--color-text-secondary, #6e6e73);line-height:1.4}.agent-config-form__integration-row[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.agent-config-form__integration-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.agent-config-form__integration-checkbox[_ngcontent-%COMP%]{width:1rem;height:1rem;flex-shrink:0;accent-color:var(--color-primary, #007aff);cursor:pointer}.agent-config-form__integration-name[_ngcontent-%COMP%]{font-size:.9rem;font-weight:500;color:var(--color-text, #1d1d1f)}.agent-config-form__integration-type[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary, #6e6e73);font-family:monospace}.agent-config-form__integration-tools[_ngcontent-%COMP%]{margin-left:1.5rem;font-size:.875rem}.agent-config-form__toggle-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.agent-config-form__toggle-checkbox[_ngcontent-%COMP%]{width:1rem;height:1rem;flex-shrink:0;accent-color:var(--color-primary, #007aff);cursor:pointer}.agent-config-form__toggle-text[_ngcontent-%COMP%]{font-size:.9rem;font-weight:500;color:var(--color-text, #1d1d1f)}.agent-config-form__toggle-hint[_ngcontent-%COMP%]{margin:.25rem 0 0 1.5rem;font-size:.8rem;color:var(--color-text-secondary, #6e6e73);line-height:1.4}.agent-config-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.agent-config-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}.agent-config-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover, rgba(0, 0, 0, .04))}.agent-config-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.agent-config-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-primary, #007aff);border-color:var(--color-primary, #007aff);color:#fff}.agent-config-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary-hover, #0051d5);border-color:var(--color-primary-hover, #0051d5)}"],changeDetection:0})};export{H as AgentConfigFormComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as E}from"./chunk-
|
|
1
|
+
import{a as E}from"./chunk-V73M5X7I.js";import{b as w,d as M}from"./chunk-UARV2YUR.js";import{p as k}from"./chunk-DWPYG4F6.js";import{a as I}from"./chunk-WJFUKUVD.js";import{Db as d,Jb as y,Ka as m,Kb as v,Lb as C,Ma as _,S as f,Sc as x,Tb as l,Wa as b,ca as n,ma as g,rb as p,sb as a,t as h,ta as c,tb as i}from"./chunk-QPN22TF2.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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as a}from"./chunk-
|
|
1
|
+
import{b as a}from"./chunk-RL4KFYQP.js";import"./chunk-V73M5X7I.js";import"./chunk-UARV2YUR.js";import"./chunk-DWPYG4F6.js";import"./chunk-XLNZCT7N.js";import"./chunk-WJFUKUVD.js";import"./chunk-2GHS5VUE.js";import"./chunk-DYANOPHQ.js";import"./chunk-F4YDJMK7.js";import"./chunk-4YLSQZJK.js";import"./chunk-QPN22TF2.js";export{a as NamespaceListComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as z,d as B}from"./chunk-ZTTTDVEL.js";import{b as D,d as L}from"./chunk-UARV2YUR.js";import{a as h,c as ee}from"./chunk-WJFUKUVD.js";import{A as X,B as Y,F as Z,c as R,e as g,g as G,h as $,i as q,l as s,n as j,o as U,s as H,w as J,x as K,y as Q,z as W}from"./chunk-F4YDJMK7.js";import{Bb as w,D as k,Db as _,Fb as p,Ka as a,Tb as r,Ub as N,Vb as V,Wa as A,Wb as T,a as x,b as M,ca as c,ga as v,ha as b,kb as E,kc as F,lb as C,m as P,ma as S,mb as y,pb as O,qb as I,rb as l,sb as i,ta as u,tb as o,ub as m}from"./chunk-QPN22TF2.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(z);aiProviderController=c(B);namespaceId=this.route.snapshot.params.namespaceId;providers=ee(this.aiProviderController.listAiProvider(this.namespaceId).pipe(k(()=>P([]))),{initialValue:[]});form=new q({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:[Z,j,Q,W,R,U,K,G,$,Y,X,H,J],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{c as z,d as B}from"./chunk-V73M5X7I.js";import{b as D,d as L}from"./chunk-UARV2YUR.js";import{a as h,c as ee}from"./chunk-WJFUKUVD.js";import{A as X,B as Y,F as Z,c as R,e as g,g as G,h as $,i as q,l as s,n as j,o as U,s as H,w as J,x as K,y as Q,z as W}from"./chunk-F4YDJMK7.js";import{Bb as w,D as k,Db as _,Fb as p,Ka as a,Tb as r,Ub as N,Vb as V,Wa as A,Wb as T,a as x,b as M,ca as c,ga as v,ha as b,kb as E,kc as F,lb as C,m as P,ma as S,mb as y,pb as O,qb as I,rb as l,sb as i,ta as u,tb as o,ub as m}from"./chunk-QPN22TF2.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(z);aiProviderController=c(B);namespaceId=this.route.snapshot.params.namespaceId;providers=ee(this.aiProviderController.listAiProvider(this.namespaceId).pipe(k(()=>P([]))),{initialValue:[]});form=new q({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:[Z,j,Q,W,R,U,K,G,$,Y,X,H,J],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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"./chunk-WSSS5C5X.js";import"./chunk-XT4M6T63.js";import"./chunk-TENYI4EC.js";import"./chunk-V73M5X7I.js";import"./chunk-UARV2YUR.js";import"./chunk-WJFUKUVD.js";import"./chunk-QPN22TF2.js";export{a as LayoutComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as Q}from"./chunk-ZTTTDVEL.js";import{a as Y,b as j,c as J}from"./chunk-B5UWPZYC.js";import{b as G}from"./chunk-UARV2YUR.js";import{p as X}from"./chunk-DWPYG4F6.js";import{a as U}from"./chunk-WJFUKUVD.js";import{Bb as M,Db as x,Fb as d,Ga as z,Jb as B,Ka as l,Kb as I,Lb as R,Ma as L,Rb as k,Sc as W,Tb as m,Ub as C,Vc as K,Wa as H,ca as b,ga as S,ha as T,jb as q,kc as A,lb as h,ma as D,mb as u,pa as F,pb as V,qb as $,rb as w,sb as r,ta as v,tb as s,ua as O,ub as P}from"./chunk-QPN22TF2.js";var ee=["composerInput"],te=["messagesContainer"],ne=(a,e)=>e.kind==="message"?e.event.id:e.kind==="tool"?e.call.requestId:e.kind==="technical"?e.eventId:"streaming";function ae(a,e){a&1&&(r(0,"div",4)(1,"p"),m(2,"No messages yet."),s()())}function oe(a,e){if(a&1&&(r(0,"div",18)(1,"span",19),m(2),s(),P(3,"div",20),s()),a&2){let t=d().$implicit;k("case-chat__message--user",t.event.actor.role==="USER")("case-chat__message--agent",t.event.actor.role==="AGENT"),l(2),C(t.event.actor.displayName),l(),w("innerHTML",t.html,z)}}function ie(a,e){if(a&1&&(r(0,"div",15)(1,"span",19),m(2),s(),r(3,"p",21),m(4),s()()),a&2){let t=d().$implicit,n=d(2);l(2),C(n.agentDisplayName()),l(2),C(t.text)}}function se(a,e){if(a&1&&(r(0,"span",24),m(1),s()),a&2){let t=d(2).$implicit;l(),C(t.item.detail)}}function re(a,e){if(a&1&&(r(0,"div",22)(1,"span",23),m(2),s(),h(3,se,2,1,"span",24),s()),a&2){let t=d().$implicit;k("case-chat__technical--warn",t.item.type==="WarnEvent"),l(2),C(t.item.label),l(),u(t.item.detail?3:-1)}}function le(a,e){a&1&&m(0," \u23F3 ")}function ce(a,e){a&1&&m(0," \u2705 ")}function de(a,e){a&1&&m(0," \u274C ")}function me(a,e){if(a&1&&(r(0,"div",31)(1,"span",32),m(2,"Payload"),s(),r(3,"pre"),m(4),s()()),a&2){let t=d(3).$implicit;l(4),C(t.call.args)}}function _e(a,e){a&1&&(r(0,"pre"),m(1),s()),a&2&&(l(),C(e))}function pe(a,e){a&1&&(r(0,"span",33),m(1,"Running\u2026"),s())}function ge(a,e){a&1&&(r(0,"span",34),m(1,"No output"),s())}function he(a,e){if(a&1&&(r(0,"div",30),h(1,me,5,1,"div",31),r(2,"div",31)(3,"span",32),m(4,"Output"),s(),h(5,_e,2,1,"pre")(6,pe,2,0,"span",33)(7,ge,2,0,"span",34),s()()),a&2){let t,n=d(2).$implicit,o=d(2);l(),u(n.call.args?1:-1),l(4),u((t=o.extractToolOutput(n.call))?5:n.call.response?7:6,t)}}function ue(a,e){if(a&1){let t=M();r(0,"div",25)(1,"button",26),x("click",function(){S(t);let o=d().$implicit,_=d(2);return T(_.toggleToolCall(o.call.requestId))}),r(2,"span",27),h(3,le,1,0)(4,ce,1,0)(5,de,1,0),s(),r(6,"span",28),m(7),s(),r(8,"span",29),m(9),s()(),h(10,he,8,2,"div",30),s()}if(a&2){let t=d().$implicit,n=d(2);k("case-chat__tool-call--pending",!t.call.response)("case-chat__tool-call--success",(t.call.response==null?null:t.call.response.success)===!0)("case-chat__tool-call--error",(t.call.response==null?null:t.call.response.success)===!1),l(),q("aria-expanded",n.isToolCallExpanded(t.call.requestId)),l(2),u(t.call.response?t.call.response.success?4:5:3),l(4),C(t.call.toolName),l(2),C(n.isToolCallExpanded(t.call.requestId)?"\u25BC":"\u25B6"),l(),u(n.isToolCallExpanded(t.call.requestId)?10:-1)}}function Ce(a,e){if(a&1&&h(0,oe,4,6,"div",14)(1,ie,5,2,"div",15)(2,re,4,4,"div",16)(3,ue,11,11,"div",17),a&2){let t=e.$implicit;u(t.kind==="message"?0:t.kind==="streaming"?1:t.kind==="technical"?2:3)}}function ve(a,e){if(a&1&&V(0,Ce,4,1,null,null,ne),a&2){let t=d();$(t.timeline())}}function fe(a,e){a&1&&(r(0,"div",5),P(1,"span",35)(2,"span",35)(3,"span",35),s())}function xe(a,e){if(a&1){let t=M();r(0,"div",6)(1,"ds-icon-button",36),x("action",function(){S(t);let o=d();return T(o.onScrollToBottomClick())}),s()()}}function be(a,e){if(a&1){let t=M();r(0,"ds-icon-button",37),x("action",function(){S(t);let o=d();return T(o.interrupt())}),s()}}function ye(a,e){if(a&1){let t=M();r(0,"ds-icon-button",38),x("action",function(){S(t);let o=d();return T(o.submit())}),s()}if(a&2){let t=d();w("disabled",!t.canSend)}}var Ee=64,Z=class a{route=b(G);http=b(W);zone=b(F);destroyRef=b(D);domSanitizer=b(K);config=b(Q);caseId=this.route.snapshot.params.caseId;namespaceId=this.route.snapshot.params.namespaceId;markdownRenderer=this.buildMarkdownRenderer();agentDisplayName=A(()=>{let e=this.events();for(let t=e.length-1;t>=0;t--){let n=e[t];if(n){if(n.type==="AgentRunningEvent"||n.type==="AgentSelectedEvent"||n.type==="AgentFinishedEvent"){let o=n.agentName;if(o&&o.trim().length>0)return o}if(n.type==="MessageEvent"){let o=n;if(o.actor?.role==="AGENT"&&o.actor.displayName)return o.actor.displayName}}}return"Assistant"});eventSource=null;composerInput;messagesContainer;events=v([]);messageHtmlCache=new Map;inputValue=v("");isRunning=v(!1);isTerminal=v(!1);showTechnical=v(!1);streamingText=v("");collapsedTools=v(new Set);isAtBottom=v(!0);scrollListenerCleanup=null;constructor(){O(()=>{this.isRunning()||this.isTerminal()||queueMicrotask(()=>this.composerInput?.nativeElement.focus())}),O(()=>{this.timeline(),this.streamingText(),this.isAtBottom()&&queueMicrotask(()=>this.scrollToBottom())}),L(()=>{this.attachScrollListener()})}timeline=A(()=>{let e=this.events(),t=this.streamingText(),n=this.showTechnical(),o=new Map;for(let c of e)if(c.type==="ToolRequestEvent"){let i=c,p=i.toolRequestId??c.id,E=o.get(p);o.set(p,{requestId:p,toolName:i.toolName??"unknown",args:i.args??null,response:E?.response})}else if(c.type==="ToolResponseEvent"){let i=c,p=i.toolRequestId??c.id,E=o.get(p);o.set(p,{requestId:p,toolName:E?.toolName??i.toolName??"unknown",args:E?.args??null,response:i})}let _=[],y=new Set;for(let c of e)if(c.type==="MessageEvent"){let i=c;_.push({kind:"message",event:i,html:this.messageHtmlCache.get(c.id)??""})}else if(c.type==="ToolRequestEvent"||c.type==="ToolResponseEvent"){let p=c.toolRequestId??c.id;y.has(p)||(y.add(p),_.push({kind:"tool",call:o.get(p)}))}else if(n){let i=this.toTechnicalItem(c);i&&_.push({kind:"technical",item:i,eventId:c.id})}return t.trim().length>0&&_.push({kind:"streaming",text:t}),_});get canSend(){return!!this.inputValue().trim()&&!this.isRunning()&&!this.isTerminal()}ngOnInit(){this.connectSse(),this.route.params.pipe(U(this.destroyRef)).subscribe(e=>{let t=e.caseId;t&&t!==this.caseId&&(this.caseId=t,this.reinitialise())})}ngOnDestroy(){this.eventSource?.close(),this.scrollListenerCleanup?.()}attachScrollListener(){let e=this.messagesContainer?.nativeElement;if(!e)return;let t=()=>{let n=e.scrollHeight-e.scrollTop-e.clientHeight;this.isAtBottom.set(n<=Ee)};e.addEventListener("scroll",t,{passive:!0}),this.scrollListenerCleanup=()=>e.removeEventListener("scroll",t)}scrollToBottom(){let e=this.messagesContainer?.nativeElement;e&&(e.scrollTop=e.scrollHeight)}onScrollToBottomClick(){this.isAtBottom.set(!0),this.scrollToBottom()}connectSse(){let e=`${this.config.basePath}/api/cases/${this.caseId}/events`;console.log("[AgentOS SSE] connecting",{url:e,basePath:this.config.basePath,caseId:this.caseId,namespaceId:this.namespaceId,now:new Date().toISOString()}),this.eventSource=this.zone.runOutsideAngular(()=>new EventSource(e));let t=o=>{let _=performance.now(),y=o.type,c=o.data;console.log("[AgentOS SSE] frame received",{sseEventName:y,dataLength:c?.length??0,dataPreview:c?.slice(0,120),receivedAtMs:_});try{let i=JSON.parse(c);this.zone.run(()=>{let p=this.events().length;if(i.type==="MessageEvent"){let g=i,f=this.extractText(g);this.messageHtmlCache.has(i.id)||this.messageHtmlCache.set(i.id,this.renderMarkdown(f))}this.events.update(g=>g.some(f=>f.id===i.id)?g:[...g,i]);let E=this.events().length;if(console.log("[AgentOS SSE] event processed",{sseEventName:y,eventType:i.type,eventId:i.id,beforeLen:p,afterLen:E,running:this.isRunning(),terminal:this.isTerminal()}),i.type==="TextChunkEvent"){let g=i.chunk;g&&this.streamingText.update(f=>f+g);return}if(i.type==="CaseStatusEvent"){let g=i.status,f=g==="KILLED"||g==="ERROR";if(this.isTerminal.set(f),f)this.isRunning.set(!1),this.eventSource?.close(),this.eventSource=null;else{let N=g==="RUNNING";this.isRunning.set(N),N||this.streamingText.set("")}return}if(i.type==="AgentFinishedEvent"){this.isRunning.set(!1),this.streamingText.set("");return}})}catch(i){console.warn("[AgentOS SSE] failed to parse event data",{sseEventName:y,error:i,dataPreview:c?.slice(0,500)})}},n=["MessageEvent","CaseStatusEvent","AgentSelectedEvent","AgentRunningEvent","AgentFinishedEvent","ThinkingEvent","TextChunkEvent","ToolRequestEvent","ToolResponseEvent","WarnEvent"];for(let o of n)console.log("[AgentOS SSE] addEventListener",o),this.eventSource.addEventListener(o,t);this.eventSource.onopen=()=>{console.log("[AgentOS SSE] connection open",{readyState:this.eventSource?.readyState,at:new Date().toISOString()})},this.eventSource.onmessage=o=>{console.log("[AgentOS SSE] onmessage (unnamed event) received",{dataLength:o.data?.length??0,dataPreview:o.data?.slice(0,120)})},this.eventSource.onerror=o=>{console.warn("[AgentOS SSE] connection error",{err:o,readyState:this.eventSource?.readyState,at:new Date().toISOString()}),this.zone.run(()=>{this.isRunning.set(!1)})}}onInput(e){this.inputValue.set(e.target.value)}onKeydown(e){e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),this.submit())}reinitialise(){this.eventSource?.close(),this.eventSource=null,this.events.set([]),this.messageHtmlCache.clear(),this.inputValue.set(""),this.isRunning.set(!1),this.isTerminal.set(!1),this.streamingText.set(""),this.collapsedTools.set(new Set),this.isAtBottom.set(!0),this.connectSse()}submit(){if(!this.canSend)return;let e=this.inputValue().trim();this.inputValue.set(""),this.sendMessage(e)}sendMessage(e){this.isRunning.set(!0),this.streamingText.set(""),this.http.post(`${this.config.basePath}/api/cases/${this.caseId}/messages`,{content:e,userId:"default-user"}).subscribe({error:t=>{console.error("[CaseChat] Failed to send message",t),this.isRunning.set(!1)}})}interrupt(){this.http.post(`${this.config.basePath}/api/cases/${this.caseId}/interrupt`,{}).subscribe({error:e=>console.error("[CaseChat] Failed to interrupt case",e)})}kill(){this.http.post(`${this.config.basePath}/api/cases/${this.caseId}/kill`,{}).subscribe({error:e=>console.error("[CaseChat] Failed to kill case",e)})}extractText(e){return e.content?.filter(t=>"content"in t).map(t=>t.content).join("")??""}extractToolOutput(e){if(!e.response)return null;let t=e.response.output;return t?t.content??null:null}toggleToolCall(e){this.collapsedTools.update(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}isToolCallExpanded(e){return this.collapsedTools().has(e)}toggleShowTechnical(){this.showTechnical.update(e=>!e)}renderMarkdown(e){if(!e)return"";let t=j.parse(e,{renderer:this.markdownRenderer,breaks:!0,gfm:!0,async:!1}),n=J.sanitize(t,{ADD_TAGS:["span"],ADD_ATTR:["aria-hidden","aria-label","target","rel"],ALLOWED_URI_REGEXP:/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.-]+(?:[^a-z+.-:]|$))/i});return this.domSanitizer.bypassSecurityTrustHtml(n)}buildMarkdownRenderer(){let e=new Y,t=e.link.bind(e);return e.link=n=>{let o=t(n);return this.isExternalLink(n.href)&&(o=o.replace("<a ",'<a target="_blank" rel="noopener noreferrer" ').replace("</a>",'<span class="external-link-icon" aria-hidden="true">\u2197</span></a>')),o},e}isExternalLink(e){if(!e||e.startsWith("/")||e.startsWith("#")||e.startsWith("?"))return!1;if(e.startsWith("//"))return!0;try{return new URL(e,window.location.href).hostname!==window.location.hostname}catch(t){return!1}}toTechnicalItem(e){switch(e.type){case"WarnEvent":return{type:"WarnEvent",label:"\u26A0\uFE0F Warn",detail:e.message};case"CaseStatusEvent":return{type:"CaseStatusEvent",label:`\u{1F7E1} Status: ${e.status}`};case"AgentRunningEvent":return{type:"AgentRunningEvent",label:`\u25B6\uFE0F Agent running: ${e.agentName}`};case"AgentFinishedEvent":return{type:"AgentFinishedEvent",label:`\u2705 Agent finished: ${e.agentName}`};case"AgentSelectedEvent":return{type:"AgentSelectedEvent",label:`\u{1F3AF} Agent selected: ${e.agentName}`};default:return null}}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=H({type:a,selectors:[["agentos-case-chat"]],viewQuery:function(t,n){if(t&1&&B(ee,5)(te,5),t&2){let o;I(o=R())&&(n.composerInput=o.first),I(o=R())&&(n.messagesContainer=o.first)}},decls:15,vars:9,consts:[["messagesContainer",""],["composerInput",""],[1,"case-chat"],[1,"case-chat__messages"],[1,"case-chat__empty"],[1,"case-chat__thinking"],[1,"case-chat__scroll-anchor"],[1,"case-chat__composer"],["placeholder","Reply\u2026","rows","3",1,"case-chat__input",3,"input","keydown","value","disabled"],[1,"case-chat__actions"],["variant","default",3,"action","icon","title"],["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__technical",3,"case-chat__technical--warn"],[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","case-chat__message-text--markdown",3,"innerHTML"],[1,"case-chat__message-text"],[1,"case-chat__technical"],[1,"case-chat__technical-label"],[1,"case-chat__technical-detail"],[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","keyboard_arrow_down","variant","default","title","Scroll to bottom",3,"action"],["icon","stop","variant","danger","title","Interrupt",3,"action"],["icon","send","variant","primary","title","Send (Enter)",3,"action","disabled"]],template:function(t,n){t&1&&(r(0,"div",2)(1,"div",3,0),h(3,ae,3,0,"div",4)(4,ve,2,0),h(5,fe,4,0,"div",5),s(),h(6,xe,2,0,"div",6),r(7,"div",7)(8,"textarea",8,1),x("input",function(_){return n.onInput(_)})("keydown",function(_){return n.onKeydown(_)}),s(),r(10,"div",9)(11,"ds-icon-button",10),x("action",function(){return n.toggleShowTechnical()}),s(),h(12,be,1,0,"ds-icon-button",11)(13,ye,1,1,"ds-icon-button",12),r(14,"ds-icon-button",13),x("action",function(){return n.kill()}),s()()()()),t&2&&(l(3),u(n.timeline().length===0?3:4),l(2),u(n.isRunning()?5:-1),l(),u(n.isAtBottom()?-1:6),l(2),w("value",n.inputValue())("disabled",n.isRunning()||n.isTerminal()),l(3),w("icon",n.showTechnical()?"visibility_off":"bug_report")("title",n.showTechnical()?"Hide technical events":"Show technical events"),l(),u(n.isRunning()?12:13),l(2),w("disabled",n.isTerminal()))},dependencies:[X],styles:['[_nghost-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.case-chat[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0;max-width:800px;width:100%;margin:0 auto;padding:1.5rem;gap:1rem;position:relative}.case-chat__messages[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:.75rem;padding-bottom:.5rem;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--color-border, rgba(0, 0, 0, .15)) transparent}.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%]{flex-shrink:0;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__technical[_ngcontent-%COMP%]{flex-shrink:0;display:flex;align-items:baseline;gap:.5rem;padding:.2rem .75rem;border-radius:6px;background:var(--color-surface-secondary, rgba(0, 0, 0, .03));border-left:3px solid var(--color-border, rgba(0, 0, 0, .12));font-size:.78rem;color:var(--color-text-secondary, #6e6e73)}.case-chat__technical--warn[_ngcontent-%COMP%]{border-left-color:var(--color-warning, #f5a623);background:#f5a6230f;color:var(--color-text, #1d1d1f)}.case-chat__technical-label[_ngcontent-%COMP%]{font-weight:500;white-space:nowrap}.case-chat__technical-detail[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.case-chat__message[_ngcontent-%COMP%]{flex-shrink:0}.case-chat__thinking[_ngcontent-%COMP%]{flex-shrink:0;display:flex;gap:.3rem;padding:.75rem 1rem;align-self:flex-start}.case-chat__message-text--markdown[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 .5em}.case-chat__message-text--markdown[_ngcontent-%COMP%] p[_ngcontent-%COMP%]:last-child{margin-bottom:0}.case-chat__message-text--markdown[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], .case-chat__message-text--markdown[_ngcontent-%COMP%] ol[_ngcontent-%COMP%]{margin:.25em 0 .5em;padding-left:1.4em}.case-chat__message-text--markdown[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin-bottom:.2em}.case-chat__message-text--markdown[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--font-mono, ui-monospace, "SF Mono", monospace);font-size:.85em;background:#0000000f;border-radius:3px;padding:.1em .35em}.case-chat__message-text--markdown[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{background:#0000000f;border-radius:6px;padding:.6em .8em;overflow-x:auto;margin:.4em 0}.case-chat__message-text--markdown[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background:none;padding:0;font-size:.8rem}.case-chat__message-text--markdown[_ngcontent-%COMP%] blockquote[_ngcontent-%COMP%]{margin:.4em 0;padding-left:.8em;border-left:3px solid var(--color-border, rgba(0, 0, 0, .15));color:var(--color-text-secondary, #6e6e73)}.case-chat__message-text--markdown[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--color-primary, #0071e3);text-decoration:underline}.case-chat__message-text--markdown[_ngcontent-%COMP%] h1[_ngcontent-%COMP%], .case-chat__message-text--markdown[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], .case-chat__message-text--markdown[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .case-chat__message-text--markdown[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:.5em 0 .25em;font-size:1em;font-weight:600}.case-chat__message-text--markdown[_ngcontent-%COMP%] .external-link-icon[_ngcontent-%COMP%]{font-size:.75em;margin-left:.15em;vertical-align:super}.case-chat__message--streaming[_ngcontent-%COMP%]{opacity:.95}.case-chat__scroll-anchor[_ngcontent-%COMP%]{position:absolute;bottom:calc(2rem + 80px);left:50%;transform:translate(-50%);z-index:10;background:var(--glass-bg, rgba(255, 255, 255, .88));border:1px solid var(--glass-border, rgba(255, 255, 255, .3));backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-radius:50%;box-shadow:0 2px 12px #0000001f;animation:_ngcontent-%COMP%_scroll-anchor-in .15s ease}.case-chat__composer[_ngcontent-%COMP%]{flex-shrink:0;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}}@keyframes _ngcontent-%COMP%_scroll-anchor-in{0%{opacity:0;transform:translate(-50%) translateY(8px)}to{opacity:1;transform:translate(-50%) translateY(0)}}']})};export{Z as a};
|
|
1
|
+
import{a as Q}from"./chunk-V73M5X7I.js";import{a as Y,b as j,c as J}from"./chunk-B5UWPZYC.js";import{b as G}from"./chunk-UARV2YUR.js";import{p as X}from"./chunk-DWPYG4F6.js";import{a as U}from"./chunk-WJFUKUVD.js";import{Bb as M,Db as x,Fb as d,Ga as z,Jb as B,Ka as l,Kb as I,Lb as R,Ma as L,Rb as k,Sc as W,Tb as m,Ub as C,Vc as K,Wa as H,ca as b,ga as S,ha as T,jb as q,kc as A,lb as h,ma as D,mb as u,pa as F,pb as V,qb as $,rb as w,sb as r,ta as v,tb as s,ua as O,ub as P}from"./chunk-QPN22TF2.js";var ee=["composerInput"],te=["messagesContainer"],ne=(a,e)=>e.kind==="message"?e.event.id:e.kind==="tool"?e.call.requestId:e.kind==="technical"?e.eventId:"streaming";function ae(a,e){a&1&&(r(0,"div",4)(1,"p"),m(2,"No messages yet."),s()())}function oe(a,e){if(a&1&&(r(0,"div",18)(1,"span",19),m(2),s(),P(3,"div",20),s()),a&2){let t=d().$implicit;k("case-chat__message--user",t.event.actor.role==="USER")("case-chat__message--agent",t.event.actor.role==="AGENT"),l(2),C(t.event.actor.displayName),l(),w("innerHTML",t.html,z)}}function ie(a,e){if(a&1&&(r(0,"div",15)(1,"span",19),m(2),s(),r(3,"p",21),m(4),s()()),a&2){let t=d().$implicit,n=d(2);l(2),C(n.agentDisplayName()),l(2),C(t.text)}}function se(a,e){if(a&1&&(r(0,"span",24),m(1),s()),a&2){let t=d(2).$implicit;l(),C(t.item.detail)}}function re(a,e){if(a&1&&(r(0,"div",22)(1,"span",23),m(2),s(),h(3,se,2,1,"span",24),s()),a&2){let t=d().$implicit;k("case-chat__technical--warn",t.item.type==="WarnEvent"),l(2),C(t.item.label),l(),u(t.item.detail?3:-1)}}function le(a,e){a&1&&m(0," \u23F3 ")}function ce(a,e){a&1&&m(0," \u2705 ")}function de(a,e){a&1&&m(0," \u274C ")}function me(a,e){if(a&1&&(r(0,"div",31)(1,"span",32),m(2,"Payload"),s(),r(3,"pre"),m(4),s()()),a&2){let t=d(3).$implicit;l(4),C(t.call.args)}}function _e(a,e){a&1&&(r(0,"pre"),m(1),s()),a&2&&(l(),C(e))}function pe(a,e){a&1&&(r(0,"span",33),m(1,"Running\u2026"),s())}function ge(a,e){a&1&&(r(0,"span",34),m(1,"No output"),s())}function he(a,e){if(a&1&&(r(0,"div",30),h(1,me,5,1,"div",31),r(2,"div",31)(3,"span",32),m(4,"Output"),s(),h(5,_e,2,1,"pre")(6,pe,2,0,"span",33)(7,ge,2,0,"span",34),s()()),a&2){let t,n=d(2).$implicit,o=d(2);l(),u(n.call.args?1:-1),l(4),u((t=o.extractToolOutput(n.call))?5:n.call.response?7:6,t)}}function ue(a,e){if(a&1){let t=M();r(0,"div",25)(1,"button",26),x("click",function(){S(t);let o=d().$implicit,_=d(2);return T(_.toggleToolCall(o.call.requestId))}),r(2,"span",27),h(3,le,1,0)(4,ce,1,0)(5,de,1,0),s(),r(6,"span",28),m(7),s(),r(8,"span",29),m(9),s()(),h(10,he,8,2,"div",30),s()}if(a&2){let t=d().$implicit,n=d(2);k("case-chat__tool-call--pending",!t.call.response)("case-chat__tool-call--success",(t.call.response==null?null:t.call.response.success)===!0)("case-chat__tool-call--error",(t.call.response==null?null:t.call.response.success)===!1),l(),q("aria-expanded",n.isToolCallExpanded(t.call.requestId)),l(2),u(t.call.response?t.call.response.success?4:5:3),l(4),C(t.call.toolName),l(2),C(n.isToolCallExpanded(t.call.requestId)?"\u25BC":"\u25B6"),l(),u(n.isToolCallExpanded(t.call.requestId)?10:-1)}}function Ce(a,e){if(a&1&&h(0,oe,4,6,"div",14)(1,ie,5,2,"div",15)(2,re,4,4,"div",16)(3,ue,11,11,"div",17),a&2){let t=e.$implicit;u(t.kind==="message"?0:t.kind==="streaming"?1:t.kind==="technical"?2:3)}}function ve(a,e){if(a&1&&V(0,Ce,4,1,null,null,ne),a&2){let t=d();$(t.timeline())}}function fe(a,e){a&1&&(r(0,"div",5),P(1,"span",35)(2,"span",35)(3,"span",35),s())}function xe(a,e){if(a&1){let t=M();r(0,"div",6)(1,"ds-icon-button",36),x("action",function(){S(t);let o=d();return T(o.onScrollToBottomClick())}),s()()}}function be(a,e){if(a&1){let t=M();r(0,"ds-icon-button",37),x("action",function(){S(t);let o=d();return T(o.interrupt())}),s()}}function ye(a,e){if(a&1){let t=M();r(0,"ds-icon-button",38),x("action",function(){S(t);let o=d();return T(o.submit())}),s()}if(a&2){let t=d();w("disabled",!t.canSend)}}var Ee=64,Z=class a{route=b(G);http=b(W);zone=b(F);destroyRef=b(D);domSanitizer=b(K);config=b(Q);caseId=this.route.snapshot.params.caseId;namespaceId=this.route.snapshot.params.namespaceId;markdownRenderer=this.buildMarkdownRenderer();agentDisplayName=A(()=>{let e=this.events();for(let t=e.length-1;t>=0;t--){let n=e[t];if(n){if(n.type==="AgentRunningEvent"||n.type==="AgentSelectedEvent"||n.type==="AgentFinishedEvent"){let o=n.agentName;if(o&&o.trim().length>0)return o}if(n.type==="MessageEvent"){let o=n;if(o.actor?.role==="AGENT"&&o.actor.displayName)return o.actor.displayName}}}return"Assistant"});eventSource=null;composerInput;messagesContainer;events=v([]);messageHtmlCache=new Map;inputValue=v("");isRunning=v(!1);isTerminal=v(!1);showTechnical=v(!1);streamingText=v("");collapsedTools=v(new Set);isAtBottom=v(!0);scrollListenerCleanup=null;constructor(){O(()=>{this.isRunning()||this.isTerminal()||queueMicrotask(()=>this.composerInput?.nativeElement.focus())}),O(()=>{this.timeline(),this.streamingText(),this.isAtBottom()&&queueMicrotask(()=>this.scrollToBottom())}),L(()=>{this.attachScrollListener()})}timeline=A(()=>{let e=this.events(),t=this.streamingText(),n=this.showTechnical(),o=new Map;for(let c of e)if(c.type==="ToolRequestEvent"){let i=c,p=i.toolRequestId??c.id,E=o.get(p);o.set(p,{requestId:p,toolName:i.toolName??"unknown",args:i.args??null,response:E?.response})}else if(c.type==="ToolResponseEvent"){let i=c,p=i.toolRequestId??c.id,E=o.get(p);o.set(p,{requestId:p,toolName:E?.toolName??i.toolName??"unknown",args:E?.args??null,response:i})}let _=[],y=new Set;for(let c of e)if(c.type==="MessageEvent"){let i=c;_.push({kind:"message",event:i,html:this.messageHtmlCache.get(c.id)??""})}else if(c.type==="ToolRequestEvent"||c.type==="ToolResponseEvent"){let p=c.toolRequestId??c.id;y.has(p)||(y.add(p),_.push({kind:"tool",call:o.get(p)}))}else if(n){let i=this.toTechnicalItem(c);i&&_.push({kind:"technical",item:i,eventId:c.id})}return t.trim().length>0&&_.push({kind:"streaming",text:t}),_});get canSend(){return!!this.inputValue().trim()&&!this.isRunning()&&!this.isTerminal()}ngOnInit(){this.connectSse(),this.route.params.pipe(U(this.destroyRef)).subscribe(e=>{let t=e.caseId;t&&t!==this.caseId&&(this.caseId=t,this.reinitialise())})}ngOnDestroy(){this.eventSource?.close(),this.scrollListenerCleanup?.()}attachScrollListener(){let e=this.messagesContainer?.nativeElement;if(!e)return;let t=()=>{let n=e.scrollHeight-e.scrollTop-e.clientHeight;this.isAtBottom.set(n<=Ee)};e.addEventListener("scroll",t,{passive:!0}),this.scrollListenerCleanup=()=>e.removeEventListener("scroll",t)}scrollToBottom(){let e=this.messagesContainer?.nativeElement;e&&(e.scrollTop=e.scrollHeight)}onScrollToBottomClick(){this.isAtBottom.set(!0),this.scrollToBottom()}connectSse(){let e=`${this.config.basePath}/api/cases/${this.caseId}/events`;console.log("[AgentOS SSE] connecting",{url:e,basePath:this.config.basePath,caseId:this.caseId,namespaceId:this.namespaceId,now:new Date().toISOString()}),this.eventSource=this.zone.runOutsideAngular(()=>new EventSource(e));let t=o=>{let _=performance.now(),y=o.type,c=o.data;console.log("[AgentOS SSE] frame received",{sseEventName:y,dataLength:c?.length??0,dataPreview:c?.slice(0,120),receivedAtMs:_});try{let i=JSON.parse(c);this.zone.run(()=>{let p=this.events().length;if(i.type==="MessageEvent"){let g=i,f=this.extractText(g);this.messageHtmlCache.has(i.id)||this.messageHtmlCache.set(i.id,this.renderMarkdown(f))}this.events.update(g=>g.some(f=>f.id===i.id)?g:[...g,i]);let E=this.events().length;if(console.log("[AgentOS SSE] event processed",{sseEventName:y,eventType:i.type,eventId:i.id,beforeLen:p,afterLen:E,running:this.isRunning(),terminal:this.isTerminal()}),i.type==="TextChunkEvent"){let g=i.chunk;g&&this.streamingText.update(f=>f+g);return}if(i.type==="CaseStatusEvent"){let g=i.status,f=g==="KILLED"||g==="ERROR";if(this.isTerminal.set(f),f)this.isRunning.set(!1),this.eventSource?.close(),this.eventSource=null;else{let N=g==="RUNNING";this.isRunning.set(N),N||this.streamingText.set("")}return}if(i.type==="AgentFinishedEvent"){this.isRunning.set(!1),this.streamingText.set("");return}})}catch(i){console.warn("[AgentOS SSE] failed to parse event data",{sseEventName:y,error:i,dataPreview:c?.slice(0,500)})}},n=["MessageEvent","CaseStatusEvent","AgentSelectedEvent","AgentRunningEvent","AgentFinishedEvent","ThinkingEvent","TextChunkEvent","ToolRequestEvent","ToolResponseEvent","WarnEvent"];for(let o of n)console.log("[AgentOS SSE] addEventListener",o),this.eventSource.addEventListener(o,t);this.eventSource.onopen=()=>{console.log("[AgentOS SSE] connection open",{readyState:this.eventSource?.readyState,at:new Date().toISOString()})},this.eventSource.onmessage=o=>{console.log("[AgentOS SSE] onmessage (unnamed event) received",{dataLength:o.data?.length??0,dataPreview:o.data?.slice(0,120)})},this.eventSource.onerror=o=>{console.warn("[AgentOS SSE] connection error",{err:o,readyState:this.eventSource?.readyState,at:new Date().toISOString()}),this.zone.run(()=>{this.isRunning.set(!1)})}}onInput(e){this.inputValue.set(e.target.value)}onKeydown(e){e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),this.submit())}reinitialise(){this.eventSource?.close(),this.eventSource=null,this.events.set([]),this.messageHtmlCache.clear(),this.inputValue.set(""),this.isRunning.set(!1),this.isTerminal.set(!1),this.streamingText.set(""),this.collapsedTools.set(new Set),this.isAtBottom.set(!0),this.connectSse()}submit(){if(!this.canSend)return;let e=this.inputValue().trim();this.inputValue.set(""),this.sendMessage(e)}sendMessage(e){this.isRunning.set(!0),this.streamingText.set(""),this.http.post(`${this.config.basePath}/api/cases/${this.caseId}/messages`,{content:e,userId:"default-user"}).subscribe({error:t=>{console.error("[CaseChat] Failed to send message",t),this.isRunning.set(!1)}})}interrupt(){this.http.post(`${this.config.basePath}/api/cases/${this.caseId}/interrupt`,{}).subscribe({error:e=>console.error("[CaseChat] Failed to interrupt case",e)})}kill(){this.http.post(`${this.config.basePath}/api/cases/${this.caseId}/kill`,{}).subscribe({error:e=>console.error("[CaseChat] Failed to kill case",e)})}extractText(e){return e.content?.filter(t=>"content"in t).map(t=>t.content).join("")??""}extractToolOutput(e){if(!e.response)return null;let t=e.response.output;return t?t.content??null:null}toggleToolCall(e){this.collapsedTools.update(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}isToolCallExpanded(e){return this.collapsedTools().has(e)}toggleShowTechnical(){this.showTechnical.update(e=>!e)}renderMarkdown(e){if(!e)return"";let t=j.parse(e,{renderer:this.markdownRenderer,breaks:!0,gfm:!0,async:!1}),n=J.sanitize(t,{ADD_TAGS:["span"],ADD_ATTR:["aria-hidden","aria-label","target","rel"],ALLOWED_URI_REGEXP:/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.-]+(?:[^a-z+.-:]|$))/i});return this.domSanitizer.bypassSecurityTrustHtml(n)}buildMarkdownRenderer(){let e=new Y,t=e.link.bind(e);return e.link=n=>{let o=t(n);return this.isExternalLink(n.href)&&(o=o.replace("<a ",'<a target="_blank" rel="noopener noreferrer" ').replace("</a>",'<span class="external-link-icon" aria-hidden="true">\u2197</span></a>')),o},e}isExternalLink(e){if(!e||e.startsWith("/")||e.startsWith("#")||e.startsWith("?"))return!1;if(e.startsWith("//"))return!0;try{return new URL(e,window.location.href).hostname!==window.location.hostname}catch(t){return!1}}toTechnicalItem(e){switch(e.type){case"WarnEvent":return{type:"WarnEvent",label:"\u26A0\uFE0F Warn",detail:e.message};case"CaseStatusEvent":return{type:"CaseStatusEvent",label:`\u{1F7E1} Status: ${e.status}`};case"AgentRunningEvent":return{type:"AgentRunningEvent",label:`\u25B6\uFE0F Agent running: ${e.agentName}`};case"AgentFinishedEvent":return{type:"AgentFinishedEvent",label:`\u2705 Agent finished: ${e.agentName}`};case"AgentSelectedEvent":return{type:"AgentSelectedEvent",label:`\u{1F3AF} Agent selected: ${e.agentName}`};default:return null}}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=H({type:a,selectors:[["agentos-case-chat"]],viewQuery:function(t,n){if(t&1&&B(ee,5)(te,5),t&2){let o;I(o=R())&&(n.composerInput=o.first),I(o=R())&&(n.messagesContainer=o.first)}},decls:15,vars:9,consts:[["messagesContainer",""],["composerInput",""],[1,"case-chat"],[1,"case-chat__messages"],[1,"case-chat__empty"],[1,"case-chat__thinking"],[1,"case-chat__scroll-anchor"],[1,"case-chat__composer"],["placeholder","Reply\u2026","rows","3",1,"case-chat__input",3,"input","keydown","value","disabled"],[1,"case-chat__actions"],["variant","default",3,"action","icon","title"],["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__technical",3,"case-chat__technical--warn"],[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","case-chat__message-text--markdown",3,"innerHTML"],[1,"case-chat__message-text"],[1,"case-chat__technical"],[1,"case-chat__technical-label"],[1,"case-chat__technical-detail"],[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","keyboard_arrow_down","variant","default","title","Scroll to bottom",3,"action"],["icon","stop","variant","danger","title","Interrupt",3,"action"],["icon","send","variant","primary","title","Send (Enter)",3,"action","disabled"]],template:function(t,n){t&1&&(r(0,"div",2)(1,"div",3,0),h(3,ae,3,0,"div",4)(4,ve,2,0),h(5,fe,4,0,"div",5),s(),h(6,xe,2,0,"div",6),r(7,"div",7)(8,"textarea",8,1),x("input",function(_){return n.onInput(_)})("keydown",function(_){return n.onKeydown(_)}),s(),r(10,"div",9)(11,"ds-icon-button",10),x("action",function(){return n.toggleShowTechnical()}),s(),h(12,be,1,0,"ds-icon-button",11)(13,ye,1,1,"ds-icon-button",12),r(14,"ds-icon-button",13),x("action",function(){return n.kill()}),s()()()()),t&2&&(l(3),u(n.timeline().length===0?3:4),l(2),u(n.isRunning()?5:-1),l(),u(n.isAtBottom()?-1:6),l(2),w("value",n.inputValue())("disabled",n.isRunning()||n.isTerminal()),l(3),w("icon",n.showTechnical()?"visibility_off":"bug_report")("title",n.showTechnical()?"Hide technical events":"Show technical events"),l(),u(n.isRunning()?12:13),l(2),w("disabled",n.isTerminal()))},dependencies:[X],styles:['[_nghost-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.case-chat[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0;max-width:800px;width:100%;margin:0 auto;padding:1.5rem;gap:1rem;position:relative}.case-chat__messages[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:.75rem;padding-bottom:.5rem;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--color-border, rgba(0, 0, 0, .15)) transparent}.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%]{flex-shrink:0;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__technical[_ngcontent-%COMP%]{flex-shrink:0;display:flex;align-items:baseline;gap:.5rem;padding:.2rem .75rem;border-radius:6px;background:var(--color-surface-secondary, rgba(0, 0, 0, .03));border-left:3px solid var(--color-border, rgba(0, 0, 0, .12));font-size:.78rem;color:var(--color-text-secondary, #6e6e73)}.case-chat__technical--warn[_ngcontent-%COMP%]{border-left-color:var(--color-warning, #f5a623);background:#f5a6230f;color:var(--color-text, #1d1d1f)}.case-chat__technical-label[_ngcontent-%COMP%]{font-weight:500;white-space:nowrap}.case-chat__technical-detail[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.case-chat__message[_ngcontent-%COMP%]{flex-shrink:0}.case-chat__thinking[_ngcontent-%COMP%]{flex-shrink:0;display:flex;gap:.3rem;padding:.75rem 1rem;align-self:flex-start}.case-chat__message-text--markdown[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 .5em}.case-chat__message-text--markdown[_ngcontent-%COMP%] p[_ngcontent-%COMP%]:last-child{margin-bottom:0}.case-chat__message-text--markdown[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], .case-chat__message-text--markdown[_ngcontent-%COMP%] ol[_ngcontent-%COMP%]{margin:.25em 0 .5em;padding-left:1.4em}.case-chat__message-text--markdown[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin-bottom:.2em}.case-chat__message-text--markdown[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--font-mono, ui-monospace, "SF Mono", monospace);font-size:.85em;background:#0000000f;border-radius:3px;padding:.1em .35em}.case-chat__message-text--markdown[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{background:#0000000f;border-radius:6px;padding:.6em .8em;overflow-x:auto;margin:.4em 0}.case-chat__message-text--markdown[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background:none;padding:0;font-size:.8rem}.case-chat__message-text--markdown[_ngcontent-%COMP%] blockquote[_ngcontent-%COMP%]{margin:.4em 0;padding-left:.8em;border-left:3px solid var(--color-border, rgba(0, 0, 0, .15));color:var(--color-text-secondary, #6e6e73)}.case-chat__message-text--markdown[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--color-primary, #0071e3);text-decoration:underline}.case-chat__message-text--markdown[_ngcontent-%COMP%] h1[_ngcontent-%COMP%], .case-chat__message-text--markdown[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], .case-chat__message-text--markdown[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .case-chat__message-text--markdown[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:.5em 0 .25em;font-size:1em;font-weight:600}.case-chat__message-text--markdown[_ngcontent-%COMP%] .external-link-icon[_ngcontent-%COMP%]{font-size:.75em;margin-left:.15em;vertical-align:super}.case-chat__message--streaming[_ngcontent-%COMP%]{opacity:.95}.case-chat__scroll-anchor[_ngcontent-%COMP%]{position:absolute;bottom:calc(2rem + 80px);left:50%;transform:translate(-50%);z-index:10;background:var(--glass-bg, rgba(255, 255, 255, .88));border:1px solid var(--glass-border, rgba(255, 255, 255, .3));backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-radius:50%;box-shadow:0 2px 12px #0000001f;animation:_ngcontent-%COMP%_scroll-anchor-in .15s ease}.case-chat__composer[_ngcontent-%COMP%]{flex-shrink:0;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}}@keyframes _ngcontent-%COMP%_scroll-anchor-in{0%{opacity:0;transform:translate(-50%) translateY(8px)}to{opacity:1;transform:translate(-50%) translateY(0)}}']})};export{Z as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as ne}from"./chunk-LEIES4AA.js";import{a as ie}from"./chunk-QIURQTGU.js";import"./chunk-L7OS7MWE.js";import"./chunk-VKFTCAHS.js";import{l as L}from"./chunk-ZTTTDVEL.js";import{b as K,d as G}from"./chunk-UARV2YUR.js";import{a as S,c as oe}from"./chunk-WJFUKUVD.js";import{F as te,c as B,e as _,g as z,h as $,i as A,l as p,n as q,p as j,r as H,s as J,t as Q,u as W,v as X,w as Y,x as Z,y as ee,z as re}from"./chunk-F4YDJMK7.js";import{Bb as O,Db as v,Fb as u,Ka as a,Tb as i,Ub as P,Vb as U,Wa as F,ca as f,ga as g,ha as h,kb as T,lb as I,ma as w,mb as V,nb as R,ob as D,pb as C,qb as x,rb as d,sb as o,ta as b,tb as t,ua as N,ub as c}from"./chunk-QPN22TF2.js";function se(l,r){l&1&&(o(0,"p",5),i(1,"Loading\u2026"),t())}function de(l,r){if(l&1&&(o(0,"label",10),c(1,"input",31),o(2,"span"),i(3),t()()),l&2){let e=r.$implicit,n=u(2);a(),d("formControl",n.scopeControl)("value",e.value)("disabled",e.value==="namespace"&&!n.isAdmin()),a(2),P(e.label)}}function pe(l,r){if(l&1&&(o(0,"option",15),i(1),t()),l&2){let e=r.$implicit;d("value",e),a(),P(e)}}function me(l,r){if(l&1){let e=O();o(0,"div",27),c(1,"input",32)(2,"input",33),o(3,"button",34),v("click",function(){let s=g(e).$index,m=u(2);return h(m.removeHeader(s))}),i(4," \xD7 "),t()()}if(l&2){let e=r.$index;d("formGroupName",e)}}function ce(l,r){if(l&1){let e=O();o(0,"form",7),v("ngSubmit",function(){g(e);let s=u();return h(s.submit())}),o(1,"fieldset",8)(2,"legend",9),i(3,"Port\xE9e de la configuration"),t(),C(4,de,4,4,"label",10,T().trackByScope,!0),t(),o(6,"div",11)(7,"label",12),i(8,"API type "),o(9,"span",13),i(10,"*"),t()(),o(11,"select",14),C(12,pe,2,2,"option",15,D),t()(),o(14,"div",11)(15,"label",16),i(16,"Name "),o(17,"span",13),i(18,"*"),t()(),c(19,"input",17),t(),o(20,"div",11)(21,"label",18),i(22,"Description"),t(),c(23,"input",19),t(),o(24,"div",11)(25,"label",20),i(26,"Base URL"),t(),c(27,"input",21),t(),o(28,"div",11)(29,"label",22),i(30,"API key"),t(),c(31,"input",23),t(),o(32,"div",24)(33,"div",25)(34,"span",9),i(35,"Custom headers"),t(),o(36,"button",26),v("click",function(){g(e);let s=u();return h(s.addHeader())}),i(37,"+ Add header"),t()(),C(38,me,5,1,"div",27,R),t(),o(40,"div",28)(41,"button",29),i(42),t(),o(43,"button",30),v("click",function(){g(e);let s=u();return h(s.cancel())}),i(44,"Cancel"),t()()()}if(l&2){let e=u();d("formGroup",e.form),a(),d("disabled",e.isEditMode()),a(3),x(e.scopeOptions),a(7),d("formControl",e.apiTypeControl),a(),x(e.apiTypeOptions),a(7),d("formControl",e.nameControl),a(4),d("formControl",e.descriptionControl),a(4),d("formControl",e.baseUrlControl),a(4),d("formControl",e.apiKeyControl),a(),d("formArrayName","headers"),a(6),x(e.headersArray.controls),a(3),d("disabled",e.form.invalid||e.isSubmitting()),a(),U(" ",e.isEditMode()?"Save changes":"Create"," ")}}var ue=new Set(["namespace","userOnNs","userGlobal"]),k=Object.freeze({namespace:"Configuration du namespace",userOnNs:"Pour moi sur ce namespace",userGlobal:"Pour moi globalement"}),ae=class l{route=f(K);router=f(G);destroyRef=f(w);state=f(ne);namespaceRole=f(ie);namespaceId=this.route.snapshot.params.namespaceId;isAdmin=oe(this.namespaceRole.isAdminOfNamespace$(this.namespaceId),{initialValue:!1});apiTypeOptions=Object.values(L);scopeOptions=[{value:"namespace",label:k.namespace},{value:"userOnNs",label:k.userOnNs},{value:"userGlobal",label:k.userGlobal}];form=new A({name:new p("",{nonNullable:!0,validators:[_.required,_.minLength(1)]}),description:new p(null),apiType:new p("OpenAI",{nonNullable:!0,validators:[_.required]}),baseUrl:new p("",{nonNullable:!0}),apiKey:new p("",{nonNullable:!0}),scope:new p("namespace",{nonNullable:!0}),headers:new H([],{validators:[]})});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get apiTypeControl(){return this.form.controls.apiType}get baseUrlControl(){return this.form.controls.baseUrl}get apiKeyControl(){return this.form.controls.apiKey}get scopeControl(){return this.form.controls.scope}get headersArray(){return this.form.controls.headers}addHeader(){this.headersArray.push(new A({key:new p("",{nonNullable:!0,validators:[_.required]}),value:new p("",{nonNullable:!0})}))}removeHeader(r){this.headersArray.removeAt(r)}isEditMode=b(!1);isSubmitting=b(!1);isLoading=b(!1);existingConfig=null;initialApiKey="";constructor(){N(()=>{this.isAdmin()||this.isEditMode()||this.scopeControl.value==="namespace"&&this.scopeControl.setValue("userOnNs")})}ngOnInit(){this.state.setNamespace(this.namespaceId);let r=this.route.snapshot.paramMap,e=this.route.snapshot.queryParamMap,n=r.get("aiProviderId"),s=this.parseScope(e.get("scope"));if(n){this.isEditMode.set(!0),this.scopeControl.disable(),this.loadConfig(n);return}this.scopeControl.setValue(s);let m=e.get("template");m&&this.hydrateFromTemplate(m)}parseScope(r){return r&&ue.has(r)?r:"namespace"}deriveScopeFromConfig(r){return!r.userId?"namespace":r.namespaceId?"userOnNs":"userGlobal"}loadConfig(r){this.isLoading.set(!0),this.state.getById(r).pipe(S(this.destroyRef)).subscribe({next:e=>{this.existingConfig=e,this.scopeControl.setValue(this.deriveScopeFromConfig(e)),this.applyConfigToForm(e),this.isLoading.set(!1)},error:()=>{this.isLoading.set(!1),console.warn(`[AiProviderForm] Could not load provider '${r}' \u2014 navigating back`),this.navigateBack()}})}hydrateFromTemplate(r){this.isLoading.set(!0),this.state.getById(r).pipe(S(this.destroyRef)).subscribe({next:e=>{this.nameControl.setValue(e.name),this.descriptionControl.setValue(e.description??null),this.apiTypeControl.setValue(e.apiType),this.baseUrlControl.setValue(e.baseUrl??""),this.apiKeyControl.setValue(""),this.initialApiKey="",this.apiKeyControl.markAsTouched(),this.isLoading.set(!1),this.router.navigate([],{relativeTo:this.route,queryParams:{template:null,templateScope:null},queryParamsHandling:"merge",replaceUrl:!0})},error:e=>{console.warn(`[AiProviderForm] Could not hydrate from template ${r}:`,e),this.isLoading.set(!1),this.router.navigate([],{relativeTo:this.route,queryParams:{template:null,templateScope:null},queryParamsHandling:"merge",replaceUrl:!0})}})}applyConfigToForm(r){this.nameControl.setValue(r.name),this.descriptionControl.setValue(r.description??null),this.apiTypeControl.setValue(r.apiType),this.baseUrlControl.setValue(r.baseUrl??"");let e=r.apiKey??"";this.apiKeyControl.setValue(e),this.initialApiKey=e,this.headersArray.clear();for(let[n,s]of Object.entries(r.headers??{}))this.headersArray.push(new A({key:new p(n,{nonNullable:!0,validators:[_.required]}),value:new p(s,{nonNullable:!0})}))}submit(){if(this.form.invalid||this.isSubmitting())return;if(this.isEditMode()&&!this.existingConfig?.id){this.navigateBack();return}this.isSubmitting.set(!0);let r=this.descriptionControl.value?.trim(),e=this.baseUrlControl.value.trim(),n=this.apiKeyControl.value,s=this.isEditMode()&&n===this.initialApiKey?null:n,m=this.headersArray.controls.filter(y=>y.controls.key.value.trim()).map(y=>[y.controls.key.value.trim(),y.controls.value.value]),le=m.length>0?Object.fromEntries(m):null,M={name:this.nameControl.value.trim(),apiType:this.apiTypeControl.value,description:r||null,baseUrl:e||null,apiKey:s,headers:le},E=this.form.getRawValue().scope;(this.isEditMode()&&this.existingConfig?.id?this.state.update(this.existingConfig.id,M,E,this.existingConfig):this.state.create(M,E,this.namespaceId)).pipe(S(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(!1)})}cancel(){this.navigateBack()}navigateBack(){this.router.navigate(["/agentos",this.namespaceId,"ai-providers"])}trackByScope(r,e){return e.value}static \u0275fac=function(e){return new(e||l)};static \u0275cmp=F({type:l,selectors:[["agentos-ai-provider-form"]],decls:10,vars:2,consts:[[1,"ai-provider-form"],[1,"ai-provider-form__header"],["type","button","title","Back to AI providers",1,"ai-provider-form__back",3,"click"],[1,"ai-provider-form__back-icon"],[1,"ai-provider-form__title"],[1,"ai-provider-form__loading"],[1,"ai-provider-form__form",3,"formGroup"],[1,"ai-provider-form__form",3,"ngSubmit","formGroup"],[1,"ai-provider-form__scope",3,"disabled"],[1,"ai-provider-form__label"],[1,"ai-provider-form__scope-option"],[1,"ai-provider-form__field"],["for","llm-api-type",1,"ai-provider-form__label"],["aria-hidden","true"],["id","llm-api-type",1,"ai-provider-form__select",3,"formControl"],[3,"value"],["for","llm-name",1,"ai-provider-form__label"],["id","llm-name","type","text","placeholder","e.g. OpenAI prod","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-description",1,"ai-provider-form__label"],["id","llm-description","type","text","placeholder","Optional \u2014 short description of this provider","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-base-url",1,"ai-provider-form__label"],["id","llm-base-url","type","url","placeholder","Optional \u2014 leave empty for default endpoint","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-api-key",1,"ai-provider-form__label"],["id","llm-api-key","type","password","placeholder","sk-\u2026","autocomplete","new-password",1,"ai-provider-form__input","ai-provider-form__input--secret",3,"formControl"],[1,"ai-provider-form__headers",3,"formArrayName"],[1,"ai-provider-form__headers-title"],["type","button",1,"ai-provider-form__headers-add",3,"click"],[1,"ai-provider-form__header-row",3,"formGroupName"],[1,"ai-provider-form__actions"],["type","submit",1,"ai-provider-form__btn","ai-provider-form__btn--primary",3,"disabled"],["type","button",1,"ai-provider-form__btn",3,"click"],["type","radio",3,"formControl","value","disabled"],["type","text","placeholder","Header name","formControlName","key","autocomplete","off",1,"ai-provider-form__input"],["type","text","placeholder","Value","formControlName","value","autocomplete","off",1,"ai-provider-form__input"],["type","button","title","Remove header","aria-label","Remove header",1,"ai-provider-form__header-remove",3,"click"]],template:function(e,n){e&1&&(o(0,"div",0)(1,"header",1)(2,"button",2),v("click",function(){return n.cancel()}),o(3,"span",3),i(4,"\u2190"),t(),i(5," AI Providers "),t(),o(6,"h1",4),i(7),t()(),I(8,se,2,0,"p",5)(9,ce,45,10,"form",6),t()),e&2&&(a(7),P(n.isEditMode()?"Edit AI provider":"New AI provider"),a(),V(n.isLoading()?8:9))},dependencies:[te,q,ee,re,B,Z,j,z,$,J,Y,X,Q,W],styles:[".ai-provider-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:480px;margin:0 auto;padding:2rem 1rem}.ai-provider-form__scope[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.4rem;border:1px solid var(--color-border);border-radius:8px;padding:.75rem 1rem;margin:0}.ai-provider-form__scope[disabled][_ngcontent-%COMP%]{opacity:.6}.ai-provider-form__scope-option[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:.85rem;color:var(--color-text);cursor:pointer}.ai-provider-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-provider-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-provider-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-provider-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.ai-provider-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:600;color:var(--color-text, #1d1d1f);letter-spacing:-.02em}.ai-provider-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);font-size:.9rem;margin:0}.ai-provider-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.ai-provider-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.ai-provider-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text, #1d1d1f)}.ai-provider-form__input[_ngcontent-%COMP%], .ai-provider-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-provider-form__input[_ngcontent-%COMP%]:focus, .ai-provider-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-primary, #007aff)}.ai-provider-form__input[_ngcontent-%COMP%]::placeholder, .ai-provider-form__select[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary, #6e6e73)}.ai-provider-form__input--secret[_ngcontent-%COMP%]{font-family:monospace;letter-spacing:.05em}.ai-provider-form__headers[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-provider-form__headers-title[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between}.ai-provider-form__headers-add[_ngcontent-%COMP%]{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;font-family:inherit;color:var(--color-primary, #007aff)}.ai-provider-form__headers-add[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-provider-form__header-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr auto;gap:.5rem;align-items:center}.ai-provider-form__header-remove[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;background:none;border:1px solid var(--color-border, rgba(0, 0, 0, .1));border-radius:6px;cursor:pointer;font-size:1rem;color:var(--color-text-secondary, #6e6e73);transition:background .15s ease;flex-shrink:0}.ai-provider-form__header-remove[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover, rgba(0, 0, 0, .04))}.ai-provider-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.ai-provider-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-provider-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover, rgba(0, 0, 0, .04))}.ai-provider-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.ai-provider-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-primary, #007aff);border-color:var(--color-primary, #007aff);color:#fff}.ai-provider-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary-hover, #0051d5);border-color:var(--color-primary-hover, #0051d5)}"],changeDetection:0})};export{ae as AiProviderFormComponent};
|
|
1
|
+
import{a as ne}from"./chunk-QZKTERKZ.js";import{a as ie}from"./chunk-OOGVHCZ2.js";import"./chunk-L7OS7MWE.js";import"./chunk-TENYI4EC.js";import{l as L}from"./chunk-V73M5X7I.js";import{b as K,d as G}from"./chunk-UARV2YUR.js";import{a as S,c as oe}from"./chunk-WJFUKUVD.js";import{F as te,c as B,e as _,g as z,h as $,i as A,l as p,n as q,p as j,r as H,s as J,t as Q,u as W,v as X,w as Y,x as Z,y as ee,z as re}from"./chunk-F4YDJMK7.js";import{Bb as O,Db as v,Fb as u,Ka as a,Tb as i,Ub as P,Vb as U,Wa as F,ca as f,ga as g,ha as h,kb as T,lb as I,ma as w,mb as V,nb as R,ob as D,pb as C,qb as x,rb as d,sb as o,ta as b,tb as t,ua as N,ub as c}from"./chunk-QPN22TF2.js";function se(l,r){l&1&&(o(0,"p",5),i(1,"Loading\u2026"),t())}function de(l,r){if(l&1&&(o(0,"label",10),c(1,"input",31),o(2,"span"),i(3),t()()),l&2){let e=r.$implicit,n=u(2);a(),d("formControl",n.scopeControl)("value",e.value)("disabled",e.value==="namespace"&&!n.isAdmin()),a(2),P(e.label)}}function pe(l,r){if(l&1&&(o(0,"option",15),i(1),t()),l&2){let e=r.$implicit;d("value",e),a(),P(e)}}function me(l,r){if(l&1){let e=O();o(0,"div",27),c(1,"input",32)(2,"input",33),o(3,"button",34),v("click",function(){let s=g(e).$index,m=u(2);return h(m.removeHeader(s))}),i(4," \xD7 "),t()()}if(l&2){let e=r.$index;d("formGroupName",e)}}function ce(l,r){if(l&1){let e=O();o(0,"form",7),v("ngSubmit",function(){g(e);let s=u();return h(s.submit())}),o(1,"fieldset",8)(2,"legend",9),i(3,"Port\xE9e de la configuration"),t(),C(4,de,4,4,"label",10,T().trackByScope,!0),t(),o(6,"div",11)(7,"label",12),i(8,"API type "),o(9,"span",13),i(10,"*"),t()(),o(11,"select",14),C(12,pe,2,2,"option",15,D),t()(),o(14,"div",11)(15,"label",16),i(16,"Name "),o(17,"span",13),i(18,"*"),t()(),c(19,"input",17),t(),o(20,"div",11)(21,"label",18),i(22,"Description"),t(),c(23,"input",19),t(),o(24,"div",11)(25,"label",20),i(26,"Base URL"),t(),c(27,"input",21),t(),o(28,"div",11)(29,"label",22),i(30,"API key"),t(),c(31,"input",23),t(),o(32,"div",24)(33,"div",25)(34,"span",9),i(35,"Custom headers"),t(),o(36,"button",26),v("click",function(){g(e);let s=u();return h(s.addHeader())}),i(37,"+ Add header"),t()(),C(38,me,5,1,"div",27,R),t(),o(40,"div",28)(41,"button",29),i(42),t(),o(43,"button",30),v("click",function(){g(e);let s=u();return h(s.cancel())}),i(44,"Cancel"),t()()()}if(l&2){let e=u();d("formGroup",e.form),a(),d("disabled",e.isEditMode()),a(3),x(e.scopeOptions),a(7),d("formControl",e.apiTypeControl),a(),x(e.apiTypeOptions),a(7),d("formControl",e.nameControl),a(4),d("formControl",e.descriptionControl),a(4),d("formControl",e.baseUrlControl),a(4),d("formControl",e.apiKeyControl),a(),d("formArrayName","headers"),a(6),x(e.headersArray.controls),a(3),d("disabled",e.form.invalid||e.isSubmitting()),a(),U(" ",e.isEditMode()?"Save changes":"Create"," ")}}var ue=new Set(["namespace","userOnNs","userGlobal"]),k=Object.freeze({namespace:"Configuration du namespace",userOnNs:"Pour moi sur ce namespace",userGlobal:"Pour moi globalement"}),ae=class l{route=f(K);router=f(G);destroyRef=f(w);state=f(ne);namespaceRole=f(ie);namespaceId=this.route.snapshot.params.namespaceId;isAdmin=oe(this.namespaceRole.isAdminOfNamespace$(this.namespaceId),{initialValue:!1});apiTypeOptions=Object.values(L);scopeOptions=[{value:"namespace",label:k.namespace},{value:"userOnNs",label:k.userOnNs},{value:"userGlobal",label:k.userGlobal}];form=new A({name:new p("",{nonNullable:!0,validators:[_.required,_.minLength(1)]}),description:new p(null),apiType:new p("OpenAI",{nonNullable:!0,validators:[_.required]}),baseUrl:new p("",{nonNullable:!0}),apiKey:new p("",{nonNullable:!0}),scope:new p("namespace",{nonNullable:!0}),headers:new H([],{validators:[]})});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get apiTypeControl(){return this.form.controls.apiType}get baseUrlControl(){return this.form.controls.baseUrl}get apiKeyControl(){return this.form.controls.apiKey}get scopeControl(){return this.form.controls.scope}get headersArray(){return this.form.controls.headers}addHeader(){this.headersArray.push(new A({key:new p("",{nonNullable:!0,validators:[_.required]}),value:new p("",{nonNullable:!0})}))}removeHeader(r){this.headersArray.removeAt(r)}isEditMode=b(!1);isSubmitting=b(!1);isLoading=b(!1);existingConfig=null;initialApiKey="";constructor(){N(()=>{this.isAdmin()||this.isEditMode()||this.scopeControl.value==="namespace"&&this.scopeControl.setValue("userOnNs")})}ngOnInit(){this.state.setNamespace(this.namespaceId);let r=this.route.snapshot.paramMap,e=this.route.snapshot.queryParamMap,n=r.get("aiProviderId"),s=this.parseScope(e.get("scope"));if(n){this.isEditMode.set(!0),this.scopeControl.disable(),this.loadConfig(n);return}this.scopeControl.setValue(s);let m=e.get("template");m&&this.hydrateFromTemplate(m)}parseScope(r){return r&&ue.has(r)?r:"namespace"}deriveScopeFromConfig(r){return!r.userId?"namespace":r.namespaceId?"userOnNs":"userGlobal"}loadConfig(r){this.isLoading.set(!0),this.state.getById(r).pipe(S(this.destroyRef)).subscribe({next:e=>{this.existingConfig=e,this.scopeControl.setValue(this.deriveScopeFromConfig(e)),this.applyConfigToForm(e),this.isLoading.set(!1)},error:()=>{this.isLoading.set(!1),console.warn(`[AiProviderForm] Could not load provider '${r}' \u2014 navigating back`),this.navigateBack()}})}hydrateFromTemplate(r){this.isLoading.set(!0),this.state.getById(r).pipe(S(this.destroyRef)).subscribe({next:e=>{this.nameControl.setValue(e.name),this.descriptionControl.setValue(e.description??null),this.apiTypeControl.setValue(e.apiType),this.baseUrlControl.setValue(e.baseUrl??""),this.apiKeyControl.setValue(""),this.initialApiKey="",this.apiKeyControl.markAsTouched(),this.isLoading.set(!1),this.router.navigate([],{relativeTo:this.route,queryParams:{template:null,templateScope:null},queryParamsHandling:"merge",replaceUrl:!0})},error:e=>{console.warn(`[AiProviderForm] Could not hydrate from template ${r}:`,e),this.isLoading.set(!1),this.router.navigate([],{relativeTo:this.route,queryParams:{template:null,templateScope:null},queryParamsHandling:"merge",replaceUrl:!0})}})}applyConfigToForm(r){this.nameControl.setValue(r.name),this.descriptionControl.setValue(r.description??null),this.apiTypeControl.setValue(r.apiType),this.baseUrlControl.setValue(r.baseUrl??"");let e=r.apiKey??"";this.apiKeyControl.setValue(e),this.initialApiKey=e,this.headersArray.clear();for(let[n,s]of Object.entries(r.headers??{}))this.headersArray.push(new A({key:new p(n,{nonNullable:!0,validators:[_.required]}),value:new p(s,{nonNullable:!0})}))}submit(){if(this.form.invalid||this.isSubmitting())return;if(this.isEditMode()&&!this.existingConfig?.id){this.navigateBack();return}this.isSubmitting.set(!0);let r=this.descriptionControl.value?.trim(),e=this.baseUrlControl.value.trim(),n=this.apiKeyControl.value,s=this.isEditMode()&&n===this.initialApiKey?null:n,m=this.headersArray.controls.filter(y=>y.controls.key.value.trim()).map(y=>[y.controls.key.value.trim(),y.controls.value.value]),le=m.length>0?Object.fromEntries(m):null,M={name:this.nameControl.value.trim(),apiType:this.apiTypeControl.value,description:r||null,baseUrl:e||null,apiKey:s,headers:le},E=this.form.getRawValue().scope;(this.isEditMode()&&this.existingConfig?.id?this.state.update(this.existingConfig.id,M,E,this.existingConfig):this.state.create(M,E,this.namespaceId)).pipe(S(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(!1)})}cancel(){this.navigateBack()}navigateBack(){this.router.navigate(["/agentos",this.namespaceId,"ai-providers"])}trackByScope(r,e){return e.value}static \u0275fac=function(e){return new(e||l)};static \u0275cmp=F({type:l,selectors:[["agentos-ai-provider-form"]],decls:10,vars:2,consts:[[1,"ai-provider-form"],[1,"ai-provider-form__header"],["type","button","title","Back to AI providers",1,"ai-provider-form__back",3,"click"],[1,"ai-provider-form__back-icon"],[1,"ai-provider-form__title"],[1,"ai-provider-form__loading"],[1,"ai-provider-form__form",3,"formGroup"],[1,"ai-provider-form__form",3,"ngSubmit","formGroup"],[1,"ai-provider-form__scope",3,"disabled"],[1,"ai-provider-form__label"],[1,"ai-provider-form__scope-option"],[1,"ai-provider-form__field"],["for","llm-api-type",1,"ai-provider-form__label"],["aria-hidden","true"],["id","llm-api-type",1,"ai-provider-form__select",3,"formControl"],[3,"value"],["for","llm-name",1,"ai-provider-form__label"],["id","llm-name","type","text","placeholder","e.g. OpenAI prod","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-description",1,"ai-provider-form__label"],["id","llm-description","type","text","placeholder","Optional \u2014 short description of this provider","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-base-url",1,"ai-provider-form__label"],["id","llm-base-url","type","url","placeholder","Optional \u2014 leave empty for default endpoint","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-api-key",1,"ai-provider-form__label"],["id","llm-api-key","type","password","placeholder","sk-\u2026","autocomplete","new-password",1,"ai-provider-form__input","ai-provider-form__input--secret",3,"formControl"],[1,"ai-provider-form__headers",3,"formArrayName"],[1,"ai-provider-form__headers-title"],["type","button",1,"ai-provider-form__headers-add",3,"click"],[1,"ai-provider-form__header-row",3,"formGroupName"],[1,"ai-provider-form__actions"],["type","submit",1,"ai-provider-form__btn","ai-provider-form__btn--primary",3,"disabled"],["type","button",1,"ai-provider-form__btn",3,"click"],["type","radio",3,"formControl","value","disabled"],["type","text","placeholder","Header name","formControlName","key","autocomplete","off",1,"ai-provider-form__input"],["type","text","placeholder","Value","formControlName","value","autocomplete","off",1,"ai-provider-form__input"],["type","button","title","Remove header","aria-label","Remove header",1,"ai-provider-form__header-remove",3,"click"]],template:function(e,n){e&1&&(o(0,"div",0)(1,"header",1)(2,"button",2),v("click",function(){return n.cancel()}),o(3,"span",3),i(4,"\u2190"),t(),i(5," AI Providers "),t(),o(6,"h1",4),i(7),t()(),I(8,se,2,0,"p",5)(9,ce,45,10,"form",6),t()),e&2&&(a(7),P(n.isEditMode()?"Edit AI provider":"New AI provider"),a(),V(n.isLoading()?8:9))},dependencies:[te,q,ee,re,B,Z,j,z,$,J,Y,X,Q,W],styles:[".ai-provider-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:480px;margin:0 auto;padding:2rem 1rem}.ai-provider-form__scope[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.4rem;border:1px solid var(--color-border);border-radius:8px;padding:.75rem 1rem;margin:0}.ai-provider-form__scope[disabled][_ngcontent-%COMP%]{opacity:.6}.ai-provider-form__scope-option[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:.85rem;color:var(--color-text);cursor:pointer}.ai-provider-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-provider-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-provider-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-provider-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.ai-provider-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:600;color:var(--color-text, #1d1d1f);letter-spacing:-.02em}.ai-provider-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6e6e73);font-size:.9rem;margin:0}.ai-provider-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.ai-provider-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.ai-provider-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text, #1d1d1f)}.ai-provider-form__input[_ngcontent-%COMP%], .ai-provider-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-provider-form__input[_ngcontent-%COMP%]:focus, .ai-provider-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-primary, #007aff)}.ai-provider-form__input[_ngcontent-%COMP%]::placeholder, .ai-provider-form__select[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary, #6e6e73)}.ai-provider-form__input--secret[_ngcontent-%COMP%]{font-family:monospace;letter-spacing:.05em}.ai-provider-form__headers[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-provider-form__headers-title[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between}.ai-provider-form__headers-add[_ngcontent-%COMP%]{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;font-family:inherit;color:var(--color-primary, #007aff)}.ai-provider-form__headers-add[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-provider-form__header-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr auto;gap:.5rem;align-items:center}.ai-provider-form__header-remove[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;background:none;border:1px solid var(--color-border, rgba(0, 0, 0, .1));border-radius:6px;cursor:pointer;font-size:1rem;color:var(--color-text-secondary, #6e6e73);transition:background .15s ease;flex-shrink:0}.ai-provider-form__header-remove[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover, rgba(0, 0, 0, .04))}.ai-provider-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.ai-provider-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-provider-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover, rgba(0, 0, 0, .04))}.ai-provider-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.ai-provider-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-primary, #007aff);border-color:var(--color-primary, #007aff);color:#fff}.ai-provider-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary-hover, #0051d5);border-color:var(--color-primary-hover, #0051d5)}"],changeDetection:0})};export{ae as AiProviderFormComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as L}from"./chunk-
|
|
1
|
+
import{a as L}from"./chunk-DHNR5YXZ.js";import{d as T}from"./chunk-UARV2YUR.js";import{p as q,u as E,v as D}from"./chunk-DWPYG4F6.js";import{a as U}from"./chunk-WJFUKUVD.js";import{Bb as w,Db as a,Fb as m,Ka as d,Pb as R,Tb as C,Ub as h,Wa as c,ab as I,ca as p,ga as y,ha as b,hc as M,kc as S,lb as _,ma as x,mb as f,oa as v,rb as u,sb as r,tb as o}from"./chunk-QPN22TF2.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{c as L,d as z}from"./chunk-
|
|
1
|
+
import{c as L,d as z}from"./chunk-V73M5X7I.js";import{b as F,d as v}from"./chunk-UARV2YUR.js";import{p as y,u as K,v as j}from"./chunk-DWPYG4F6.js";import"./chunk-XLNZCT7N.js";import{a as x}from"./chunk-WJFUKUVD.js";import"./chunk-2GHS5VUE.js";import"./chunk-DYANOPHQ.js";import"./chunk-F4YDJMK7.js";import"./chunk-4YLSQZJK.js";import{Bb as u,Db as s,Fb as l,Hc as $,Ka as p,Pb as T,S as P,Tb as f,Ub as I,Vb as E,Wa as g,ab as R,ac as O,ca as d,dc as B,ec as V,ga as m,ha as c,hc as q,i as A,lb as b,ma as k,mb as C,oa as N,rb as _,sb as a,t as w,ta as S,tb as r,u as D}from"./chunk-QPN22TF2.js";function H(o,i){if(o&1){let e=u();a(0,"span",7),f(1,"Delete?"),r(),a(2,"ds-icon-button",8),s("action",function(){m(e);let t=l();return c(t.onDeleteConfirmed())}),r(),a(3,"ds-icon-button",9),s("action",function(){m(e);let t=l();return c(t.onDeleteCancelled())}),r()}}function J(o,i){if(o&1){let e=u();a(0,"ds-kebab-menu",10),s("itemSelected",function(t){m(e);let h=l();return c(h.onMenuAction(t))}),r()}if(o&2){let e=l();_("items",e.menuItems)}}var M=class o{router=d(v);model;namespaceId;deleteRequested=new N;pendingDelete=S(!1);menuItems=[{key:"edit",label:"Edit model",icon:"edit"},{key:"delete",label:"Delete model",icon:"delete",variant:"danger"}];get displayTitle(){return this.model.alias??this.model.apiModelName}onMenuAction(i){switch(i){case"edit":this.router.navigate(["/agentos",this.namespaceId,"ai-models",this.model.id,"edit"]);break;case"delete":this.pendingDelete.set(!0);break}}onDeleteConfirmed(){this.pendingDelete.set(!1),this.deleteRequested.emit(this.model)}onDeleteCancelled(){this.pendingDelete.set(!1)}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=g({type:o,selectors:[["agentos-ai-model-item"]],inputs:{model:"model",namespaceId:"namespaceId"},outputs:{deleteRequested:"deleteRequested"},decls:12,vars:4,consts:[["role","listitem",1,"ai-model-item"],[1,"ai-model-item__body"],[1,"ai-model-item__name"],[1,"ai-model-item__api-name"],[1,"ai-model-item__params"],[1,"ai-model-item__actions"],[3,"items"],[1,"ai-model-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&&(a(0,"div",0)(1,"div",1)(2,"span",2),f(3),r(),a(4,"span",3),f(5),r(),a(6,"span",4)(7,"span"),f(8),r()()(),a(9,"div",5),b(10,H,4,0)(11,J,1,1,"ds-kebab-menu",6),r()()),e&2&&(p(3),I(n.displayTitle),p(2),I(n.model.apiModelName),p(3),E("priority: ",n.model.priority),p(2),C(n.pendingDelete()?10:11))},dependencies:[j,y],styles:[".ai-model-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-model-item[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover, rgba(0, 0, 0, .04));border-color:var(--color-primary, #007aff)}.ai-model-item__body[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.2rem;min-width:0}.ai-model-item__name[_ngcontent-%COMP%]{font-size:.95rem;font-weight:500;color:var(--color-text, #1d1d1f);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-model-item__api-name[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-secondary, #6e6e73);font-family:monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-model-item__params[_ngcontent-%COMP%]{display:flex;gap:.75rem;font-size:.75rem;color:var(--color-text-secondary, #6e6e73)}.ai-model-item__actions[_ngcontent-%COMP%]{flex-shrink:0;display:flex;align-items:center;gap:.125rem;opacity:0;transition:opacity .15s ease}.ai-model-item[_ngcontent-%COMP%]:hover .ai-model-item__actions[_ngcontent-%COMP%], .ai-model-item[_ngcontent-%COMP%]:focus-within .ai-model-item__actions[_ngcontent-%COMP%]{opacity:1}.ai-model-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 Q=()=>[];function X(o,i){if(o&1){let e=u();a(0,"agentos-ai-model-item",4),s("deleteRequested",function(t){m(e);let h=l(2);return c(h.deleteModel(t))}),r()}if(o&2){let e=l(2);_("model",i)("namespaceId",e.namespaceId)}}function Y(o,i){if(o&1&&b(0,X,1,2,"agentos-ai-model-item",3),o&2){let e,n=i.$implicit,t=l();C((e=t.resolveModel(n.id))?0:-1,e)}}var U=class o{route=d(F);router=d(v);destroyRef=d(k);aiModelController=d(L);aiProviderController=d(z);namespaceId=this.route.snapshot.params.namespaceId;refresh$=new A(void 0);data$=this.refresh$.pipe(P(()=>D([this.aiModelController.listByNamespaceIdAiModel(this.namespaceId),this.aiProviderController.listAiProvider(this.namespaceId)])));modelItems$=this.data$.pipe(w(([i,e])=>{let n=new Map(e.map(t=>[t.id??"",t.name]));return i.map(t=>({id:t.id??"",name:t.alias??t.apiModelName,description:t.apiModelName,groupKey:t.aiProviderId,groupLabel:n.get(t.aiProviderId)??t.aiProviderId}))}));modelsById=new Map;constructor(){this.data$.pipe(x(this.destroyRef)).subscribe(([i])=>{this.modelsById=new Map(i.map(e=>[e.id??"",e]))})}goBack(){this.router.navigate(["/agentos","namespaces"])}openCreateForm(){this.router.navigate(["/agentos",this.namespaceId,"ai-models","new"])}deleteModel(i){this.aiModelController.deleteAiModel(i.id??"").pipe(x(this.destroyRef)).subscribe(()=>this.refresh$.next())}resolveModel(i){return this.modelsById.get(i)??null}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=g({type:o,selectors:[["agentos-namespace-ai-models"]],decls:5,vars:6,consts:[["aiModelItemTpl",""],["title","AI models","emptyMessage","No AI models configured yet. Add one above.","cardMinWidth","400px",3,"createRequested","items","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],[3,"model","namespaceId"],[3,"deleteRequested","model","namespaceId"]],template:function(e,n){if(e&1&&(a(0,"ds-entity-list",1),B(1,"async"),s("createRequested",function(){return n.openCreateForm()}),a(2,"ds-icon-button",2),s("action",function(){return n.goBack()}),r()(),R(3,Y,1,1,"ng-template",null,0,q)),e&2){let t=T(4);_("items",V(1,3,n.modelItems$)??O(5,Q))("showCreate",!0)("itemTemplate",t)}},dependencies:[K,M,y,$],encapsulation:2,changeDetection:0})};export{U as NamespaceAiModelsComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as a}from"./chunk-
|
|
1
|
+
import{b as a}from"./chunk-6SUY2MJB.js";import"./chunk-DHNR5YXZ.js";import"./chunk-V73M5X7I.js";import"./chunk-UARV2YUR.js";import"./chunk-DWPYG4F6.js";import"./chunk-XLNZCT7N.js";import"./chunk-WJFUKUVD.js";import"./chunk-2GHS5VUE.js";import"./chunk-DYANOPHQ.js";import"./chunk-F4YDJMK7.js";import"./chunk-4YLSQZJK.js";import"./chunk-QPN22TF2.js";export{a as UserListComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as G}from"./chunk-
|
|
1
|
+
import{a as G}from"./chunk-DHNR5YXZ.js";import{a as T}from"./chunk-TENYI4EC.js";import{b as I,d as w}from"./chunk-UARV2YUR.js";import{a as _}from"./chunk-WJFUKUVD.js";import{F as R,b as A,c as N,e as C,g as F,h as U,i as z,l as d,n as D,v as V,w as L}from"./chunk-F4YDJMK7.js";import{Bb as P,Db as f,Fb as c,Ka as l,Tb as n,Ub as y,Vb as k,Wa as O,ca as u,ga as p,ha as g,lb as x,ma as E,mb as v,rb as h,sb as r,ta as b,tb as e,ub as m}from"./chunk-QPN22TF2.js";function q(a,i){a&1&&(r(0,"p",5),n(1,"Loading\u2026"),e())}function $(a,i){if(a&1&&(r(0,"span",13),n(1),e()),a&2){let t=c(2);l(),y(t.form.controls.email.value)}}function j(a,i){a&1&&m(0,"input",14)}function H(a,i){if(a&1){let t=P();r(0,"form",7),f("ngSubmit",function(){p(t);let s=c();return g(s.save())}),r(1,"div",8)(2,"h2",9),n(3,"Identity"),e(),r(4,"div",10)(5,"label",11),n(6,"Email "),r(7,"span",12),n(8,"*"),e()(),x(9,$,2,1,"span",13)(10,j,1,0,"input",14),e(),r(11,"div",10)(12,"label",15),n(13,"External ID"),e(),m(14,"input",16),e()(),r(15,"div",8)(16,"h2",9),n(17,"Profile"),e(),r(18,"div",10)(19,"label",17),n(20,"First name"),e(),m(21,"input",18),e(),r(22,"div",10)(23,"label",19),n(24,"Last name"),e(),m(25,"input",20),e(),r(26,"div",21)(27,"label",22),n(28,"Bio"),e(),m(29,"textarea",23),e()(),r(30,"div",8)(31,"h2",9),n(32,"Permissions"),e(),r(33,"div",24),m(34,"input",25),r(35,"label",26),n(36," Super admin (full access to AgentOS) "),e()()(),r(37,"div",27)(38,"button",28),n(39),e(),r(40,"button",29),f("click",function(){p(t);let s=c();return g(s.cancel())}),n(41,"Cancel"),e()()()}if(a&2){let t=c();h("formGroup",t.form),l(9),v(t.isEditMode?9:10),l(29),h("disabled",t.form.invalid||t.isSaving()),l(),k(" ",t.isSaving()?"Saving\u2026":t.isEditMode?"Save changes":"Create user"," ")}}var B=class a{route=u(I);router=u(w);destroyRef=u(E);userAdminState=u(G);userState=u(T);userId=this.route.snapshot.params.userId;isEditMode=!!this.userId;isSaving=b(!1);isLoading=b(!1);form=new z({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}),isAdmin:new d(!1,{nonNullable:!0})});ngOnInit(){if(!this.isEditMode)return;let i=()=>{this.userState.currentUser()?.id===this.userId&&this.form.controls.isAdmin.disable()};this.userState.currentUser()?i():this.userState.loadMe().pipe(_(this.destroyRef)).subscribe({next:()=>i(),error:()=>this.form.controls.isAdmin.disable()});let t=this.userAdminState.users().find(o=>o.id===this.userId);if(t){this.syncForm(t),this.form.controls.email.disable();return}this.isLoading.set(!0),this.userAdminState.loadAll().pipe(_(this.destroyRef)).subscribe({next:()=>{let o=this.userAdminState.users().find(s=>s.id===this.userId);o&&(this.syncForm(o),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:i,externalId:t,firstname:o,lastname:s,bio:S,isAdmin:M}=this.form.getRawValue();(this.isEditMode?this.userAdminState.updateUser(this.userId,{externalId:t||void 0,firstname:o||void 0,lastname:s||void 0,bio:S||void 0,isAdmin:M}):this.userAdminState.createUser({email:i||void 0,externalId:t||void 0,firstname:o||void 0,lastname:s||void 0,bio:S||void 0,isAdmin:M})).pipe(_(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSaving.set(!1)})}cancel(){this.navigateBack()}navigateBack(){this.router.navigate(["/agentos/admin/users"])}syncForm(i){this.form.setValue({email:i.email??"",externalId:i.externalId??"",firstname:i.firstname??"",lastname:i.lastname??"",bio:i.bio??"",isAdmin:i.isAdmin??!1})}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=O({type:a,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__field","user-form__field--checkbox"],["id","uf-isAdmin","type","checkbox","formControlName","isAdmin",1,"user-form__checkbox"],["for","uf-isAdmin",1,"user-form__label","user-form__label--checkbox"],[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(t,o){t&1&&(r(0,"div",0)(1,"header",1)(2,"button",2),f("click",function(){return o.cancel()}),r(3,"span",3),n(4,"\u2190"),e(),n(5," Users "),e(),r(6,"h1",4),n(7),e()(),x(8,q,2,0,"p",5)(9,H,42,4,"form",6),e()),t&2&&(l(7),y(o.title),l(),v(o.isLoading()?8:9))},dependencies:[R,D,N,A,F,U,L,V],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{B as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{k as p}from"./chunk-
|
|
1
|
+
import{k as p}from"./chunk-V73M5X7I.js";import{V as s,Z as d,a as n,ca as u,ta as a}from"./chunk-QPN22TF2.js";var c=class o{userController=u(p);users=a([]);isLoading=a(!1);loadAll(){return this.isLoading.set(!0),this.userController.listAllUser().pipe(s({next:e=>{this.users.set(e),this.isLoading.set(!1)},error:()=>this.isLoading.set(!1)}))}createUser(e){return this.userController.createUser(e).pipe(s(()=>{this.loadAll().subscribe()}))}updateUser(e,r){let t=this.users().find(i=>i.id===e);if(!t)throw new Error(`Cannot update: user ${e} not found in state`);let U=n(n({},t),r);return this.userController.updateUser(e,U).pipe(s(i=>{this.users.update(b=>b.map(l=>l.id===i.id?i:l))}))}deleteUser(e){return this.userController.deleteUser(e).pipe(s(()=>{this.users.update(r=>r.filter(t=>t.id!==e))}))}static \u0275fac=function(r){return new(r||o)};static \u0275prov=d({token:o,factory:o.\u0275fac,providedIn:"root"})};export{c as a};
|