@whoz-oss/coday-client 3.23.0 → 3.24.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.
Files changed (79) hide show
  1. package/browser/{chunk-D9wXETZp.js → chunk-15rAOoZz.js} +2 -2
  2. package/browser/{chunk-ChsKwSBf.js → chunk-16yQFy5_.js} +1 -1
  3. package/browser/{chunk-BIOQZPFJ.js → chunk-4XIlyOr9.js} +2 -2
  4. package/browser/{chunk-COoOJuQT.js → chunk-7-d3g3_Q.js} +1 -1
  5. package/browser/{chunk-BQwFVWSb.js → chunk-B-t2KLMQ.js} +1 -1
  6. package/browser/chunk-B3xYeZtG.js +1 -0
  7. package/browser/chunk-B4l5qLZ6.js +1 -0
  8. package/browser/{chunk-BdZ0xOqX.js → chunk-B52iVZ-n.js} +5 -5
  9. package/browser/{chunk-CXhfjTCk.js → chunk-B7GIYsvs.js} +1 -1
  10. package/browser/{chunk-Cg68_3Ns.js → chunk-BBRGEWfs.js} +1 -1
  11. package/browser/{chunk-B4K0ULQ8.js → chunk-BHb31ndI.js} +1 -1
  12. package/browser/{chunk-YGA4ansj.js → chunk-BK_05kmN.js} +1 -1
  13. package/browser/{chunk-DNlBxwgK.js → chunk-BLSD82nL.js} +1 -1
  14. package/browser/{chunk-B0USjT_j.js → chunk-BOArVQMu.js} +1 -1
  15. package/browser/{chunk-D89TfP1E.js → chunk-BPAPWlpQ.js} +1 -1
  16. package/browser/{chunk-DH3pQb49.js → chunk-BQmHxval.js} +1 -1
  17. package/browser/{chunk-uY_BCJ93.js → chunk-BYJTaU4n.js} +1 -1
  18. package/browser/{chunk-CWQR6xJk.js → chunk-BYg1TwUC.js} +1 -1
  19. package/browser/{chunk-DL11Jf1L.js → chunk-BqhCkR9t.js} +1 -1
  20. package/browser/{chunk-DVGYZ6ty.js → chunk-BqxwtKFs.js} +1 -1
  21. package/browser/{chunk-CyJ_au6Y.js → chunk-Byin_63d.js} +5 -5
  22. package/browser/{chunk-BqC6QWDU.js → chunk-BzZbVcon.js} +3 -3
  23. package/browser/{chunk-C3MIs5_Y.js → chunk-C11du_uP.js} +1 -1
  24. package/browser/chunk-C1RU8zia.js +9 -0
  25. package/browser/{chunk-CRyr4oOy.js → chunk-C2Rueaad.js} +1 -1
  26. package/browser/{chunk-bl1pitLA.js → chunk-C2agnPiQ.js} +1 -1
  27. package/browser/{chunk-D7p9n5a9.js → chunk-C93ZXc5y.js} +1 -1
  28. package/browser/{chunk-O1I9EEmj.js → chunk-C9dkqMA4.js} +1 -1
  29. package/browser/{chunk-CZ4gj_xn.js → chunk-CBYDDKYs.js} +1 -1
  30. package/browser/{chunk-BoiQFZ4H.js → chunk-CIcEtCxk.js} +1 -1
  31. package/browser/{chunk-CT4atmse.js → chunk-CIfgFQUQ.js} +3 -3
  32. package/browser/{chunk-SsHAmybq.js → chunk-CKBQdAGJ.js} +1 -1
  33. package/browser/{chunk-BSc7HTHd.js → chunk-CKEgNNXU.js} +1 -1
  34. package/browser/{chunk-VyuxzGHt.js → chunk-CPI0Zzv3.js} +1 -1
  35. package/browser/{chunk-DkP2MwMu.js → chunk-CPt7Uw3a.js} +1 -1
  36. package/browser/{chunk-KccQKSLr.js → chunk-CaH-AtD3.js} +2 -2
  37. package/browser/chunk-CbCwwL-W.js +1 -0
  38. package/browser/{chunk-BpzIo3TO.js → chunk-Cf7f_94t.js} +1 -1
  39. package/browser/{chunk-B3Yorxwd.js → chunk-CjPIJIB-.js} +1 -1
  40. package/browser/{chunk-CuOGglmC.js → chunk-Co5BFbll.js} +1 -1
  41. package/browser/{chunk-CMHnK5hV.js → chunk-CqM-2yCQ.js} +2 -2
  42. package/browser/{chunk-lkvHsW8k.js → chunk-CzDFGxwY.js} +1 -1
  43. package/browser/{chunk-DHr7_ikE.js → chunk-D-5Imhde.js} +1 -1
  44. package/browser/{chunk-BfzDf8xE.js → chunk-D4DTIvDf.js} +1 -1
  45. package/browser/chunk-D4_R7aqN.js +1 -0
  46. package/browser/{chunk-C9T7UBD_.js → chunk-DCjMvdvV.js} +1 -1
  47. package/browser/{chunk-CJD8ErVH.js → chunk-DCx8SlS-.js} +1 -1
  48. package/browser/{chunk-DF3Ha0Tb.js → chunk-DDertr1B.js} +1 -1
  49. package/browser/{chunk-BCqtwdIe.js → chunk-DFjiy89D.js} +1 -1
  50. package/browser/{chunk-sz0CVF1-.js → chunk-DIuETvVC.js} +1 -1
  51. package/browser/{chunk-CqZF9JZo.js → chunk-DK1hp0WW.js} +6 -6
  52. package/browser/{chunk-BQFfxCd3.js → chunk-DNVNXvsJ.js} +1 -1
  53. package/browser/{chunk-CaL6ZXsO.js → chunk-DeXXr4BL.js} +6 -6
  54. package/browser/{chunk-CXwHeDac.js → chunk-DgYr3Diz.js} +1 -1
  55. package/browser/{chunk-bHVjhtHf.js → chunk-DpkO3_bQ.js} +1 -1
  56. package/browser/{chunk-B3kY-GQk.js → chunk-DuXr-yGB.js} +1 -1
  57. package/browser/{chunk-Bc0TgO1-.js → chunk-DwQ0v-xH.js} +1 -1
  58. package/browser/{chunk-DrKKLE1-.js → chunk-I8YepFsn.js} +2 -2
  59. package/browser/{chunk-DdUOdkVr.js → chunk-IXLj2Qpp.js} +1 -1
  60. package/browser/{chunk-BrNRhqhm.js → chunk-KXiD_ZK3.js} +1 -1
  61. package/browser/chunk-TkSR4UzV.js +1 -0
  62. package/browser/{chunk-oIPYJtHA.js → chunk-XBakzM_b.js} +1 -1
  63. package/browser/{chunk-CjgyOse7.js → chunk-buoxjd5i.js} +1 -1
  64. package/browser/{chunk-BT7IPqmu.js → chunk-g2nkIubB.js} +1 -1
  65. package/browser/{chunk-B2FRxZw1.js → chunk-j5aTABHx.js} +1 -1
  66. package/browser/chunk-kNbhE9tu.js +2 -0
  67. package/browser/{chunk-oqOgDyIj.js → chunk-mUd43Vo8.js} +1 -1
  68. package/browser/{chunk-7dyrHGkF.js → chunk-nSYjfmpf.js} +1 -1
  69. package/browser/{chunk-BZCIYJOL.js → chunk-sLJinEtR.js} +1 -1
  70. package/browser/index.html +1 -1
  71. package/browser/{main-RXIVNUWK.js → main-JTU33H5D.js} +18 -18
  72. package/package.json +1 -1
  73. package/browser/chunk-BXGcSbBl.js +0 -1
  74. package/browser/chunk-BujvNLrF.js +0 -1
  75. package/browser/chunk-C4IJySYO.js +0 -2
  76. package/browser/chunk-CzL7jU35.js +0 -1
  77. package/browser/chunk-D8dXXVY5.js +0 -9
  78. package/browser/chunk-DqfAYcrx.js +0 -1
  79. package/browser/chunk-yfVcVvz_.js +0 -1
