@whoz-oss/coday-client 0.200.0 → 0.201.1

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 (89) hide show
  1. package/browser/{chunk-INPPLYFX.js → chunk-33J6ILEN.js} +1 -1
  2. package/browser/chunk-3BV5H657.js +1 -0
  3. package/browser/chunk-3OKUQ4KY.js +5 -0
  4. package/browser/{chunk-UXUHAYDM.js → chunk-4DI7XR3B.js} +1 -1
  5. package/browser/chunk-4ERYW25Y.js +1 -0
  6. package/browser/chunk-4HKV7PEE.js +1 -0
  7. package/browser/{chunk-EXGN47V2.js → chunk-4KRYEFIY.js} +1 -1
  8. package/browser/{chunk-2E6MYDFG.js → chunk-4KVPUDL7.js} +1 -1
  9. package/browser/{chunk-NE7BOWVE.js → chunk-52BSDRXI.js} +1 -1
  10. package/browser/{chunk-6QBZFOLP.js → chunk-5CIRBGG5.js} +1 -1
  11. package/browser/{chunk-MEMAC4FG.js → chunk-5GG3EOAD.js} +1 -1
  12. package/browser/chunk-5JNIHU3U.js +1 -0
  13. package/browser/{chunk-EVGEVSVW.js → chunk-6B6PTATK.js} +1 -1
  14. package/browser/chunk-6BKNE3NF.js +2 -0
  15. package/browser/{chunk-JFK2VH3B.js → chunk-6K5PHSHH.js} +1 -1
  16. package/browser/{chunk-3UZ346ET.js → chunk-6V7FXGUT.js} +1 -1
  17. package/browser/{chunk-E7XT4AGE.js → chunk-6WYTEAO6.js} +1 -1
  18. package/browser/chunk-7EECSFOZ.js +1 -0
  19. package/browser/chunk-A57ILNNE.js +1 -0
  20. package/browser/chunk-AOMZ5JRB.js +1 -0
  21. package/browser/{chunk-TWUUATLS.js → chunk-CWCTGW6W.js} +1 -1
  22. package/browser/chunk-CXJWRGZE.js +1 -0
  23. package/browser/chunk-DCETCV67.js +1 -0
  24. package/browser/{chunk-25QAYY2G.js → chunk-ELHEGEQW.js} +1 -1
  25. package/browser/{chunk-DWM36GCL.js → chunk-EQ7GIQF4.js} +1 -1
  26. package/browser/{chunk-5WWHTBZX.js → chunk-FBLKA2VP.js} +1 -1
  27. package/browser/{chunk-AIJJNBNY.js → chunk-FMBOAVWA.js} +1 -1
  28. package/browser/{chunk-YKWYW7YJ.js → chunk-FU75LX2K.js} +1 -1
  29. package/browser/chunk-G7O6FLX7.js +1 -0
  30. package/browser/chunk-GQ4SCQGF.js +1 -0
  31. package/browser/chunk-GW42T7BK.js +1 -0
  32. package/browser/{chunk-7VBWPMKN.js → chunk-HGJB7HHB.js} +1 -1
  33. package/browser/{chunk-NBM4ZTYZ.js → chunk-HHMFXFTY.js} +1 -1
  34. package/browser/{chunk-YG6SBV72.js → chunk-I7NYAA6B.js} +1 -1
  35. package/browser/{chunk-CHJWXPFL.js → chunk-IEGEWPMW.js} +1 -1
  36. package/browser/{chunk-Q75AFBTG.js → chunk-IZDINSYR.js} +1 -1
  37. package/browser/{chunk-IQ7EL357.js → chunk-J753QAJ3.js} +1 -1
  38. package/browser/{chunk-WV7ML4CJ.js → chunk-JEDRTGW5.js} +6 -6
  39. package/browser/chunk-JGDBHWKR.js +1 -0
  40. package/browser/{chunk-HB7BOQF2.js → chunk-JQ4DU7CQ.js} +1 -1
  41. package/browser/chunk-KPY6XGAS.js +3 -0
  42. package/browser/chunk-KZ5F6HW3.js +1 -0
  43. package/browser/{chunk-RPBI6ZEF.js → chunk-LPFJ4NAI.js} +1 -1
  44. package/browser/{chunk-7CSO3M7Q.js → chunk-LS35GSEQ.js} +1 -1
  45. package/browser/chunk-M24DDSA5.js +1 -0
  46. package/browser/{chunk-6PHQGWTQ.js → chunk-OC32WWAB.js} +1 -1
  47. package/browser/chunk-OKABGUO7.js +1 -0
  48. package/browser/{chunk-5P2WWCFC.js → chunk-OUCV2HPU.js} +1 -1
  49. package/browser/{chunk-BBQBJKTG.js → chunk-OW2INFPT.js} +1 -1
  50. package/browser/{chunk-YNZD2HBV.js → chunk-PBL67GY2.js} +1 -1
  51. package/browser/chunk-PF22YVKT.js +1 -0
  52. package/browser/{chunk-6NGGDRZW.js → chunk-PY5KASLV.js} +1 -1
  53. package/browser/{chunk-I7PMQXOL.js → chunk-S2OBMHZQ.js} +1 -1
  54. package/browser/{chunk-32PCPEXE.js → chunk-TXJ6RSOC.js} +1 -1
  55. package/browser/{chunk-VEHGBGGY.js → chunk-UB6F2VJU.js} +1 -1
  56. package/browser/{chunk-OX3JLJE5.js → chunk-V3T467QC.js} +1 -1
  57. package/browser/{chunk-NA7C7FYU.js → chunk-WBJIWNTY.js} +1 -1
  58. package/browser/{chunk-YPM4SWS3.js → chunk-WKUVJT4A.js} +1 -1
  59. package/browser/chunk-WN43DASR.js +1 -0
  60. package/browser/{chunk-SGCZJMPT.js → chunk-WQNYPYF4.js} +1 -1
  61. package/browser/{chunk-TIMFZNT6.js → chunk-X36T53JY.js} +1 -1
  62. package/browser/{chunk-FGH22HXQ.js → chunk-XCZAPW4H.js} +1 -1
  63. package/browser/{chunk-NQLFBBMS.js → chunk-YQBY2QBZ.js} +1 -1
  64. package/browser/chunk-YXOPY6VJ.js +1 -0
  65. package/browser/{chunk-XBQWHRJH.js → chunk-ZT45DI6V.js} +1 -1
  66. package/browser/{chunk-YKPIMVQC.js → chunk-ZYBOOLP5.js} +1 -1
  67. package/browser/index.html +1 -1
  68. package/browser/{main-V5E64J66.js → main-5SVAR5D2.js} +1 -1
  69. package/package.json +1 -1
  70. package/browser/chunk-3TUBTI3K.js +0 -1
  71. package/browser/chunk-5J75SWSV.js +0 -1
  72. package/browser/chunk-64JAXTG4.js +0 -1
  73. package/browser/chunk-6LPLMT5G.js +0 -1
  74. package/browser/chunk-APISHLX2.js +0 -1
  75. package/browser/chunk-BRQRJTLE.js +0 -1
  76. package/browser/chunk-BUA6GPP7.js +0 -7
  77. package/browser/chunk-C4YB46JQ.js +0 -1
  78. package/browser/chunk-EBPM4OO4.js +0 -1
  79. package/browser/chunk-EFU22KBF.js +0 -1
  80. package/browser/chunk-I6YWE5DW.js +0 -1
  81. package/browser/chunk-KGOCOJXX.js +0 -1
  82. package/browser/chunk-OBJWOIYT.js +0 -1
  83. package/browser/chunk-ODQ66F3E.js +0 -1
  84. package/browser/chunk-QKXRAKAR.js +0 -1
  85. package/browser/chunk-SAT3CQDP.js +0 -1
  86. package/browser/chunk-TIF4AFYM.js +0 -1
  87. package/browser/chunk-YNYTAOEP.js +0 -2
  88. package/browser/chunk-YRI2TXXT.js +0 -1
  89. package/browser/chunk-ZBXL6DSO.js +0 -1
@@ -1 +1 @@
1
- import{a as ne}from"./chunk-UXUHAYDM.js";import{a as ie}from"./chunk-NE7BOWVE.js";import"./chunk-T3IUNA6F.js";import"./chunk-5WWHTBZX.js";import{l as L}from"./chunk-5P2WWCFC.js";import{b as K,d as G}from"./chunk-4GVABYH4.js";import{a as A,c as B}from"./chunk-V363EHJE.js";import{F as oe,c as z,e as _,g as $,h as q,i as S,l as p,n as j,p as H,r as J,s as Q,t as W,u as X,v as Y,w as Z,x as ee,y as re,z as te}from"./chunk-HZF57OLY.js";import{Bb as k,Db as v,Fb as m,Ka as l,Tb as i,Ub as P,Vb as U,Wa as I,ca as f,ga as g,ha as h,kb as V,lb as M,ma as N,mb as O,nb as R,ob as D,pb as C,qb as x,rb as d,sb as o,ta as y,tb as t,ua as T,ub as u}from"./chunk-B4RKRLIY.js";function de(n,r){n&1&&(o(0,"p",5),i(1,"Loading\u2026"),t())}function pe(n,r){if(n&1&&(o(0,"label",30),u(1,"input",31),o(2,"span"),i(3),t()()),n&2){let e=r.$implicit,a=m(3);l(),d("formControl",a.scopeControl)("value",e.value)("disabled",e.value==="namespace"&&!a.isAdmin()),l(2),P(e.label)}}function me(n,r){if(n&1&&(o(0,"fieldset",8)(1,"legend",24),i(2,"Port\xE9e de la configuration"),t(),C(3,pe,4,4,"label",30,V().trackByScope,!0),t()),n&2){let e=m(2);d("disabled",e.isEditMode()),l(3),x(e.scopeOptions)}}function ce(n,r){if(n&1&&(o(0,"option",13),i(1),t()),n&2){let e=r.$implicit;d("value",e),l(),P(e)}}function ue(n,r){if(n&1){let e=k();o(0,"div",26),u(1,"input",32)(2,"input",33),o(3,"button",34),v("click",function(){let s=g(e).$index,c=m(2);return h(c.removeHeader(s))}),i(4," \xD7 "),t()()}if(n&2){let e=r.$index;d("formGroupName",e)}}function fe(n,r){if(n&1){let e=k();o(0,"form",7),v("ngSubmit",function(){g(e);let s=m();return h(s.submit())}),M(1,me,5,1,"fieldset",8),o(2,"div",9)(3,"label",10),i(4,"API type "),o(5,"span",11),i(6,"*"),t()(),o(7,"select",12),C(8,ce,2,2,"option",13,D),t()(),o(10,"div",9)(11,"label",14),i(12,"Name "),o(13,"span",11),i(14,"*"),t()(),u(15,"input",15),t(),o(16,"div",9)(17,"label",16),i(18,"Description"),t(),u(19,"input",17),t(),o(20,"div",9)(21,"label",18),i(22,"Base URL"),t(),u(23,"input",19),t(),o(24,"div",9)(25,"label",20),i(26,"API key"),t(),u(27,"input",21),t(),o(28,"div",22)(29,"div",23)(30,"span",24),i(31,"Custom headers"),t(),o(32,"button",25),v("click",function(){g(e);let s=m();return h(s.addHeader())}),i(33,"+ Add header"),t()(),C(34,ue,5,1,"div",26,R),t(),o(36,"div",27)(37,"button",28),i(38),t(),o(39,"button",29),v("click",function(){g(e);let s=m();return h(s.cancel())}),i(40,"Cancel"),t()()()}if(n&2){let e=m();d("formGroup",e.form),l(),O(e.isPlatformMode?-1:1),l(6),d("formControl",e.apiTypeControl),l(),x(e.apiTypeOptions),l(7),d("formControl",e.nameControl),l(4),d("formControl",e.descriptionControl),l(4),d("formControl",e.baseUrlControl),l(4),d("formControl",e.apiKeyControl),l(),d("formArrayName","headers"),l(6),x(e.headersArray.controls),l(3),d("disabled",e.form.invalid||e.isSubmitting()),l(),U(" ",e.isEditMode()?"Save changes":"Create"," ")}}var ve=new Set(["namespace","userOnNs","userGlobal"]),E=Object.freeze({namespace:"Configuration du namespace",userOnNs:"Pour moi sur ce namespace",userGlobal:"Pour moi globalement"}),ae=class n{route=f(K);router=f(G);destroyRef=f(N);state=f(ne);namespaceRole=f(ie);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=this.namespaceId===void 0;isAdmin=this.isPlatformMode?y(!0):B(this.namespaceRole.isAdminOfNamespace$(this.namespaceId),{initialValue:!1});apiTypeOptions=Object.values(L);scopeOptions=[{value:"namespace",label:E.namespace},{value:"userOnNs",label:E.userOnNs},{value:"userGlobal",label:E.userGlobal}];form=new S({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 J([],{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 S({key:new p("",{nonNullable:!0,validators:[_.required]}),value:new p("",{nonNullable:!0})}))}removeHeader(r){this.headersArray.removeAt(r)}isEditMode=y(!1);isSubmitting=y(!1);isLoading=y(!1);existingConfig=null;initialApiKey="";constructor(){this.isPlatformMode||T(()=>{this.isAdmin()||this.isEditMode()||this.scopeControl.value==="namespace"&&this.scopeControl.setValue("userOnNs")})}ngOnInit(){this.namespaceId&&this.state.setNamespace(this.namespaceId);let r=this.route.snapshot.paramMap,e=this.route.snapshot.queryParamMap,a=r.get("aiProviderId"),s=this.isPlatformMode?"namespace":this.parseScope(e.get("scope"));if(a){this.isEditMode.set(!0),this.scopeControl.disable(),this.apiTypeControl.disable(),this.loadConfig(a);return}this.scopeControl.setValue(s);let c=e.get("template");c&&this.hydrateFromTemplate(c)}parseScope(r){return r&&ve.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(A(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(A(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[a,s]of Object.entries(r.headers??{}))this.headersArray.push(new S({key:new p(a,{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(),a=this.apiKeyControl.value,s=this.isEditMode()&&a===this.initialApiKey?null:a,c=this.headersArray.controls.filter(b=>b.controls.key.value.trim()).map(b=>[b.controls.key.value.trim(),b.controls.value.value]),le=c.length>0?Object.fromEntries(c):null,w={name:this.nameControl.value.trim(),apiType:this.apiTypeControl.value,description:r||null,baseUrl:e||null,apiKey:s,headers:le},F=this.form.getRawValue().scope,se=this.isPlatformMode?null:this.namespaceId??null;(this.isEditMode()&&this.existingConfig?.id?this.state.update(this.existingConfig.id,w,F,this.existingConfig):this.state.create(w,F,se)).pipe(A(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(!1)})}cancel(){this.navigateBack()}navigateBack(){this.isPlatformMode?this.router.navigate(["/agentos","admin","ai-providers"]):this.router.navigate(["/agentos",this.namespaceId,"ai-providers"])}trackByScope(r,e){return e.value}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=I({type:n,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__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"],[1,"ai-provider-form__label"],["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"],[1,"ai-provider-form__scope-option"],["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,a){e&1&&(o(0,"div",0)(1,"header",1)(2,"button",2),v("click",function(){return a.cancel()}),o(3,"span",3),i(4,"\u2190"),t(),i(5," AI Providers "),t(),o(6,"h1",4),i(7),t()(),M(8,de,2,0,"p",5)(9,fe,41,10,"form",6),t()),e&2&&(l(7),P(a.isEditMode()?"Edit AI provider":"New AI provider"),l(),O(a.isLoading()?8:9))},dependencies:[oe,j,re,te,z,ee,H,$,q,Q,Z,Y,W,X],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-4DI7XR3B.js";import{a as ie}from"./chunk-52BSDRXI.js";import"./chunk-T3IUNA6F.js";import"./chunk-FBLKA2VP.js";import{l as L}from"./chunk-OUCV2HPU.js";import{b as K,d as G}from"./chunk-4GVABYH4.js";import{a as A,c as B}from"./chunk-V363EHJE.js";import{F as oe,c as z,e as _,g as $,h as q,i as S,l as p,n as j,p as H,r as J,s as Q,t as W,u as X,v as Y,w as Z,x as ee,y as re,z as te}from"./chunk-HZF57OLY.js";import{Bb as k,Db as v,Fb as m,Ka as l,Tb as i,Ub as P,Vb as U,Wa as I,ca as f,ga as g,ha as h,kb as V,lb as M,ma as N,mb as O,nb as R,ob as D,pb as C,qb as x,rb as d,sb as o,ta as y,tb as t,ua as T,ub as u}from"./chunk-B4RKRLIY.js";function de(n,r){n&1&&(o(0,"p",5),i(1,"Loading\u2026"),t())}function pe(n,r){if(n&1&&(o(0,"label",30),u(1,"input",31),o(2,"span"),i(3),t()()),n&2){let e=r.$implicit,a=m(3);l(),d("formControl",a.scopeControl)("value",e.value)("disabled",e.value==="namespace"&&!a.isAdmin()),l(2),P(e.label)}}function me(n,r){if(n&1&&(o(0,"fieldset",8)(1,"legend",24),i(2,"Port\xE9e de la configuration"),t(),C(3,pe,4,4,"label",30,V().trackByScope,!0),t()),n&2){let e=m(2);d("disabled",e.isEditMode()),l(3),x(e.scopeOptions)}}function ce(n,r){if(n&1&&(o(0,"option",13),i(1),t()),n&2){let e=r.$implicit;d("value",e),l(),P(e)}}function ue(n,r){if(n&1){let e=k();o(0,"div",26),u(1,"input",32)(2,"input",33),o(3,"button",34),v("click",function(){let s=g(e).$index,c=m(2);return h(c.removeHeader(s))}),i(4," \xD7 "),t()()}if(n&2){let e=r.$index;d("formGroupName",e)}}function fe(n,r){if(n&1){let e=k();o(0,"form",7),v("ngSubmit",function(){g(e);let s=m();return h(s.submit())}),M(1,me,5,1,"fieldset",8),o(2,"div",9)(3,"label",10),i(4,"API type "),o(5,"span",11),i(6,"*"),t()(),o(7,"select",12),C(8,ce,2,2,"option",13,D),t()(),o(10,"div",9)(11,"label",14),i(12,"Name "),o(13,"span",11),i(14,"*"),t()(),u(15,"input",15),t(),o(16,"div",9)(17,"label",16),i(18,"Description"),t(),u(19,"input",17),t(),o(20,"div",9)(21,"label",18),i(22,"Base URL"),t(),u(23,"input",19),t(),o(24,"div",9)(25,"label",20),i(26,"API key"),t(),u(27,"input",21),t(),o(28,"div",22)(29,"div",23)(30,"span",24),i(31,"Custom headers"),t(),o(32,"button",25),v("click",function(){g(e);let s=m();return h(s.addHeader())}),i(33,"+ Add header"),t()(),C(34,ue,5,1,"div",26,R),t(),o(36,"div",27)(37,"button",28),i(38),t(),o(39,"button",29),v("click",function(){g(e);let s=m();return h(s.cancel())}),i(40,"Cancel"),t()()()}if(n&2){let e=m();d("formGroup",e.form),l(),O(e.isPlatformMode?-1:1),l(6),d("formControl",e.apiTypeControl),l(),x(e.apiTypeOptions),l(7),d("formControl",e.nameControl),l(4),d("formControl",e.descriptionControl),l(4),d("formControl",e.baseUrlControl),l(4),d("formControl",e.apiKeyControl),l(),d("formArrayName","headers"),l(6),x(e.headersArray.controls),l(3),d("disabled",e.form.invalid||e.isSubmitting()),l(),U(" ",e.isEditMode()?"Save changes":"Create"," ")}}var ve=new Set(["namespace","userOnNs","userGlobal"]),E=Object.freeze({namespace:"Configuration du namespace",userOnNs:"Pour moi sur ce namespace",userGlobal:"Pour moi globalement"}),ae=class n{route=f(K);router=f(G);destroyRef=f(N);state=f(ne);namespaceRole=f(ie);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=this.namespaceId===void 0;isAdmin=this.isPlatformMode?y(!0):B(this.namespaceRole.isAdminOfNamespace$(this.namespaceId),{initialValue:!1});apiTypeOptions=Object.values(L);scopeOptions=[{value:"namespace",label:E.namespace},{value:"userOnNs",label:E.userOnNs},{value:"userGlobal",label:E.userGlobal}];form=new S({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 J([],{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 S({key:new p("",{nonNullable:!0,validators:[_.required]}),value:new p("",{nonNullable:!0})}))}removeHeader(r){this.headersArray.removeAt(r)}isEditMode=y(!1);isSubmitting=y(!1);isLoading=y(!1);existingConfig=null;initialApiKey="";constructor(){this.isPlatformMode||T(()=>{this.isAdmin()||this.isEditMode()||this.scopeControl.value==="namespace"&&this.scopeControl.setValue("userOnNs")})}ngOnInit(){this.namespaceId&&this.state.setNamespace(this.namespaceId);let r=this.route.snapshot.paramMap,e=this.route.snapshot.queryParamMap,a=r.get("aiProviderId"),s=this.isPlatformMode?"namespace":this.parseScope(e.get("scope"));if(a){this.isEditMode.set(!0),this.scopeControl.disable(),this.apiTypeControl.disable(),this.loadConfig(a);return}this.scopeControl.setValue(s);let c=e.get("template");c&&this.hydrateFromTemplate(c)}parseScope(r){return r&&ve.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(A(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(A(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[a,s]of Object.entries(r.headers??{}))this.headersArray.push(new S({key:new p(a,{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(),a=this.apiKeyControl.value,s=this.isEditMode()&&a===this.initialApiKey?null:a,c=this.headersArray.controls.filter(b=>b.controls.key.value.trim()).map(b=>[b.controls.key.value.trim(),b.controls.value.value]),le=c.length>0?Object.fromEntries(c):null,w={name:this.nameControl.value.trim(),apiType:this.apiTypeControl.value,description:r||null,baseUrl:e||null,apiKey:s,headers:le},F=this.form.getRawValue().scope,se=this.isPlatformMode?null:this.namespaceId??null;(this.isEditMode()&&this.existingConfig?.id?this.state.update(this.existingConfig.id,w,F,this.existingConfig):this.state.create(w,F,se)).pipe(A(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(!1)})}cancel(){this.navigateBack()}navigateBack(){this.isPlatformMode?this.router.navigate(["/agentos","admin","ai-providers"]):this.router.navigate(["/agentos",this.namespaceId,"ai-providers"])}trackByScope(r,e){return e.value}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=I({type:n,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__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"],[1,"ai-provider-form__label"],["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"],[1,"ai-provider-form__scope-option"],["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,a){e&1&&(o(0,"div",0)(1,"header",1)(2,"button",2),v("click",function(){return a.cancel()}),o(3,"span",3),i(4,"\u2190"),t(),i(5," AI Providers "),t(),o(6,"h1",4),i(7),t()(),M(8,de,2,0,"p",5)(9,fe,41,10,"form",6),t()),e&2&&(l(7),P(a.isEditMode()?"Edit AI provider":"New AI provider"),l(),O(a.isLoading()?8:9))},dependencies:[oe,j,re,te,z,ee,H,$,q,Q,Z,Y,W,X],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};
@@ -0,0 +1 @@
1
+ import{b as a}from"./chunk-GW42T7BK.js";import"./chunk-3BV5H657.js";import"./chunk-4KRYEFIY.js";import"./chunk-FBLKA2VP.js";import"./chunk-OUCV2HPU.js";import"./chunk-4GVABYH4.js";import"./chunk-JEDRTGW5.js";import"./chunk-3OKUQ4KY.js";import"./chunk-Z7E7NSDY.js";import"./chunk-V363EHJE.js";import"./chunk-ZEMOOOQR.js";import"./chunk-HZF57OLY.js";import"./chunk-EF2BOSEH.js";import"./chunk-B4RKRLIY.js";export{a as CaseShellComponent};
@@ -0,0 +1 @@
1
+ import{c as R}from"./chunk-SMT5YVCA.js";import{a as k}from"./chunk-3BV5H657.js";import{a as I}from"./chunk-OUCV2HPU.js";import{b as M,d as E}from"./chunk-4GVABYH4.js";import{p as S}from"./chunk-JEDRTGW5.js";import{a as P}from"./chunk-V363EHJE.js";import{Db as d,Jb as y,Ka as s,Kb as v,Lb as C,Ma as g,S as f,Tb as l,Tc as w,Ub as x,Wa as b,ca as n,ma as _,rb as m,sb as a,t as h,ta as p,tb as i}from"./chunk-B4RKRLIY.js";var O=["composerInput"],H=class u{http=n(w);router=n(E);route=n(M);config=n(I);caseState=n(k);destroyRef=n(_);preferences=n(R);composerInput;namespaceId=this.route.snapshot.params.namespaceId;inputValue=p("");isCreating=p(!1);constructor(){g(()=>{this.composerInput?.nativeElement.focus()})}get canSend(){return!!this.inputValue().trim()&&!this.isCreating()}onInput(t){this.inputValue.set(t.target.value)}onKeydown(t){this.preferences.shouldSend(t)&&(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.caseState.addCase(e),this.http.post(`${this.config.basePath}/api/cases/${e.id}/messages`,{content:t,userId:"default-user"}).pipe(h(()=>e)))),P(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(O,5),e&2){let r;v(r=C())&&(o.composerInput=r.first)}},decls:11,vars:4,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",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(c){return o.onInput(c)})("keydown",function(c){return o.onKeydown(c)}),i(),a(7,"div",6)(8,"span",7),l(9),i(),a(10,"ds-icon-button",8),d("action",function(){return o.submit()}),i()()()()()),e&2&&(s(5),m("value",o.inputValue())("disabled",o.isCreating()),s(4),x(o.preferences.composerHint()),s(),m("disabled",!o.canSend))},dependencies:[S],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 var(--color-shadow, rgba(0, 0, 0, .07));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{H as a};
@@ -1 +1 @@
1
- import{a as D}from"./chunk-EVGEVSVW.js";import{f as E}from"./chunk-5P2WWCFC.js";import{d as $}from"./chunk-4GVABYH4.js";import{u as B}from"./chunk-WV7ML4CJ.js";import"./chunk-BUA6GPP7.js";import"./chunk-Z7E7NSDY.js";import{a as d}from"./chunk-V363EHJE.js";import"./chunk-ZEMOOOQR.js";import"./chunk-HZF57OLY.js";import"./chunk-EF2BOSEH.js";import{Bb as R,Db as s,Fb as g,Hc as M,Pb as P,S as u,Tb as w,Wa as I,ab as h,ac as x,ca as r,dc as T,ec as k,ga as m,ha as l,hc as q,i as _,lb as v,ma as y,mb as b,rb as p,sb as a,t as C,tb as c}from"./chunk-B4RKRLIY.js";var V=()=>[];function F(i,t){if(i&1){let e=R();a(0,"agentos-integration-config-item",4),s("editRequested",function(n){m(e);let f=g(2);return l(f.onEdit(n))})("deleteRequested",function(n){m(e);let f=g(2);return l(f.deleteConfig(n))}),c()}i&2&&p("config",t)}function A(i,t){if(i&1&&v(0,F,1,1,"agentos-integration-config-item",3),i&2){let e,o=t.$implicit,n=g();b((e=n.resolveConfig(o.id))?0:-1,e)}}var S=class i{router=r($);destroyRef=r(y);integrationConfigController=r(E);refresh$=new _(void 0);configs$=this.refresh$.pipe(u(()=>this.integrationConfigController.listIntegrationConfig()));configItems$=this.configs$.pipe(C(t=>t.map(e=>({id:e.id??"",name:e.name,description:e.integrationType}))));configsById=new Map;constructor(){this.configs$.pipe(d(this.destroyRef)).subscribe(t=>{this.configsById=new Map(t.map(e=>[e.id??"",e]))})}goBack(){this.router.navigate(["/agentos","admin"])}openCreateForm(){this.router.navigate(["/agentos","admin","integration-configs","new"])}deleteConfig(t){this.integrationConfigController.deleteIntegrationConfig(t.id??"").pipe(d(this.destroyRef)).subscribe(()=>this.refresh$.next())}onEdit(t){this.router.navigate(["/agentos","admin","integration-configs",t.id??"","edit"])}resolveConfig(t){return this.configsById.get(t)??null}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=I({type:i,selectors:[["agentos-platform-integration-configs"]],decls:6,vars:6,consts:[["integrationConfigItemTpl",""],["title","Platform Integration Configs","emptyMessage","No platform integration configs defined yet. Add one above.","cardMinWidth","400px",3,"createRequested","items","showCreate","itemTemplate"],["toolbar-start","","type","button",1,"platform-integration-configs__back",3,"click"],["scope","platform",3,"config"],["scope","platform",3,"editRequested","deleteRequested","config"]],template:function(e,o){if(e&1&&(a(0,"ds-entity-list",1),T(1,"async"),s("createRequested",function(){return o.openCreateForm()}),a(2,"button",2),s("click",function(){return o.goBack()}),w(3," \u2190 Admin "),c()(),h(4,A,1,1,"ng-template",null,0,q)),e&2){let n=P(5);p("items",k(1,3,o.configItems$)??x(5,V))("showCreate",!0)("itemTemplate",n)}},dependencies:[B,D,M],styles:[".platform-integration-configs__back[_ngcontent-%COMP%]{background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-primary, #007aff);font-family:inherit}.platform-integration-configs__back[_ngcontent-%COMP%]:hover{text-decoration:underline}"],changeDetection:0})};export{S as PlatformIntegrationConfigsComponent};
1
+ import{a as D}from"./chunk-6B6PTATK.js";import{f as E}from"./chunk-OUCV2HPU.js";import{d as $}from"./chunk-4GVABYH4.js";import{u as B}from"./chunk-JEDRTGW5.js";import"./chunk-3OKUQ4KY.js";import"./chunk-Z7E7NSDY.js";import{a as d}from"./chunk-V363EHJE.js";import"./chunk-ZEMOOOQR.js";import"./chunk-HZF57OLY.js";import"./chunk-EF2BOSEH.js";import{Bb as R,Db as s,Fb as g,Hc as M,Pb as P,S as u,Tb as w,Wa as I,ab as h,ac as x,ca as r,dc as T,ec as k,ga as m,ha as l,hc as q,i as _,lb as v,ma as y,mb as b,rb as p,sb as a,t as C,tb as c}from"./chunk-B4RKRLIY.js";var V=()=>[];function F(i,t){if(i&1){let e=R();a(0,"agentos-integration-config-item",4),s("editRequested",function(n){m(e);let f=g(2);return l(f.onEdit(n))})("deleteRequested",function(n){m(e);let f=g(2);return l(f.deleteConfig(n))}),c()}i&2&&p("config",t)}function A(i,t){if(i&1&&v(0,F,1,1,"agentos-integration-config-item",3),i&2){let e,o=t.$implicit,n=g();b((e=n.resolveConfig(o.id))?0:-1,e)}}var S=class i{router=r($);destroyRef=r(y);integrationConfigController=r(E);refresh$=new _(void 0);configs$=this.refresh$.pipe(u(()=>this.integrationConfigController.listIntegrationConfig()));configItems$=this.configs$.pipe(C(t=>t.map(e=>({id:e.id??"",name:e.name,description:e.integrationType}))));configsById=new Map;constructor(){this.configs$.pipe(d(this.destroyRef)).subscribe(t=>{this.configsById=new Map(t.map(e=>[e.id??"",e]))})}goBack(){this.router.navigate(["/agentos","admin"])}openCreateForm(){this.router.navigate(["/agentos","admin","integration-configs","new"])}deleteConfig(t){this.integrationConfigController.deleteIntegrationConfig(t.id??"").pipe(d(this.destroyRef)).subscribe(()=>this.refresh$.next())}onEdit(t){this.router.navigate(["/agentos","admin","integration-configs",t.id??"","edit"])}resolveConfig(t){return this.configsById.get(t)??null}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=I({type:i,selectors:[["agentos-platform-integration-configs"]],decls:6,vars:6,consts:[["integrationConfigItemTpl",""],["title","Platform Integration Configs","emptyMessage","No platform integration configs defined yet. Add one above.","cardMinWidth","400px",3,"createRequested","items","showCreate","itemTemplate"],["toolbar-start","","type","button",1,"platform-integration-configs__back",3,"click"],["scope","platform",3,"config"],["scope","platform",3,"editRequested","deleteRequested","config"]],template:function(e,o){if(e&1&&(a(0,"ds-entity-list",1),T(1,"async"),s("createRequested",function(){return o.openCreateForm()}),a(2,"button",2),s("click",function(){return o.goBack()}),w(3," \u2190 Admin "),c()(),h(4,A,1,1,"ng-template",null,0,q)),e&2){let n=P(5);p("items",k(1,3,o.configItems$)??x(5,V))("showCreate",!0)("itemTemplate",n)}},dependencies:[B,D,M],styles:[".platform-integration-configs__back[_ngcontent-%COMP%]{background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-primary, #007aff);font-family:inherit}.platform-integration-configs__back[_ngcontent-%COMP%]:hover{text-decoration:underline}"],changeDetection:0})};export{S as PlatformIntegrationConfigsComponent};
@@ -1 +1 @@
1
- import{a as Q}from"./chunk-3UZ346ET.js";import"./chunk-T3IUNA6F.js";import"./chunk-5WWHTBZX.js";import{b as $}from"./chunk-5P2WWCFC.js";import{b as D,d as z,e as L}from"./chunk-4GVABYH4.js";import{a as M}from"./chunk-V363EHJE.js";import{F as K,b as B,c as G,e as E,g as j,h as W,i as q,l as m,n as J,s as U,w as H}from"./chunk-HZF57OLY.js";import{Bb as w,Db as u,Fb as s,Ka as a,Tb as i,Ub as S,Vb as T,Wa as N,a as I,b as R,ca as v,ga as b,ha as C,lb as _,m as A,ma as F,mb as p,nb as V,pb as P,qb as O,rb as c,sb as o,ta as h,tb as n,ub as f,z as k}from"./chunk-B4RKRLIY.js";var Y=(r,t)=>t.config.id;function Z(r,t){if(r&1&&(o(0,"a",5),i(1,"View resolved definition \u2192"),n()),r&2){let e=s();c("routerLink",e.inspectRoute())}}function ee(r,t){r&1&&(o(0,"span",6),i(1,"Platform level"),n())}function te(r,t){r&1&&(o(0,"p",7),i(1,"Loading\u2026"),n())}function ne(r,t){if(r&1&&(o(0,"span",40),i(1),n()),r&2){let e=s().$implicit;a(),S(e.config.integrationType)}}function oe(r,t){if(r&1&&f(0,"input",41),r&2){let e=s().$implicit;c("formControl",e.toolsControl)}}function ie(r,t){if(r&1){let e=w();o(0,"div",36)(1,"label",37)(2,"input",38),u("change",function(){let g=b(e).$implicit,d=s(3);return C(d.toggleIntegration(g))}),n(),o(3,"span",39),i(4),n(),_(5,ne,2,1,"span",40),n(),_(6,oe,1,1,"input",41),n()}if(r&2){let e=t.$implicit;a(2),c("checked",e.enabled()),a(2),S(e.config.name),a(),p(e.config.integrationType?5:-1),a(),p(e.enabled()?6:-1)}}function re(r,t){if(r&1&&(o(0,"fieldset",20)(1,"legend",25),i(2,"Integrations"),n(),o(3,"p",35),i(4," Select which integrations this agent can use. Leave tool names empty to allow all tools from an integration. "),n(),P(5,ie,7,4,"div",36,Y),n()),r&2){let e=s(2);a(5),O(e.integrationRows())}}function ae(r,t){if(r&1){let e=w();o(0,"li",42),f(1,"input",43),o(2,"button",44),u("click",function(){let g=b(e).$implicit,d=s(3);return C(d.removeSubAgent(g))}),i(3," \u{1F5D1} "),n()()}if(r&2){let e=t.$implicit;a(),c("formControl",e.control)}}function le(r,t){if(r&1&&(o(0,"ul",28),P(1,ae,4,1,"li",42,V),n()),r&2){let e=s(2);a(),O(e.subAgentRows())}}function ge(r,t){if(r&1){let e=w();o(0,"form",9),u("ngSubmit",function(){b(e);let g=s();return C(g.submit())}),o(1,"div",10)(2,"label",11),i(3,"Name "),o(4,"span",12),i(5,"*"),n()(),f(6,"input",13),n(),o(7,"div",10)(8,"label",14),i(9,"Description"),n(),f(10,"input",15),n(),o(11,"div",10)(12,"label",16),i(13,"Model name"),n(),f(14,"input",17),n(),o(15,"div",10)(16,"label",18),i(17,"Instructions"),n(),f(18,"textarea",19),n(),_(19,re,7,0,"fieldset",20),o(20,"div",10)(21,"label",21),f(22,"input",22),o(23,"span",23),i(24,"Advanced mode"),n()(),o(25,"p",24),i(26," When enabled, this agent uses a multi-step reasoning loop instead of a single LLM call. "),n()(),o(27,"div",10)(28,"label",21),f(29,"input",22),o(30,"span",23),i(31,"Enabled"),n()(),o(32,"p",24),i(33,"Disabled agents are excluded from namespace resolution."),n()(),o(34,"div",10)(35,"span",25),i(36,"Sub-agents"),n(),o(37,"p",26),i(38," Glob patterns for agents this agent may delegate to. "),o(39,"code",27),i(40,"*"),n(),i(41," matches any sequence of characters (e.g.\xA0"),o(42,"code",27),i(43,"*Fixer"),n(),i(44,", "),o(45,"code",27),i(46,"*"),n(),i(47," for all). Leave empty to disable delegation. "),n(),_(48,le,3,0,"ul",28),o(49,"div",29)(50,"input",30),u("keydown.enter",function(){b(e);let g=s();return C(g.addSubAgent())}),n(),o(51,"button",31),u("click",function(){b(e);let g=s();return C(g.addSubAgent())}),i(52," + "),n()()(),o(53,"div",32)(54,"button",33),i(55),n(),o(56,"button",34),u("click",function(){b(e);let g=s();return C(g.cancel())}),i(57,"Cancel"),n()()()}if(r&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(),p(e.integrationRows().length>0?19:-1),a(3),c("formControl",e.advancedExecutionControl),a(7),c("formControl",e.enabledControl),a(19),p(e.subAgentRows().length>0?48:-1),a(2),c("formControl",e.newSubAgentControl),a(),c("disabled",!e.newSubAgentControl.value.trim()),a(3),c("disabled",e.form.invalid||e.isSubmitting()),a(),T(" ",e.isEditMode()?"Save changes":"Create"," ")}}var X=class r{route=v(D);router=v(z);destroyRef=v(F);agentConfigController=v($);integrationConfigState=v(Q);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=!this.namespaceId;form=new q({name:new m("",{nonNullable:!0,validators:[E.required,E.minLength(1)]}),description:new m(null),modelName:new m(null),instructions:new m(null),advancedExecution:new m(!1,{nonNullable:!0}),enabled:new m(!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}get enabledControl(){return this.form.controls.enabled}subAgentRows=h([]);newSubAgentControl=new m("",{nonNullable:!0});isEditMode=h(!1);isSubmitting=h(!1);isLoading=h(!1);inspectRoute(){let t=this.route.snapshot.paramMap.get("agentConfigId")??"";return this.isPlatformMode?["/agentos","admin","agent-configs",t,"inspect"]:["/agentos",this.namespaceId,"agent-configs",t,"inspect"]}integrationRows=h([]);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),k({config:this.agentConfigController.getByIdAgentConfig(t),namespaceIntegrations:this.namespaceId?this.integrationConfigState.loadNamespaceConfigs(this.namespaceId):A([]),platformIntegrations:this.integrationConfigState.loadPlatformConfigs()}).pipe(M(this.destroyRef)).subscribe({next:({config:e,namespaceIntegrations:l,platformIntegrations:g})=>{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.enabledControl.setValue(e.enabled??!0);let d=[...g,...l];this.integrationRows.set(this.buildIntegrationRows(d,e.integrations??void 0)),this.subAgentRows.set((e.subAgents??[]).map(x=>({control:new m(x,{nonNullable:!0})}))),this.isLoading.set(!1)},error:()=>{this.isLoading.set(!1),this.navigateBack()}})}loadIntegrations(t){k({namespaceIntegrations:this.namespaceId?this.integrationConfigState.loadNamespaceConfigs(this.namespaceId):A([]),platformIntegrations:this.integrationConfigState.loadPlatformConfigs()}).pipe(M(this.destroyRef)).subscribe({next:({namespaceIntegrations:e,platformIntegrations:l})=>{let g=[...l,...e];this.integrationRows.set(this.buildIntegrationRows(g,t??void 0))}})}buildIntegrationRows(t,e){return t.map(l=>{let g=l.name??"",d=e?.[g],x=e!=null&&g in e,y=Array.isArray(d)?d.join(", "):"";return{config:l,enabled:h(x),toolsControl:new m(y,{nonNullable:!0})}})}toggleIntegration(t){t.enabled.update(e=>!e)}addSubAgent(){let t=this.newSubAgentControl.value.trim();t&&(this.subAgentRows.update(e=>[...e,{control:new m(t,{nonNullable:!0})}]),this.newSubAgentControl.reset(""))}removeSubAgent(t){this.subAgentRows.update(e=>e.filter(l=>l!==t))}buildSubAgentsPayload(){let t=this.subAgentRows().map(e=>e.control.value.trim()).filter(e=>e.length>0);return t.length>0?t:void 0}buildIntegrationsPayload(){let e=this.integrationRows().filter(g=>g.enabled());if(e.length===0)return;let l={};for(let g of e){let d=g.config.name??"",x=g.toolsControl.value.trim();x===""?l[d]=null:l[d]=x.split(",").map(y=>y.trim()).filter(y=>y.length>0)}return l}submit(){if(this.form.invalid||this.isSubmitting())return;this.addSubAgent(),this.isSubmitting.set(!0);let t=R(I({},this.existingConfig??{}),{createdOn:this.existingConfig?.createdOn,updatedOn:this.existingConfig?.updatedOn,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,enabled:this.enabledControl.value,subAgents:this.buildSubAgentsPayload()});(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.isPlatformMode?this.router.navigate(["/agentos","admin","agent-configs"]):this.router.navigate(["/agentos",this.namespaceId,"agent-configs"])}static \u0275fac=function(e){return new(e||r)};static \u0275cmp=N({type:r,selectors:[["agentos-agent-config-form"]],decls:12,vars:4,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__sibling-link",3,"routerLink"],[1,"agent-config-form__platform-badge"],[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__label"],[1,"agent-config-form__field-hint"],[1,"agent-config-form__code"],[1,"agent-config-form__sub-agent-list"],[1,"agent-config-form__sub-agent-add"],["type","text","placeholder","e.g. *Fixer or *","autocomplete","off",1,"agent-config-form__input","agent-config-form__sub-agent-input",3,"keydown.enter","formControl"],["type","button","title","Add pattern",1,"agent-config-form__sub-agent-btn","agent-config-form__sub-agent-btn--add",3,"click","disabled"],[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__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"],[1,"agent-config-form__sub-agent-row"],["type","text","autocomplete","off",1,"agent-config-form__input","agent-config-form__sub-agent-input",3,"formControl"],["type","button","title","Remove",1,"agent-config-form__sub-agent-btn","agent-config-form__sub-agent-btn--danger",3,"click"]],template:function(e,l){e&1&&(o(0,"div",0)(1,"header",1)(2,"button",2),u("click",function(){return l.cancel()}),o(3,"span",3),i(4,"\u2190"),n(),i(5," Agent Configs "),n(),o(6,"h1",4),i(7),n(),_(8,Z,2,1,"a",5),_(9,ee,2,0,"span",6),n(),_(10,te,2,0,"p",7)(11,ge,58,13,"form",8),n()),e&2&&(a(7),S(l.isEditMode()?"Edit agent config":"New agent config"),a(),p(l.isEditMode()?8:-1),a(),p(l.isPlatformMode?9:-1),a(),p(l.isLoading()?10:11))},dependencies:[K,J,G,B,j,W,U,H,L],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__sibling-link[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--color-primary, #007aff);text-decoration:none}.agent-config-form__sibling-link[_ngcontent-%COMP%]:hover{text-decoration:underline}.agent-config-form__platform-badge[_ngcontent-%COMP%]{display:inline-block;font-size:.75rem;font-weight:500;color:var(--color-text-secondary, #6e6e73);background:var(--color-surface-hover, rgba(0, 0, 0, .04));border:1px solid var(--color-border, rgba(0, 0, 0, .1));border-radius:4px;padding:.125rem .5rem;letter-spacing:.02em;align-self:flex-start}.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__field-hint[_ngcontent-%COMP%]{margin:.25rem 0 0;font-size:.8rem;color:var(--color-text-secondary, #6e6e73);line-height:1.4}.agent-config-form__code[_ngcontent-%COMP%]{font-family:monospace;font-size:.85em;background:var(--color-surface-muted, rgba(0, 0, 0, .06));padding:.1em .3em;border-radius:3px}.agent-config-form__sub-agent-list[_ngcontent-%COMP%]{list-style:none;margin:.5rem 0 0;padding:0;display:flex;flex-direction:column;gap:.375rem}.agent-config-form__sub-agent-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem}.agent-config-form__sub-agent-input[_ngcontent-%COMP%]{flex:1;min-width:0}.agent-config-form__sub-agent-add[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;margin-top:.5rem}.agent-config-form__sub-agent-btn[_ngcontent-%COMP%]{flex-shrink:0;width:2rem;height:2rem;padding:0;border-radius:6px;border:1px solid var(--color-border, rgba(0, 0, 0, .1));background:transparent;color:var(--color-text-secondary, #6e6e73);font-size:.9rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s ease,border-color .15s ease,color .15s ease}.agent-config-form__sub-agent-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover, rgba(0, 0, 0, .06));border-color:var(--color-border, rgba(0, 0, 0, .2));color:var(--color-text, #1d1d1f)}.agent-config-form__sub-agent-btn[_ngcontent-%COMP%]:disabled{opacity:.35;cursor:not-allowed}.agent-config-form__sub-agent-btn--add[_ngcontent-%COMP%]{width:2rem;height:2rem;font-size:1.25rem;font-weight:300;border-color:var(--color-primary, #007aff);color:var(--color-primary, #007aff)}.agent-config-form__sub-agent-btn--add[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary, #007aff);color:#fff}.agent-config-form__sub-agent-btn--danger[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--color-error, #ff3b30);color:var(--color-error, #ff3b30);background:transparent}.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{X as AgentConfigFormComponent};
1
+ import{a as Q}from"./chunk-6V7FXGUT.js";import"./chunk-T3IUNA6F.js";import"./chunk-FBLKA2VP.js";import{b as $}from"./chunk-OUCV2HPU.js";import{b as D,d as z,e as L}from"./chunk-4GVABYH4.js";import{a as M}from"./chunk-V363EHJE.js";import{F as K,b as B,c as G,e as E,g as j,h as W,i as q,l as m,n as J,s as U,w as H}from"./chunk-HZF57OLY.js";import{Bb as w,Db as u,Fb as s,Ka as a,Tb as i,Ub as S,Vb as T,Wa as N,a as I,b as R,ca as v,ga as b,ha as C,lb as _,m as A,ma as F,mb as p,nb as V,pb as P,qb as O,rb as c,sb as o,ta as h,tb as n,ub as f,z as k}from"./chunk-B4RKRLIY.js";var Y=(r,t)=>t.config.id;function Z(r,t){if(r&1&&(o(0,"a",5),i(1,"View resolved definition \u2192"),n()),r&2){let e=s();c("routerLink",e.inspectRoute())}}function ee(r,t){r&1&&(o(0,"span",6),i(1,"Platform level"),n())}function te(r,t){r&1&&(o(0,"p",7),i(1,"Loading\u2026"),n())}function ne(r,t){if(r&1&&(o(0,"span",40),i(1),n()),r&2){let e=s().$implicit;a(),S(e.config.integrationType)}}function oe(r,t){if(r&1&&f(0,"input",41),r&2){let e=s().$implicit;c("formControl",e.toolsControl)}}function ie(r,t){if(r&1){let e=w();o(0,"div",36)(1,"label",37)(2,"input",38),u("change",function(){let g=b(e).$implicit,d=s(3);return C(d.toggleIntegration(g))}),n(),o(3,"span",39),i(4),n(),_(5,ne,2,1,"span",40),n(),_(6,oe,1,1,"input",41),n()}if(r&2){let e=t.$implicit;a(2),c("checked",e.enabled()),a(2),S(e.config.name),a(),p(e.config.integrationType?5:-1),a(),p(e.enabled()?6:-1)}}function re(r,t){if(r&1&&(o(0,"fieldset",20)(1,"legend",25),i(2,"Integrations"),n(),o(3,"p",35),i(4," Select which integrations this agent can use. Leave tool names empty to allow all tools from an integration. "),n(),P(5,ie,7,4,"div",36,Y),n()),r&2){let e=s(2);a(5),O(e.integrationRows())}}function ae(r,t){if(r&1){let e=w();o(0,"li",42),f(1,"input",43),o(2,"button",44),u("click",function(){let g=b(e).$implicit,d=s(3);return C(d.removeSubAgent(g))}),i(3," \u{1F5D1} "),n()()}if(r&2){let e=t.$implicit;a(),c("formControl",e.control)}}function le(r,t){if(r&1&&(o(0,"ul",28),P(1,ae,4,1,"li",42,V),n()),r&2){let e=s(2);a(),O(e.subAgentRows())}}function ge(r,t){if(r&1){let e=w();o(0,"form",9),u("ngSubmit",function(){b(e);let g=s();return C(g.submit())}),o(1,"div",10)(2,"label",11),i(3,"Name "),o(4,"span",12),i(5,"*"),n()(),f(6,"input",13),n(),o(7,"div",10)(8,"label",14),i(9,"Description"),n(),f(10,"input",15),n(),o(11,"div",10)(12,"label",16),i(13,"Model name"),n(),f(14,"input",17),n(),o(15,"div",10)(16,"label",18),i(17,"Instructions"),n(),f(18,"textarea",19),n(),_(19,re,7,0,"fieldset",20),o(20,"div",10)(21,"label",21),f(22,"input",22),o(23,"span",23),i(24,"Advanced mode"),n()(),o(25,"p",24),i(26," When enabled, this agent uses a multi-step reasoning loop instead of a single LLM call. "),n()(),o(27,"div",10)(28,"label",21),f(29,"input",22),o(30,"span",23),i(31,"Enabled"),n()(),o(32,"p",24),i(33,"Disabled agents are excluded from namespace resolution."),n()(),o(34,"div",10)(35,"span",25),i(36,"Sub-agents"),n(),o(37,"p",26),i(38," Glob patterns for agents this agent may delegate to. "),o(39,"code",27),i(40,"*"),n(),i(41," matches any sequence of characters (e.g.\xA0"),o(42,"code",27),i(43,"*Fixer"),n(),i(44,", "),o(45,"code",27),i(46,"*"),n(),i(47," for all). Leave empty to disable delegation. "),n(),_(48,le,3,0,"ul",28),o(49,"div",29)(50,"input",30),u("keydown.enter",function(){b(e);let g=s();return C(g.addSubAgent())}),n(),o(51,"button",31),u("click",function(){b(e);let g=s();return C(g.addSubAgent())}),i(52," + "),n()()(),o(53,"div",32)(54,"button",33),i(55),n(),o(56,"button",34),u("click",function(){b(e);let g=s();return C(g.cancel())}),i(57,"Cancel"),n()()()}if(r&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(),p(e.integrationRows().length>0?19:-1),a(3),c("formControl",e.advancedExecutionControl),a(7),c("formControl",e.enabledControl),a(19),p(e.subAgentRows().length>0?48:-1),a(2),c("formControl",e.newSubAgentControl),a(),c("disabled",!e.newSubAgentControl.value.trim()),a(3),c("disabled",e.form.invalid||e.isSubmitting()),a(),T(" ",e.isEditMode()?"Save changes":"Create"," ")}}var X=class r{route=v(D);router=v(z);destroyRef=v(F);agentConfigController=v($);integrationConfigState=v(Q);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=!this.namespaceId;form=new q({name:new m("",{nonNullable:!0,validators:[E.required,E.minLength(1)]}),description:new m(null),modelName:new m(null),instructions:new m(null),advancedExecution:new m(!1,{nonNullable:!0}),enabled:new m(!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}get enabledControl(){return this.form.controls.enabled}subAgentRows=h([]);newSubAgentControl=new m("",{nonNullable:!0});isEditMode=h(!1);isSubmitting=h(!1);isLoading=h(!1);inspectRoute(){let t=this.route.snapshot.paramMap.get("agentConfigId")??"";return this.isPlatformMode?["/agentos","admin","agent-configs",t,"inspect"]:["/agentos",this.namespaceId,"agent-configs",t,"inspect"]}integrationRows=h([]);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),k({config:this.agentConfigController.getByIdAgentConfig(t),namespaceIntegrations:this.namespaceId?this.integrationConfigState.loadNamespaceConfigs(this.namespaceId):A([]),platformIntegrations:this.integrationConfigState.loadPlatformConfigs()}).pipe(M(this.destroyRef)).subscribe({next:({config:e,namespaceIntegrations:l,platformIntegrations:g})=>{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.enabledControl.setValue(e.enabled??!0);let d=[...g,...l];this.integrationRows.set(this.buildIntegrationRows(d,e.integrations??void 0)),this.subAgentRows.set((e.subAgents??[]).map(x=>({control:new m(x,{nonNullable:!0})}))),this.isLoading.set(!1)},error:()=>{this.isLoading.set(!1),this.navigateBack()}})}loadIntegrations(t){k({namespaceIntegrations:this.namespaceId?this.integrationConfigState.loadNamespaceConfigs(this.namespaceId):A([]),platformIntegrations:this.integrationConfigState.loadPlatformConfigs()}).pipe(M(this.destroyRef)).subscribe({next:({namespaceIntegrations:e,platformIntegrations:l})=>{let g=[...l,...e];this.integrationRows.set(this.buildIntegrationRows(g,t??void 0))}})}buildIntegrationRows(t,e){return t.map(l=>{let g=l.name??"",d=e?.[g],x=e!=null&&g in e,y=Array.isArray(d)?d.join(", "):"";return{config:l,enabled:h(x),toolsControl:new m(y,{nonNullable:!0})}})}toggleIntegration(t){t.enabled.update(e=>!e)}addSubAgent(){let t=this.newSubAgentControl.value.trim();t&&(this.subAgentRows.update(e=>[...e,{control:new m(t,{nonNullable:!0})}]),this.newSubAgentControl.reset(""))}removeSubAgent(t){this.subAgentRows.update(e=>e.filter(l=>l!==t))}buildSubAgentsPayload(){let t=this.subAgentRows().map(e=>e.control.value.trim()).filter(e=>e.length>0);return t.length>0?t:void 0}buildIntegrationsPayload(){let e=this.integrationRows().filter(g=>g.enabled());if(e.length===0)return;let l={};for(let g of e){let d=g.config.name??"",x=g.toolsControl.value.trim();x===""?l[d]=null:l[d]=x.split(",").map(y=>y.trim()).filter(y=>y.length>0)}return l}submit(){if(this.form.invalid||this.isSubmitting())return;this.addSubAgent(),this.isSubmitting.set(!0);let t=R(I({},this.existingConfig??{}),{createdOn:this.existingConfig?.createdOn,updatedOn:this.existingConfig?.updatedOn,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,enabled:this.enabledControl.value,subAgents:this.buildSubAgentsPayload()});(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.isPlatformMode?this.router.navigate(["/agentos","admin","agent-configs"]):this.router.navigate(["/agentos",this.namespaceId,"agent-configs"])}static \u0275fac=function(e){return new(e||r)};static \u0275cmp=N({type:r,selectors:[["agentos-agent-config-form"]],decls:12,vars:4,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__sibling-link",3,"routerLink"],[1,"agent-config-form__platform-badge"],[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__label"],[1,"agent-config-form__field-hint"],[1,"agent-config-form__code"],[1,"agent-config-form__sub-agent-list"],[1,"agent-config-form__sub-agent-add"],["type","text","placeholder","e.g. *Fixer or *","autocomplete","off",1,"agent-config-form__input","agent-config-form__sub-agent-input",3,"keydown.enter","formControl"],["type","button","title","Add pattern",1,"agent-config-form__sub-agent-btn","agent-config-form__sub-agent-btn--add",3,"click","disabled"],[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__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"],[1,"agent-config-form__sub-agent-row"],["type","text","autocomplete","off",1,"agent-config-form__input","agent-config-form__sub-agent-input",3,"formControl"],["type","button","title","Remove",1,"agent-config-form__sub-agent-btn","agent-config-form__sub-agent-btn--danger",3,"click"]],template:function(e,l){e&1&&(o(0,"div",0)(1,"header",1)(2,"button",2),u("click",function(){return l.cancel()}),o(3,"span",3),i(4,"\u2190"),n(),i(5," Agent Configs "),n(),o(6,"h1",4),i(7),n(),_(8,Z,2,1,"a",5),_(9,ee,2,0,"span",6),n(),_(10,te,2,0,"p",7)(11,ge,58,13,"form",8),n()),e&2&&(a(7),S(l.isEditMode()?"Edit agent config":"New agent config"),a(),p(l.isEditMode()?8:-1),a(),p(l.isPlatformMode?9:-1),a(),p(l.isLoading()?10:11))},dependencies:[K,J,G,B,j,W,U,H,L],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__sibling-link[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--color-primary, #007aff);text-decoration:none}.agent-config-form__sibling-link[_ngcontent-%COMP%]:hover{text-decoration:underline}.agent-config-form__platform-badge[_ngcontent-%COMP%]{display:inline-block;font-size:.75rem;font-weight:500;color:var(--color-text-secondary, #6e6e73);background:var(--color-surface-hover, rgba(0, 0, 0, .04));border:1px solid var(--color-border, rgba(0, 0, 0, .1));border-radius:4px;padding:.125rem .5rem;letter-spacing:.02em;align-self:flex-start}.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__field-hint[_ngcontent-%COMP%]{margin:.25rem 0 0;font-size:.8rem;color:var(--color-text-secondary, #6e6e73);line-height:1.4}.agent-config-form__code[_ngcontent-%COMP%]{font-family:monospace;font-size:.85em;background:var(--color-surface-muted, rgba(0, 0, 0, .06));padding:.1em .3em;border-radius:3px}.agent-config-form__sub-agent-list[_ngcontent-%COMP%]{list-style:none;margin:.5rem 0 0;padding:0;display:flex;flex-direction:column;gap:.375rem}.agent-config-form__sub-agent-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem}.agent-config-form__sub-agent-input[_ngcontent-%COMP%]{flex:1;min-width:0}.agent-config-form__sub-agent-add[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;margin-top:.5rem}.agent-config-form__sub-agent-btn[_ngcontent-%COMP%]{flex-shrink:0;width:2rem;height:2rem;padding:0;border-radius:6px;border:1px solid var(--color-border, rgba(0, 0, 0, .1));background:transparent;color:var(--color-text-secondary, #6e6e73);font-size:.9rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s ease,border-color .15s ease,color .15s ease}.agent-config-form__sub-agent-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover, rgba(0, 0, 0, .06));border-color:var(--color-border, rgba(0, 0, 0, .2));color:var(--color-text, #1d1d1f)}.agent-config-form__sub-agent-btn[_ngcontent-%COMP%]:disabled{opacity:.35;cursor:not-allowed}.agent-config-form__sub-agent-btn--add[_ngcontent-%COMP%]{width:2rem;height:2rem;font-size:1.25rem;font-weight:300;border-color:var(--color-primary, #007aff);color:var(--color-primary, #007aff)}.agent-config-form__sub-agent-btn--add[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary, #007aff);color:#fff}.agent-config-form__sub-agent-btn--danger[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--color-error, #ff3b30);color:var(--color-error, #ff3b30);background:transparent}.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{X as AgentConfigFormComponent};
@@ -1 +1 @@
1
- import{k as l}from"./chunk-5P2WWCFC.js";import{V as o,Z as s,a as n,ca as a,ta as i}from"./chunk-B4RKRLIY.js";var u=class t{userController=a(l);currentUser=i(null);loadMe(){return this.userController.getMeUser().pipe(o(r=>this.currentUser.set(r)))}updateMe(r){let e=this.currentUser();if(!e)throw new Error("Cannot update: current user not loaded");if(!e.id)throw new Error("Cannot update: current user has no id");let c=n(n({},e),r);return this.userController.updateUser(e.id,c).pipe(o(d=>this.currentUser.set(d)))}static \u0275fac=function(e){return new(e||t)};static \u0275prov=s({token:t,factory:t.\u0275fac,providedIn:"root"})};export{u as a};
1
+ import{k as l}from"./chunk-OUCV2HPU.js";import{V as o,Z as s,a as n,ca as a,ta as i}from"./chunk-B4RKRLIY.js";var u=class t{userController=a(l);currentUser=i(null);loadMe(){return this.userController.getMeUser().pipe(o(r=>this.currentUser.set(r)))}updateMe(r){let e=this.currentUser();if(!e)throw new Error("Cannot update: current user not loaded");if(!e.id)throw new Error("Cannot update: current user has no id");let c=n(n({},e),r);return this.userController.updateUser(e.id,c).pipe(o(d=>this.currentUser.set(d)))}static \u0275fac=function(e){return new(e||t)};static \u0275prov=s({token:t,factory:t.\u0275fac,providedIn:"root"})};export{u as a};
@@ -1 +1 @@
1
- import{a as q}from"./chunk-INPPLYFX.js";import{n as B}from"./chunk-5P2WWCFC.js";import{d as $}from"./chunk-4GVABYH4.js";import{u as D}from"./chunk-WV7ML4CJ.js";import"./chunk-BUA6GPP7.js";import"./chunk-Z7E7NSDY.js";import{a as d}from"./chunk-V363EHJE.js";import"./chunk-ZEMOOOQR.js";import"./chunk-HZF57OLY.js";import"./chunk-EF2BOSEH.js";import{Bb as v,Db as m,Fb as l,Hc as T,Pb as M,S as _,Tb as R,Wa as g,ab as C,ac as w,ca as p,dc as I,ec as k,ga as u,ha as y,hc as x,i as c,lb as h,ma as P,mb as b,rb as s,sb as i,t as f,tb as a}from"./chunk-B4RKRLIY.js";var F=()=>[];function A(o,e){if(o&1){let t=v();i(0,"agentos-prompt-item",4),m("deleteRequested",function(r){u(t);let S=l(2);return y(S.deletePrompt(r))}),a()}o&2&&s("prompt",e)("platformMode",!0)}function L(o,e){if(o&1&&h(0,A,1,2,"agentos-prompt-item",3),o&2){let t,n=e.$implicit,r=l();b((t=r.resolvePrompt(n.id))?0:-1,t)}}var E=class o{router=p($);destroyRef=p(P);promptController=p(B);refresh$=new c(void 0);prompts$=this.refresh$.pipe(_(()=>this.promptController.listPlatformPrompt()));promptItems$=this.prompts$.pipe(f(e=>e.map(t=>({id:t.id??"",name:t.name,description:t.description}))));promptsById=new Map;constructor(){this.prompts$.pipe(d(this.destroyRef)).subscribe(e=>{this.promptsById=new Map(e.map(t=>[t.id??"",t]))})}goBack(){this.router.navigate(["/agentos","admin"])}openCreateForm(){this.router.navigate(["/agentos","admin","prompts","new"])}deletePrompt(e){this.promptController.deletePrompt(e.id??"").pipe(d(this.destroyRef)).subscribe(()=>this.refresh$.next())}resolvePrompt(e){return this.promptsById.get(e)??null}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=g({type:o,selectors:[["agentos-platform-prompts"]],decls:6,vars:6,consts:[["promptItemTpl",""],["title","Platform Prompts","emptyMessage","No platform prompts defined yet. Add one above.","cardMinWidth","400px",3,"createRequested","items","showCreate","itemTemplate"],["toolbar-start","","type","button",1,"platform-prompts__back",3,"click"],[3,"prompt","platformMode"],[3,"deleteRequested","prompt","platformMode"]],template:function(t,n){if(t&1&&(i(0,"ds-entity-list",1),I(1,"async"),m("createRequested",function(){return n.openCreateForm()}),i(2,"button",2),m("click",function(){return n.goBack()}),R(3,"\u2190 Admin"),a()(),C(4,L,1,1,"ng-template",null,0,x)),t&2){let r=M(5);s("items",k(1,3,n.promptItems$)??w(5,F))("showCreate",!0)("itemTemplate",r)}},dependencies:[D,q,T],styles:[".platform-prompts__back[_ngcontent-%COMP%]{background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-primary, #007aff);font-family:inherit}.platform-prompts__back[_ngcontent-%COMP%]:hover{text-decoration:underline}"],changeDetection:0})};export{E as PlatformPromptsComponent};
1
+ import{a as q}from"./chunk-33J6ILEN.js";import{n as B}from"./chunk-OUCV2HPU.js";import{d as $}from"./chunk-4GVABYH4.js";import{u as D}from"./chunk-JEDRTGW5.js";import"./chunk-3OKUQ4KY.js";import"./chunk-Z7E7NSDY.js";import{a as d}from"./chunk-V363EHJE.js";import"./chunk-ZEMOOOQR.js";import"./chunk-HZF57OLY.js";import"./chunk-EF2BOSEH.js";import{Bb as v,Db as m,Fb as l,Hc as T,Pb as M,S as _,Tb as R,Wa as g,ab as C,ac as w,ca as p,dc as I,ec as k,ga as u,ha as y,hc as x,i as c,lb as h,ma as P,mb as b,rb as s,sb as i,t as f,tb as a}from"./chunk-B4RKRLIY.js";var F=()=>[];function A(o,e){if(o&1){let t=v();i(0,"agentos-prompt-item",4),m("deleteRequested",function(r){u(t);let S=l(2);return y(S.deletePrompt(r))}),a()}o&2&&s("prompt",e)("platformMode",!0)}function L(o,e){if(o&1&&h(0,A,1,2,"agentos-prompt-item",3),o&2){let t,n=e.$implicit,r=l();b((t=r.resolvePrompt(n.id))?0:-1,t)}}var E=class o{router=p($);destroyRef=p(P);promptController=p(B);refresh$=new c(void 0);prompts$=this.refresh$.pipe(_(()=>this.promptController.listPlatformPrompt()));promptItems$=this.prompts$.pipe(f(e=>e.map(t=>({id:t.id??"",name:t.name,description:t.description}))));promptsById=new Map;constructor(){this.prompts$.pipe(d(this.destroyRef)).subscribe(e=>{this.promptsById=new Map(e.map(t=>[t.id??"",t]))})}goBack(){this.router.navigate(["/agentos","admin"])}openCreateForm(){this.router.navigate(["/agentos","admin","prompts","new"])}deletePrompt(e){this.promptController.deletePrompt(e.id??"").pipe(d(this.destroyRef)).subscribe(()=>this.refresh$.next())}resolvePrompt(e){return this.promptsById.get(e)??null}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=g({type:o,selectors:[["agentos-platform-prompts"]],decls:6,vars:6,consts:[["promptItemTpl",""],["title","Platform Prompts","emptyMessage","No platform prompts defined yet. Add one above.","cardMinWidth","400px",3,"createRequested","items","showCreate","itemTemplate"],["toolbar-start","","type","button",1,"platform-prompts__back",3,"click"],[3,"prompt","platformMode"],[3,"deleteRequested","prompt","platformMode"]],template:function(t,n){if(t&1&&(i(0,"ds-entity-list",1),I(1,"async"),m("createRequested",function(){return n.openCreateForm()}),i(2,"button",2),m("click",function(){return n.goBack()}),R(3,"\u2190 Admin"),a()(),C(4,L,1,1,"ng-template",null,0,x)),t&2){let r=M(5);s("items",k(1,3,n.promptItems$)??w(5,F))("showCreate",!0)("itemTemplate",r)}},dependencies:[D,q,T],styles:[".platform-prompts__back[_ngcontent-%COMP%]{background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-primary, #007aff);font-family:inherit}.platform-prompts__back[_ngcontent-%COMP%]:hover{text-decoration:underline}"],changeDetection:0})};export{E as PlatformPromptsComponent};
@@ -1,3 +1,3 @@
1
- import{a as pt,b as vt,c as ye}from"./chunk-7VBWPMKN.js";import{a as _t}from"./chunk-Q75AFBTG.js";import{d as bt}from"./chunk-E7XT4AGE.js";import{a as he}from"./chunk-MUX7LGIM.js";import{a as I,b as V,c as Ye,d as Ze,f as ft,h as xt}from"./chunk-SGCZJMPT.js";import"./chunk-FPNEFWYN.js";import"./chunk-JRJCV4WT.js";import{a as ze,b as We,c as Qe,d as Ue,g as at,n as lt,q as st,s as ct,x as dt}from"./chunk-YC254XBK.js";import"./chunk-SLBKHVIO.js";import"./chunk-XYYLNQXO.js";import{d as Re,e as $e}from"./chunk-4GVABYH4.js";import"./chunk-CBYR4M6L.js";import{a as pe,b as me,c as ue,d as _e}from"./chunk-2E6MYDFG.js";import{a as ge,b as ee}from"./chunk-YNYTAOEP.js";import{a as mt,b as ut}from"./chunk-TIMFZNT6.js";import"./chunk-MOG6OBSN.js";import{a as gt,b as ht,c as Ct}from"./chunk-YNZD2HBV.js";import{a as He,c as Xe,d as Je,e as Ke,j as de}from"./chunk-WV7ML4CJ.js";import{a as le,b as se,c as ce,e as et,f as H,i as X,j as J,m as Y,n as Z}from"./chunk-BUA6GPP7.js";import{a as $,b as qe,d as L,e as q,f as B,g as z,h as W}from"./chunk-6CNI4FAD.js";import"./chunk-Z7E7NSDY.js";import{a as Be,c as Q}from"./chunk-V363EHJE.js";import{a as N,b as A}from"./chunk-ZEMOOOQR.js";import{B as rt,E as K,c as tt,g as nt,m as it,o as ot}from"./chunk-HZF57OLY.js";import{a as U,b as ae}from"./chunk-5URVSSXV.js";import{O as re,Q as O,S as E,n as Le}from"./chunk-EF2BOSEH.js";import{Bb as x,D as Ee,Db as m,Fb as d,Ja as xe,Jb as Ae,Ka as c,Kb as Ie,Lb as Ve,Pb as w,Qb as Fe,Rb as S,Tb as s,Tc as Ge,Ub as b,Vb as P,Wa as D,Z as oe,a as F,b as G,ca as f,ga as g,ha as h,jb as ke,kc as k,lb as v,m as Pe,ma as Ne,mb as C,ob as j,pb as y,qb as M,rb as _,s as De,sb as o,t as je,ta as u,tb as r,ub as T,z as Oe}from"./chunk-B4RKRLIY.js";var Dt=(a,t)=>t.name;function jt(a,t){if(a&1&&(o(0,"mat-option",11),s(1),r()),a&2){let e=t.$implicit;_("value",e),c(),b(e)}}function Ot(a,t){a&1&&T(0,"mat-spinner",13)}function Et(a,t){if(a&1&&(o(0,"span",20),s(1),r()),a&2){let e=d().$implicit;c(),b(e.description)}}function Nt(a,t){if(a&1&&(o(0,"mat-option",11)(1,"span",19),s(2),r(),v(3,Et,2,1,"span",20),r()),a&2){let e=t.$implicit;_("value",e.name),c(2),b(e.name),c(),C(e.description?3:-1)}}function At(a,t){if(a&1&&(o(0,"mat-option",11),s(1),r()),a&2){let e=t.$implicit;_("value",e),c(),b(e)}}function It(a,t){if(a&1){let e=x();o(0,"div",25)(1,"mat-form-field",8)(2,"mat-label"),s(3,"Name"),r(),o(4,"input",26),m("input",function(i){g(e);let l=d(2);return h(l.issueNumber.set(i.target.value))}),r()(),o(5,"mat-form-field",27)(6,"mat-label"),s(7,"Type"),r(),o(8,"mat-select",28),m("selectionChange",function(i){g(e);let l=d(2);return h(l.branchType.set(i.value))}),y(9,At,2,2,"mat-option",11,j),r()()()}if(a&2){let e=d(2);c(4),_("value",e.issueNumber()),c(4),_("value",e.branchType()),c(),M(e.branchTypes)}}function Vt(a,t){a&1&&T(0,"mat-spinner",13)}function Ft(a,t){if(a&1&&(o(0,"mat-option",11),s(1),r()),a&2){let e=t.$implicit;_("value",e),c(),b(e)}}function Gt(a,t){if(a&1){let e=x();o(0,"mat-form-field",8)(1,"mat-label"),s(2,"Source branch"),r(),o(3,"input",29,4),m("input",function(i){g(e);let l=d(2);return h(l.onBranchSearchInput(i.target.value))})("focus",function(){g(e);let i=w(4),l=d(2);return h(l.openPanel(i))}),r(),v(5,Vt,1,0,"mat-spinner",13),o(6,"mat-autocomplete",10,5),m("optionSelected",function(i){g(e);let l=d(2);return h(l.selectBranch(i.option.value))}),y(8,Ft,2,2,"mat-option",11,j),r()()}if(a&2){let e=w(7),n=d(2);c(3),_("value",n.branchSearch())("matAutocomplete",e)("disabled",n.isLoadingBranches()),c(2),C(n.isLoadingBranches()?5:-1),c(3),M(n.filteredBranches())}}function Rt(a,t){if(a&1){let e=x();o(0,"div",21)(1,"button",22),m("click",function(){g(e);let i=d();return h(i.onModeChange("local"))}),o(2,"mat-icon"),s(3,"folder_open"),r(),o(4,"span",23),s(5,"Local"),r(),o(6,"span",24),s(7,"Work directly on the current branch"),r()(),o(8,"button",22),m("click",function(){g(e);let i=d();return h(i.onModeChange("worktree"))}),o(9,"mat-icon"),s(10,"account_tree"),r(),o(11,"span",23),s(12,"Worktree"),r(),o(13,"span",24),s(14,"Create an isolated worktree from a branch"),r()()(),v(15,It,11,2,"div",25),v(16,Gt,10,4,"mat-form-field",8)}if(a&2){let e=d();c(),S("active",e.mode()==="local"),c(7),S("active",e.mode()==="worktree"),c(7),C(e.isWorktree()?15:-1),c(),C(e.isWorktree()?16:-1)}}function $t(a,t){a&1&&T(0,"mat-spinner",18)}function Lt(a,t){a&1&&(o(0,"mat-icon"),s(1,"rocket_launch"),r())}function qt(a,t){a&1&&(o(0,"mat-icon"),s(1,"open_in_new"),r())}var fe=class a{projectApi=f(U);agentApi=f(he);dialogRef=f($);projectState=f(ae);forcedProject=Q(this.projectState.forcedProject$,{initialValue:null});selectedProject=u("");projectSearch=u("");selectedAgent=u("");agentSearch=u("");mode=u("local");selectedBranch=u("");branchSearch=u("");issueNumber=u("");branchType=u("feature");task=u("");hasGit=u(!1);branchTypes=["feature","fix","refactor","chore","docs","build"];projects=u([]);agents=u([]);branches=u([]);filteredProjects=k(()=>{let t=this.projectSearch().toLowerCase();return t?this.projects().filter(e=>e.toLowerCase().includes(t)):this.projects()});filteredAgents=k(()=>{let t=this.agentSearch().toLowerCase();return t?this.agents().filter(e=>e.name.toLowerCase().includes(t)||e.description?.toLowerCase().includes(t)):this.agents()});filteredBranches=k(()=>{let t=this.branchSearch().toLowerCase();return t?this.branches().filter(e=>e.toLowerCase().includes(t)):this.branches()});isLoadingAgents=u(!1);isLoadingBranches=u(!1);isSubmitting=u(!1);isWorktree=k(()=>this.mode()==="worktree"&&this.hasGit());isValid=k(()=>{let t=this.projects().includes(this.selectedProject()),e=this.agents().some(i=>i.name===this.selectedAgent()),n=t&&e&&!!this.task().trim();return this.isWorktree()?n&&!!this.selectedBranch()&&!!this.issueNumber().trim()&&!!this.branchType():n});canNavigate=k(()=>this.projects().includes(this.selectedProject()));openPanel(t){t.openPanel()}onProjectSearchInput(t){this.projectSearch.set(t),this.selectedProject()&&t!==this.selectedProject()&&(this.selectedProject.set(""),this.selectedAgent.set(""),this.agentSearch.set(""),this.agents.set([]))}selectProject(t){this.selectedProject.set(t),this.projectSearch.set(t),this.selectedAgent.set(""),this.agentSearch.set(""),this.agents.set([]),this.branches.set([]),this.selectedBranch.set(""),this.branchSearch.set(""),this.hasGit.set(!1),this.mode.set("local"),this.isLoadingAgents.set(!0),this.agentApi.getAgents(t).subscribe({next:e=>{this.agents.set(e),this.isLoadingAgents.set(!1)},error:()=>{this.isLoadingAgents.set(!1)}}),this.projectApi.getGitBranches(t).subscribe({next:({branches:e})=>{this.hasGit.set(e.length>0)},error:()=>{this.hasGit.set(!1)}})}onAgentSearchInput(t){this.agentSearch.set(t),this.selectedAgent()&&t!==this.selectedAgent()&&this.selectedAgent.set("")}selectAgent(t){this.selectedAgent.set(t),this.agentSearch.set(t)}onBranchSearchInput(t){this.branchSearch.set(t),this.selectedBranch()&&t!==this.selectedBranch()&&this.selectedBranch.set("")}selectBranch(t){this.selectedBranch.set(t),this.branchSearch.set(t)}ngOnInit(){this.projectApi.listProjects().subscribe({next:({projects:t})=>{let e=t.map(n=>n.name);this.projects.set(e),e.length===1&&e[0]&&this.selectProject(e[0])}})}onProjectChange(t){this.selectProject(t)}onModeChange(t){this.mode.set(t),t==="worktree"&&this.selectedProject()&&this.branches().length===0&&this.loadBranches()}loadBranches(){this.isLoadingBranches.set(!0),this.projectApi.getGitBranches(this.selectedProject()).subscribe({next:({branches:t})=>{this.branches.set(t),this.isLoadingBranches.set(!1)},error:()=>{this.isLoadingBranches.set(!1)}})}submit(){if(!this.isSubmitting()){if(this.isValid()){this.isSubmitting.set(!0);let t=this.isWorktree()&&this.issueNumber().trim()?`${this.issueNumber().trim()} ${this.task().trim()}`:this.task().trim();this.projectApi.createTask(this.selectedProject(),this.selectedAgent(),t,this.isWorktree()?"worktree":"local",this.isWorktree()?this.selectedBranch():void 0,this.isWorktree()?this.issueNumber().trim():void 0,this.isWorktree()?this.branchType():void 0).subscribe({next:({threadId:e,projectId:n})=>{this.dialogRef.close({threadId:e,projectId:n})},error:()=>{this.isSubmitting.set(!1)}});return}if(this.canNavigate()){this.dialogRef.close({projectId:this.selectedProject(),navigate:!0});return}}}cancel(){this.dialogRef.close(null)}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=D({type:a,selectors:[["app-new-task-dialog"]],decls:37,vars:12,consts:[["projectTrigger","matAutocompleteTrigger"],["projectAuto",""],["agentTrigger","matAutocompleteTrigger"],["agentAuto",""],["branchTrigger","matAutocompleteTrigger"],["branchAuto",""],["mat-dialog-title",""],[1,"ntd-content"],["appearance","outline",1,"ntd-field"],["matInput","","placeholder","Search project...",3,"input","focus","value","matAutocomplete"],[3,"optionSelected"],[3,"value"],["matInput","","placeholder","Search agent...",3,"input","focus","value","matAutocomplete","disabled"],["matSuffix","","diameter","16"],["matInput","","placeholder","Describe what the agent should accomplish...","rows","4",3,"input","value"],["align","end"],["mat-button","",3,"click","disabled"],["mat-flat-button","",1,"ntd-launch-btn",3,"click","disabled"],["diameter","16"],[1,"ntd-agent-name"],[1,"ntd-agent-desc"],[1,"ntd-radio-group"],["type","button",1,"ntd-mode-btn",3,"click"],[1,"ntd-radio-label"],[1,"ntd-radio-hint"],[1,"ntd-row"],["matInput","","type","text","placeholder","Name",3,"input","value"],["appearance","outline",1,"ntd-field","ntd-field--small"],[3,"selectionChange","value"],["matInput","","placeholder","Search branch...",3,"input","focus","value","matAutocomplete","disabled"]],template:function(e,n){if(e&1){let i=x();o(0,"h2",6)(1,"mat-icon"),s(2,"rocket_launch"),r(),s(3,` New Task
1
+ import{a as pt,b as vt,c as ye}from"./chunk-HGJB7HHB.js";import{a as _t}from"./chunk-IZDINSYR.js";import{d as bt}from"./chunk-6WYTEAO6.js";import{a as he}from"./chunk-MUX7LGIM.js";import{a as I,b as V,c as Ye,d as Ze,f as ft,h as xt}from"./chunk-WQNYPYF4.js";import"./chunk-FPNEFWYN.js";import"./chunk-JRJCV4WT.js";import{a as ze,b as We,c as Qe,d as Ue,g as at,n as lt,q as st,s as ct,x as dt}from"./chunk-YC254XBK.js";import"./chunk-SLBKHVIO.js";import"./chunk-XYYLNQXO.js";import{d as Re,e as $e}from"./chunk-4GVABYH4.js";import"./chunk-CBYR4M6L.js";import{a as pe,b as me,c as ue,d as _e}from"./chunk-4KVPUDL7.js";import{a as ge,b as ee}from"./chunk-6BKNE3NF.js";import{a as mt,b as ut}from"./chunk-X36T53JY.js";import"./chunk-MOG6OBSN.js";import{a as gt,b as ht,c as Ct}from"./chunk-PBL67GY2.js";import{a as ce,c as et,d as H,g as X,h as J,i as Y,j as Z}from"./chunk-KPY6XGAS.js";import{a as He,c as Xe,d as Je,e as Ke,j as de}from"./chunk-JEDRTGW5.js";import{a as le,b as se}from"./chunk-3OKUQ4KY.js";import{a as $,b as qe,d as L,e as q,f as B,g as z,h as W}from"./chunk-6CNI4FAD.js";import"./chunk-Z7E7NSDY.js";import{a as Be,c as Q}from"./chunk-V363EHJE.js";import{a as N,b as A}from"./chunk-ZEMOOOQR.js";import{B as rt,E as K,c as tt,g as nt,m as it,o as ot}from"./chunk-HZF57OLY.js";import{a as U,b as ae}from"./chunk-5URVSSXV.js";import{O as re,Q as O,S as E,n as Le}from"./chunk-EF2BOSEH.js";import{Bb as x,D as Ee,Db as m,Fb as d,Ja as xe,Jb as Ae,Ka as c,Kb as Ie,Lb as Ve,Pb as w,Qb as Fe,Rb as S,Tb as s,Tc as Ge,Ub as b,Vb as P,Wa as D,Z as oe,a as F,b as G,ca as f,ga as g,ha as h,jb as ke,kc as k,lb as v,m as Pe,ma as Ne,mb as C,ob as j,pb as y,qb as M,rb as _,s as De,sb as o,t as je,ta as u,tb as r,ub as T,z as Oe}from"./chunk-B4RKRLIY.js";var Dt=(a,t)=>t.name;function jt(a,t){if(a&1&&(o(0,"mat-option",11),s(1),r()),a&2){let e=t.$implicit;_("value",e),c(),b(e)}}function Ot(a,t){a&1&&T(0,"mat-spinner",13)}function Et(a,t){if(a&1&&(o(0,"span",20),s(1),r()),a&2){let e=d().$implicit;c(),b(e.description)}}function Nt(a,t){if(a&1&&(o(0,"mat-option",11)(1,"span",19),s(2),r(),v(3,Et,2,1,"span",20),r()),a&2){let e=t.$implicit;_("value",e.name),c(2),b(e.name),c(),C(e.description?3:-1)}}function At(a,t){if(a&1&&(o(0,"mat-option",11),s(1),r()),a&2){let e=t.$implicit;_("value",e),c(),b(e)}}function It(a,t){if(a&1){let e=x();o(0,"div",25)(1,"mat-form-field",8)(2,"mat-label"),s(3,"Name"),r(),o(4,"input",26),m("input",function(i){g(e);let l=d(2);return h(l.issueNumber.set(i.target.value))}),r()(),o(5,"mat-form-field",27)(6,"mat-label"),s(7,"Type"),r(),o(8,"mat-select",28),m("selectionChange",function(i){g(e);let l=d(2);return h(l.branchType.set(i.value))}),y(9,At,2,2,"mat-option",11,j),r()()()}if(a&2){let e=d(2);c(4),_("value",e.issueNumber()),c(4),_("value",e.branchType()),c(),M(e.branchTypes)}}function Vt(a,t){a&1&&T(0,"mat-spinner",13)}function Ft(a,t){if(a&1&&(o(0,"mat-option",11),s(1),r()),a&2){let e=t.$implicit;_("value",e),c(),b(e)}}function Gt(a,t){if(a&1){let e=x();o(0,"mat-form-field",8)(1,"mat-label"),s(2,"Source branch"),r(),o(3,"input",29,4),m("input",function(i){g(e);let l=d(2);return h(l.onBranchSearchInput(i.target.value))})("focus",function(){g(e);let i=w(4),l=d(2);return h(l.openPanel(i))}),r(),v(5,Vt,1,0,"mat-spinner",13),o(6,"mat-autocomplete",10,5),m("optionSelected",function(i){g(e);let l=d(2);return h(l.selectBranch(i.option.value))}),y(8,Ft,2,2,"mat-option",11,j),r()()}if(a&2){let e=w(7),n=d(2);c(3),_("value",n.branchSearch())("matAutocomplete",e)("disabled",n.isLoadingBranches()),c(2),C(n.isLoadingBranches()?5:-1),c(3),M(n.filteredBranches())}}function Rt(a,t){if(a&1){let e=x();o(0,"div",21)(1,"button",22),m("click",function(){g(e);let i=d();return h(i.onModeChange("local"))}),o(2,"mat-icon"),s(3,"folder_open"),r(),o(4,"span",23),s(5,"Local"),r(),o(6,"span",24),s(7,"Work directly on the current branch"),r()(),o(8,"button",22),m("click",function(){g(e);let i=d();return h(i.onModeChange("worktree"))}),o(9,"mat-icon"),s(10,"account_tree"),r(),o(11,"span",23),s(12,"Worktree"),r(),o(13,"span",24),s(14,"Create an isolated worktree from a branch"),r()()(),v(15,It,11,2,"div",25),v(16,Gt,10,4,"mat-form-field",8)}if(a&2){let e=d();c(),S("active",e.mode()==="local"),c(7),S("active",e.mode()==="worktree"),c(7),C(e.isWorktree()?15:-1),c(),C(e.isWorktree()?16:-1)}}function $t(a,t){a&1&&T(0,"mat-spinner",18)}function Lt(a,t){a&1&&(o(0,"mat-icon"),s(1,"rocket_launch"),r())}function qt(a,t){a&1&&(o(0,"mat-icon"),s(1,"open_in_new"),r())}var fe=class a{projectApi=f(U);agentApi=f(he);dialogRef=f($);projectState=f(ae);forcedProject=Q(this.projectState.forcedProject$,{initialValue:null});selectedProject=u("");projectSearch=u("");selectedAgent=u("");agentSearch=u("");mode=u("local");selectedBranch=u("");branchSearch=u("");issueNumber=u("");branchType=u("feature");task=u("");hasGit=u(!1);branchTypes=["feature","fix","refactor","chore","docs","build"];projects=u([]);agents=u([]);branches=u([]);filteredProjects=k(()=>{let t=this.projectSearch().toLowerCase();return t?this.projects().filter(e=>e.toLowerCase().includes(t)):this.projects()});filteredAgents=k(()=>{let t=this.agentSearch().toLowerCase();return t?this.agents().filter(e=>e.name.toLowerCase().includes(t)||e.description?.toLowerCase().includes(t)):this.agents()});filteredBranches=k(()=>{let t=this.branchSearch().toLowerCase();return t?this.branches().filter(e=>e.toLowerCase().includes(t)):this.branches()});isLoadingAgents=u(!1);isLoadingBranches=u(!1);isSubmitting=u(!1);isWorktree=k(()=>this.mode()==="worktree"&&this.hasGit());isValid=k(()=>{let t=this.projects().includes(this.selectedProject()),e=this.agents().some(i=>i.name===this.selectedAgent()),n=t&&e&&!!this.task().trim();return this.isWorktree()?n&&!!this.selectedBranch()&&!!this.issueNumber().trim()&&!!this.branchType():n});canNavigate=k(()=>this.projects().includes(this.selectedProject()));openPanel(t){t.openPanel()}onProjectSearchInput(t){this.projectSearch.set(t),this.selectedProject()&&t!==this.selectedProject()&&(this.selectedProject.set(""),this.selectedAgent.set(""),this.agentSearch.set(""),this.agents.set([]))}selectProject(t){this.selectedProject.set(t),this.projectSearch.set(t),this.selectedAgent.set(""),this.agentSearch.set(""),this.agents.set([]),this.branches.set([]),this.selectedBranch.set(""),this.branchSearch.set(""),this.hasGit.set(!1),this.mode.set("local"),this.isLoadingAgents.set(!0),this.agentApi.getAgents(t).subscribe({next:e=>{this.agents.set(e),this.isLoadingAgents.set(!1)},error:()=>{this.isLoadingAgents.set(!1)}}),this.projectApi.getGitBranches(t).subscribe({next:({branches:e})=>{this.hasGit.set(e.length>0)},error:()=>{this.hasGit.set(!1)}})}onAgentSearchInput(t){this.agentSearch.set(t),this.selectedAgent()&&t!==this.selectedAgent()&&this.selectedAgent.set("")}selectAgent(t){this.selectedAgent.set(t),this.agentSearch.set(t)}onBranchSearchInput(t){this.branchSearch.set(t),this.selectedBranch()&&t!==this.selectedBranch()&&this.selectedBranch.set("")}selectBranch(t){this.selectedBranch.set(t),this.branchSearch.set(t)}ngOnInit(){this.projectApi.listProjects().subscribe({next:({projects:t})=>{let e=t.map(n=>n.name);this.projects.set(e),e.length===1&&e[0]&&this.selectProject(e[0])}})}onProjectChange(t){this.selectProject(t)}onModeChange(t){this.mode.set(t),t==="worktree"&&this.selectedProject()&&this.branches().length===0&&this.loadBranches()}loadBranches(){this.isLoadingBranches.set(!0),this.projectApi.getGitBranches(this.selectedProject()).subscribe({next:({branches:t})=>{this.branches.set(t),this.isLoadingBranches.set(!1)},error:()=>{this.isLoadingBranches.set(!1)}})}submit(){if(!this.isSubmitting()){if(this.isValid()){this.isSubmitting.set(!0);let t=this.isWorktree()&&this.issueNumber().trim()?`${this.issueNumber().trim()} ${this.task().trim()}`:this.task().trim();this.projectApi.createTask(this.selectedProject(),this.selectedAgent(),t,this.isWorktree()?"worktree":"local",this.isWorktree()?this.selectedBranch():void 0,this.isWorktree()?this.issueNumber().trim():void 0,this.isWorktree()?this.branchType():void 0).subscribe({next:({threadId:e,projectId:n})=>{this.dialogRef.close({threadId:e,projectId:n})},error:()=>{this.isSubmitting.set(!1)}});return}if(this.canNavigate()){this.dialogRef.close({projectId:this.selectedProject(),navigate:!0});return}}}cancel(){this.dialogRef.close(null)}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=D({type:a,selectors:[["app-new-task-dialog"]],decls:37,vars:12,consts:[["projectTrigger","matAutocompleteTrigger"],["projectAuto",""],["agentTrigger","matAutocompleteTrigger"],["agentAuto",""],["branchTrigger","matAutocompleteTrigger"],["branchAuto",""],["mat-dialog-title",""],[1,"ntd-content"],["appearance","outline",1,"ntd-field"],["matInput","","placeholder","Search project...",3,"input","focus","value","matAutocomplete"],[3,"optionSelected"],[3,"value"],["matInput","","placeholder","Search agent...",3,"input","focus","value","matAutocomplete","disabled"],["matSuffix","","diameter","16"],["matInput","","placeholder","Describe what the agent should accomplish...","rows","4",3,"input","value"],["align","end"],["mat-button","",3,"click","disabled"],["mat-flat-button","",1,"ntd-launch-btn",3,"click","disabled"],["diameter","16"],[1,"ntd-agent-name"],[1,"ntd-agent-desc"],[1,"ntd-radio-group"],["type","button",1,"ntd-mode-btn",3,"click"],[1,"ntd-radio-label"],[1,"ntd-radio-hint"],[1,"ntd-row"],["matInput","","type","text","placeholder","Name",3,"input","value"],["appearance","outline",1,"ntd-field","ntd-field--small"],[3,"selectionChange","value"],["matInput","","placeholder","Search branch...",3,"input","focus","value","matAutocomplete","disabled"]],template:function(e,n){if(e&1){let i=x();o(0,"h2",6)(1,"mat-icon"),s(2,"rocket_launch"),r(),s(3,` New Task
2
2
  `),r(),o(4,"mat-dialog-content",7)(5,"mat-form-field",8)(6,"mat-label"),s(7,"Project"),r(),o(8,"input",9,0),m("input",function(p){return n.onProjectSearchInput(p.target.value)})("focus",function(){g(i);let p=w(9);return h(n.openPanel(p))}),r(),o(10,"mat-autocomplete",10,1),m("optionSelected",function(p){return n.selectProject(p.option.value)}),y(12,jt,2,2,"mat-option",11,j),r()(),o(14,"mat-form-field",8)(15,"mat-label"),s(16,"Agent"),r(),o(17,"input",12,2),m("input",function(p){return n.onAgentSearchInput(p.target.value)})("focus",function(){g(i);let p=w(18);return h(n.openPanel(p))}),r(),v(19,Ot,1,0,"mat-spinner",13),o(20,"mat-autocomplete",10,3),m("optionSelected",function(p){return n.selectAgent(p.option.value)}),y(22,Nt,4,3,"mat-option",11,Dt),r()(),v(24,Rt,17,6),o(25,"mat-form-field",8)(26,"mat-label"),s(27,"Task"),r(),o(28,"textarea",14),m("input",function(p){return n.task.set(p.target.value)}),r()()(),o(29,"mat-dialog-actions",15)(30,"button",16),m("click",function(){return n.cancel()}),s(31,"Cancel"),r(),o(32,"button",17),m("click",function(){return n.submit()}),v(33,$t,1,0,"mat-spinner",18)(34,Lt,2,0,"mat-icon")(35,qt,2,0,"mat-icon"),s(36),r()()}if(e&2){let i=w(11),l=w(21);c(8),_("value",n.projectSearch())("matAutocomplete",i),c(4),M(n.filteredProjects()),c(5),_("value",n.agentSearch())("matAutocomplete",l)("disabled",!n.selectedProject()||n.isLoadingAgents()),c(2),C(n.isLoadingAgents()?19:-1),c(3),M(n.filteredAgents()),c(2),C(n.hasGit()&&!n.forcedProject()?24:-1),c(4),_("value",n.task()),c(2),_("disabled",n.isSubmitting()),c(2),_("disabled",!n.canNavigate()||n.isSubmitting()),c(),C(n.isSubmitting()?33:n.isValid()?34:35),c(3),P(" ",n.isValid()?"Launch":"Open"," ")}},dependencies:[K,W,q,z,B,E,O,J,X,ce,H,Z,Y,ue,pe,de,me,ee,ge,V,I,A,N],styles:["h2[mat-dialog-title][_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:0}.ntd-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;padding-top:20px!important}.ntd-field[_ngcontent-%COMP%]{width:100%}.ntd-row[_ngcontent-%COMP%]{display:flex;gap:.75rem}.ntd-row[_ngcontent-%COMP%] .ntd-field--small[_ngcontent-%COMP%]{width:130px;flex-shrink:0}.ntd-radio-group[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding:.25rem 0 .75rem}.ntd-mode-btn[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;align-items:flex-start;gap:.15rem;padding:.75rem;border:1px solid var(--color-border);border-radius:8px;background:transparent;color:var(--color-text);cursor:pointer;transition:border-color .15s,background .15s}.ntd-mode-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.1rem;width:1.1rem;height:1.1rem;margin-bottom:.1rem}.ntd-mode-btn.active[_ngcontent-%COMP%]{border-color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 10%,transparent)}.ntd-mode-btn[_ngcontent-%COMP%]:hover:not(.active){border-color:var(--color-text-secondary)}.ntd-radio-label[_ngcontent-%COMP%]{font-weight:600;font-size:.9rem}.ntd-radio-hint[_ngcontent-%COMP%]{font-size:.72rem;color:var(--color-text-secondary);line-height:1.3;text-align:left}.ntd-agent-name[_ngcontent-%COMP%]{font-weight:500;display:block}.ntd-agent-desc[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:380px}.ntd-launch-btn[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse)}.ntd-launch-btn[_ngcontent-%COMP%]:disabled{background:var(--color-border);color:var(--color-text-secondary);opacity:.6;cursor:not-allowed}"]})};var Bt=(a,t)=>t.name,zt=(a,t)=>t.value;function Wt(a,t){if(a&1&&(o(0,"mat-option",8),s(1),r()),a&2){let e=t.$implicit;_("value",e),c(),b(e)}}function Qt(a,t){a&1&&T(0,"mat-spinner",9)}function Ut(a,t){if(a&1&&(o(0,"mat-option",8),s(1),r()),a&2){let e=t.$implicit;_("value",e.name),c(),b(e.name)}}function Ht(a,t){if(a&1){let e=x();o(0,"button",37),m("click",function(){let i=g(e).$implicit,l=d();return h(l.toggleDay(i.value))}),s(1),r()}if(a&2){let e=t.$implicit,n=d();S("selected",n.isDaySelected(e.value)),c(),P(" ",e.label," ")}}function Xt(a,t){if(a&1){let e=x();o(0,"mat-form-field",4)(1,"mat-label"),s(2,"Number of runs"),r(),o(3,"input",17),m("ngModelChange",function(i){g(e);let l=d();return h(l.endOccurrences.set(i))}),r()()}if(a&2){let e=d();c(3),_("ngModel",e.endOccurrences())}}function Jt(a,t){if(a&1){let e=x();o(0,"mat-form-field",4)(1,"mat-label"),s(2,"End date"),r(),o(3,"input",38),m("ngModelChange",function(i){g(e);let l=d();return h(l.endTimestamp.set(i))}),r()()}if(a&2){let e=d();c(3),_("ngModel",e.endTimestamp())("min",e.startTimestamp())}}function Kt(a,t){if(a&1&&(o(0,"div",32)(1,"mat-icon"),s(2,"error"),r(),o(3,"span"),s(4),r()()),a&2){let e=d();c(4),b(e.errorMessage())}}function Yt(a,t){a&1&&T(0,"mat-spinner",36)}function Zt(a,t){a&1&&(o(0,"mat-icon"),s(1,"schedule"),r())}var R=class a{projectApi=f(U);agentApi=f(he);schedulerApi=f(_e);dialogRef=f($);dialogData=f(qe,{optional:!0});isEditMode=this.dialogData?.mode==="edit";projects=u([]);agents=u([]);name=u("");selectedProject=u("");selectedAgent=u("");instruction=u("");intervalValue=u(1);intervalUnit=u("d");startTimestamp=u("");daysOfWeek=u([]);endConditionType=u("none");endOccurrences=u(10);endTimestamp=u("");enabled=u(!0);isLoadingAgents=u(!1);isSaving=u(!1);errorMessage=u("");daysOfWeekOptions=[{value:1,label:"Mon"},{value:2,label:"Tue"},{value:3,label:"Wed"},{value:4,label:"Thu"},{value:5,label:"Fri"},{value:6,label:"Sat"},{value:0,label:"Sun"}];filteredProjects=k(()=>{let t=this.selectedProject().toLowerCase();return this.projects().filter(e=>e.toLowerCase().includes(t))});filteredAgents=k(()=>{let t=this.selectedAgent().toLowerCase();return this.agents().filter(e=>e.name.toLowerCase().includes(t))});isValid=k(()=>{let t=this.projects().includes(this.selectedProject()),e=this.agents().some(l=>l.name===this.selectedAgent()),n=this.instruction().trim().length>0,i=this.intervalValue()>=1;return t&&e&&n&&i});ngOnInit(){if(this.isEditMode&&this.dialogData?.scheduler){let t=this.dialogData.scheduler;this.name.set(t.name),this.selectedAgent.set(t.agentName??""),this.instruction.set(t.instruction??""),this.enabled.set(t.enabled);let e=t.schedule.interval.match(/^(\d+)(min|h|d|M)$/);e&&e[1]&&e[2]&&(this.intervalValue.set(parseInt(e[1],10)),this.intervalUnit.set(e[2])),t.schedule.startTimestamp&&this.startTimestamp.set(this.toDatetimeLocal(new Date(t.schedule.startTimestamp))),this.daysOfWeek.set(t.schedule.daysOfWeek??[]),t.schedule.endCondition&&(this.endConditionType.set(t.schedule.endCondition.type),t.schedule.endCondition.type==="occurrences"?this.endOccurrences.set(t.schedule.endCondition.value):t.schedule.endCondition.type==="endTimestamp"&&this.endTimestamp.set(this.toDatetimeLocal(new Date(t.schedule.endCondition.value))))}else this.startTimestamp.set(this.toDatetimeLocal(new Date));this.projectApi.listProjects().subscribe({next:({projects:t})=>{let e=t.map(i=>i.name).filter(i=>!i.includes("__"));this.projects.set(e);let n=this.dialogData?.projectName;this.isEditMode&&n?this.onProjectSelected(n):e.length===1&&e[0]&&this.onProjectSelected(e[0])}})}onProjectSelected(t){this.selectedProject.set(t),this.isEditMode||(this.agents.set([]),this.selectedAgent.set("")),this.projects().includes(t)&&(this.isLoadingAgents.set(!0),this.agentApi.getAgents(t).subscribe({next:e=>{this.agents.set(e),this.isLoadingAgents.set(!1),!this.isEditMode&&e.length===1&&e[0]&&this.selectedAgent.set(e[0].name)},error:()=>this.isLoadingAgents.set(!1)}))}toggleDay(t){let e=this.daysOfWeek();e.indexOf(t)>-1?this.daysOfWeek.set(e.filter(i=>i!==t)):this.daysOfWeek.set([...e,t].sort())}isDaySelected(t){return this.daysOfWeek().includes(t)}toDatetimeLocal(t){let e=n=>String(n).padStart(2,"0");return`${t.getFullYear()}-${e(t.getMonth()+1)}-${e(t.getDate())}T${e(t.getHours())}:${e(t.getMinutes())}`}submit(){if(!this.isValid()||this.isSaving())return;this.errorMessage.set(""),this.isSaving.set(!0);let t=this.startTimestamp(),e={startTimestamp:t?new Date(t).toISOString():new Date().toISOString(),interval:`${this.intervalValue()}${this.intervalUnit()}`},n=this.daysOfWeek();n.length>0&&(e.daysOfWeek=n);let i=this.endConditionType();i==="occurrences"?e.endCondition={type:"occurrences",value:this.endOccurrences()}:i==="endTimestamp"&&this.endTimestamp()&&(e.endCondition={type:"endTimestamp",value:new Date(this.endTimestamp()).toISOString()});let l=this.instruction().trim(),p=l.length>40?l.slice(0,40)+"\u2026":l,ie=this.name().trim()||`${this.selectedAgent()} \u2014 ${p}`;this.isEditMode&&this.dialogData?.scheduler&&this.dialogData.projectName?this.schedulerApi.updateSchedulerForProject(this.dialogData.projectName,this.dialogData.scheduler.id,{name:ie,agentName:this.selectedAgent(),instruction:l,schedule:e,enabled:this.enabled()}).subscribe({next:()=>{this.isSaving.set(!1),this.dialogRef.close(!0)},error:te=>{this.errorMessage.set(te?.error?.error||"Failed to update scheduler"),this.isSaving.set(!1)}}):this.schedulerApi.createSchedulerForProject(this.selectedProject(),{name:ie,agentName:this.selectedAgent(),instruction:l,schedule:e,enabled:this.enabled()}).subscribe({next:()=>{this.isSaving.set(!1),this.dialogRef.close(!0)},error:te=>{this.errorMessage.set(te?.error?.error||"Failed to create scheduler"),this.isSaving.set(!1)}})}cancel(){this.dialogRef.close(!1)}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=D({type:a,selectors:[["app-quick-scheduler-dialog"]],decls:84,vars:20,consts:[["projectAuto","matAutocomplete"],["agentAuto","matAutocomplete"],["mat-dialog-title",""],[1,"qsd-form"],["appearance","outline",1,"full-width"],["matInput","","placeholder","Optional \u2014 auto-generated if empty",3,"ngModelChange","ngModel"],["matInput","","placeholder","Select a project",3,"ngModelChange","focus","ngModel","matAutocomplete"],[3,"optionSelected"],[3,"value"],["matSuffix","","diameter","18"],["matInput","","placeholder","Select an agent",3,"ngModelChange","focus","ngModel","matAutocomplete","disabled"],["matInput","","placeholder","e.g. Review open PRs and summarize what needs attention","rows","3",3,"ngModelChange","ngModel"],[1,"qsd-divider"],["matInput","","type","datetime-local",3,"ngModelChange","ngModel"],[1,"qsd-interval"],[1,"qsd-label"],["appearance","outline",1,"interval-value"],["matInput","","type","number","min","1",3,"ngModelChange","ngModel"],["appearance","outline",1,"interval-unit"],[3,"ngModelChange","ngModel"],["value","min"],["value","h"],["value","d"],["value","M"],[1,"qsd-days"],[1,"qsd-day-chips"],["type","button",1,"day-chip",3,"selected"],[1,"qsd-hint"],[1,"qsd-end"],["value","none"],["value","occurrences"],["value","endTimestamp"],[1,"qsd-error"],["align","end"],["mat-button","",3,"click","disabled"],["mat-flat-button","",3,"click","disabled"],["diameter","18"],["type","button",1,"day-chip",3,"click"],["matInput","","type","datetime-local",3,"ngModelChange","ngModel","min"]],template:function(e,n){if(e&1&&(o(0,"h2",2)(1,"mat-icon"),s(2,"schedule"),r(),s(3),r(),o(4,"mat-dialog-content")(5,"div",3)(6,"mat-form-field",4)(7,"mat-label"),s(8,"Name"),r(),o(9,"input",5),m("ngModelChange",function(l){return n.name.set(l)}),r()(),o(10,"mat-form-field",4)(11,"mat-label"),s(12,"Project"),r(),o(13,"input",6),m("ngModelChange",function(l){return n.onProjectSelected(l)})("focus",function(){return n.selectedProject.set(n.selectedProject())}),r(),o(14,"mat-autocomplete",7,0),m("optionSelected",function(l){return n.onProjectSelected(l.option.value)}),y(16,Wt,2,2,"mat-option",8,j),r()(),o(18,"mat-form-field",4)(19,"mat-label"),s(20,"Agent"),r(),v(21,Qt,1,0,"mat-spinner",9),o(22,"input",10),m("ngModelChange",function(l){return n.selectedAgent.set(l)})("focus",function(){return n.selectedAgent.set(n.selectedAgent())}),r(),o(23,"mat-autocomplete",7,1),m("optionSelected",function(l){return n.selectedAgent.set(l.option.value)}),y(25,Ut,2,2,"mat-option",8,Bt),r()(),o(27,"mat-form-field",4)(28,"mat-label"),s(29,"What should the agent do?"),r(),o(30,"textarea",11),m("ngModelChange",function(l){return n.instruction.set(l)}),r()(),o(31,"div",12)(32,"span"),s(33,"Scheduling"),r()(),o(34,"mat-form-field",4)(35,"mat-label"),s(36,"Starts on"),r(),o(37,"input",13),m("ngModelChange",function(l){return n.startTimestamp.set(l)}),r()(),o(38,"div",14)(39,"span",15),s(40,"Every"),r(),o(41,"mat-form-field",16)(42,"input",17),m("ngModelChange",function(l){return n.intervalValue.set(l)}),r()(),o(43,"mat-form-field",18)(44,"mat-select",19),m("ngModelChange",function(l){return n.intervalUnit.set(l)}),o(45,"mat-option",20),s(46,"minutes"),r(),o(47,"mat-option",21),s(48,"hours"),r(),o(49,"mat-option",22),s(50,"days"),r(),o(51,"mat-option",23),s(52,"months"),r()()()(),o(53,"div",24)(54,"span",15),s(55,"Days"),r(),o(56,"div",25),y(57,Ht,2,3,"button",26,zt),r(),o(59,"span",27),s(60,"Leave empty for every day"),r()(),o(61,"div",28)(62,"mat-form-field",4)(63,"mat-label"),s(64,"Ends on"),r(),o(65,"mat-select",19),m("ngModelChange",function(l){return n.endConditionType.set(l)}),o(66,"mat-option",29),s(67,"Never"),r(),o(68,"mat-option",30),s(69,"After N runs"),r(),o(70,"mat-option",31),s(71,"On a date"),r()()(),v(72,Xt,4,1,"mat-form-field",4),v(73,Jt,4,2,"mat-form-field",4),r(),o(74,"mat-checkbox",19),m("ngModelChange",function(l){return n.enabled.set(l)}),s(75,"Enable immediately"),r(),v(76,Kt,5,1,"div",32),r()(),o(77,"mat-dialog-actions",33)(78,"button",34),m("click",function(){return n.cancel()}),s(79,"Cancel"),r(),o(80,"button",35),m("click",function(){return n.submit()}),v(81,Yt,1,0,"mat-spinner",36)(82,Zt,2,0,"mat-icon"),s(83," Schedule "),r()()),e&2){let i=w(15),l=w(24);c(3),P(" ",n.isEditMode?"Edit scheduled task":"New scheduled task",`
3
3
  `),c(6),_("ngModel",n.name()),c(4),_("ngModel",n.selectedProject())("matAutocomplete",i),c(3),M(n.filteredProjects()),c(5),C(n.isLoadingAgents()?21:-1),c(),_("ngModel",n.selectedAgent())("matAutocomplete",l)("disabled",!n.projects().includes(n.selectedProject())),c(3),M(n.filteredAgents()),c(5),_("ngModel",n.instruction()),c(7),_("ngModel",n.startTimestamp()),c(5),_("ngModel",n.intervalValue()),c(2),_("ngModel",n.intervalUnit()),c(13),M(n.daysOfWeekOptions),c(8),_("ngModel",n.endConditionType()),c(7),C(n.endConditionType()==="occurrences"?72:-1),c(),C(n.endConditionType()==="endTimestamp"?73:-1),c(),_("ngModel",n.enabled()),c(2),C(n.errorMessage()?76:-1),c(2),_("disabled",n.isSaving()),c(2),_("disabled",!n.isValid()||n.isSaving()),c(),C(n.isSaving()?81:82)}},dependencies:[K,tt,ot,nt,rt,it,W,q,z,B,E,O,J,X,ce,H,Z,Y,ue,pe,de,me,ee,ge,ut,mt,V,I,A,N],styles:['[_nghost-%COMP%]{display:block}h2[mat-dialog-title][_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.qsd-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;padding-top:4px}.full-width[_ngcontent-%COMP%]{width:100%}.qsd-interval[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.qsd-interval[_ngcontent-%COMP%] .qsd-label[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface-variant);white-space:nowrap}.qsd-interval[_ngcontent-%COMP%] .interval-value[_ngcontent-%COMP%]{width:80px}.qsd-interval[_ngcontent-%COMP%] .interval-unit[_ngcontent-%COMP%]{flex:1}.qsd-days[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.qsd-days[_ngcontent-%COMP%] .qsd-label[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface-variant);white-space:nowrap}.qsd-days[_ngcontent-%COMP%] .qsd-hint[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface-variant);opacity:.7;width:100%;margin-top:-4px;padding-left:36px}.qsd-day-chips[_ngcontent-%COMP%]{display:flex;gap:4px;flex-wrap:wrap}.day-chip[_ngcontent-%COMP%]{padding:4px 10px;border-radius:16px;border:1px solid var(--mat-sys-outline);background:transparent;color:var(--mat-sys-on-surface);font-size:12px;cursor:pointer;transition:background .15s,color .15s}.day-chip.selected[_ngcontent-%COMP%]{background:var(--mat-sys-primary);color:var(--mat-sys-on-primary);border-color:var(--mat-sys-primary)}.day-chip[_ngcontent-%COMP%]:hover:not(.selected){background:var(--mat-sys-surface-variant)}.qsd-divider[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin:4px 0}.qsd-divider[_ngcontent-%COMP%]:before, .qsd-divider[_ngcontent-%COMP%]:after{content:"";flex:1;height:1px;background:var(--mat-sys-outline-variant)}.qsd-divider[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.5px}.qsd-end[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.qsd-error[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;color:var(--mat-sys-error);font-size:14px}.qsd-error[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}mat-dialog-actions[_ngcontent-%COMP%]{gap:8px}mat-dialog-actions[_ngcontent-%COMP%] button[mat-flat-button][_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px}'],changeDetection:0})};var tn=(a,t)=>t.id;function nn(a,t){if(a&1){let e=x();o(0,"button",9),m("click",function(){let i=g(e).$implicit,l=d(2);return h(l.setProject(i))}),s(1),r()}if(a&2){let e=t.$implicit,n=d(2);S("active",n.activeProject()===e),c(),P(" ",e," ")}}function on(a,t){if(a&1){let e=x();o(0,"nav",2)(1,"button",9),m("click",function(){g(e);let i=d();return h(i.setProject(null))}),s(2," All projects "),r(),y(3,nn,2,3,"button",10,j),r()}if(a&2){let e=d();c(),S("active",e.activeProject()===null),c(2),M(e.projects())}}function rn(a,t){a&1&&(o(0,"div",3),T(1,"mat-spinner",11),r())}function an(a,t){if(a&1&&(o(0,"div",4)(1,"mat-icon"),s(2,"error"),r(),s(3),r()),a&2){let e=d();c(3),P(" ",e.errorMessage()," ")}}function ln(a,t){if(a&1){let e=x();o(0,"div",5)(1,"mat-icon"),s(2,"schedule"),r(),o(3,"p"),s(4,"No scheduled tasks yet."),r(),o(5,"button",12),m("click",function(){g(e);let i=d();return h(i.openCreate())}),o(6,"mat-icon"),s(7,"add"),r(),s(8," Create one "),r()()}}function sn(a,t){if(a&1&&(o(0,"span",17),s(1),r()),a&2){let e=d().$implicit;c(),b(e.projectName)}}function cn(a,t){if(a&1){let e=x();o(0,"li",14)(1,"div",15)(2,"span",16),s(3),r(),v(4,sn,2,1,"span",17),o(5,"span",18),s(6),r()(),o(7,"div",19)(8,"span",20),s(9),r(),o(10,"span",21),s(11),r()(),o(12,"div",22)(13,"mat-slide-toggle",23),m("change",function(){let i=g(e).$implicit,l=d(2);return h(l.toggleEnabled(i))}),r(),o(14,"button",24),m("click",function(){let i=g(e).$implicit,l=d(2);return h(l.runNow(i))}),o(15,"mat-icon"),s(16,"play_arrow"),r()(),o(17,"button",25),m("click",function(){let i=g(e).$implicit,l=d(2);return h(l.edit(i))}),o(18,"mat-icon"),s(19,"edit"),r()(),o(20,"button",26),m("click",function(){let i=g(e).$implicit,l=d(2);return h(l.delete(i))}),o(21,"mat-icon"),s(22,"delete"),r()()()()}if(a&2){let e=t.$implicit,n=d(2);S("disabled",!e.enabled),c(3),b(e.name),c(),C(n.projects().length>1?4:-1),c(2),b(n.getSource(e)),c(3),b(n.formatInterval(e.schedule.interval)),c(),S("due",!e.nextRun),c(),b(n.formatNextRun(e.nextRun)),c(2),_("checked",e.enabled)}}function dn(a,t){if(a&1&&(o(0,"ul",6),y(1,cn,23,10,"li",13,tn),r()),a&2){let e=d();c(),M(e.filteredSchedulers())}}var be=class a{projectApi=f(U);schedulerApi=f(_e);dialog=f(L);dialogRef=f($);allSchedulers=u([]);isLoading=u(!0);errorMessage=u("");activeProject=u(null);projects=u([]);filteredSchedulers=k(()=>{let t=this.activeProject(),e=this.allSchedulers();return t?e.filter(n=>n.projectName===t):e});ngOnInit(){this.load()}load(){this.isLoading.set(!0),this.errorMessage.set(""),this.projectApi.listProjects().subscribe({next:({projects:t})=>{let e=t.map(i=>i.name).filter(i=>!i.includes("__"));if(this.projects.set(e),e.length===0){this.isLoading.set(!1);return}let n=e.map(i=>this.schedulerApi.listSchedulersForProject(i).pipe(Ee(()=>Pe([]))));Oe(n).subscribe({next:i=>{let l=[];i.forEach((p,ie)=>{p.forEach(te=>l.push(G(F({},te),{projectName:e[ie]})))}),this.allSchedulers.set(l),this.isLoading.set(!1)},error:()=>{this.errorMessage.set("Failed to load schedulers"),this.isLoading.set(!1)}})},error:()=>{this.errorMessage.set("Failed to load projects"),this.isLoading.set(!1)}})}setProject(t){this.activeProject.set(t)}formatInterval(t){let e=/^(\d+)(min|h|d|M)$/.exec(t);if(!e)return t;let[,n,i]=e;return`Every ${n}${{min:"min",h:"h",d:"d",M:"mo"}[i??""]??i}`}formatNextRun(t){if(!t)return"Expired";let e=new Date(t),n=new Date,i=e.getTime()-n.getTime();if(i<0)return"Due";let l=Math.floor(i/6e4);if(l<60)return`in ${l}m`;let p=Math.floor(l/60);return p<24?`in ${p}h`:`in ${Math.floor(p/24)}d`}getSource(t){if(t.agentName&&t.instruction){let e=t.instruction.length>35?t.instruction.slice(0,35)+"\u2026":t.instruction;return`${t.agentName}: ${e}`}return t.promptId??""}toggleEnabled(t){(t.enabled?this.schedulerApi.disableSchedulerForProject(t.projectName,t.id):this.schedulerApi.enableSchedulerForProject(t.projectName,t.id)).subscribe({next:()=>{this.allSchedulers.update(n=>n.map(i=>i.id===t.id?G(F({},i),{enabled:!i.enabled}):i))},error:()=>this.errorMessage.set("Failed to toggle scheduler")})}runNow(t){this.schedulerApi.runSchedulerNowForProject(t.projectName,t.id).subscribe({error:()=>this.errorMessage.set("Failed to run scheduler")})}edit(t){let e={mode:"edit",projectName:t.projectName,scheduler:{id:t.id,name:t.name,agentName:t.agentName,instruction:t.instruction,enabled:t.enabled,schedule:t.schedule}};this.dialog.open(R,{width:"480px",data:e}).afterClosed().subscribe(i=>{i&&this.load()})}delete(t){this.schedulerApi.deleteSchedulerForProject(t.projectName,t.id).subscribe({next:()=>{this.allSchedulers.update(e=>e.filter(n=>n.id!==t.id))},error:()=>this.errorMessage.set("Failed to delete scheduler")})}openCreate(){this.dialogRef.close(),this.dialog.open(R,{width:"480px"})}close(){this.dialogRef.close()}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=D({type:a,selectors:[["app-global-schedulers-dialog"]],decls:19,vars:3,consts:[["mat-dialog-title",""],[1,"gsd-count"],[1,"gsd-project-filters"],[1,"gsd-loading"],[1,"gsd-error"],[1,"gsd-empty"],[1,"gsd-list"],["align","end"],["mat-button","",3,"click"],[1,"proj-chip",3,"click"],[1,"proj-chip",3,"active"],["diameter","32"],["mat-flat-button","",3,"click"],[1,"gsd-item",3,"disabled"],[1,"gsd-item"],[1,"gsd-item-main"],[1,"gsd-item-name"],[1,"gsd-item-project"],[1,"gsd-item-source"],[1,"gsd-item-meta"],[1,"gsd-interval"],[1,"gsd-next"],[1,"gsd-item-actions"],["matTooltip","Enable / Disable",3,"change","checked"],["mat-icon-button","","matTooltip","Run now",3,"click"],["mat-icon-button","","matTooltip","Edit",3,"click"],["mat-icon-button","","matTooltip","Delete",1,"delete-btn",3,"click"]],template:function(e,n){e&1&&(o(0,"h2",0)(1,"mat-icon"),s(2,"schedule"),r(),s(3," Scheduled tasks "),o(4,"span",1),s(5),r()(),o(6,"mat-dialog-content"),v(7,on,5,2,"nav",2),v(8,rn,2,0,"div",3)(9,an,4,1,"div",4)(10,ln,9,0,"div",5)(11,dn,3,0,"ul",6),r(),o(12,"mat-dialog-actions",7)(13,"button",8),m("click",function(){return n.openCreate()}),o(14,"mat-icon"),s(15,"add"),r(),s(16," New scheduler "),r(),o(17,"button",8),m("click",function(){return n.close()}),s(18,"Close"),r()()),e&2&&(c(5),b(n.filteredSchedulers().length),c(2),C(n.projects().length>1?7:-1),c(),C(n.isLoading()?8:n.errorMessage()?9:n.filteredSchedulers().length===0?10:11))},dependencies:[K,W,q,z,B,E,O,re,A,N,V,I,ee,se,le,ht,gt],styles:["[_nghost-%COMP%]{display:block}h2[mat-dialog-title][_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}h2[mat-dialog-title][_ngcontent-%COMP%] .gsd-count[_ngcontent-%COMP%]{font-size:13px;font-weight:400;color:var(--mat-sys-on-surface-variant);margin-left:2px}.gsd-project-filters[_ngcontent-%COMP%]{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.proj-chip[_ngcontent-%COMP%]{padding:4px 12px;border-radius:16px;border:1px solid var(--mat-sys-outline);background:transparent;color:var(--mat-sys-on-surface);font-size:13px;cursor:pointer;transition:background .15s,color .15s}.proj-chip.active[_ngcontent-%COMP%]{background:var(--mat-sys-primary);color:var(--mat-sys-on-primary);border-color:var(--mat-sys-primary)}.proj-chip[_ngcontent-%COMP%]:hover:not(.active){background:var(--mat-sys-surface-variant)}.gsd-loading[_ngcontent-%COMP%], .gsd-empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:32px 0;color:var(--mat-sys-on-surface-variant)}.gsd-loading[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .gsd-empty[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:40px;width:40px;height:40px;opacity:.4}.gsd-error[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;color:var(--mat-sys-error);padding:16px 0}.gsd-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.gsd-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:8px;background:var(--mat-sys-surface-container);transition:opacity .2s}.gsd-item.disabled[_ngcontent-%COMP%]{opacity:.5}.gsd-item-main[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.gsd-item-name[_ngcontent-%COMP%]{font-weight:500;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gsd-item-project[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-primary);font-weight:500}.gsd-item-source[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gsd-item-meta[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-end;gap:2px;white-space:nowrap}.gsd-interval[_ngcontent-%COMP%]{font-size:12px;color:var(--mat-sys-on-surface-variant)}.gsd-next[_ngcontent-%COMP%]{font-size:11px;color:var(--mat-sys-on-surface-variant)}.gsd-next.due[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.gsd-item-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.gsd-item-actions[_ngcontent-%COMP%] .delete-btn[_ngcontent-%COMP%]{color:var(--mat-sys-error);opacity:.7;transition:opacity .15s}.gsd-item-actions[_ngcontent-%COMP%] .delete-btn[_ngcontent-%COMP%]:hover{opacity:1}mat-dialog-actions[_ngcontent-%COMP%]{gap:8px}"],changeDetection:0})};var ve=class a{http=f(Ge);threadApi=f(ze);isLoading=u(!1);tasks=u([]);refresh(){this.isLoading.set(!0),this.threadApi.listAllThreads().pipe(De(15e3)).subscribe({next:t=>{let e=t.filter(n=>!n.parentThreadId).map(n=>({id:n.id,name:n.name,summary:n.summary,modifiedDate:n.modifiedDate,starring:n.starring??[],users:n.users??[],isActive:!1,status:this.deriveStatus(n),projectId:n.projectId,worktreeProject:n.worktreeProject}));this.tasks.set(this.sorted(e)),this.isLoading.set(!1)},error:()=>{this.isLoading.set(!1)}})}applyStatusEvent(t,e){let n=e==="invite"?"waiting-you":"in-progress";this.tasks.update(i=>this.sorted(i.map(l=>l.id===t?G(F({},l),{status:n}):l)))}closeTask(t,e){this.tasks.update(n=>n.filter(i=>i.id!==e)),this.http.delete(`/api/projects/${t}/missions/${e}`).subscribe({next:()=>this.refresh(),error:n=>{console.error("[GLOBAL-TC] Failed to close task:",n),this.refresh()}})}stopThread(t,e){this.http.post(`/api/projects/${t}/threads/${e}/stop`,{}).subscribe({error:n=>console.error("[GLOBAL-TC] Failed to stop thread:",n)})}deleteThread(t,e){this.tasks.update(n=>n.filter(i=>i.id!==e)),this.http.delete(`/api/projects/${t}/threads/${e}`).subscribe({next:()=>this.refresh(),error:n=>{console.error("[GLOBAL-TC] Failed to delete thread:",n),this.refresh()}})}toggleStar(t,e,n){let i=`/api/projects/${t}/threads/${e}/star`;(n?this.http.delete(i):this.http.post(i,{})).subscribe({next:()=>this.refresh(),error:p=>console.error("[GLOBAL-TC] Failed to toggle star:",p)})}markTaskDone(t,e){this.http.post(`/api/projects/${t}/threads/${e}/done`,{}).subscribe({next:()=>this.refresh(),error:n=>console.error("[GLOBAL-TC] Failed to mark task as done:",n)})}markTaskActive(t,e){this.http.delete(`/api/projects/${t}/threads/${e}/done`).subscribe({next:()=>this.refresh(),error:n=>console.error("[GLOBAL-TC] Failed to mark task as active:",n)})}deriveStatus(t){return t.closedByUser?"done":t.pendingInvite?"waiting-you":Date.now()-new Date(t.modifiedDate).getTime()<vt?"in-progress":"paused"}sorted(t){return[...t].sort((e,n)=>{let i=ye[e.status]-ye[n.status];return i!==0?i:e.modifiedDate>n.modifiedDate?-1:1})}static \u0275fac=function(e){return new(e||a)};static \u0275prov=oe({token:a,factory:a.\u0275fac,providedIn:"root"})};var Ce=class a{configApi=f(Ct);dialog=f(L);openUserConfigEditor(){this.configApi.getUserConfig().subscribe({next:t=>{this.dialog.open(xt,{data:{configType:"user",initialContent:JSON.stringify(t,null,2)}}).afterClosed().subscribe(n=>{n&&this.configApi.updateUserConfig(n).subscribe({error:i=>console.error("[CONFIG-STATE] Error saving user config:",i)})})},error:t=>console.error("[CONFIG-STATE] Error loading user config:",t)})}static \u0275fac=function(e){return new(e||a)};static \u0275prov=oe({token:a,factory:a.\u0275fac,providedIn:"root"})};var pn=["layoutContainer"],mn=(a,t)=>t.key,un=(a,t)=>t.name,gn=(a,t)=>t.status,Tt=(a,t)=>t.id;function hn(a,t){if(a&1){let e=x();o(0,"button",32),m("click",function(){g(e);let i=d();return h(i.clearSearch())}),o(1,"mat-icon"),s(2,"close"),r()()}}function _n(a,t){if(a&1){let e=x();o(0,"button",33),m("click",function(){let i=g(e).$implicit,l=d(2);return h(l.setProject(i.name))}),s(1),o(2,"span",34),s(3),r()()}if(a&2){let e=t.$implicit,n=d(2);S("active",n.activeProject()===e.name),c(),P(" ",e.name," "),c(2),b(e.count)}}function fn(a,t){if(a&1){let e=x();o(0,"nav",22)(1,"button",33),m("click",function(){g(e);let i=d();return h(i.setProject(null))}),s(2," All projects "),o(3,"span",34),s(4),r()(),y(5,_n,4,4,"button",35,un),r()}if(a&2){let e=d();c(),S("active",e.activeProject()===null),c(3),b(e.allTasks().length),c(),M(e.projectSummaries())}}function bn(a,t){if(a&1&&(o(0,"span",37),s(1),r()),a&2){let e=d().$implicit,n=d();c(),b(n.filterCounts()[e.key])}}function vn(a,t){if(a&1){let e=x();o(0,"button",36),m("click",function(){let i=g(e).$implicit,l=d();return h(l.setFilter(i.key))}),o(1,"mat-icon",26),s(2),r(),o(3,"span"),s(4),r(),v(5,bn,2,1,"span",37),r()}if(a&2){let e=t.$implicit,n=d();S("active",n.activeFilter()===e.key),ke("aria-selected",n.activeFilter()===e.key),c(2),b(e.icon),c(2),b(e.label),c(),C(n.filterCounts()[e.key]>0?5:-1)}}function Cn(a,t){a&1&&(o(0,"div",29),T(1,"mat-spinner",38),o(2,"p"),s(3,"Loading tasks from all projects\u2026"),r()())}function xn(a,t){a&1&&(o(0,"div",30)(1,"mat-icon",39),s(2,"hub"),r(),o(3,"p"),s(4,"No tasks found."),r()())}function kn(a,t){if(a&1){let e=x();o(0,"app-task-card",45),m("stopRequested",function(i){let l=g(e).$implicit,p=d(3);return h(p.onStopRequested(i,l.projectId))})("deleteRequested",function(i){let l=g(e).$implicit,p=d(3);return h(p.onDeleteRequested(i,l.projectId))})("starToggled",function(i){let l=g(e).$implicit,p=d(3);return h(p.onStarToggled(i,l.projectId))})("closeTaskRequested",function(i){let l=g(e).$implicit,p=d(3);return h(p.onCloseTaskRequested(i,l.projectId))})("markDoneRequested",function(i){let l=g(e).$implicit,p=d(3);return h(p.onMarkDoneRequested(i,l.projectId))})("markActiveRequested",function(i){let l=g(e).$implicit,p=d(3);return h(p.onMarkActiveRequested(i,l.projectId))})("previewRequested",function(i){let l=g(e).$implicit,p=d(3);return h(p.onPreviewRequested(i,l.projectId,l.name))}),r()}if(a&2){let e=t.$implicit,n=d(3);S("is-previewed",n.previewThreadId()===e.id),_("task",e)("projectNameOverride",e.projectId)("showProject",!0)("previewMode",n.previewActive())}}function yn(a,t){if(a&1&&(o(0,"section",40)(1,"h3",41)(2,"mat-icon",42),s(3),r(),s(4),o(5,"span",43),s(6),r()(),o(7,"div",31),y(8,kn,1,6,"app-task-card",44,Tt),r()()),a&2){let e=t.$implicit;c(3),b(e.icon),c(),P(" ",e.label," "),c(2),b(e.tasks.length),c(2),M(e.tasks)}}function Mn(a,t){if(a&1&&y(0,yn,10,3,"section",40,gn),a&2){let e=d();M(e.taskGroups())}}function Sn(a,t){if(a&1){let e=x();o(0,"app-task-card",45),m("stopRequested",function(i){let l=g(e).$implicit,p=d(2);return h(p.onStopRequested(i,l.projectId))})("deleteRequested",function(i){let l=g(e).$implicit,p=d(2);return h(p.onDeleteRequested(i,l.projectId))})("starToggled",function(i){let l=g(e).$implicit,p=d(2);return h(p.onStarToggled(i,l.projectId))})("closeTaskRequested",function(i){let l=g(e).$implicit,p=d(2);return h(p.onCloseTaskRequested(i,l.projectId))})("markDoneRequested",function(i){let l=g(e).$implicit,p=d(2);return h(p.onMarkDoneRequested(i,l.projectId))})("markActiveRequested",function(i){let l=g(e).$implicit,p=d(2);return h(p.onMarkActiveRequested(i,l.projectId))})("previewRequested",function(i){let l=g(e).$implicit,p=d(2);return h(p.onPreviewRequested(i,l.projectId,l.name))}),r()}if(a&2){let e=t.$implicit,n=d(2);S("is-previewed",n.previewThreadId()===e.id),_("task",e)("projectNameOverride",e.projectId)("showProject",!0)("previewMode",n.previewActive())}}function Tn(a,t){if(a&1&&(o(0,"div",31),y(1,Sn,1,6,"app-task-card",44,Tt),r()),a&2){let e=d();c(),M(e.displayedTasks())}}function wn(a,t){if(a&1){let e=x();o(0,"div",46),m("mousedown",function(i){g(e);let l=d();return h(l.onResizerMousedown(i))}),r(),o(1,"div",47)(2,"header",48)(3,"span",49),s(4),r(),o(5,"div",50)(6,"button",51),m("click",function(){g(e);let i=d();return h(i.navigateToThread())}),o(7,"mat-icon"),s(8,"open_in_new"),r()(),o(9,"button",52),m("click",function(){g(e);let i=d();return h(i.closePreview())}),o(10,"mat-icon"),s(11,"close"),r()()()(),o(12,"div",53),T(13,"app-thread",54),r()()}if(a&2){let e=d();c(),Fe("width",e.previewPanelWidthPercent(),"%"),c(3),b(e.previewTaskName()||"Task"),c(9),_("projectName",e.previewProjectId())("threadId",e.previewThreadId())}}var Pn=20,Dn=70,jn=[{status:"waiting-you",label:"Waiting for you",icon:"mark_unread_chat_alt"},{status:"in-progress",label:"In progress",icon:"pending"},{status:"paused",label:"Paused",icon:"pause_circle"},{status:"error",label:"Error",icon:"error"},{status:"done",label:"Done",icon:"check_circle"}],On=[{key:"all",label:"All",icon:"grid_view"},{key:"waiting-you",label:"Waiting for you",icon:"mark_unread_chat_alt"},{key:"in-progress",label:"In progress",icon:"pending"},{key:"paused",label:"Paused",icon:"pause_circle"},{key:"done",label:"Done",icon:"check_circle"}],St=class a{globalTaskService=f(ve);destroyRef=f(Ne);dialog=f(L);router=f(Re);configState=f(Ce);userService=f(Qe);preferences=f(Ue);projectState=f(ae);threadState=f(We);breakpointObserver=f(Le);username=Q(this.userService.username$,{initialValue:null});isDesktop=Q(this.breakpointObserver.observe("(min-width: 1280px)").pipe(je(t=>t.matches)),{initialValue:!1});previewEnabled=Q(this.preferences.missionPreviewEnabled$,{initialValue:!1});previewActive=k(()=>this.previewEnabled()&&this.isDesktop());previewThreadId=u(null);previewProjectId=u(null);previewTaskName=u(null);previewPanelWidthPercent=u(this.preferences.getMissionPreviewPanelWidth());isDraggingResizer=!1;dragStartX=0;dragStartWidth=0;containerWidth=0;layoutContainerRef;globalEventSource=null;filters=On;activeFilter=u("all");starredOnly=u(!1);activeProject=u(null);searchQuery=u("");isLoading=this.globalTaskService.isLoading;allTasks=this.globalTaskService.tasks;projectSummaries=k(()=>{let t=this.allTasks(),e=new Map;for(let n of t)e.set(n.projectId,(e.get(n.projectId)??0)+1);return[...e.entries()].map(([n,i])=>({name:n,count:i})).sort((n,i)=>n.name.localeCompare(i.name))});filteredTasks=k(()=>{let t=this.allTasks(),e=this.activeProject();e&&(t=t.filter(l=>l.projectId===e));let n=this.username();this.starredOnly()&&n&&(t=t.filter(l=>l.starring.includes(n)));let i=this.activeFilter();return i!=="all"&&(t=t.filter(l=>l.status===i)),t});filterCounts=k(()=>{let t=this.allTasks(),e=this.activeProject();e&&(t=t.filter(i=>i.projectId===e));let n=this.username();return this.starredOnly()&&n&&(t=t.filter(i=>i.starring.includes(n))),{all:t.length,"waiting-you":t.filter(i=>i.status==="waiting-you").length,"in-progress":t.filter(i=>i.status==="in-progress").length,done:t.filter(i=>i.status==="done").length,paused:t.filter(i=>i.status==="paused").length,error:t.filter(i=>i.status==="error").length}});displayedTasks=k(()=>{let t=this.searchQuery().toLowerCase().trim(),e=this.sortedFilteredTasks();return t?e.filter(n=>(n.name||"").toLowerCase().includes(t)||(n.summary||"").toLowerCase().includes(t)):e});taskGroups=k(()=>{let t=this.displayedTasks();return jn.map(e=>G(F({},e),{tasks:t.filter(n=>n.status===e.status)})).filter(e=>e.tasks.length>0)});sortedFilteredTasks=k(()=>{let t=this.filteredTasks(),e={"waiting-you":0,"in-progress":1,paused:2,error:3,done:4};return[...t].sort((n,i)=>(e[n.status]??99)-(e[i.status]??99))});constructor(){this.destroyRef.onDestroy(()=>this.disconnectGlobalSse())}ngOnInit(){this.globalTaskService.refresh(),this.connectGlobalSse(),this.userService.fetchCurrentUser().pipe(Be(this.destroyRef)).subscribe({error:t=>console.warn("[GTC] Could not fetch user:",t)})}setFilter(t){this.activeFilter.set(t)}toggleStarredFilter(){this.starredOnly.update(t=>!t)}setProject(t){this.activeProject.set(t),this.activeFilter.set("all")}onSearchInput(t){this.searchQuery.set(t.target.value)}clearSearch(){this.searchQuery.set("")}refresh(){this.globalTaskService.refresh()}openPreferences(){this.dialog.open(ft,{width:"400px"})}openTokenUsage(){this.router.navigate(["/token-usage"])}openUserConfig(){this.configState.openUserConfigEditor()}openQuickSchedulerDialog(){this.dialog.open(R,{width:"480px",disableClose:!1})}openGlobalSchedulersDialog(){this.dialog.open(be,{width:"600px",maxHeight:"80vh"})}openNewTaskDialog(){this.dialog.open(fe,{width:"500px",disableClose:!1}).afterClosed().subscribe(e=>{e&&(e.navigate?this.router.navigate(["project",e.projectId]):(setTimeout(()=>this.globalTaskService.refresh(),300),setTimeout(()=>this.globalTaskService.refresh(),1500)))})}onStopRequested(t,e){this.globalTaskService.stopThread(e,t)}onDeleteRequested(t,e){this.globalTaskService.deleteThread(e,t)}onStarToggled(t,e){let n=this.allTasks().find(p=>p.id===t);if(!n)return;let i=this.username(),l=!!i&&n.starring.includes(i);this.globalTaskService.toggleStar(e,t,l)}onCloseTaskRequested(t,e){let i=this.allTasks().find(p=>p.id===t)?.worktreeProject??e;this.dialog.open(_t,{width:"420px",data:{title:"Close task",message:`This will stop the agent, delete the thread and remove the worktree project "${i}" from disk. This cannot be undone.`,confirmLabel:"Close task",cancelLabel:"Cancel"}}).afterClosed().subscribe(p=>{p&&this.globalTaskService.closeTask(e,t)})}onMarkDoneRequested(t,e){this.globalTaskService.markTaskDone(e,t)}onMarkActiveRequested(t,e){this.globalTaskService.markTaskActive(e,t)}onPreviewRequested(t,e,n){this.previewThreadId()===t?(this.previewThreadId.set(null),this.previewProjectId.set(null),this.previewTaskName.set(null)):(this.projectState.selectProject(e),this.threadState.selectThread(t),this.previewProjectId.set(e),this.previewThreadId.set(t),this.previewTaskName.set(n))}closePreview(){this.previewThreadId.set(null),this.previewProjectId.set(null),this.previewTaskName.set(null)}navigateToThread(){let t=this.previewThreadId(),e=this.previewProjectId();!t||!e||this.router.navigate(["project",e,"thread",t])}onResizerMousedown(t){t.preventDefault(),this.isDraggingResizer=!0,this.dragStartX=t.clientX,this.dragStartWidth=this.previewPanelWidthPercent(),this.containerWidth=this.layoutContainerRef?.nativeElement.offsetWidth??window.innerWidth}onDocumentMousemove(t){if(!this.isDraggingResizer)return;let n=(this.dragStartX-t.clientX)/this.containerWidth*100,i=Math.min(Dn,Math.max(Pn,this.dragStartWidth+n));this.previewPanelWidthPercent.set(i)}onDocumentMouseup(){this.isDraggingResizer&&(this.isDraggingResizer=!1,this.preferences.setMissionPreviewPanelWidth(this.previewPanelWidthPercent()))}connectGlobalSse(t=5e3){this.disconnectGlobalSse();let e=new EventSource("/api/event-stream");this.globalEventSource=e,e.onmessage=n=>{try{let i=JSON.parse(n.data),l=dt(i);if(!l)return;let p=l.threadId;if(!p)return;l instanceof at||l instanceof lt?this.globalTaskService.applyStatusEvent(p,"invite"):l instanceof st?this.globalTaskService.applyStatusEvent(p,"thinking"):l instanceof ct&&this.globalTaskService.refresh()}catch(i){}},e.onerror=()=>{e.readyState===EventSource.CLOSED&&(this.globalEventSource=null,setTimeout(()=>{this.globalEventSource||this.connectGlobalSse(Math.min(t*2,6e4))},t))}}disconnectGlobalSse(){this.globalEventSource&&(this.globalEventSource.close(),this.globalEventSource=null)}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=D({type:a,selectors:[["app-global-task-control"]],viewQuery:function(e,n){if(e&1&&Ae(pn,5),e&2){let i;Ie(i=Ve())&&(n.layoutContainerRef=i.first)}},hostBindings:function(e,n){e&1&&m("mousemove",function(l){return n.onDocumentMousemove(l)},xe)("mouseup",function(){return n.onDocumentMouseup()},xe)},decls:85,vars:11,consts:[["layoutContainer",""],["schedulerMenu","matMenu"],["controlCenterMenu","matMenu"],[1,"gtc"],[1,"gtc-toolbar"],[1,"gtc-toolbar-left"],[1,"gtc-logo-icon"],[1,"gtc-title"],["appearance","fill","subscriptSizing","dynamic",1,"gtc-search"],["matPrefix",""],["matInput","","type","search","placeholder","Filter tasks\u2026","autocomplete","off",3,"input","keydown.escape","value"],["matSuffix","","mat-icon-button","","aria-label","Clear"],[1,"gtc-toolbar-actions"],["mat-icon-button","","matTooltip","Schedulers","aria-label","Schedulers",3,"matMenuTriggerFor"],["mat-menu-item","",3,"click"],["mat-icon-button","","matTooltip","Control Center","aria-label","Control Center",3,"matMenuTriggerFor"],["mat-menu-item","","href","https://github.com/whoz-oss/coday","target","_blank","rel","noopener noreferrer"],["mat-icon-button","","matTooltip","Refresh all tasks","aria-label","Refresh tasks",3,"click","disabled"],["mat-stroked-button","","routerLink","/projects","aria-label","Manage projects","matTooltip","Manage projects"],[1,"btn-label"],["mat-flat-button","","aria-label","New task","matTooltip","New Task",1,"gtc-new-btn",3,"click"],[1,"gtc-filter-bar"],["aria-label","Filter by project",1,"gtc-project-filters"],["role","tablist","aria-label","Filter by status",1,"gtc-filters"],["role","tab",1,"filter-chip",3,"active"],["role","switch","aria-label","Show starred tasks only",1,"filter-chip","starred-filter",3,"click"],[1,"filter-icon"],[1,"gtc-body"],[1,"gtc-content"],[1,"gtc-loading"],[1,"gtc-empty"],[1,"gtc-grid"],["matSuffix","","mat-icon-button","","aria-label","Clear",3,"click"],[1,"project-chip",3,"click"],[1,"chip-count"],[1,"project-chip",3,"active"],["role","tab",1,"filter-chip",3,"click"],[1,"filter-badge"],["diameter","36"],[1,"empty-icon"],[1,"gtc-group"],[1,"gtc-group-title"],[1,"group-icon"],[1,"group-count"],[3,"task","projectNameOverride","showProject","previewMode","is-previewed"],[3,"stopRequested","deleteRequested","starToggled","closeTaskRequested","markDoneRequested","markActiveRequested","previewRequested","task","projectNameOverride","showProject","previewMode"],["matTooltip","Drag to resize","aria-hidden","true",1,"gtc-resizer",3,"mousedown"],[1,"gtc-preview-pane"],[1,"gtc-preview-header"],[1,"gtc-preview-title"],[1,"gtc-preview-actions"],["matTooltip","Open full view","aria-label","Open thread in full view","type","button",1,"preview-action-btn",3,"click"],["matTooltip","Close panel","aria-label","Close preview panel","type","button",1,"preview-action-btn",3,"click"],[1,"gtc-preview-body","thread-preview-host"],[3,"projectName","threadId"]],template:function(e,n){if(e&1&&(o(0,"div",3,0)(2,"header",4)(3,"div",5)(4,"mat-icon",6),s(5,"hub"),r(),o(6,"h1",7),s(7,"Global Task Control"),r()(),o(8,"mat-form-field",8)(9,"mat-icon",9),s(10,"search"),r(),o(11,"input",10),m("input",function(l){return n.onSearchInput(l)})("keydown.escape",function(){return n.clearSearch()}),r(),v(12,hn,3,0,"button",11),r(),o(13,"div",12)(14,"button",13)(15,"mat-icon"),s(16,"schedule"),r()(),o(17,"mat-menu",null,1)(19,"button",14),m("click",function(){return n.openGlobalSchedulersDialog()}),o(20,"mat-icon"),s(21,"list"),r(),o(22,"span"),s(23,"View schedulers"),r()(),o(24,"button",14),m("click",function(){return n.openQuickSchedulerDialog()}),o(25,"mat-icon"),s(26,"add"),r(),o(27,"span"),s(28,"New scheduler"),r()()(),o(29,"button",15)(30,"mat-icon"),s(31,"hub"),r()(),o(32,"mat-menu",null,2)(34,"button",14),m("click",function(){return n.openPreferences()}),o(35,"mat-icon"),s(36,"tune"),r(),o(37,"span"),s(38,"Preferences"),r()(),o(39,"button",14),m("click",function(){return n.openTokenUsage()}),o(40,"mat-icon"),s(41,"data_usage"),r(),o(42,"span"),s(43,"Token Usage"),r()(),o(44,"button",14),m("click",function(){return n.openUserConfig()}),o(45,"mat-icon"),s(46,"manage_accounts"),r(),o(47,"span"),s(48,"User Configuration"),r()(),T(49,"mat-divider"),o(50,"a",16)(51,"mat-icon"),s(52,"code"),r(),o(53,"span"),s(54,"Contribute on GitHub"),r()()(),o(55,"button",17),m("click",function(){return n.refresh()}),o(56,"mat-icon"),s(57,"refresh"),r()(),o(58,"button",18)(59,"mat-icon"),s(60,"settings"),r(),o(61,"span",19),s(62,"Manage projects"),r()(),o(63,"button",20),m("click",function(){return n.openNewTaskDialog()}),o(64,"mat-icon"),s(65,"rocket_launch"),r(),o(66,"span",19),s(67,"New Task"),r()()()(),o(68,"div",21),v(69,fn,7,3,"nav",22),o(70,"nav",23),y(71,vn,6,6,"button",24,mn),o(73,"button",25),m("click",function(){return n.toggleStarredFilter()}),o(74,"mat-icon",26),s(75,"star"),r(),o(76,"span"),s(77,"Starred"),r()()()(),o(78,"div",27)(79,"main",28),v(80,Cn,4,0,"div",29)(81,xn,5,0,"div",30)(82,Mn,2,0)(83,Tn,3,0,"div",31),r(),v(84,wn,14,5),r()()),e&2){let i=w(18),l=w(33);c(11),_("value",n.searchQuery()),c(),C(n.searchQuery()?12:-1),c(2),_("matMenuTriggerFor",i),c(15),_("matMenuTriggerFor",l),c(26),_("disabled",n.isLoading()),c(14),C(n.projectSummaries().length>1?69:-1),c(2),M(n.filters),c(2),S("active",n.starredOnly()),ke("aria-checked",n.starredOnly()),c(7),C(n.isLoading()?80:n.displayedTasks().length===0?81:n.activeFilter()==="all"&&!n.searchQuery()?82:83),c(4),C(n.previewActive()&&n.previewThreadId()&&n.previewProjectId()?84:-1)}},dependencies:[pt,bt,A,N,E,O,re,se,le,V,I,Ke,Xe,He,Je,Ze,Ye,J,X,et,H,Z,Y,$e],styles:[".glass-panel[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.glass-interactive[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-interactive[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-interactive[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-card[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);border-radius:20px;padding:1.5rem}.glass-button[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-button[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-button[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-button[_ngcontent-%COMP%]{border-radius:12px;padding:.75rem 1.5rem;font-weight:600;cursor:pointer}.glass-button[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed;transform:none}.glass-button[_ngcontent-%COMP%]:disabled:hover{transform:none}.smooth-theme-transition[_ngcontent-%COMP%]{transition:background .3s ease,color .3s ease,border-color .3s ease,box-shadow .3s ease}[_nghost-%COMP%]{display:block;width:100%;height:100%;overflow:hidden}.gtc[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden}.gtc-toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:0 .75rem;height:56px;flex-shrink:0;border-bottom:1px solid var(--color-border, rgba(0, 0, 0, .1));box-sizing:border-box}.gtc-toolbar-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;flex-shrink:0}.gtc-logo-icon[_ngcontent-%COMP%]{font-size:1.25rem;width:1.25rem;height:1.25rem;color:var(--color-primary)}.gtc-title[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:600;color:var(--color-text);white-space:nowrap}.gtc-search[_ngcontent-%COMP%]{margin-left:auto;flex:0 1 240px;min-width:80px;--mat-form-field-container-height: 36px;--mat-form-field-container-vertical-padding: 6px;font-size:.875rem;--mdc-filled-text-field-container-color: transparent;--mdc-filled-text-field-hover-container-color: transparent;--mdc-filled-text-field-focus-container-color: transparent;--mdc-filled-text-field-active-indicator-color: transparent;--mdc-filled-text-field-hover-active-indicator-color: transparent;--mdc-filled-text-field-focus-active-indicator-color: transparent;--mdc-filled-text-field-active-indicator-height: 0}.gtc-toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;flex-shrink:0}.gtc-new-btn[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-radius:12px;font-weight:600;height:36px;padding:0 1rem}.gtc-new-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.1rem;width:1.1rem;height:1.1rem}@media(max-width:600px){.gtc-toolbar[_ngcontent-%COMP%]{flex-wrap:wrap;height:auto;min-height:48px;padding:.5rem .75rem;gap:.375rem}.gtc-title[_ngcontent-%COMP%]{font-size:.875rem}.gtc-search[_ngcontent-%COMP%]{order:3;flex:1 1 100%;min-width:0;margin-left:0}.gtc-toolbar-actions[_ngcontent-%COMP%]{margin-left:auto}.btn-label[_ngcontent-%COMP%]{display:none}.gtc-toolbar-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:not(mat-icon-button):not([mat-icon-button]){--mdc-text-button-container-height: 36px;--mdc-filled-button-container-height: 36px;--mdc-outlined-button-container-height: 36px;min-width:36px;width:36px;height:36px;padding:0;border-radius:50%!important}.gtc-toolbar-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:not(mat-icon-button):not([mat-icon-button]) .mat-mdc-button-touch-target[_ngcontent-%COMP%]{width:36px;height:36px}.gtc-toolbar-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:not(mat-icon-button):not([mat-icon-button]) mat-icon[_ngcontent-%COMP%]{margin:0!important}}.gtc-filter-bar[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem;padding:.5rem .75rem;flex-shrink:0;border-bottom:1px solid var(--color-border, rgba(0, 0, 0, .08))}.gtc-project-filters[_ngcontent-%COMP%]{display:flex;gap:.375rem;flex-wrap:wrap}.project-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;padding:.2rem .65rem;border-radius:100px;font-size:.75rem;font-weight:500;color:var(--color-text-secondary);background:transparent;border:1px solid var(--color-border);cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease;white-space:nowrap}.project-chip[_ngcontent-%COMP%] .chip-count[_ngcontent-%COMP%]{background:var(--color-bg-hover);border-radius:100px;padding:0 .3rem;font-size:.68rem;font-weight:700;min-width:16px;text-align:center;line-height:16px}.project-chip.active[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-color:var(--color-primary)}.project-chip.active[_ngcontent-%COMP%] .chip-count[_ngcontent-%COMP%]{background:#ffffff40;color:var(--color-text-inverse)}.project-chip[_ngcontent-%COMP%]:hover:not(.active){background:var(--color-bg-hover);color:var(--color-text)}.gtc-filters[_ngcontent-%COMP%]{display:flex;gap:.375rem;flex-wrap:wrap}.filter-chip[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);display:flex;align-items:center;gap:.375rem;padding:.3rem .75rem;border-radius:100px;font-size:.8rem;font-weight:500;color:var(--color-text-secondary);cursor:pointer;border:1px solid var(--color-border);transition:background .15s ease,color .15s ease,border-color .15s ease;white-space:nowrap}.filter-chip[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{font-size:.9rem;width:.9rem;height:.9rem}.filter-chip[_ngcontent-%COMP%] .filter-badge[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-radius:100px;padding:0 .375rem;font-size:.7rem;font-weight:700;min-width:18px;text-align:center;line-height:18px}.filter-chip.active[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-color:var(--color-primary)}.filter-chip.active[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{color:var(--color-text-inverse)}.filter-chip.active[_ngcontent-%COMP%] .filter-badge[_ngcontent-%COMP%]{background:#ffffff40;color:var(--color-text-inverse)}.filter-chip[_ngcontent-%COMP%]:hover:not(.active){background:var(--color-bg-hover);color:var(--color-text)}.starred-filter.active[_ngcontent-%COMP%]{background:#f5a62326;border-color:#f5a623;color:#f5a623}.starred-filter.active[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{color:#f5a623}.gtc-body[_ngcontent-%COMP%]{display:flex;flex-direction:row;flex:1;overflow:hidden;min-height:0}.gtc-content[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:1rem 1rem 2rem;min-width:0}.gtc-resizer[_ngcontent-%COMP%]{width:6px;flex-shrink:0;cursor:col-resize;background:transparent;border-left:1px solid var(--color-border);border-right:1px solid var(--color-border);transition:background .15s ease}.gtc-resizer[_ngcontent-%COMP%]:hover, .gtc-resizer[_ngcontent-%COMP%]:active{background:var(--color-primary);opacity:.4}.gtc-preview-pane[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden;flex-shrink:0;min-width:280px;border-left:1px solid var(--color-border);background:var(--glass-bg)}.gtc-preview-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.625rem .75rem .625rem 1rem;border-bottom:1px solid var(--color-border);flex-shrink:0}.gtc-preview-title[_ngcontent-%COMP%]{font-size:.875rem;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.gtc-preview-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.125rem;flex-shrink:0}.preview-action-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:6px;background:transparent;cursor:pointer;transition:background .15s ease}.preview-action-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px;line-height:18px;vertical-align:middle;color:var(--color-text-secondary)}.preview-action-btn[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover)}.preview-action-btn[_ngcontent-%COMP%]:hover mat-icon[_ngcontent-%COMP%]{color:var(--color-text)}.gtc-preview-body[_ngcontent-%COMP%]{flex:1;overflow:hidden;display:flex;flex-direction:column;min-height:0}.gtc-preview-body[_ngcontent-%COMP%] app-thread[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0} app-task-card.is-previewed .task-card{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary)}.gtc-group[_ngcontent-%COMP%]{margin-bottom:1.25rem}.gtc-group[_ngcontent-%COMP%]:last-child{margin-bottom:0}.gtc-group-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin:0 0 .75rem;font-size:.8rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.gtc-group-title[_ngcontent-%COMP%] .group-icon[_ngcontent-%COMP%]{font-size:.95rem;width:.95rem;height:.95rem}.gtc-group-title[_ngcontent-%COMP%] .group-count[_ngcontent-%COMP%]{background:var(--color-bg-hover);border-radius:100px;padding:0 .375rem;font-size:.7rem;font-weight:700;min-width:16px;text-align:center;line-height:16px}.gtc-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}@media(max-width:600px){.gtc-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.gtc-loading[_ngcontent-%COMP%], .gtc-empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:3rem;color:var(--color-text-secondary);text-align:center}.gtc-loading[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .gtc-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.9rem}.empty-icon[_ngcontent-%COMP%]{font-size:2.5rem;width:2.5rem;height:2.5rem;opacity:.3}"],changeDetection:0})};export{St as GlobalTaskControlComponent};
@@ -0,0 +1 @@
1
+ import{a}from"./chunk-TXJ6RSOC.js";import"./chunk-4KRYEFIY.js";import"./chunk-FBLKA2VP.js";import"./chunk-OUCV2HPU.js";import"./chunk-4GVABYH4.js";import"./chunk-V363EHJE.js";import"./chunk-B4RKRLIY.js";export{a as LayoutComponent};
@@ -0,0 +1 @@
1
+ import{p as h,v as w}from"./chunk-JEDRTGW5.js";import{Bb as _,Db as p,Fb as r,Ka as d,Tb as m,Ub as u,Vb as x,Wa as C,ga as s,ha as c,lb as y,mb as M,nc as g,oc as b,rb as v,sb as t,ta as f,tb as n}from"./chunk-B4RKRLIY.js";function k(i,a){if(i&1){let e=_();t(0,"span",7),m(1,"Delete?"),n(),t(2,"ds-icon-button",8),p("action",function(){s(e);let l=r();return c(l.onDeleteConfirmed())}),n(),t(3,"ds-icon-button",9),p("action",function(){s(e);let l=r();return c(l.onDeleteCancelled())}),n()}}function A(i,a){if(i&1){let e=_();t(0,"ds-kebab-menu",10),p("itemSelected",function(l){s(e);let D=r();return c(D.onMenuAction(l))}),n()}if(i&2){let e=r();v("items",e.menuItems)}}var I=class i{model=b.required();namespaceId=b(void 0);deleteRequested=g();editRequested=g();pendingDelete=f(!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(a){switch(a){case"edit":this.editRequested.emit(this.model());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||i)};static \u0275cmp=C({type:i,selectors:[["agentos-ai-model-item"]],inputs:{model:[1,"model"],namespaceId:[1,"namespaceId"]},outputs:{deleteRequested:"deleteRequested",editRequested:"editRequested"},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,o){e&1&&(t(0,"div",0)(1,"div",1)(2,"span",2),m(3),n(),t(4,"span",3),m(5),n(),t(6,"span",4)(7,"span"),m(8),n()()(),t(9,"div",5),y(10,k,4,0)(11,A,1,1,"ds-kebab-menu",6),n()()),e&2&&(d(3),u(o.displayTitle),d(2),u(o.model().apiModelName),d(3),x("priority: ",o.model().priority),d(2),M(o.pendingDelete()?10:11))},dependencies:[w,h],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})};export{I as a};
@@ -0,0 +1 @@
1
+ import{a as se}from"./chunk-3BV5H657.js";import{b as le}from"./chunk-4KRYEFIY.js";import{a as ee,b as te,c as ne,d as oe}from"./chunk-4GVABYH4.js";import{o as re,p as S,u as ie}from"./chunk-JEDRTGW5.js";import{c as ae}from"./chunk-V363EHJE.js";import{A as F,Ab as M,B as A,Bb as w,Db as p,Fb as l,Gc as Z,Jb as j,Ka as c,Kb as B,Lb as $,Pb as T,Qb as H,Rb as E,Tb as P,Ub as G,Wa as b,Xb as J,Yb as K,Zb as U,a as k,ab as I,b as N,bc as X,ca as x,cc as Y,ga as C,ha as g,hc as q,lb as h,m as V,mb as f,oa as y,pb as L,qb as Q,rb as _,sb as s,t as D,ta as W,tb as d,ub as R,va as z}from"./chunk-B4RKRLIY.js";var me=["caseItemTpl"],_e=n=>({node:n,depth:0}),ue=(n,e)=>({node:n,depth:e}),Ce=(n,e)=>e.id;function ge(n,e){n&1&&M(0)}function he(n,e){if(n&1&&I(0,ge,1,0,"ng-container",4),n&2){let t=e.$implicit;l();let o=T(5);_("ngTemplateOutlet",o)("ngTemplateOutletContext",X(2,_e,t))}}function fe(n,e){if(n&1){let t=w();s(0,"button",10),p("click",function(a){C(t);let i=l().node,v=l();return g(v.toggleExpand(a,i.id))}),s(1,"span",11),P(2,"\u203A"),d()()}if(n&2){let t=l().node,o=l();_("title",o.isExpanded(t.id)?"Collapse":"Expand"),c(),E("case-tree-node__toggle-icon--open",o.isExpanded(t.id))}}function we(n,e){n&1&&M(0)}function ve(n,e){if(n&1&&I(0,we,1,0,"ng-container",4),n&2){let t=e.$implicit,o=l(2).depth;l();let a=T(5);_("ngTemplateOutlet",a)("ngTemplateOutletContext",Y(2,ue,t,o+1))}}function xe(n,e){if(n&1&&L(0,ve,1,5,"ng-container",null,Ce),n&2){let t=l().node;Q(t.children)}}function ye(n,e){if(n&1){let t=w();s(0,"div",5)(1,"button",6),p("click",function(){let a=C(t).node,i=l();return g(i.onItemSelected(a.id))}),s(2,"span",7),h(3,fe,3,3,"button",8),d(),s(4,"span",9),P(5),d()(),h(6,xe,2,0),d()}if(n&2){let t=e.node,o=e.depth,a=l();H("--depth",o),c(),E("case-tree-node__row--active",t.id===a.activeCaseId),c(2),f(t.children.length?3:-1),c(2),G(t.name),c(),f(a.isExpanded(t.id)&&t.children.length?6:-1)}}var O=class n{cases=[];activeCaseId=null;caseSelected=new y;createRequested=new y;closeRequested=new y;caseItemTpl;rootItems=[];expandedIds=new Set;ngOnChanges(e){e.cases&&(this.rootItems=be(this.cases)),(e.cases||e.activeCaseId)&&this.autoExpandAncestors()}autoExpandAncestors(){if(!this.activeCaseId)return;let e=(t,o)=>{for(let a of t){if(a.id===o)return!0;if(a.children.length&&e(a.children,o))return this.expandedIds.add(a.id),!0}return!1};e(this.rootItems,this.activeCaseId)}isExpanded(e){return this.expandedIds.has(e)}toggleExpand(e,t){e.stopPropagation(),this.expandedIds.has(t)?this.expandedIds.delete(t):this.expandedIds.add(t)}onItemSelected(e){this.caseSelected.emit(e)}onCreateRequested(){this.createRequested.emit()}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=b({type:n,selectors:[["agentos-case-drawer"]],viewQuery:function(t,o){if(t&1&&j(me,7),t&2){let a;B(a=$())&&(o.caseItemTpl=a.first)}},inputs:{cases:"cases",activeCaseId:"activeCaseId"},outputs:{caseSelected:"caseSelected",createRequested:"createRequested",closeRequested:"closeRequested"},features:[z],decls:6,vars:3,consts:[["caseItemTpl",""],["caseRowTpl",""],["title","Cases","emptyMessage","No cases yet. Start one below.","searchPlaceholder","Filter cases\u2026","cardMinWidth","220px","contentMaxWidth","100%",3,"itemSelected","createRequested","items","itemTemplate","showCreate"],["toolbar-start","","icon","chevron_left","variant","default","title","Close drawer",3,"action"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"case-tree-node"],["type","button",1,"case-tree-node__row",3,"click"],[1,"case-tree-node__expand-slot"],["type","button",1,"case-tree-node__toggle",3,"title"],[1,"case-tree-node__name"],["type","button",1,"case-tree-node__toggle",3,"click","title"],[1,"case-tree-node__toggle-icon"]],template:function(t,o){if(t&1&&(s(0,"ds-entity-list",2),p("itemSelected",function(i){return o.onItemSelected(i)})("createRequested",function(){return o.onCreateRequested()}),s(1,"ds-icon-button",3),p("action",function(){return o.closeRequested.emit()}),d()(),I(2,he,1,4,"ng-template",null,0,q)(4,ye,7,7,"ng-template",null,1,q)),t&2){let a=T(3);_("items",o.rootItems)("itemTemplate",a)("showCreate",!0)}},dependencies:[ie,S,Z],styles:['[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%}.case-tree-node[_ngcontent-%COMP%]{width:100%}.case-tree-node__row[_ngcontent-%COMP%]{display:flex;align-items:center;width:100%;padding:.375rem .5rem;padding-left:calc(.5rem + var(--depth, 0) * 1.25rem);border:none;background:transparent;cursor:pointer;text-align:left;font-family:inherit;font-size:.875rem;color:var(--color-text, #1d1d1f);border-radius:6px;gap:.375rem;transition:background .12s ease;box-sizing:border-box}.case-tree-node__row[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover, rgba(0, 0, 0, .05))}.case-tree-node__row--active[_ngcontent-%COMP%]{background:var(--color-primary, #007aff);color:var(--color-text-inverse, #fff)}.case-tree-node__row--active[_ngcontent-%COMP%]:hover{background:var(--color-primary-hover, #0051d5)}.case-tree-node__expand-slot[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:1rem;flex-shrink:0}.case-tree-node__toggle[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:1rem;height:1rem;padding:0;border:none;background:transparent;cursor:pointer;color:inherit;border-radius:3px;transition:background .1s ease}.case-tree-node__toggle[_ngcontent-%COMP%]:hover{background:#00000014}.case-tree-node__toggle-icon[_ngcontent-%COMP%]{display:inline-block;font-size:1.1rem;line-height:1;transition:transform .15s ease;transform:rotate(0)}.case-tree-node__toggle-icon--open[_ngcontent-%COMP%]{transform:rotate(90deg)}.case-tree-node__name[_ngcontent-%COMP%]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;font-family:var(--font-mono, ui-monospace, "SF Mono", monospace);font-size:.8rem}'],changeDetection:0})};function be(n){let e=new Set(n.map(r=>r.id??"")),t=new Map(n.map(r=>[r.id??"",r.created??""])),o=r=>({id:r.id??"",name:r.title??r.id??"\u2014",children:[]}),a=new Map;for(let r of n)a.set(r.id??"",o(r));let i=[];for(let r of n){let m=a.get(r.id??""),u=r.parentCaseId;u&&e.has(u)?a.get(u).children.push(m):i.push(m)}let v=r=>r.sort((m,u)=>(t.get(u.id)??"")>(t.get(m.id)??"")?1:-1).map(m=>N(k({},m),{children:v(m.children)}));return v(i)}function Ie(n,e){if(n&1){let t=w();s(0,"div",7)(1,"ds-icon-button",8),p("action",function(){C(t);let a=l();return g(a.toggleDrawer())}),d()()}}var ce=class n{router=x(oe);route=x(te);caseState=x(se);namespaceId=this.route.snapshot.params.namespaceId;drawerOpen=W(!0);cases=this.caseState.cases;constructor(){this.caseState.loadCases(this.namespaceId)}activeCaseId=ae(F(V(this.router.url),this.router.events.pipe(A(e=>e instanceof ee),D(e=>e.urlAfterRedirects))).pipe(D(e=>this.extractCaseId(e))),{initialValue:null});extractCaseId(e){return e.match(/\/cases\/([^/?#]+)/)?.[1]??null}toggleDrawer(){this.drawerOpen.update(e=>!e)}onCaseSelected(e){this.router.navigate([e],{relativeTo:this.route})}onCreateRequested(){this.router.navigate(["."],{relativeTo:this.route})}refreshCases(){this.caseState.loadCases(this.namespaceId)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=b({type:n,selectors:[["agentos-case-shell"]],decls:9,vars:4,consts:[[1,"case-shell"],[1,"case-shell__header"],[1,"case-shell__body"],["drawerWidth","400px",3,"openChange","open"],["dsDrawerSide","",1,"case-shell__sidenav"],[3,"caseSelected","createRequested","closeRequested","cases","activeCaseId"],["dsDrawerContent","",1,"case-shell__content"],[1,"case-shell__toggle"],["icon","menu","variant","default","title","Open drawer",3,"action"]],template:function(t,o){t&1&&(s(0,"div",0),R(1,"agentos-header",1),s(2,"div",2)(3,"ds-drawer",3),U("openChange",function(i){return K(o.drawerOpen,i)||(o.drawerOpen=i),i}),s(4,"div",4)(5,"agentos-case-drawer",5),p("caseSelected",function(i){return o.onCaseSelected(i)})("createRequested",function(){return o.onCreateRequested()})("closeRequested",function(){return o.toggleDrawer()}),d()(),s(6,"div",6),h(7,Ie,2,0,"div",7),R(8,"router-outlet"),d()()()()),t&2&&(c(3),J("open",o.drawerOpen),c(2),_("cases",o.cases())("activeCaseId",o.activeCaseId()),c(2),f(o.drawerOpen()?-1:7))},dependencies:[ne,re,O,le,S],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100dvh}.case-shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%}.case-shell__header[_ngcontent-%COMP%]{flex-shrink:0}.case-shell__body[_ngcontent-%COMP%]{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.case-shell__sidenav[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden}.case-shell__content[_ngcontent-%COMP%]{position:relative;flex:1;display:flex;flex-direction:column;height:100%;overflow:hidden}.case-shell__toggle[_ngcontent-%COMP%]{position:absolute;top:.375rem;left:.5rem;z-index:10}"]})};export{O as a,ce as b};