@@ -1 +1 @@
1
- import {m}from'./chunk-D8dXXVY5.js';import {g,ao as V,G,C as Ce$1,da as M,W as Wi,b as U,a7 as va,I as br,z as z$1,a as P,j as jw,k as Cs,n as kg,J as JC,m as hl,o as aC,t as sI,a5 as Dl,a8 as Kg,u as cC,a9 as vC,M as Mg,a3 as ZI,q as dC,bo as uC,ac as CC,_ as _g,w as zg,a6 as QI,v as fC,aa as Cf,ab as Tf}from'./main-RXIVNUWK.js';import {o as z,z as ze,k as _t,b as _e$1,n as ni,J as Jn,Q as Qn,e as ei,Y as Ye,A as At,Z as Zn,l as Xn,C as Cn,E as En,p as An,q as Ct,V as Vt}from'./chunk-B3kY-GQk.js';import'./chunk-YGA4ansj.js';import'./chunk-CaL6ZXsO.js';import'./chunk-CqZF9JZo.js';var ne=(i,t)=>t.id;function ie(i,t){i&1&&(Cs(0,"p",5),JC(1,"Loading\u2026"),hl());}function ae(i,t){i&1&&(Cs(0,"span",12),JC(1,"Name is required."),hl());}function le(i,t){if(i&1&&(Cs(0,"p",32),JC(1),hl(),Cs(2,"span",26),JC(3,"Agent Config cannot be changed after creation."),hl()),i&2){let e=CC(3);sI(),Kg(e.resolveAgentConfigName(e.agentConfigIdControl.value));}}function me(i,t){if(i&1&&(Cs(0,"option",34),JC(1),hl()),i&2){let e=t.$implicit;_g("ngValue",e.id),sI(),Kg(e.name);}}function pe(i,t){if(i&1&&(Cs(0,"select",33)(1,"option",34),JC(2,"\u2014 None \u2014"),hl(),dC(3,me,2,2,"option",34,ne),hl(),ZI(),Cs(5,"span",26),JC(6,"Optional. Links this prompt to an agent as a starter. Immutable after creation."),hl()),i&2){let e=CC(3);_g("formControl",e.agentConfigIdControl),QI(),sI(),_g("ngValue",null),sI(2),fC(e.availableAgentConfigs());}}function de(i,t){if(i&1&&(Cs(0,"div",8)(1,"label",31),JC(2,"Agent Config"),hl(),aC(3,le,4,1)(4,pe,7,2),hl()),i&2){let e=CC(2);sI(3),cC(e.isEditMode()&&e.agentConfigIdControl.value?3:e.isEditMode()?-1:4);}}function ce(i,t){i&1&&(Cs(0,"p",19),JC(1,"No parameters defined."),hl());}function se(i,t){i&1&&(Cs(0,"span",12),JC(1,"Parameter name is required."),hl());}function _e(i,t){if(i&1){let e=vC();Cs(0,"div",20)(1,"div",35)(2,"div",36)(3,"label",37),JC(4,"Name "),Cs(5,"span",10),JC(6,"*"),hl()(),Mg(7,"input",38),ZI(),aC(8,se,2,0,"span",12),hl(),Cs(9,"div",36)(10,"label",37),JC(11,"Description"),hl(),Mg(12,"input",39),ZI(),hl(),Cs(13,"div",36)(14,"label",37),JC(15,"Default value"),hl(),Mg(16,"input",40),ZI(),hl()(),Cs(17,"button",41),kg("click",function(){let m=Cf(e).$index,d=CC(2);return Tf(d.removeParameter(m))}),JC(18," \xD7 "),hl()();}if(i&2){let e=t.$implicit,l=t.$index;_g("formGroupName",l),sI(3),_g("for","param-name-"+l),sI(4),zg("prompt-form__input--invalid",e.controls.name.invalid&&e.controls.name.touched),_g("id","param-name-"+l),QI(),sI(),cC(e.controls.name.invalid&&e.controls.name.touched?8:-1),sI(2),_g("for","param-desc-"+l),sI(2),_g("id","param-desc-"+l),QI(),sI(2),_g("for","param-default-"+l),sI(2),_g("id","param-default-"+l),QI();}}function fe(i,t){i&1&&(Cs(0,"span",12),JC(1,"Content entry must not be blank."),hl());}function ue(i,t){if(i&1){let e=vC();Cs(0,"div",22)(1,"span",42),JC(2),hl(),Cs(3,"div",43),Mg(4,"textarea",44),ZI(),aC(5,fe,2,0,"span",12),hl(),Cs(6,"button",45),kg("click",function(){let m=Cf(e).$index,d=CC(2);return Tf(d.removeContentEntry(m))}),JC(7," \xD7 "),hl()();}if(i&2){let e=t.$implicit,l=t.$index,m=CC(2);sI(2),Kg(l+1),sI(2),zg("prompt-form__textarea--invalid",e.invalid&&e.touched),_g("formControlName",l),QI(),sI(),cC(e.invalid&&e.touched?5:-1),sI(),_g("disabled",m.contentArray.length===1);}}function ge(i,t){if(i&1&&(Cs(0,"p",23),JC(1),hl()),i&2){let e=CC(2);sI(),Kg(e.errorMessage());}}function Ce(i,t){i&1&&(Cs(0,"span",12),JC(1,"Invalid JSON."),hl());}function xe(i,t){if(i&1){let e=vC();Cs(0,"button",46),kg("click",function(){Cf(e);let m=CC(2);return Tf(m.exportYaml())}),JC(1),hl();}if(i&2){let e=CC(2);_g("disabled",e.isExporting()),sI(),Dl(" ",e.isExporting()?"Exporting\u2026":"Export as YAML"," ");}}function ve(i,t){if(i&1){let e=vC();Cs(0,"form",7),kg("ngSubmit",function(){Cf(e);let m=CC();return Tf(m.submit())}),Cs(1,"div",8)(2,"label",9),JC(3,"Name "),Cs(4,"span",10),JC(5,"*"),hl()(),Mg(6,"input",11),ZI(),aC(7,ae,2,0,"span",12),hl(),Cs(8,"div",8)(9,"label",13),JC(10,"Description"),hl(),Mg(11,"input",14),ZI(),hl(),aC(12,de,5,1,"div",8),Cs(13,"fieldset",15)(14,"legend",16),JC(15," Parameters "),Cs(16,"span",17),JC(17,"Named placeholders used in content"),hl()(),Cs(18,"p",18),JC(19," Each parameter must have a name and a default value. Use "),Cs(20,"code"),JC(21),hl(),JC(22," in content entries to reference them. "),hl(),aC(23,ce,2,0,"p",19),dC(24,_e,19,10,"div",20,uC),Cs(26,"button",21),kg("click",function(){Cf(e);let m=CC();return Tf(m.addParameter())}),JC(27,"+ Add parameter"),hl()(),Cs(28,"fieldset",15)(29,"legend",16),JC(30," Content "),Cs(31,"span",10),JC(32,"*"),hl(),Cs(33,"span",17),JC(34,"Ordered list of text commands"),hl()(),Cs(35,"p",18),JC(36," Each content entry is a command. Use "),Cs(37,"code"),JC(38,"@AgentName"),hl(),JC(39," to target an agent, "),Cs(40,"code"),JC(41,"/promptName param1 param2"),hl(),JC(42," to call another prompt, and "),Cs(43,"code"),JC(44),hl(),JC(45," for parameter placeholders. "),hl(),dC(46,ue,8,6,"div",22,uC),Cs(48,"button",21),kg("click",function(){Cf(e);let m=CC();return Tf(m.addContentEntry())}),JC(49,"+ Add content entry"),hl()(),aC(50,ge,2,1,"p",23),Cs(51,"div",8)(52,"label",24),JC(53,"External Metadata"),hl(),Mg(54,"textarea",25),ZI(),aC(55,Ce,2,0,"span",12),Cs(56,"span",26),JC(57,"Optional. Opaque JSON object stored as-is. Leave empty to clear."),hl()(),Cs(58,"div",27)(59,"button",28),JC(60),hl(),aC(61,xe,2,2,"button",29),Cs(62,"button",30),kg("click",function(){Cf(e);let m=CC();return Tf(m.cancel())}),JC(63,"Cancel"),hl()()();}if(i&2){let e=CC();_g("formGroup",e.form),sI(6),zg("prompt-form__input--invalid",e.nameControl.invalid&&e.nameControl.touched),_g("formControl",e.nameControl),QI(),sI(),cC(e.nameControl.invalid&&e.nameControl.touched?7:-1),sI(4),_g("formControl",e.descriptionControl),QI(),sI(),cC(e.availableAgentConfigs().length>0?12:-1),sI(),_g("formArrayName","parameters"),sI(8),Kg(e.paramPlaceholderSyntax),sI(2),cC(e.parametersArray.length===0?23:-1),sI(),fC(e.parametersArray.controls),sI(4),_g("formArrayName","content"),sI(16),Kg(e.paramPlaceholderSyntax),sI(2),fC(e.contentArray.controls),sI(4),cC(e.errorMessage()?50:-1),sI(4),_g("formControl",e.externalMetadataJsonControl),QI(),sI(),cC(e.externalMetadataJsonControl.invalid&&e.externalMetadataJsonControl.touched?55:-1),sI(4),_g("disabled",e.form.invalid||e.isSubmitting()),sI(),Dl(" ",e.isEditMode()?"Save changes":"Create"," "),sI(),cC(e.isEditMode()?61:-1);}}var re=class i{route=g(V);router=g(G);destroyRef=g(Ce$1);promptState=g(m);agentConfigController=g(M);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=!this.namespaceId;form=new z({name:new _t("",{nonNullable:true,validators:[_e$1.required,_e$1.minLength(1)]}),description:new _t(null),agentConfigId:new _t(null),externalMetadataJson:new _t("",{nonNullable:true,validators:[be]}),content:new ze([this.createContentControl()],{validators:[_e$1.required]}),parameters:new ze([])});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get agentConfigIdControl(){return this.form.controls.agentConfigId}get externalMetadataJsonControl(){return this.form.controls.externalMetadataJson}get contentArray(){return this.form.controls.content}get parametersArray(){return this.form.controls.parameters}isEditMode=Wi(false);isSubmitting=Wi(false);isLoading=Wi(false);isExporting=Wi(false);errorMessage=Wi(null);paramPlaceholderSyntax="{{paramName}}";agentConfigs=Wi([]);availableAgentConfigs=this.agentConfigs.asReadonly();existingPrompt=null;ngOnInit(){let t=this.route.snapshot.paramMap.get("promptId");t&&(this.isEditMode.set(true),this.loadPrompt(t)),this.isPlatformMode?this.loadPlatformAgentConfigs():this.namespaceId&&this.loadAgentConfigs(this.namespaceId);}loadPrompt(t){this.isLoading.set(true),this.promptState.getById(t).pipe(U(this.destroyRef)).subscribe({next:e=>{this.existingPrompt=e,this.hydrateForm(e),this.isLoading.set(false);},error:()=>{this.isLoading.set(false),this.navigateBack();}});}loadAgentConfigs(t){this.agentConfigController.listByParentAgentConfig(t).pipe(U(this.destroyRef),va(()=>br([]))).subscribe(e=>this.agentConfigs.set(e));}loadPlatformAgentConfigs(){this.agentConfigController.listPlatformAgentsAgentConfig().pipe(U(this.destroyRef),va(()=>br([]))).subscribe(t=>this.agentConfigs.set(t));}hydrateForm(t){this.nameControl.setValue(t.name),this.descriptionControl.setValue(t.description??null),this.agentConfigIdControl.setValue(t.agentConfigId??null),this.contentArray.clear(),(t.content.length>0?t.content:[""]).forEach(l=>this.contentArray.push(this.createContentControl(l))),this.parametersArray.clear(),(t.parameters??[]).forEach(l=>this.parametersArray.push(this.createParameterGroup(l))),this.externalMetadataJsonControl.setValue(t.externalMetadata?JSON.stringify(t.externalMetadata,null,2):"");}resolveAgentConfigName(t){return this.agentConfigs().find(e=>e.id===t)?.name??t}createContentControl(t=""){return new _t(t,{nonNullable:true,validators:[_e$1.required,_e$1.pattern(/\S/)]})}addContentEntry(){this.contentArray.push(this.createContentControl());}removeContentEntry(t){this.contentArray.length>1&&this.contentArray.removeAt(t);}createParameterGroup(t){return new z({name:new _t(t?.name??"",{nonNullable:true,validators:[_e$1.required,_e$1.minLength(1)]}),description:new _t(t?.description??null),defaultValue:new _t(t?.defaultValue??"",{nonNullable:true,validators:[_e$1.required]})})}addParameter(){this.parametersArray.push(this.createParameterGroup());}removeParameter(t){this.parametersArray.removeAt(t);}submit(){if(this.form.invalid||this.isSubmitting())return;this.isSubmitting.set(true);let t=this.isEditMode()&&!!this.existingPrompt?.id,e=z$1(P({},this.existingPrompt??{}),{namespaceId:this.namespaceId,sourceLanguage:this.existingPrompt?.sourceLanguage??"en",name:this.nameControl.value.trim(),description:this.descriptionControl.value?.trim()||void 0,content:this.contentArray.controls.map(d=>d.value.trim()),parameters:this.parametersArray.controls.map(d=>({name:d.controls.name.value.trim(),description:d.controls.description.value?.trim()||void 0,defaultValue:d.controls.defaultValue.value.trim()}))});t||(e.agentConfigId=this.agentConfigIdControl.value||null);let l=this.externalMetadataJsonControl.value.trim();e.externalMetadata=l?JSON.parse(l):null;let m=t?this.promptState.update(this.existingPrompt.id,e):this.promptState.create(e);this.errorMessage.set(null),m.pipe(U(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:d=>{this.isSubmitting.set(false),d.status===409?this.errorMessage.set(`A prompt named "${e.name}" already exists in this scope.`):d.status===400?this.errorMessage.set(d.error?.message??"Invalid prompt data."):this.errorMessage.set("An unexpected error occurred. Please try again.");}});}exportYaml(){let t=this.existingPrompt?.id;!t||this.isExporting()||(this.isExporting.set(true),this.promptState.exportAsYaml(t).pipe(U(this.destroyRef)).subscribe({next:e=>{let l=new Blob([e],{type:"application/yaml"}),m=URL.createObjectURL(l),d=document.createElement("a");d.href=m,d.download=`${this.existingPrompt?.name??"prompt"}.yaml`,d.click(),URL.revokeObjectURL(m),this.isExporting.set(false);},error:()=>this.isExporting.set(false)}));}cancel(){this.navigateBack();}navigateBack(){this.isPlatformMode?this.router.navigate(["/agentos","admin","prompts"]):this.router.navigate(["/agentos",this.namespaceId,"prompts"]);}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=jw({type:i,selectors:[["agentos-prompt-form"]],decls:10,vars:3,consts:[[1,"prompt-form"],[1,"prompt-form__header"],["type","button","title","Back to prompts",1,"prompt-form__back",3,"click"],[1,"prompt-form__back-icon"],[1,"prompt-form__title"],[1,"prompt-form__loading"],[1,"prompt-form__form",3,"formGroup"],[1,"prompt-form__form",3,"ngSubmit","formGroup"],[1,"prompt-form__field"],["for","prompt-name",1,"prompt-form__label"],["aria-hidden","true"],["id","prompt-name","type","text","placeholder","e.g. Summarise meeting notes","autocomplete","off",1,"prompt-form__input",3,"formControl"],[1,"prompt-form__field-error"],["for","prompt-description",1,"prompt-form__label"],["id","prompt-description","type","text","placeholder","Optional \u2014 short description of this prompt","autocomplete","off",1,"prompt-form__input",3,"formControl"],[1,"prompt-form__section",3,"formArrayName"],[1,"prompt-form__label"],[1,"prompt-form__label-hint"],[1,"prompt-form__section-hint"],[1,"prompt-form__empty-hint"],[1,"prompt-form__param-row",3,"formGroupName"],["type","button",1,"prompt-form__add-btn",3,"click"],[1,"prompt-form__content-row"],[1,"prompt-form__error"],["for","prompt-external-metadata",1,"prompt-form__label"],["id","prompt-external-metadata","rows","6","placeholder",'{ "key": "value" }',"spellcheck","false","autocomplete","off",1,"prompt-form__textarea","prompt-form__textarea--code",3,"formControl"],[1,"prompt-form__field-hint"],[1,"prompt-form__actions"],["type","submit",1,"prompt-form__btn","prompt-form__btn--primary",3,"disabled"],["type","button",1,"prompt-form__btn","prompt-form__btn--export",3,"disabled"],["type","button",1,"prompt-form__btn",3,"click"],["for","prompt-agent-config",1,"prompt-form__label"],[1,"prompt-form__readonly-value"],["id","prompt-agent-config",1,"prompt-form__select",3,"formControl"],[3,"ngValue"],[1,"prompt-form__param-fields"],[1,"prompt-form__field","prompt-form__field--inline"],[1,"prompt-form__label",3,"for"],["type","text","placeholder","e.g. language","formControlName","name","autocomplete","off",1,"prompt-form__input",3,"id"],["type","text","placeholder","Optional","formControlName","description","autocomplete","off",1,"prompt-form__input",3,"id"],["type","text","placeholder","e.g. English","formControlName","defaultValue","autocomplete","off",1,"prompt-form__input",3,"id"],["type","button","title","Remove this parameter",1,"prompt-form__remove-btn",3,"click"],[1,"prompt-form__content-index"],[1,"prompt-form__content-field"],["rows","4","placeholder","Enter a command\u2026",1,"prompt-form__textarea",3,"formControlName"],["type","button","title","Remove this entry",1,"prompt-form__remove-btn",3,"click","disabled"],["type","button",1,"prompt-form__btn","prompt-form__btn--export",3,"click","disabled"]],template:function(e,l){e&1&&(Cs(0,"div",0)(1,"header",1)(2,"button",2),kg("click",function(){return l.cancel()}),Cs(3,"span",3),JC(4,"\u2190"),hl(),JC(5),hl(),Cs(6,"h1",4),JC(7),hl()(),aC(8,ie,2,0,"p",5)(9,ve,64,18,"form",6),hl()),e&2&&(sI(5),Dl(" ",l.isPlatformMode?"Platform prompts":"Prompts"," "),sI(2),Kg(l.isEditMode()?"Edit prompt":"New prompt"),sI(),cC(l.isLoading()?8:9));},dependencies:[ni,Jn,Qn,ei,Ye,At,Zn,Xn,Cn,En,An,Ct,Vt],styles:[".prompt-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:560px;margin:0 auto;padding:2rem 1rem}.prompt-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.prompt-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-accent)}.prompt-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.prompt-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.prompt-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.prompt-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.prompt-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.prompt-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.prompt-form__field--inline[_ngcontent-%COMP%]{flex:1}.prompt-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text)}.prompt-form__label-hint[_ngcontent-%COMP%]{font-weight:400;color:var(--color-text-secondary);margin-left:.375rem}.prompt-form__select[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:0;border:1px solid var(--color-divider);background:var(--color-surface);color:var(--color-text);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;cursor:pointer;appearance:auto;transition:border-color .15s ease}.prompt-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.prompt-form__field-hint[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary);line-height:1.4}.prompt-form__readonly-value[_ngcontent-%COMP%]{margin:0;padding:.5rem .875rem;border-radius:0;background:var(--color-bg-hover);border:1px solid var(--color-divider);color:var(--color-text);font-size:.9375rem}.prompt-form__input[_ngcontent-%COMP%], .prompt-form__textarea[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:0;border:1px solid var(--color-divider);background:var(--color-surface);color:var(--color-text);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;transition:border-color .15s ease}.prompt-form__input[_ngcontent-%COMP%]:focus, .prompt-form__textarea[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.prompt-form__input[_ngcontent-%COMP%]::placeholder, .prompt-form__textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.prompt-form__textarea[_ngcontent-%COMP%]{resize:vertical;min-height:100px;line-height:1.5}.prompt-form__textarea--code[_ngcontent-%COMP%]{font-family:monospace;font-size:.85rem;resize:vertical}.prompt-form__section[_ngcontent-%COMP%]{border:1px solid var(--color-divider);border-radius:0;padding:1rem;margin:0;display:flex;flex-direction:column;gap:.75rem}.prompt-form__section-hint[_ngcontent-%COMP%]{margin:0;font-size:.8rem;color:var(--color-text-secondary);line-height:1.4}.prompt-form__empty-hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.prompt-form__content-row[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:flex-start}.prompt-form__content-field[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.25rem}.prompt-form__content-index[_ngcontent-%COMP%]{flex-shrink:0;width:1.5rem;padding-top:.6rem;font-size:.8rem;font-weight:600;color:var(--color-text-secondary);text-align:right;-webkit-user-select:none;user-select:none}.prompt-form__param-row[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:flex-end;padding:.75rem;border-radius:0;background:var(--color-bg-hover)}.prompt-form__param-fields[_ngcontent-%COMP%]{flex:1;display:flex;gap:.75rem;flex-wrap:wrap}.prompt-form__add-btn[_ngcontent-%COMP%]{align-self:flex-start;padding:.4rem .875rem;border-radius:0;border:1px solid var(--color-divider);background:transparent;color:var(--color-accent);font-size:.875rem;font-family:inherit;cursor:pointer;transition:background .15s ease,border-color .15s ease}.prompt-form__add-btn[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);border-color:var(--color-accent)}.prompt-form__remove-btn[_ngcontent-%COMP%]{flex-shrink:0;width:1.75rem;height:1.75rem;display:flex;align-items:center;justify-content:center;border-radius:0;border:1px solid transparent;background:transparent;color:var(--color-neutral-500);font-size:1rem;line-height:1;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.prompt-form__remove-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--red) 10%,transparent);color:var(--red);border-color:var(--red)}.prompt-form__remove-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:not-allowed}.prompt-form__error[_ngcontent-%COMP%]{margin:0;padding:.625rem .875rem;border-radius:0;background:color-mix(in srgb,var(--red) 10%,transparent);border:1px solid var(--red);color:var(--red);font-size:.875rem;line-height:1.4}.prompt-form__field-error[_ngcontent-%COMP%]{font-size:.8rem;color:var(--red);line-height:1.3}.prompt-form__input--invalid[_ngcontent-%COMP%], .prompt-form__textarea--invalid[_ngcontent-%COMP%]{border-color:var(--red)}.prompt-form__input--invalid[_ngcontent-%COMP%]:focus, .prompt-form__textarea--invalid[_ngcontent-%COMP%]:focus{border-color:var(--red)}.prompt-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.prompt-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:0;border:1px solid var(--color-divider);background:transparent;color:var(--color-text);font-size:13px;font-family:var(--font-heading);font-weight:600;cursor:pointer;transition:background .15s ease,border-color .15s ease}.prompt-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.prompt-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.prompt-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.prompt-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}.prompt-form__btn--export[_ngcontent-%COMP%]{border-color:var(--color-divider);color:var(--color-text-secondary)}.prompt-form__btn--export[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-accent)}"]})};function be(i){let t=i.value?.trim();if(!t)return null;try{return JSON.parse(t),null}catch(e){return {invalidJson:true}}}export{re as PromptFormComponent};
1
+ import {m}from'./chunk-C1RU8zia.js';import {g,ao as V,G,C as Ce$1,da as M,W as Wi,b as U,a7 as va,X as br,z as z$1,a as P,j as jw,k as Cs,n as Lg,J as JC,m as hl,o as aC,u as sI,a5 as Dl,a8 as em,v as cC,a9 as vC,A as Ag,a3 as ZI,q as dC,bo as uC,ac as CC,x as xg,y as qg,a6 as QI,w as fC,aa as Sf,ab as _f}from'./main-JTU33H5D.js';import {o as z,z as ze,k as _t,b as _e$1,n as ni,J as Jn,Q as Qn,e as ei,Y as Ye,A as At,Z as Zn,l as Xn,C as Cn,E as En,p as An,q as Ct,V as Vt}from'./chunk-DuXr-yGB.js';import'./chunk-BK_05kmN.js';import'./chunk-DeXXr4BL.js';import'./chunk-DK1hp0WW.js';var ne=(i,t)=>t.id;function ie(i,t){i&1&&(Cs(0,"p",5),JC(1,"Loading\u2026"),hl());}function ae(i,t){i&1&&(Cs(0,"span",12),JC(1,"Name is required."),hl());}function le(i,t){if(i&1&&(Cs(0,"p",32),JC(1),hl(),Cs(2,"span",26),JC(3,"Agent Config cannot be changed after creation."),hl()),i&2){let e=CC(3);sI(),em(e.resolveAgentConfigName(e.agentConfigIdControl.value));}}function me(i,t){if(i&1&&(Cs(0,"option",34),JC(1),hl()),i&2){let e=t.$implicit;xg("ngValue",e.id),sI(),em(e.name);}}function pe(i,t){if(i&1&&(Cs(0,"select",33)(1,"option",34),JC(2,"\u2014 None \u2014"),hl(),dC(3,me,2,2,"option",34,ne),hl(),ZI(),Cs(5,"span",26),JC(6,"Optional. Links this prompt to an agent as a starter. Immutable after creation."),hl()),i&2){let e=CC(3);xg("formControl",e.agentConfigIdControl),QI(),sI(),xg("ngValue",null),sI(2),fC(e.availableAgentConfigs());}}function de(i,t){if(i&1&&(Cs(0,"div",8)(1,"label",31),JC(2,"Agent Config"),hl(),aC(3,le,4,1)(4,pe,7,2),hl()),i&2){let e=CC(2);sI(3),cC(e.isEditMode()&&e.agentConfigIdControl.value?3:e.isEditMode()?-1:4);}}function ce(i,t){i&1&&(Cs(0,"p",19),JC(1,"No parameters defined."),hl());}function se(i,t){i&1&&(Cs(0,"span",12),JC(1,"Parameter name is required."),hl());}function _e(i,t){if(i&1){let e=vC();Cs(0,"div",20)(1,"div",35)(2,"div",36)(3,"label",37),JC(4,"Name "),Cs(5,"span",10),JC(6,"*"),hl()(),Ag(7,"input",38),ZI(),aC(8,se,2,0,"span",12),hl(),Cs(9,"div",36)(10,"label",37),JC(11,"Description"),hl(),Ag(12,"input",39),ZI(),hl(),Cs(13,"div",36)(14,"label",37),JC(15,"Default value"),hl(),Ag(16,"input",40),ZI(),hl()(),Cs(17,"button",41),Lg("click",function(){let m=Sf(e).$index,d=CC(2);return _f(d.removeParameter(m))}),JC(18," \xD7 "),hl()();}if(i&2){let e=t.$implicit,l=t.$index;xg("formGroupName",l),sI(3),xg("for","param-name-"+l),sI(4),qg("prompt-form__input--invalid",e.controls.name.invalid&&e.controls.name.touched),xg("id","param-name-"+l),QI(),sI(),cC(e.controls.name.invalid&&e.controls.name.touched?8:-1),sI(2),xg("for","param-desc-"+l),sI(2),xg("id","param-desc-"+l),QI(),sI(2),xg("for","param-default-"+l),sI(2),xg("id","param-default-"+l),QI();}}function fe(i,t){i&1&&(Cs(0,"span",12),JC(1,"Content entry must not be blank."),hl());}function ue(i,t){if(i&1){let e=vC();Cs(0,"div",22)(1,"span",42),JC(2),hl(),Cs(3,"div",43),Ag(4,"textarea",44),ZI(),aC(5,fe,2,0,"span",12),hl(),Cs(6,"button",45),Lg("click",function(){let m=Sf(e).$index,d=CC(2);return _f(d.removeContentEntry(m))}),JC(7," \xD7 "),hl()();}if(i&2){let e=t.$implicit,l=t.$index,m=CC(2);sI(2),em(l+1),sI(2),qg("prompt-form__textarea--invalid",e.invalid&&e.touched),xg("formControlName",l),QI(),sI(),cC(e.invalid&&e.touched?5:-1),sI(),xg("disabled",m.contentArray.length===1);}}function ge(i,t){if(i&1&&(Cs(0,"p",23),JC(1),hl()),i&2){let e=CC(2);sI(),em(e.errorMessage());}}function Ce(i,t){i&1&&(Cs(0,"span",12),JC(1,"Invalid JSON."),hl());}function xe(i,t){if(i&1){let e=vC();Cs(0,"button",46),Lg("click",function(){Sf(e);let m=CC(2);return _f(m.exportYaml())}),JC(1),hl();}if(i&2){let e=CC(2);xg("disabled",e.isExporting()),sI(),Dl(" ",e.isExporting()?"Exporting\u2026":"Export as YAML"," ");}}function ve(i,t){if(i&1){let e=vC();Cs(0,"form",7),Lg("ngSubmit",function(){Sf(e);let m=CC();return _f(m.submit())}),Cs(1,"div",8)(2,"label",9),JC(3,"Name "),Cs(4,"span",10),JC(5,"*"),hl()(),Ag(6,"input",11),ZI(),aC(7,ae,2,0,"span",12),hl(),Cs(8,"div",8)(9,"label",13),JC(10,"Description"),hl(),Ag(11,"input",14),ZI(),hl(),aC(12,de,5,1,"div",8),Cs(13,"fieldset",15)(14,"legend",16),JC(15," Parameters "),Cs(16,"span",17),JC(17,"Named placeholders used in content"),hl()(),Cs(18,"p",18),JC(19," Each parameter must have a name and a default value. Use "),Cs(20,"code"),JC(21),hl(),JC(22," in content entries to reference them. "),hl(),aC(23,ce,2,0,"p",19),dC(24,_e,19,10,"div",20,uC),Cs(26,"button",21),Lg("click",function(){Sf(e);let m=CC();return _f(m.addParameter())}),JC(27,"+ Add parameter"),hl()(),Cs(28,"fieldset",15)(29,"legend",16),JC(30," Content "),Cs(31,"span",10),JC(32,"*"),hl(),Cs(33,"span",17),JC(34,"Ordered list of text commands"),hl()(),Cs(35,"p",18),JC(36," Each content entry is a command. Use "),Cs(37,"code"),JC(38,"@AgentName"),hl(),JC(39," to target an agent, "),Cs(40,"code"),JC(41,"/promptName param1 param2"),hl(),JC(42," to call another prompt, and "),Cs(43,"code"),JC(44),hl(),JC(45," for parameter placeholders. "),hl(),dC(46,ue,8,6,"div",22,uC),Cs(48,"button",21),Lg("click",function(){Sf(e);let m=CC();return _f(m.addContentEntry())}),JC(49,"+ Add content entry"),hl()(),aC(50,ge,2,1,"p",23),Cs(51,"div",8)(52,"label",24),JC(53,"External Metadata"),hl(),Ag(54,"textarea",25),ZI(),aC(55,Ce,2,0,"span",12),Cs(56,"span",26),JC(57,"Optional. Opaque JSON object stored as-is. Leave empty to clear."),hl()(),Cs(58,"div",27)(59,"button",28),JC(60),hl(),aC(61,xe,2,2,"button",29),Cs(62,"button",30),Lg("click",function(){Sf(e);let m=CC();return _f(m.cancel())}),JC(63,"Cancel"),hl()()();}if(i&2){let e=CC();xg("formGroup",e.form),sI(6),qg("prompt-form__input--invalid",e.nameControl.invalid&&e.nameControl.touched),xg("formControl",e.nameControl),QI(),sI(),cC(e.nameControl.invalid&&e.nameControl.touched?7:-1),sI(4),xg("formControl",e.descriptionControl),QI(),sI(),cC(e.availableAgentConfigs().length>0?12:-1),sI(),xg("formArrayName","parameters"),sI(8),em(e.paramPlaceholderSyntax),sI(2),cC(e.parametersArray.length===0?23:-1),sI(),fC(e.parametersArray.controls),sI(4),xg("formArrayName","content"),sI(16),em(e.paramPlaceholderSyntax),sI(2),fC(e.contentArray.controls),sI(4),cC(e.errorMessage()?50:-1),sI(4),xg("formControl",e.externalMetadataJsonControl),QI(),sI(),cC(e.externalMetadataJsonControl.invalid&&e.externalMetadataJsonControl.touched?55:-1),sI(4),xg("disabled",e.form.invalid||e.isSubmitting()),sI(),Dl(" ",e.isEditMode()?"Save changes":"Create"," "),sI(),cC(e.isEditMode()?61:-1);}}var re=class i{route=g(V);router=g(G);destroyRef=g(Ce$1);promptState=g(m);agentConfigController=g(M);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=!this.namespaceId;form=new z({name:new _t("",{nonNullable:true,validators:[_e$1.required,_e$1.minLength(1)]}),description:new _t(null),agentConfigId:new _t(null),externalMetadataJson:new _t("",{nonNullable:true,validators:[be]}),content:new ze([this.createContentControl()],{validators:[_e$1.required]}),parameters:new ze([])});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get agentConfigIdControl(){return this.form.controls.agentConfigId}get externalMetadataJsonControl(){return this.form.controls.externalMetadataJson}get contentArray(){return this.form.controls.content}get parametersArray(){return this.form.controls.parameters}isEditMode=Wi(false);isSubmitting=Wi(false);isLoading=Wi(false);isExporting=Wi(false);errorMessage=Wi(null);paramPlaceholderSyntax="{{paramName}}";agentConfigs=Wi([]);availableAgentConfigs=this.agentConfigs.asReadonly();existingPrompt=null;ngOnInit(){let t=this.route.snapshot.paramMap.get("promptId");t&&(this.isEditMode.set(true),this.loadPrompt(t)),this.isPlatformMode?this.loadPlatformAgentConfigs():this.namespaceId&&this.loadAgentConfigs(this.namespaceId);}loadPrompt(t){this.isLoading.set(true),this.promptState.getById(t).pipe(U(this.destroyRef)).subscribe({next:e=>{this.existingPrompt=e,this.hydrateForm(e),this.isLoading.set(false);},error:()=>{this.isLoading.set(false),this.navigateBack();}});}loadAgentConfigs(t){this.agentConfigController.listByParentAgentConfig(t).pipe(U(this.destroyRef),va(()=>br([]))).subscribe(e=>this.agentConfigs.set(e));}loadPlatformAgentConfigs(){this.agentConfigController.listPlatformAgentsAgentConfig().pipe(U(this.destroyRef),va(()=>br([]))).subscribe(t=>this.agentConfigs.set(t));}hydrateForm(t){this.nameControl.setValue(t.name),this.descriptionControl.setValue(t.description??null),this.agentConfigIdControl.setValue(t.agentConfigId??null),this.contentArray.clear(),(t.content.length>0?t.content:[""]).forEach(l=>this.contentArray.push(this.createContentControl(l))),this.parametersArray.clear(),(t.parameters??[]).forEach(l=>this.parametersArray.push(this.createParameterGroup(l))),this.externalMetadataJsonControl.setValue(t.externalMetadata?JSON.stringify(t.externalMetadata,null,2):"");}resolveAgentConfigName(t){return this.agentConfigs().find(e=>e.id===t)?.name??t}createContentControl(t=""){return new _t(t,{nonNullable:true,validators:[_e$1.required,_e$1.pattern(/\S/)]})}addContentEntry(){this.contentArray.push(this.createContentControl());}removeContentEntry(t){this.contentArray.length>1&&this.contentArray.removeAt(t);}createParameterGroup(t){return new z({name:new _t(t?.name??"",{nonNullable:true,validators:[_e$1.required,_e$1.minLength(1)]}),description:new _t(t?.description??null),defaultValue:new _t(t?.defaultValue??"",{nonNullable:true,validators:[_e$1.required]})})}addParameter(){this.parametersArray.push(this.createParameterGroup());}removeParameter(t){this.parametersArray.removeAt(t);}submit(){if(this.form.invalid||this.isSubmitting())return;this.isSubmitting.set(true);let t=this.isEditMode()&&!!this.existingPrompt?.id,e=z$1(P({},this.existingPrompt??{}),{namespaceId:this.namespaceId,sourceLanguage:this.existingPrompt?.sourceLanguage??"en",name:this.nameControl.value.trim(),description:this.descriptionControl.value?.trim()||void 0,content:this.contentArray.controls.map(d=>d.value.trim()),parameters:this.parametersArray.controls.map(d=>({name:d.controls.name.value.trim(),description:d.controls.description.value?.trim()||void 0,defaultValue:d.controls.defaultValue.value.trim()}))});t||(e.agentConfigId=this.agentConfigIdControl.value||null);let l=this.externalMetadataJsonControl.value.trim();e.externalMetadata=l?JSON.parse(l):null;let m=t?this.promptState.update(this.existingPrompt.id,e):this.promptState.create(e);this.errorMessage.set(null),m.pipe(U(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:d=>{this.isSubmitting.set(false),d.status===409?this.errorMessage.set(`A prompt named "${e.name}" already exists in this scope.`):d.status===400?this.errorMessage.set(d.error?.message??"Invalid prompt data."):this.errorMessage.set("An unexpected error occurred. Please try again.");}});}exportYaml(){let t=this.existingPrompt?.id;!t||this.isExporting()||(this.isExporting.set(true),this.promptState.exportAsYaml(t).pipe(U(this.destroyRef)).subscribe({next:e=>{let l=new Blob([e],{type:"application/yaml"}),m=URL.createObjectURL(l),d=document.createElement("a");d.href=m,d.download=`${this.existingPrompt?.name??"prompt"}.yaml`,d.click(),URL.revokeObjectURL(m),this.isExporting.set(false);},error:()=>this.isExporting.set(false)}));}cancel(){this.navigateBack();}navigateBack(){this.isPlatformMode?this.router.navigate(["/agentos","admin","prompts"]):this.router.navigate(["/agentos",this.namespaceId,"prompts"]);}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=jw({type:i,selectors:[["agentos-prompt-form"]],decls:10,vars:3,consts:[[1,"prompt-form"],[1,"prompt-form__header"],["type","button","title","Back to prompts",1,"prompt-form__back",3,"click"],[1,"prompt-form__back-icon"],[1,"prompt-form__title"],[1,"prompt-form__loading"],[1,"prompt-form__form",3,"formGroup"],[1,"prompt-form__form",3,"ngSubmit","formGroup"],[1,"prompt-form__field"],["for","prompt-name",1,"prompt-form__label"],["aria-hidden","true"],["id","prompt-name","type","text","placeholder","e.g. Summarise meeting notes","autocomplete","off",1,"prompt-form__input",3,"formControl"],[1,"prompt-form__field-error"],["for","prompt-description",1,"prompt-form__label"],["id","prompt-description","type","text","placeholder","Optional \u2014 short description of this prompt","autocomplete","off",1,"prompt-form__input",3,"formControl"],[1,"prompt-form__section",3,"formArrayName"],[1,"prompt-form__label"],[1,"prompt-form__label-hint"],[1,"prompt-form__section-hint"],[1,"prompt-form__empty-hint"],[1,"prompt-form__param-row",3,"formGroupName"],["type","button",1,"prompt-form__add-btn",3,"click"],[1,"prompt-form__content-row"],[1,"prompt-form__error"],["for","prompt-external-metadata",1,"prompt-form__label"],["id","prompt-external-metadata","rows","6","placeholder",'{ "key": "value" }',"spellcheck","false","autocomplete","off",1,"prompt-form__textarea","prompt-form__textarea--code",3,"formControl"],[1,"prompt-form__field-hint"],[1,"prompt-form__actions"],["type","submit",1,"prompt-form__btn","prompt-form__btn--primary",3,"disabled"],["type","button",1,"prompt-form__btn","prompt-form__btn--export",3,"disabled"],["type","button",1,"prompt-form__btn",3,"click"],["for","prompt-agent-config",1,"prompt-form__label"],[1,"prompt-form__readonly-value"],["id","prompt-agent-config",1,"prompt-form__select",3,"formControl"],[3,"ngValue"],[1,"prompt-form__param-fields"],[1,"prompt-form__field","prompt-form__field--inline"],[1,"prompt-form__label",3,"for"],["type","text","placeholder","e.g. language","formControlName","name","autocomplete","off",1,"prompt-form__input",3,"id"],["type","text","placeholder","Optional","formControlName","description","autocomplete","off",1,"prompt-form__input",3,"id"],["type","text","placeholder","e.g. English","formControlName","defaultValue","autocomplete","off",1,"prompt-form__input",3,"id"],["type","button","title","Remove this parameter",1,"prompt-form__remove-btn",3,"click"],[1,"prompt-form__content-index"],[1,"prompt-form__content-field"],["rows","4","placeholder","Enter a command\u2026",1,"prompt-form__textarea",3,"formControlName"],["type","button","title","Remove this entry",1,"prompt-form__remove-btn",3,"click","disabled"],["type","button",1,"prompt-form__btn","prompt-form__btn--export",3,"click","disabled"]],template:function(e,l){e&1&&(Cs(0,"div",0)(1,"header",1)(2,"button",2),Lg("click",function(){return l.cancel()}),Cs(3,"span",3),JC(4,"\u2190"),hl(),JC(5),hl(),Cs(6,"h1",4),JC(7),hl()(),aC(8,ie,2,0,"p",5)(9,ve,64,18,"form",6),hl()),e&2&&(sI(5),Dl(" ",l.isPlatformMode?"Platform prompts":"Prompts"," "),sI(2),em(l.isEditMode()?"Edit prompt":"New prompt"),sI(),cC(l.isLoading()?8:9));},dependencies:[ni,Jn,Qn,ei,Ye,At,Zn,Xn,Cn,En,An,Ct,Vt],styles:[".prompt-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:560px;margin:0 auto;padding:2rem 1rem}.prompt-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.prompt-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-accent)}.prompt-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.prompt-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.prompt-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.prompt-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.prompt-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.prompt-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.prompt-form__field--inline[_ngcontent-%COMP%]{flex:1}.prompt-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text)}.prompt-form__label-hint[_ngcontent-%COMP%]{font-weight:400;color:var(--color-text-secondary);margin-left:.375rem}.prompt-form__select[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:0;border:1px solid var(--color-divider);background:var(--color-surface);color:var(--color-text);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;cursor:pointer;appearance:auto;transition:border-color .15s ease}.prompt-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.prompt-form__field-hint[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary);line-height:1.4}.prompt-form__readonly-value[_ngcontent-%COMP%]{margin:0;padding:.5rem .875rem;border-radius:0;background:var(--color-bg-hover);border:1px solid var(--color-divider);color:var(--color-text);font-size:.9375rem}.prompt-form__input[_ngcontent-%COMP%], .prompt-form__textarea[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:0;border:1px solid var(--color-divider);background:var(--color-surface);color:var(--color-text);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;transition:border-color .15s ease}.prompt-form__input[_ngcontent-%COMP%]:focus, .prompt-form__textarea[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.prompt-form__input[_ngcontent-%COMP%]::placeholder, .prompt-form__textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.prompt-form__textarea[_ngcontent-%COMP%]{resize:vertical;min-height:100px;line-height:1.5}.prompt-form__textarea--code[_ngcontent-%COMP%]{font-family:monospace;font-size:.85rem;resize:vertical}.prompt-form__section[_ngcontent-%COMP%]{border:1px solid var(--color-divider);border-radius:0;padding:1rem;margin:0;display:flex;flex-direction:column;gap:.75rem}.prompt-form__section-hint[_ngcontent-%COMP%]{margin:0;font-size:.8rem;color:var(--color-text-secondary);line-height:1.4}.prompt-form__empty-hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.prompt-form__content-row[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:flex-start}.prompt-form__content-field[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.25rem}.prompt-form__content-index[_ngcontent-%COMP%]{flex-shrink:0;width:1.5rem;padding-top:.6rem;font-size:.8rem;font-weight:600;color:var(--color-text-secondary);text-align:right;-webkit-user-select:none;user-select:none}.prompt-form__param-row[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:flex-end;padding:.75rem;border-radius:0;background:var(--color-bg-hover)}.prompt-form__param-fields[_ngcontent-%COMP%]{flex:1;display:flex;gap:.75rem;flex-wrap:wrap}.prompt-form__add-btn[_ngcontent-%COMP%]{align-self:flex-start;padding:.4rem .875rem;border-radius:0;border:1px solid var(--color-divider);background:transparent;color:var(--color-accent);font-size:.875rem;font-family:inherit;cursor:pointer;transition:background .15s ease,border-color .15s ease}.prompt-form__add-btn[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);border-color:var(--color-accent)}.prompt-form__remove-btn[_ngcontent-%COMP%]{flex-shrink:0;width:1.75rem;height:1.75rem;display:flex;align-items:center;justify-content:center;border-radius:0;border:1px solid transparent;background:transparent;color:var(--color-neutral-500);font-size:1rem;line-height:1;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.prompt-form__remove-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--red) 10%,transparent);color:var(--red);border-color:var(--red)}.prompt-form__remove-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:not-allowed}.prompt-form__error[_ngcontent-%COMP%]{margin:0;padding:.625rem .875rem;border-radius:0;background:color-mix(in srgb,var(--red) 10%,transparent);border:1px solid var(--red);color:var(--red);font-size:.875rem;line-height:1.4}.prompt-form__field-error[_ngcontent-%COMP%]{font-size:.8rem;color:var(--red);line-height:1.3}.prompt-form__input--invalid[_ngcontent-%COMP%], .prompt-form__textarea--invalid[_ngcontent-%COMP%]{border-color:var(--red)}.prompt-form__input--invalid[_ngcontent-%COMP%]:focus, .prompt-form__textarea--invalid[_ngcontent-%COMP%]:focus{border-color:var(--red)}.prompt-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.prompt-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:0;border:1px solid var(--color-divider);background:transparent;color:var(--color-text);font-size:13px;font-family:var(--font-heading);font-weight:600;cursor:pointer;transition:background .15s ease,border-color .15s ease}.prompt-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.prompt-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.prompt-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.prompt-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}.prompt-form__btn--export[_ngcontent-%COMP%]{border-color:var(--color-divider);color:var(--color-text-secondary)}.prompt-form__btn--export[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-accent)}"]})};function be(i){let t=i.value?.trim();if(!t)return null;try{return JSON.parse(t),null}catch(e){return {invalidJson:true}}}export{re as PromptFormComponent};
@@ -1 +1 @@
1
- import {c}from'./chunk-D8dXXVY5.js';import {g,ao as V,dq as D,W as Wi,an as ue$1,cd as $f,j as jw,s as si,cF as $b,k as Cs,J as JC,m as hl,o as aC,t as sI,u as cC,bR as Sd,bS as Da,cB as on,$ as $y,a7 as va,a9 as vC,n as kg,ai as rm,a3 as ZI,ac as CC,ak as nm,a6 as QI,a8 as Kg,q as dC,v as fC,cg as pT,b4 as fT,bf as gT,bg as yT,b0 as Xg,bi as vT,aa as Cf,ab as Tf,aj as iT,a5 as Dl}from'./main-RXIVNUWK.js';import {t as ti,J as Jn,Y as Ye,Z as Zn,l as Xn,g as gt,c as cn,d as an}from'./chunk-B3kY-GQk.js';import'./chunk-YGA4ansj.js';import'./chunk-CaL6ZXsO.js';import'./chunk-CqZF9JZo.js';var ne=e=>({title:"By agent",rows:e}),ie=e=>({title:"By model",rows:e}),ae=(e,o)=>[e,o],oe=(e,o)=>o.title,re=(e,o)=>o.key;function se(e,o){e&1&&(Cs(0,"p",2),JC(1,"Loading usage settings\u2026"),hl());}function le(e,o){if(e&1){let t=vC();Cs(0,"p",3),JC(1,"Could not load usage settings. Please try again."),hl(),Cs(2,"button",4),kg("click",function(){Cf(t);let s=CC();return Tf(s.configuration.retry())}),JC(3,"Retry usage settings"),hl();}}function me(e,o){e&1&&(Cs(0,"p",2),JC(1,"Usage tracking is disabled."),hl());}function de(e,o){e&1&&(Cs(0,"p",3),JC(1),hl()),e&2&&(sI(),Kg(o));}function ce(e,o){e&1&&(Cs(0,"p",2),JC(1,"Loading usage\u2026"),hl());}function pe(e,o){e&1&&(Cs(0,"p"),JC(1,"No recorded usage for this period."),hl());}function ge(e,o){if(e&1&&(Cs(0,"small"),JC(1),hl()),e&2){let t=CC().$implicit;sI(),Dl("",t.aggregate.unknownCostCount," record(s) with unknown cost");}}function ue(e,o){if(e&1&&(Cs(0,"tr")(1,"th",11),JC(2),hl(),Cs(3,"td"),JC(4),gT(5,"number"),hl(),Cs(6,"td"),JC(7),gT(8,"number"),gT(9,"number"),hl(),Cs(10,"td"),JC(11),gT(12,"number"),gT(13,"number"),hl(),Cs(14,"td"),JC(15),gT(16,"number"),aC(17,ge,2,1,"small"),hl()()),e&2){let t=o.$implicit;sI(2),Kg(t.key),sI(2),Kg(yT(5,9,t.aggregate.totalTokens)),sI(3),Xg("",yT(8,11,t.aggregate.inputTokens)," / ",yT(9,13,t.aggregate.outputTokens)),sI(4),Xg(" ",yT(12,15,t.aggregate.cacheReadTokens)," / ",yT(13,17,t.aggregate.cacheWriteTokens)," "),sI(4),Xg(" ",t.aggregate.unknownCostCount>0?"At least ":"","",vT(16,19,t.aggregate.cost,"1.2-6")," "),sI(2),cC(t.aggregate.unknownCostCount>0?17:-1);}}function _e(e,o){if(e&1&&(Cs(0,"div",9)(1,"table")(2,"thead")(3,"tr")(4,"th",10),JC(5,"Name"),hl(),Cs(6,"th",10),JC(7,"Tokens"),hl(),Cs(8,"th",10),JC(9,"Input / output"),hl(),Cs(10,"th",10),JC(11,"Cache read / write"),hl(),Cs(12,"th",10),JC(13,"Estimated cost"),hl()()(),Cs(14,"tbody"),dC(15,ue,18,22,"tr",null,re),hl()()()),e&2){let t=CC().$implicit;sI(15),fC(t.rows);}}function Ce(e,o){if(e&1&&(Cs(0,"h2"),JC(1),hl(),aC(2,pe,2,0,"p")(3,_e,17,0,"div",9)),e&2){let t=o.$implicit;sI(),Kg(t.title),sI(),cC(t.rows.length===0?2:3);}}function fe(e,o){if(e&1&&(dC(0,Ce,4,2,null,null,oe),Cs(2,"p"),JC(3,"Unpriced usage is kept separate from known costs. Active agent runs appear here after they finish."),hl()),e&2){let t=CC(2);fC(pT(4,ae,fT(0,ne,t.agents()),fT(2,ie,t.models())));}}function ye(e,o){if(e&1){let t=vC();Cs(0,"p"),JC(1,"Recorded LLM usage across this namespace. Costs are estimates in the platform currency."),hl(),Cs(2,"form",5),kg("ngSubmit",function(){Cf(t);let s=CC();return Tf(s.load())}),Cs(3,"label"),JC(4,"From (UTC)"),Cs(5,"input",6),rm("ngModelChange",function(s){Cf(t);let d=CC();return iT(d.from,s)||(d.from=s),Tf(s)}),hl(),ZI(),hl(),Cs(6,"label"),JC(7,"To (UTC)"),Cs(8,"input",7),rm("ngModelChange",function(s){Cf(t);let d=CC();return iT(d.to,s)||(d.to=s),Tf(s)}),hl(),ZI(),hl(),Cs(9,"button",8),JC(10,"Refresh"),hl()(),aC(11,de,2,1,"p",3),aC(12,ce,2,0,"p",2)(13,fe,4,7);}if(e&2){let t,r=CC();sI(5),nm("ngModel",r.from),QI(),sI(3),nm("ngModel",r.to),QI(),sI(3),cC((t=r.error())?11:-1,t),sI(),cC(r.loading()?12:r.error()?-1:13);}}var te=class e{route=g(V);api=g(D);configuration=g(c);namespaceId=this.route.snapshot.params.namespaceId;agents=Wi([]);models=Wi([]);error=Wi(null);loading=Wi(false);from=new Date(Date.now()-30*864e5).toISOString().slice(0,10);to=new Date().toISOString().slice(0,10);refresh=new ue$1;constructor(){$f(o=>{if(!this.configuration.enabled())return;let t=this.refresh.pipe(Sd(void 0),Da(()=>{this.error.set(null),this.agents.set([]),this.models.set([]);let r=new Date(`${this.from}T00:00:00.000Z`),s=new Date(`${this.to}T23:59:59.999Z`);return !Number.isFinite(r.getTime())||!Number.isFinite(s.getTime())||r>s?(this.error.set("Select a valid date range."),this.loading.set(false),on):(this.loading.set(true),$y({agents:this.api.aggregateByAgentUsageRecord(this.namespaceId,r.toISOString(),s.toISOString()),models:this.api.aggregateByModelUsageRecord(this.namespaceId,r.toISOString(),s.toISOString())}).pipe(va(d=>(this.loading.set(false),this.error.set(d.status===403?"Namespace admin permission is required to view this report.":"Could not load usage. Please try again."),on))))})).subscribe(({agents:r,models:s})=>{this.agents.set(r),this.models.set(s),this.loading.set(false);});o(()=>t.unsubscribe());});}load(){this.configuration.enabled()&&this.refresh.next();}static \u0275fac=function(t){return new(t||e)};static \u0275cmp=jw({type:e,selectors:[["agentos-namespace-usage"]],decls:9,vars:1,consts:[[1,"report"],["routerLink","/agentos/namespaces"],["role","status"],["role","alert"],["type","button",3,"click"],[1,"filters",3,"ngSubmit"],["type","date","name","from","required","",3,"ngModelChange","ngModel"],["type","date","name","to","required","",3,"ngModelChange","ngModel"],["type","submit"],[1,"table-wrap"],["scope","col"],["scope","row"]],template:function(t,r){t&1&&(Cs(0,"section",0)(1,"a",1),JC(2,"\u2190 Namespaces"),hl(),Cs(3,"h1"),JC(4,"Usage and costs"),hl(),aC(5,se,2,0,"p",2)(6,le,4,0)(7,me,2,0,"p",2)(8,ye,14,4),hl()),t&2&&(sI(5),cC(r.configuration.state()==="loading"?5:r.configuration.state()==="error"?6:r.configuration.state()==="disabled"?7:8));},dependencies:[ti,Jn,Ye,Zn,Xn,gt,cn,an,si,$b],styles:["[_nghost-%COMP%]{display:block}.report[_ngcontent-%COMP%]{max-width:1100px;margin:auto;padding:1.5rem;color:var(--color-text, inherit)}a[_ngcontent-%COMP%]{color:inherit}.filters[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:1rem;align-items:end;margin:1.5rem 0}label[_ngcontent-%COMP%]{display:grid;gap:.4rem}input[_ngcontent-%COMP%], button[_ngcontent-%COMP%]{font:inherit;color:inherit;background:transparent;border:1px solid var(--color-border, rgba(136, 136, 136, .5333333333));border-radius:.4rem;padding:.5rem .75rem}button[_ngcontent-%COMP%]{cursor:pointer}.table-wrap[_ngcontent-%COMP%]{overflow-x:auto}table[_ngcontent-%COMP%]{border-collapse:collapse;width:100%}th[_ngcontent-%COMP%], td[_ngcontent-%COMP%]{text-align:left;padding:.75rem;border-bottom:1px solid var(--color-border, rgba(136, 136, 136, .3333333333))}small[_ngcontent-%COMP%]{display:block;margin-top:.3rem}h2[_ngcontent-%COMP%]{margin-top:2rem}"]})};export{te as NamespaceUsageComponent};
1
+ import {c}from'./chunk-C1RU8zia.js';import {g,ao as V,dq as G,W as Wi,an as ue$1,cd as Wf,j as jw,s as si,cF as $b,k as Cs,J as JC,m as hl,o as aC,u as sI,v as cC,bR as Sd,bS as Da,cB as on,S as Wy,a7 as va,a9 as vC,n as Lg,ai as sm,a3 as ZI,ac as CC,ak as im,a6 as QI,a8 as em,q as dC,w as fC,cg as pT,b4 as fT,bf as gT,bg as yT,b0 as tm,bi as vT,aa as Sf,ab as _f,aj as iT,a5 as Dl}from'./main-JTU33H5D.js';import {t as ti,J as Jn,Y as Ye,Z as Zn,l as Xn,g as gt,c as cn,d as an}from'./chunk-DuXr-yGB.js';import'./chunk-BK_05kmN.js';import'./chunk-DeXXr4BL.js';import'./chunk-DK1hp0WW.js';var ne=e=>({title:"By agent",rows:e}),ie=e=>({title:"By model",rows:e}),ae=(e,o)=>[e,o],oe=(e,o)=>o.title,re=(e,o)=>o.key;function se(e,o){e&1&&(Cs(0,"p",2),JC(1,"Loading usage settings\u2026"),hl());}function le(e,o){if(e&1){let t=vC();Cs(0,"p",3),JC(1,"Could not load usage settings. Please try again."),hl(),Cs(2,"button",4),Lg("click",function(){Sf(t);let s=CC();return _f(s.configuration.retry())}),JC(3,"Retry usage settings"),hl();}}function me(e,o){e&1&&(Cs(0,"p",2),JC(1,"Usage tracking is disabled."),hl());}function de(e,o){e&1&&(Cs(0,"p",3),JC(1),hl()),e&2&&(sI(),em(o));}function ce(e,o){e&1&&(Cs(0,"p",2),JC(1,"Loading usage\u2026"),hl());}function pe(e,o){e&1&&(Cs(0,"p"),JC(1,"No recorded usage for this period."),hl());}function ge(e,o){if(e&1&&(Cs(0,"small"),JC(1),hl()),e&2){let t=CC().$implicit;sI(),Dl("",t.aggregate.unknownCostCount," record(s) with unknown cost");}}function ue(e,o){if(e&1&&(Cs(0,"tr")(1,"th",11),JC(2),hl(),Cs(3,"td"),JC(4),gT(5,"number"),hl(),Cs(6,"td"),JC(7),gT(8,"number"),gT(9,"number"),hl(),Cs(10,"td"),JC(11),gT(12,"number"),gT(13,"number"),hl(),Cs(14,"td"),JC(15),gT(16,"number"),aC(17,ge,2,1,"small"),hl()()),e&2){let t=o.$implicit;sI(2),em(t.key),sI(2),em(yT(5,9,t.aggregate.totalTokens)),sI(3),tm("",yT(8,11,t.aggregate.inputTokens)," / ",yT(9,13,t.aggregate.outputTokens)),sI(4),tm(" ",yT(12,15,t.aggregate.cacheReadTokens)," / ",yT(13,17,t.aggregate.cacheWriteTokens)," "),sI(4),tm(" ",t.aggregate.unknownCostCount>0?"At least ":"","",vT(16,19,t.aggregate.cost,"1.2-6")," "),sI(2),cC(t.aggregate.unknownCostCount>0?17:-1);}}function _e(e,o){if(e&1&&(Cs(0,"div",9)(1,"table")(2,"thead")(3,"tr")(4,"th",10),JC(5,"Name"),hl(),Cs(6,"th",10),JC(7,"Tokens"),hl(),Cs(8,"th",10),JC(9,"Input / output"),hl(),Cs(10,"th",10),JC(11,"Cache read / write"),hl(),Cs(12,"th",10),JC(13,"Estimated cost"),hl()()(),Cs(14,"tbody"),dC(15,ue,18,22,"tr",null,re),hl()()()),e&2){let t=CC().$implicit;sI(15),fC(t.rows);}}function Ce(e,o){if(e&1&&(Cs(0,"h2"),JC(1),hl(),aC(2,pe,2,0,"p")(3,_e,17,0,"div",9)),e&2){let t=o.$implicit;sI(),em(t.title),sI(),cC(t.rows.length===0?2:3);}}function fe(e,o){if(e&1&&(dC(0,Ce,4,2,null,null,oe),Cs(2,"p"),JC(3,"Unpriced usage is kept separate from known costs. Active agent runs appear here after they finish."),hl()),e&2){let t=CC(2);fC(pT(4,ae,fT(0,ne,t.agents()),fT(2,ie,t.models())));}}function ye(e,o){if(e&1){let t=vC();Cs(0,"p"),JC(1,"Recorded LLM usage across this namespace. Costs are estimates in the platform currency."),hl(),Cs(2,"form",5),Lg("ngSubmit",function(){Sf(t);let s=CC();return _f(s.load())}),Cs(3,"label"),JC(4,"From (UTC)"),Cs(5,"input",6),sm("ngModelChange",function(s){Sf(t);let d=CC();return iT(d.from,s)||(d.from=s),_f(s)}),hl(),ZI(),hl(),Cs(6,"label"),JC(7,"To (UTC)"),Cs(8,"input",7),sm("ngModelChange",function(s){Sf(t);let d=CC();return iT(d.to,s)||(d.to=s),_f(s)}),hl(),ZI(),hl(),Cs(9,"button",8),JC(10,"Refresh"),hl()(),aC(11,de,2,1,"p",3),aC(12,ce,2,0,"p",2)(13,fe,4,7);}if(e&2){let t,r=CC();sI(5),im("ngModel",r.from),QI(),sI(3),im("ngModel",r.to),QI(),sI(3),cC((t=r.error())?11:-1,t),sI(),cC(r.loading()?12:r.error()?-1:13);}}var te=class e{route=g(V);api=g(G);configuration=g(c);namespaceId=this.route.snapshot.params.namespaceId;agents=Wi([]);models=Wi([]);error=Wi(null);loading=Wi(false);from=new Date(Date.now()-30*864e5).toISOString().slice(0,10);to=new Date().toISOString().slice(0,10);refresh=new ue$1;constructor(){Wf(o=>{if(!this.configuration.enabled())return;let t=this.refresh.pipe(Sd(void 0),Da(()=>{this.error.set(null),this.agents.set([]),this.models.set([]);let r=new Date(`${this.from}T00:00:00.000Z`),s=new Date(`${this.to}T23:59:59.999Z`);return !Number.isFinite(r.getTime())||!Number.isFinite(s.getTime())||r>s?(this.error.set("Select a valid date range."),this.loading.set(false),on):(this.loading.set(true),Wy({agents:this.api.aggregateByAgentUsageRecord(this.namespaceId,r.toISOString(),s.toISOString()),models:this.api.aggregateByModelUsageRecord(this.namespaceId,r.toISOString(),s.toISOString())}).pipe(va(d=>(this.loading.set(false),this.error.set(d.status===403?"Namespace admin permission is required to view this report.":"Could not load usage. Please try again."),on))))})).subscribe(({agents:r,models:s})=>{this.agents.set(r),this.models.set(s),this.loading.set(false);});o(()=>t.unsubscribe());});}load(){this.configuration.enabled()&&this.refresh.next();}static \u0275fac=function(t){return new(t||e)};static \u0275cmp=jw({type:e,selectors:[["agentos-namespace-usage"]],decls:9,vars:1,consts:[[1,"report"],["routerLink","/agentos/namespaces"],["role","status"],["role","alert"],["type","button",3,"click"],[1,"filters",3,"ngSubmit"],["type","date","name","from","required","",3,"ngModelChange","ngModel"],["type","date","name","to","required","",3,"ngModelChange","ngModel"],["type","submit"],[1,"table-wrap"],["scope","col"],["scope","row"]],template:function(t,r){t&1&&(Cs(0,"section",0)(1,"a",1),JC(2,"\u2190 Namespaces"),hl(),Cs(3,"h1"),JC(4,"Usage and costs"),hl(),aC(5,se,2,0,"p",2)(6,le,4,0)(7,me,2,0,"p",2)(8,ye,14,4),hl()),t&2&&(sI(5),cC(r.configuration.state()==="loading"?5:r.configuration.state()==="error"?6:r.configuration.state()==="disabled"?7:8));},dependencies:[ti,Jn,Ye,Zn,Xn,gt,cn,an,si,$b],styles:["[_nghost-%COMP%]{display:block}.report[_ngcontent-%COMP%]{max-width:1100px;margin:auto;padding:1.5rem;color:var(--color-text, inherit)}a[_ngcontent-%COMP%]{color:inherit}.filters[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:1rem;align-items:end;margin:1.5rem 0}label[_ngcontent-%COMP%]{display:grid;gap:.4rem}input[_ngcontent-%COMP%], button[_ngcontent-%COMP%]{font:inherit;color:inherit;background:transparent;border:1px solid var(--color-border, rgba(136, 136, 136, .5333333333));border-radius:.4rem;padding:.5rem .75rem}button[_ngcontent-%COMP%]{cursor:pointer}.table-wrap[_ngcontent-%COMP%]{overflow-x:auto}table[_ngcontent-%COMP%]{border-collapse:collapse;width:100%}th[_ngcontent-%COMP%], td[_ngcontent-%COMP%]{text-align:left;padding:.75rem;border-bottom:1px solid var(--color-border, rgba(136, 136, 136, .3333333333))}small[_ngcontent-%COMP%]{display:block;margin-top:.3rem}h2[_ngcontent-%COMP%]{margin-top:2rem}"]})};export{te as NamespaceUsageComponent};