@wascartech/devbot 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/admin/settings-routes.js +2 -1
  2. package/dist/admin/settings-routes.js.map +1 -1
  3. package/dist/devcontainer.js +9 -0
  4. package/dist/devcontainer.js.map +1 -1
  5. package/dist/global-settings-store.js +11 -4
  6. package/dist/global-settings-store.js.map +1 -1
  7. package/dist/migrate.js +395 -30
  8. package/dist/migrate.js.map +1 -1
  9. package/dist/platform/gitealike/base.js +5 -0
  10. package/dist/platform/gitealike/base.js.map +1 -1
  11. package/dist/platform/github/index.js +5 -0
  12. package/dist/platform/github/index.js.map +1 -1
  13. package/dist/platform/gitlab/api.js +7 -1
  14. package/dist/platform/gitlab/api.js.map +1 -1
  15. package/dist/platform/gitlab/index.js +5 -0
  16. package/dist/platform/gitlab/index.js.map +1 -1
  17. package/dist/platform/gitlab/schemas.js +14 -0
  18. package/dist/platform/gitlab/schemas.js.map +1 -1
  19. package/dist/platform/port.js +1 -1
  20. package/dist/platform/port.js.map +1 -1
  21. package/dist/platform/types.js.map +1 -1
  22. package/dist/settings-store.js +28 -4
  23. package/dist/settings-store.js.map +1 -1
  24. package/dist/types/global-settings.js +6 -0
  25. package/dist/types/global-settings.js.map +1 -1
  26. package/dist/types/project-settings.js +1 -0
  27. package/dist/types/project-settings.js.map +1 -1
  28. package/dist/webhook.js +35 -4
  29. package/dist/webhook.js.map +1 -1
  30. package/migrations/0032_confidential_work_items.sql +11 -0
  31. package/package.json +3 -1
  32. package/public/assets/{DashboardSidebarCollapse-rIuzCmVm.js → DashboardSidebarCollapse-CWmehYha.js} +1 -1
  33. package/public/assets/{DashboardToolbar-DFCUqZ4Z.js → DashboardToolbar-DHcR2yAt.js} +1 -1
  34. package/public/assets/{ErrorLogModal.vue_vue_type_script_setup_true_lang-BCyNIf1E.js → ErrorLogModal.vue_vue_type_script_setup_true_lang-B0yvkhY5.js} +1 -1
  35. package/public/assets/{ErrorLogsPage-DyYK2Rop.js → ErrorLogsPage-ClPltTSr.js} +1 -1
  36. package/public/assets/{LogSlideover.vue_vue_type_script_setup_true_lang-33xie7TE.js → LogSlideover.vue_vue_type_script_setup_true_lang-F1i8DRzf.js} +1 -1
  37. package/public/assets/{OverviewPage-CFfa0uwg.js → OverviewPage-DWz8IJ46.js} +1 -1
  38. package/public/assets/{PageGrid-CBROIU87.js → PageGrid-DelloK5f.js} +1 -1
  39. package/public/assets/{PeriodRangePicker.vue_vue_type_script_setup_true_lang-DiFUNem7.js → PeriodRangePicker.vue_vue_type_script_setup_true_lang-YOwfelec.js} +1 -1
  40. package/public/assets/ProjectDetailPage-QEdo9Ytu.js +1 -0
  41. package/public/assets/{ProjectsPage-CFx8-elJ.js → ProjectsPage-BJzRIlvb.js} +1 -1
  42. package/public/assets/{RunDetailSlideover.vue_vue_type_script_setup_true_lang-DopYYmCT.js → RunDetailSlideover.vue_vue_type_script_setup_true_lang-BLDs3UaU.js} +1 -1
  43. package/public/assets/{RunsPage-CRnnXU4P.js → RunsPage-BYlDZjwk.js} +1 -1
  44. package/public/assets/{Select-Bvx32Diz.js → Select-DGVDts9_.js} +1 -1
  45. package/public/assets/{SelectMenu-BjMxc4VB.js → SelectMenu-B6n06FSV.js} +1 -1
  46. package/public/assets/{SettingsPage-Bb6LM3wO.js → SettingsPage-BpLc2GAe.js} +21 -21
  47. package/public/assets/{TimeCell.vue_vue_type_script_setup_true_lang-DW_UB0Fu.js → TimeCell.vue_vue_type_script_setup_true_lang-BNWTJF4u.js} +1 -1
  48. package/public/assets/{UsagePage-BLMDEsv-.js → UsagePage-CSt7StoP.js} +1 -1
  49. package/public/assets/{VolumesPage-CxcLc3L2.js → VolumesPage-Cxav6H5n.js} +1 -1
  50. package/public/assets/WebhookConfigPanel.vue_vue_type_script_setup_true_lang-DQNacZEe.js +1 -0
  51. package/public/assets/{WorkItemCell.vue_vue_type_script_setup_true_lang-BQn6vTjd.js → WorkItemCell.vue_vue_type_script_setup_true_lang-DAJMkNI8.js} +1 -1
  52. package/public/assets/{index-C5RBBrPj.js → index-Cs2OnrL7.js} +2 -2
  53. package/public/assets/{index-BMbMibyb.js → index-RZx6yIXX.js} +1 -1
  54. package/public/assets/{usage-format-jsb31_O8.js → usage-format-RcSEOPCq.js} +1 -1
  55. package/public/assets/{useManagedProjects-8rtjRqVJ.js → useManagedProjects-DnOY5lQq.js} +1 -1
  56. package/public/assets/{useRouteTab-DfwrcMic.js → useRouteTab-B-Vrl8p9.js} +1 -1
  57. package/public/index.html +1 -1
  58. package/public/assets/ProjectDetailPage-CreyvUit.js +0 -1
  59. package/public/assets/WebhookConfigPanel.vue_vue_type_script_setup_true_lang-B2V2GF6b.js +0 -1
@@ -0,0 +1 @@
1
+ import{aa as St,d as Y,B as Ve,H as at,A as Oe,aJ as lt,e as i,h as E,w as T,a as m,u as t,P as ie,D as F,r as M,I as Le,aK as st,o as ye,p as nt,q as ce,x as B,ab as Pe,C as pe,E as de,c as b,K as it,G as xe,j as C,F as O,a6 as $t,a7 as It,af as Vt,M as Ct,aL as Rt,aM as qt,aN as zt,R as Ce,S as Re,T as ot,U as rt,X as D,g as le,a0 as be,y as me,an as ut,l as L,t as A,a1 as we,Z as qe,$ as ze,aO as Mt,V as dt,ae as At,f as g,ao as Tt,aP as Et,O as Ze,W as Ke,aQ as jt,aR as Bt,Q as Xe,aS as Ut,aT as Pt,m as Me,i as ge,s as Ae,b as Q,a8 as Dt,n as Te,N as We,ai as Nt,aI as Ft}from"./index-Cs2OnrL7.js";import{f as ct,E as Ot,b as Lt,g as Kt,w as Wt,V as Ht,u as Gt,a as ke,_ as Jt}from"./SelectMenu-B6n06FSV.js";import{a as Ee}from"./DashboardSidebarCollapse-CWmehYha.js";import{_ as Zt}from"./Select-DGVDts9_.js";function Xt(){const e=St()?.vnode?.scopeId;return e?{[e]:""}:{}}const[Qt,Yt]=Le("RovingFocusGroup");var ea=Y({__name:"RovingFocusGroup",props:{orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!1},currentTabStopId:{type:[String,null],required:!1},defaultCurrentTabStopId:{type:String,required:!1},preventScrollOnEntryFocus:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["entryFocus","update:currentTabStopId"],setup(e,{expose:n,emit:l}){const a=e,c=l,{loop:r,orientation:s,dir:v}=Ve(a),x=at(v),u=Oe(a,"currentTabStopId",c,{defaultValue:a.defaultCurrentTabStopId,passive:a.currentTabStopId===void 0}),d=M(!1),y=M(!1),w=M(0),{getItems:R,CollectionSlot:p}=lt({isProvider:!0});function o($){const U=!y.value;if($.currentTarget&&$.target===$.currentTarget&&U&&!d.value){const N=new CustomEvent(Ot,Lt);if($.currentTarget.dispatchEvent(N),c("entryFocus",N),!N.defaultPrevented){const q=R().map(S=>S.ref).filter(S=>S.dataset.disabled!==""),H=q.find(S=>S.getAttribute("data-active")===""),K=q.find(S=>S.getAttribute("data-highlighted")===""),ee=q.find(S=>S.id===u.value),z=[H,K,ee,...q].filter(Boolean);ct(z,a.preventScrollOnEntryFocus)}}y.value=!1}function V(){setTimeout(()=>{y.value=!1},1)}return n({getItems:R}),Yt({loop:r,dir:x,orientation:s,currentTabStopId:u,onItemFocus:$=>{u.value=$},onItemShiftTab:()=>{d.value=!0},onFocusableItemAdd:()=>{w.value++},onFocusableItemRemove:()=>{w.value--}}),($,U)=>(i(),E(t(p),null,{default:T(()=>[m(t(ie),{tabindex:d.value||w.value===0?-1:0,"data-orientation":t(s),as:$.as,"as-child":$.asChild,dir:t(x),style:{outline:"none"},onMousedown:U[0]||(U[0]=N=>y.value=!0),onMouseup:V,onFocus:o,onBlur:U[1]||(U[1]=N=>d.value=!1)},{default:T(()=>[F($.$slots,"default")]),_:3},8,["tabindex","data-orientation","as","as-child","dir"])]),_:3}))}}),ta=ea,aa=Y({__name:"RovingFocusItem",props:{tabStopId:{type:String,required:!1},focusable:{type:Boolean,required:!1,default:!0},active:{type:Boolean,required:!1},allowShiftKey:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const n=e,l=Qt(),a=st(),c=B(()=>n.tabStopId||a),r=B(()=>l.currentTabStopId.value===c.value),{getItems:s,CollectionItem:v}=lt();ye(()=>{n.focusable&&l.onFocusableItemAdd()}),nt(()=>{n.focusable&&l.onFocusableItemRemove()}),ce(()=>n.focusable,(u,d)=>{u!==d&&(u?l.onFocusableItemAdd():l.onFocusableItemRemove())});function x(u){if(u.key==="Tab"&&u.shiftKey){l.onItemShiftTab();return}if(u.target!==u.currentTarget)return;const d=Kt(u,l.orientation.value,l.dir.value);if(d!==void 0){if(u.metaKey||u.ctrlKey||u.altKey||!n.allowShiftKey&&u.shiftKey)return;u.preventDefault();let y=[...s().map(w=>w.ref).filter(w=>w.dataset.disabled!=="")];if(d==="last")y.reverse();else if(d==="prev"||d==="next"){d==="prev"&&y.reverse();const w=y.indexOf(u.currentTarget);y=l.loop.value?Wt(y,w+1):y.slice(w+1)}Pe(()=>ct(y))}}return(u,d)=>(i(),E(t(v),null,{default:T(()=>[m(t(ie),{tabindex:r.value?0:-1,"data-orientation":t(l).orientation.value,"data-active":u.active?"":void 0,"data-disabled":u.focusable?void 0:"",as:u.as,"as-child":u.asChild,onMousedown:d[0]||(d[0]=y=>{u.focusable?t(l).onItemFocus(c.value):y.preventDefault()}),onFocus:d[1]||(d[1]=y=>t(l).onItemFocus(c.value)),onKeydown:x},{default:T(()=>[F(u.$slots,"default")]),_:3},8,["tabindex","data-orientation","data-active","data-disabled","as","as-child"])]),_:3}))}}),la=aa,sa=Y({__name:"Label",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"label"}},setup(e){const n=e;return pe(),(l,a)=>(i(),E(t(ie),de(n,{onMousedown:a[0]||(a[0]=c=>{!c.defaultPrevented&&c.detail>1&&c.preventDefault()})}),{default:T(()=>[F(l.$slots,"default")]),_:3},16))}}),pt=sa;const[na,ia]=Le("SwitchRoot");var oa=Y({inheritAttrs:!1,__name:"SwitchRoot",props:{defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},disabled:{type:Boolean,required:!1},id:{type:String,required:!1},value:{type:String,required:!1,default:"on"},trueValue:{type:null,required:!1,default:()=>!0},falseValue:{type:null,required:!1,default:()=>!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue"],setup(e,{emit:n}){const l=e,a=n,{disabled:c}=Ve(l),r=Oe(l,"modelValue",a,{defaultValue:l.defaultValue??l.falseValue,passive:l.modelValue===void 0}),s=B(()=>r.value===l.trueValue);function v(){c.value||(r.value=s.value?l.falseValue:l.trueValue)}const{forwardRef:x,currentElement:u}=pe(),d=Gt(u),y=Xt(),w=B(()=>l.id&&u.value?document.querySelector(`[for="${l.id}"]`)?.innerText:void 0);return ia({checked:s,toggleCheck:v,disabled:c}),(R,p)=>(i(),b(O,null,[m(t(ie),de({id:R.id,ref:t(x),role:"switch",type:R.as==="button"?"button":void 0,value:R.value,"aria-label":R.$attrs["aria-label"]||w.value,"aria-checked":s.value,"aria-required":R.required,"data-state":s.value?"checked":"unchecked","data-disabled":t(c)?"":void 0,"as-child":R.asChild,as:R.as,disabled:t(c)},{...t(y),...R.$attrs},{onClick:v,onKeydown:it(xe(v,["prevent"]),["enter"])}),{default:T(()=>[F(R.$slots,"default",{modelValue:t(r),checked:s.value})]),_:3},16,["id","type","value","aria-label","aria-checked","aria-required","data-state","data-disabled","as-child","as","disabled","onKeydown"]),t(d)&&R.name?(i(),E(t(Ht),de({key:0,type:"checkbox",name:R.name,disabled:t(c),required:R.required,value:R.value,checked:s.value},t(y)),null,16,["name","disabled","required","value","checked"])):C("v-if",!0)],64))}}),ra=oa,ua=Y({__name:"SwitchThumb",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const n=na();return pe(),(l,a)=>(i(),E(t(ie),{"data-state":t(n).checked.value?"checked":"unchecked","data-disabled":t(n).disabled.value?"":void 0,"as-child":l.asChild,as:l.as},{default:T(()=>[F(l.$slots,"default")]),_:3},8,["data-state","data-disabled","as-child","as"]))}}),da=ua;const[je,ca]=Le("TabsRoot");var pa=Y({__name:"TabsRoot",props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:"horizontal"},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:"automatic"},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(e,{emit:n}){const l=e,a=n,{orientation:c,unmountOnHide:r,dir:s}=Ve(l),v=at(s);pe();const x=Oe(l,"modelValue",a,{defaultValue:l.defaultValue,passive:l.modelValue===void 0}),u=M(),d=$t(new Set);return ca({modelValue:x,changeModelValue:y=>{x.value=y},orientation:c,dir:v,unmountOnHide:r,activationMode:l.activationMode,baseId:st(void 0,"reka-tabs"),tabsList:u,contentIds:d,registerContent:y=>{d.value=new Set([...d.value,y])},unregisterContent:y=>{const w=new Set(d.value);w.delete(y),d.value=w}}),(y,w)=>(i(),E(t(ie),{dir:t(v),"data-orientation":t(c),"as-child":y.asChild,as:y.as},{default:T(()=>[F(y.$slots,"default",{modelValue:t(x)})]),_:3},8,["dir","data-orientation","as-child","as"]))}}),va=pa;function vt(e,n){return`${e}-trigger-${n}`}function ft(e,n){return`${e}-content-${n}`}var fa=Y({__name:"TabsContent",props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const n=e,{forwardRef:l}=pe(),a=je(),c=B(()=>vt(a.baseId,n.value)),r=B(()=>ft(a.baseId,n.value)),s=B(()=>n.value===a.modelValue.value),v=M(s.value);return ye(()=>{a.registerContent(n.value),requestAnimationFrame(()=>{v.value=!1})}),It(()=>{a.unregisterContent(n.value)}),(x,u)=>(i(),E(t(Ct),{present:x.forceMount||s.value,"force-mount":""},{default:T(({present:d})=>[m(t(ie),{id:r.value,ref:t(l),"as-child":x.asChild,as:x.as,role:"tabpanel","data-state":s.value?"active":"inactive","data-orientation":t(a).orientation.value,"aria-labelledby":c.value,hidden:!d,tabindex:"0",style:Vt({animationDuration:v.value?"0s":void 0})},{default:T(()=>[!t(a).unmountOnHide.value||d?F(x.$slots,"default",{key:0}):C("v-if",!0)]),_:2},1032,["id","as-child","as","data-state","data-orientation","aria-labelledby","hidden","style"])]),_:3},8,["present"]))}}),ma=fa,ga=Y({__name:"TabsIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e,{expose:n}){const l=e,a=je();n({updateIndicatorStyle:v}),pe();const c=zt(),r=M({size:null,thickness:null,position:null}),s=M([]);ce(()=>[a.modelValue.value,a?.dir.value],()=>{v()},{immediate:!0,flush:"post"}),Rt(()=>{s.value=Array.from(a.tabsList.value?.querySelectorAll('[role="tab"]')||[])}),qt(B(()=>[a.tabsList.value,...s.value]),v);function v(){const x=a.tabsList.value?.querySelector('[role="tab"][data-state="active"]');x&&(a.orientation.value==="horizontal"?r.value={size:x.offsetWidth,thickness:x.offsetHeight,position:x.offsetLeft}:r.value={size:x.offsetHeight,thickness:x.offsetWidth,position:x.offsetTop})}return(x,u)=>t(c)&&typeof r.value.size=="number"?(i(),E(t(ie),de({key:0},l,{style:{"--reka-tabs-indicator-size":`${r.value.size}px`,"--reka-tabs-indicator-thickness":`${r.value.thickness}px`,"--reka-tabs-indicator-position":`${r.value.position}px`}}),{default:T(()=>[F(x.$slots,"default")]),_:3},16,["style"])):C("v-if",!0)}}),ha=ga,ba=Y({__name:"TabsList",props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const n=e,{loop:l}=Ve(n),{forwardRef:a,currentElement:c}=pe(),r=je();return r.tabsList=c,(s,v)=>(i(),E(t(ta),{"as-child":"",orientation:t(r).orientation.value,dir:t(r).dir.value,loop:t(l)},{default:T(()=>[m(t(ie),{ref:t(a),role:"tablist","as-child":s.asChild,as:s.as,"aria-orientation":t(r).orientation.value},{default:T(()=>[F(s.$slots,"default")]),_:3},8,["as-child","as","aria-orientation"])]),_:3},8,["orientation","dir","loop"]))}}),ya=ba,ka=Y({__name:"TabsTrigger",props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const n=e,{forwardRef:l}=pe(),a=je(),c=B(()=>vt(a.baseId,n.value)),r=B(()=>a.contentIds.value.has(n.value)?ft(a.baseId,n.value):void 0),s=B(()=>n.value===a.modelValue.value);return(v,x)=>(i(),E(t(la),{"as-child":"",focusable:!v.disabled,active:s.value},{default:T(()=>[m(t(ie),{id:c.value,ref:t(l),role:"tab",type:v.as==="button"?"button":void 0,as:v.as,"as-child":v.asChild,"aria-selected":s.value?"true":"false","aria-controls":r.value,"data-state":s.value?"active":"inactive",disabled:v.disabled,"data-disabled":v.disabled?"":void 0,"data-orientation":t(a).orientation.value,onMousedown:x[0]||(x[0]=xe(u=>{!v.disabled&&u.ctrlKey===!1?t(a).changeModelValue(v.value):u.preventDefault()},["left"])),onKeydown:x[1]||(x[1]=it(u=>t(a).changeModelValue(v.value),["enter","space"])),onFocus:x[2]||(x[2]=()=>{const u=t(a).activationMode!=="manual";!s.value&&!v.disabled&&u&&t(a).changeModelValue(v.value)})},{default:T(()=>[F(v.$slots,"default")]),_:3},8,["id","type","as","as-child","aria-selected","aria-controls","data-state","disabled","data-disabled","data-orientation"])]),_:3},8,["focusable","active"]))}}),xa=ka;const _a={slots:{root:"flex items-center gap-2",list:"relative flex p-1 group",indicator:"absolute transition-[translate,width] duration-200",trigger:["group relative inline-flex items-center min-w-0 data-[state=inactive]:text-muted hover:data-[state=inactive]:not-disabled:text-default font-medium rounded-md disabled:cursor-not-allowed disabled:opacity-75","transition-colors"],leadingIcon:"shrink-0",leadingAvatar:"shrink-0",leadingAvatarSize:"",label:"truncate",trailingBadge:"shrink-0",trailingBadgeSize:"sm",content:"w-full rounded-md focus-visible:outline-3"},variants:{color:{primary:{content:"outline-primary/25"},secondary:{content:"outline-secondary/25"},success:{content:"outline-success/25"},info:{content:"outline-info/25"},warning:{content:"outline-warning/25"},error:{content:"outline-error/25"},neutral:{content:"outline-inverted/25"}},variant:{pill:{list:"bg-elevated rounded-lg",trigger:["grow","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:content-[''] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:absolute in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:inset-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:rounded-md in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:shadow-xs in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:-z-10 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:isolate"],indicator:"rounded-md shadow-xs"},link:{list:"border-default",indicator:"rounded-full",trigger:"in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:content-[''] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:absolute in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:rounded-full"}},orientation:{horizontal:{root:"flex-col",list:"w-full",indicator:"left-0 w-(--reka-tabs-indicator-size) translate-x-(--reka-tabs-indicator-position)",trigger:"justify-center"},vertical:{list:"flex-col",indicator:"top-0 h-(--reka-tabs-indicator-size) translate-y-(--reka-tabs-indicator-position)"}},size:{xs:{trigger:"px-2 py-1 text-xs gap-1",leadingIcon:"size-4",leadingAvatarSize:"3xs"},sm:{trigger:"px-2.5 py-1.5 text-xs gap-1.5",leadingIcon:"size-4",leadingAvatarSize:"3xs"},md:{trigger:"px-3 py-1.5 text-sm gap-1.5",leadingIcon:"size-5",leadingAvatarSize:"2xs"},lg:{trigger:"px-3 py-2 text-sm gap-2",leadingIcon:"size-5",leadingAvatarSize:"2xs"},xl:{trigger:"px-3 py-2 text-base gap-2",leadingIcon:"size-6",leadingAvatarSize:"xs"}}},compoundVariants:[{orientation:"horizontal",variant:"pill",class:{indicator:"inset-y-1"}},{orientation:"horizontal",variant:"link",class:{list:"border-b -mb-px",indicator:"-bottom-px h-px",trigger:"in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:inset-x-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:-bottom-[calc(var(--spacing)+1px)] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:h-px"}},{orientation:"vertical",variant:"pill",class:{indicator:"inset-x-1",list:"items-center",trigger:"w-full justify-center"}},{orientation:"vertical",variant:"link",class:{list:"border-s -ms-px",indicator:"-start-px w-px",trigger:"in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:inset-y-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:-start-[calc(var(--spacing)+1px)] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:w-px"}},{color:"primary",variant:"pill",class:{indicator:"bg-primary",trigger:["data-[state=active]:text-inverted outline-primary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-primary"]}},{color:"secondary",variant:"pill",class:{indicator:"bg-secondary",trigger:["data-[state=active]:text-inverted outline-secondary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-secondary"]}},{color:"success",variant:"pill",class:{indicator:"bg-success",trigger:["data-[state=active]:text-inverted outline-success/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-success"]}},{color:"info",variant:"pill",class:{indicator:"bg-info",trigger:["data-[state=active]:text-inverted outline-info/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-info"]}},{color:"warning",variant:"pill",class:{indicator:"bg-warning",trigger:["data-[state=active]:text-inverted outline-warning/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-warning"]}},{color:"error",variant:"pill",class:{indicator:"bg-error",trigger:["data-[state=active]:text-inverted outline-error/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-error"]}},{color:"neutral",variant:"pill",class:{indicator:"bg-inverted",trigger:["data-[state=active]:text-inverted outline-inverted/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-inverted"]}},{color:"primary",variant:"link",class:{indicator:"bg-primary",trigger:["data-[state=active]:text-primary outline-primary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-primary"]}},{color:"secondary",variant:"link",class:{indicator:"bg-secondary",trigger:["data-[state=active]:text-secondary outline-secondary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-secondary"]}},{color:"success",variant:"link",class:{indicator:"bg-success",trigger:["data-[state=active]:text-success outline-success/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-success"]}},{color:"info",variant:"link",class:{indicator:"bg-info",trigger:["data-[state=active]:text-info outline-info/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-info"]}},{color:"warning",variant:"link",class:{indicator:"bg-warning",trigger:["data-[state=active]:text-warning outline-warning/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-warning"]}},{color:"error",variant:"link",class:{indicator:"bg-error",trigger:["data-[state=active]:text-error outline-error/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-error"]}},{color:"neutral",variant:"link",class:{indicator:"bg-inverted",trigger:["data-[state=active]:text-highlighted outline-inverted/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-inverted"]}}],defaultVariants:{color:"primary",variant:"pill",size:"md"}},Xs={__name:"Tabs",props:{as:{type:null,required:!1},items:{type:Array,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},content:{type:Boolean,required:!1,default:!0},valueKey:{type:null,required:!1,default:"value"},labelKey:{type:null,required:!1,default:"label"},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultValue:{type:[String,Number],required:!1,default:"0"},modelValue:{type:[String,Number],required:!1},activationMode:{type:String,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:["update:modelValue"],setup(e,{expose:n,emit:l}){const a=e,c=l,r=Ce(),s=Re("tabs",a),v=ze(),x=ot(rt(s,"as","unmountOnHide"),c),u=B(()=>qe({extend:_a,...v.ui?.tabs||{}})({color:s.color,variant:s.variant,size:s.size,orientation:s.orientation})),d=M([]);function y(w,R){d.value[w]=R}return n({triggersRef:d}),(w,R)=>(i(),E(t(va),de(t(x),{"model-value":t(s).modelValue,"default-value":t(s).defaultValue,orientation:t(s).orientation,"activation-mode":t(s).activationMode,"data-slot":"root",class:u.value.root({class:[t(s).ui?.root,t(s).class]})}),{default:T(()=>[m(t(ya),{"data-slot":"list",class:D(u.value.list({class:t(s).ui?.list}))},{default:T(()=>[m(t(ha),{"data-slot":"indicator",class:D(u.value.indicator({class:t(s).ui?.indicator}))},null,8,["class"]),F(w.$slots,"list-leading"),(i(!0),b(O,null,le(t(s).items,(p,o)=>(i(),E(t(xa),{key:t(be)(p,t(s).valueKey)??o,ref_for:!0,ref:V=>y(o,V),value:t(be)(p,t(s).valueKey)??String(o),disabled:p.disabled,"data-slot":"trigger",class:D(u.value.trigger({class:[t(s).ui?.trigger,p.ui?.trigger]}))},{default:T(()=>[F(w.$slots,"leading",{item:p,index:o,ui:u.value},()=>[p.icon?(i(),E(me,{key:0,name:p.icon,"data-slot":"leadingIcon",class:D(u.value.leadingIcon({class:[t(s).ui?.leadingIcon,p.ui?.leadingIcon]}))},null,8,["name","class"])):p.avatar?(i(),E(ut,de({key:1,size:p.ui?.leadingAvatarSize||t(s).ui?.leadingAvatarSize||u.value.leadingAvatarSize()},{ref_for:!0},p.avatar,{"data-slot":"leadingAvatar",class:u.value.leadingAvatar({class:[t(s).ui?.leadingAvatar,p.ui?.leadingAvatar]})}),null,16,["size","class"])):C("",!0)]),t(be)(p,t(s).labelKey)||r.default?(i(),b("span",{key:0,"data-slot":"label",class:D(u.value.label({class:[t(s).ui?.label,p.ui?.label]}))},[F(w.$slots,"default",{item:p,index:o},()=>[L(A(t(be)(p,t(s).labelKey)),1)])],2)):C("",!0),F(w.$slots,"trailing",{item:p,index:o,ui:u.value},()=>[p.badge||p.badge===0?(i(),E(we,de({key:0,color:"neutral",variant:"outline",size:p.ui?.trailingBadgeSize||t(s).ui?.trailingBadgeSize||u.value.trailingBadgeSize()},{ref_for:!0},typeof p.badge=="string"||typeof p.badge=="number"?{label:p.badge}:p.badge,{"data-slot":"trailingBadge",class:u.value.trailingBadge({class:[t(s).ui?.trailingBadge,p.ui?.trailingBadge]})}),null,16,["size","class"])):C("",!0)])]),_:2},1032,["value","disabled","class"]))),128)),F(w.$slots,"list-trailing")]),_:3},8,["class"]),t(s).content?(i(!0),b(O,{key:0},le(t(s).items,(p,o)=>(i(),E(t(ma),{key:t(be)(p,t(s).valueKey)??o,value:t(be)(p,t(s).valueKey)??String(o),"data-slot":"content",class:D(u.value.content({class:[t(s).ui?.content,p.ui?.content,p.class]}))},{default:T(()=>[F(w.$slots,p.slot||"content",{item:p,index:o,ui:u.value},()=>[L(A(p.content),1)])]),_:2},1032,["value","class"]))),128)):C("",!0)]),_:3},16,["model-value","default-value","orientation","activation-mode","class"]))}},_e=[{id:"typescript",label:"TypeScript / JavaScript",group:"JavaScript / TypeScript",extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts"],ram:"150-350 MB",toolchain:"Node + TypeScript in the builder image; workspace TypeScript is preferred when present",degrades:"starts with the image's TypeScript when the repo has no local install"},{id:"vue",label:"Vue",group:"JavaScript / TypeScript",extensions:[".vue"],ram:"200-400 MB",toolchain:"vue-language-server in the builder image; project Vue dependencies improve resolution",degrades:"starts for .vue files, but unresolved imports are likely without project dependencies"},{id:"eslint",label:"ESLint",group:"JavaScript / TypeScript",extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts",".vue"],ram:"80-200 MB",toolchain:"vscode-eslint-language-server in the builder image; a project-local eslint is required for rules",degrades:"idles or exits when the repo has no project-local ESLint; the run continues"},{id:"oxlint",label:"Oxlint",group:"JavaScript / TypeScript",extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts",".vue",".astro",".svelte"],ram:"30-80 MB",toolchain:"oxlint in the builder image",degrades:"starts for JS projects even without project lint dependencies"},{id:"pyright",label:"Python (Pyright)",group:"Python",extensions:[".py",".pyi"],ram:"150-300 MB",toolchain:"pyright-langserver + system Python in the builder image",degrades:"uses system Python; project virtualenvs are not auto-detected"},{id:"rust",label:"Rust",group:"Rust",extensions:[".rs"],ram:"300-800 MB",toolchain:"rustup stable toolchain + rust-analyzer; a Cargo workspace gives full analysis",degrades:"starts for any .rs file; without Cargo.toml it falls back to loose-file mode with limited analysis and still costs RAM"},{id:"kotlin-ls",label:"Kotlin",group:"Kotlin / JVM",extensions:[".kt",".kts"],ram:"250-600 MB",toolchain:"kotlin-language-server + headless JVM installed on both architectures",degrades:"starts for Kotlin files; Gradle/Maven resolution depends on the project"},{id:"terraform",label:"Terraform",group:"Infrastructure",extensions:[".tf",".tfvars"],ram:"50-150 MB",toolchain:"pinned terraform-ls release in the builder image",degrades:"starts for .tf files without needing the Terraform CLI"},{id:"dockerfile",label:"Dockerfile",group:"Infrastructure",extensions:[".dockerfile","Dockerfile"],ram:"40-100 MB",toolchain:"docker-langserver in the builder image",degrades:"starts for Dockerfiles; no daemon is required"},{id:"yaml-ls",label:"YAML",group:"Config / markup",extensions:[".yaml",".yml"],ram:"40-80 MB",toolchain:"yaml-language-server in the builder image",degrades:"starts for YAML files without project dependencies"},{id:"php intelephense",label:"PHP",group:"PHP",extensions:[".php"],ram:"100-250 MB",toolchain:"intelephense + PHP in the builder image",degrades:"starts for PHP files; Composer dependencies improve resolution"},{id:"bash",label:"Shell",group:"Shell",extensions:[".sh",".bash",".zsh",".ksh"],ram:"30-60 MB",toolchain:"bash-language-server in the builder image",degrades:"starts for shell files without project dependencies"},{id:"json",label:"JSON",group:"Config / markup",extensions:[".json",".jsonc"],ram:"40-80 MB",toolchain:"vscode-json-language-server in the builder image",degrades:"starts for JSON files without project dependencies"},{id:"css",label:"CSS",group:"Config / markup",extensions:[".css",".scss",".less"],ram:"40-80 MB",toolchain:"vscode-css-language-server in the builder image",degrades:"starts for CSS-family files without project dependencies"},{id:"html",label:"HTML",group:"Config / markup",extensions:[".html",".htm"],ram:"40-80 MB",toolchain:"vscode-html-language-server in the builder image",degrades:"starts for HTML files without project dependencies"}],Be=_e.map(e=>e.id),Qs=[...Be];function Ys(e){return Be.includes(e)}function wa(e){const n=[...Be].sort((c,r)=>r.length-c.length),l=[];let a=e.trim();for(;a&&(a=a.replace(/^[\s,]+/,""),!!a);){const c=n.find(s=>{if(!a.startsWith(s))return!1;const v=a[s.length];return v===void 0||/[\s,]/.test(v)});if(c){l.push(c),a=a.slice(c.length);continue}const r=/^[^\s,]+/.exec(a);if(!r){a=a.slice(1);continue}l.push(r[0]),a=a.slice(r[0].length)}return l}function en(e){const n=new Set(e);return Be.filter(l=>n.has(l))}const De=/^[A-Za-z0-9._-]{1,255}$/,Qe="none",Sa=/^[a-zA-Z0-9._-]*$/,$a=/^[a-zA-Z0-9][a-zA-Z0-9._/:@-]*$/,mt=["iid","branch","mrTarget","mrBlock"],gt=["iid","branch","mrTarget"];function Ia(e){const n=[],l=new Set;for(const a of e.matchAll(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g)){const c=a[1];l.has(c)||(l.add(c),n.push(c))}return n}function Ie(e,n){const l=new Set(n);return Ia(e).filter(a=>!l.has(a))}function tn(e){const n=[e.planModel,e.buildModel];for(const a of n)if(a!==""&&!a.includes("/"))return!1;for(const a of[e.planVariant,e.buildVariant])if(a!==""&&!Sa.test(a))return!1;if(e.builderImage!==""&&!$a.test(e.builderImage)||e.assignee!==""&&e.assignee!==Qe&&!De.test(e.assignee)||e.assigneeMode==="user"&&(e.assignee===""||e.assignee===Qe||!De.test(e.assignee))||Ie(e.buildWorkflow,mt).length>0||Ie(e.mrDescription,gt).length>0)return!1;const l=new Set(_e.map(a=>a.id));if(e.lspServers!==""){const a=e.lspServers.split(",").map(c=>c.trim()).filter(Boolean);if(a.length===0||!a.every(c=>l.has(c)))return!1}if(e.lspDisabled.trim()!==""){const a=wa(e.lspDisabled);if(a.length===0||!a.every(c=>l.has(c)))return!1}return!0}function an(e){return{planModel:e.planModel.trim(),buildModel:e.buildModel.trim(),planVariant:e.planVariant.trim(),buildVariant:e.buildVariant.trim(),plugins:e.plugins.trim(),baseBranches:e.baseBranches.trim(),lspServers:e.lspServers.trim(),lspDisabled:e.lspDisabled.trim(),builderImage:e.builderImage.trim(),assignee:e.assigneeMode==="inherit"?"":e.assigneeMode==="none"?"none":e.assignee.trim(),buildWorkflow:e.buildWorkflow.trim(),mrDescription:e.mrDescription.trim(),minRole:e.minRole,requireAuthorOrAssignee:e.requireAuthorOrAssignee,autoPush:e.autoPush,autoMr:e.autoMr,autoResolveConflicts:e.autoResolveConflicts,ciFailAutoReport:e.ciFailAutoReport,allowConfidentialWorkItems:e.allowConfidentialWorkItems}}const Va=/^[a-z0-9][a-z0-9-_]*$/,Ca=/^[a-zA-Z0-9._-]*$/,Ra=/^[a-zA-Z0-9][a-zA-Z0-9._/:@-]*$/,qa=["planTimeoutMs","buildTimeoutMs","maxConcurrentRuns","maxQueuePerWorkItem","retryBackoffMs","attachmentMaxBytes","volumeGcTtlMs","volumeGcIntervalMs","projectSyncIntervalMs","mcpRefreshIntervalMs"],za=["maxGlobalQueue","maxRetries","errorLogRetentionDays","runLogTtlHours"],Ma=["queueFeedback","volumeGcEnabled","projectSyncEnabled","mcpRefreshEnabled","devcontainerEnabled","gitSubmodulesEnabled"],Aa=["auto","fuse-overlayfs","vfs"];function Ye(e,n){return e===""?!0:/^\d+$/.test(e)&&Number(e)>=n}function Ta(e){for(const n of qa)if(!Ye(e[n],1))return!1;for(const n of za)if(!Ye(e[n],0))return!1;for(const n of Ma)if(e[n]!==""&&e[n]!=="true"&&e[n]!=="false")return!1;return!(e.devcontainerStorageDriver!==""&&!Aa.includes(e.devcontainerStorageDriver))}function ln(e){for(const l of[e.planModel,e.buildModel])if(l!==""&&!l.includes("/"))return!1;for(const l of[e.planVariant,e.buildVariant])if(l!==""&&!Ca.test(l))return!1;if(e.builderImage!==""&&!Ra.test(e.builderImage)||e.assignee!==""&&!De.test(e.assignee)||Ie(e.buildWorkflow,mt).length>0||Ie(e.mrDescription,gt).length>0||!Ta(e.runtime))return!1;const n=new Set(_e.map(l=>l.id));return e.lspServers.every(l=>n.has(l))?e.baseBranches.trim()!=="":!1}function sn(e){return{planModel:e.planModel.trim(),buildModel:e.buildModel.trim(),planVariant:e.planVariant.trim(),buildVariant:e.buildVariant.trim(),plugins:e.plugins.trim(),baseBranches:e.baseBranches.trim(),builderImage:e.builderImage.trim(),assignee:e.assignee.trim(),buildWorkflow:e.buildWorkflow.trim(),mrDescription:e.mrDescription.trim(),minRole:e.minRole,requireAuthorOrAssignee:e.requireAuthorOrAssignee,autoPush:e.autoPush,autoMr:e.autoMr,autoResolveConflicts:e.autoResolveConflicts,ciFailAutoReport:e.ciFailAutoReport,allowConfidentialWorkItems:e.allowConfidentialWorkItems,lspServers:[...e.lspServers],runtime:e.runtime}}function ht(e){return[...new Set(e.split(/[\n,]/).map(n=>n.trim()).filter(Boolean))]}function nn(e){return e.split(",").map(n=>n.trim()).filter(Boolean)}function on(e){return e.map(n=>n.trim()).filter(Boolean).join(",")}function rn(e,n){return!Va.test(e.id)||e.name.trim()===""||e.npm.trim()===""||ht(e.modelsText).length===0||n&&e.apiKey.trim()===""?!1:ja(e.modelCostsText)}const Ea=/^\d*\.?\d+$/;function ja(e){for(const n of Object.values(e))for(const l of[n.input,n.output,n.cacheRead,n.cacheWrite])if(l!==""&&!Ea.test(l.trim()))return!1;return!0}function $e(e){const n=Number(e.trim());return Number.isFinite(n)&&n>=0?n:0}function Ba(e){const n={};for(const[l,a]of Object.entries(e)){const c={input:$e(a.input),output:$e(a.output),cacheRead:$e(a.cacheRead),cacheWrite:$e(a.cacheWrite)};(c.input||c.output||c.cacheRead||c.cacheWrite)&&(n[l]=c)}return n}function un(e){return{name:e.name.trim(),npm:e.npm.trim(),apiUrl:e.apiUrl.trim(),envVar:e.envVar.trim(),baseUrl:e.baseUrl.trim(),apiKey:e.apiKey,models:ht(e.modelsText),enabled:e.enabled,source:e.source,modelCosts:Ba(e.modelCostsText)}}function dn(e){const n=[];for(const l of e)if(l.enabled)for(const a of l.models)n.push({label:`${l.id}/${a}`,value:`${l.id}/${a}`});return n}const Ua={slots:{root:"relative inline-flex items-center",base:["w-full rounded-md border-0 appearance-none placeholder:text-dimmed disabled:cursor-not-allowed disabled:opacity-75","transition-colors"],leading:"absolute start-0 flex items-start",leadingIcon:"shrink-0 text-dimmed",leadingAvatar:"shrink-0",leadingAvatarSize:"",trailing:"absolute end-0 flex items-start",trailingIcon:"shrink-0 text-dimmed"},variants:{fieldGroup:{horizontal:{root:"group has-focus-visible:z-[1]",base:"group-not-only:group-first:rounded-e-none group-not-only:group-last:rounded-s-none group-not-last:group-not-first:rounded-none"},vertical:{root:"group has-focus-visible:z-[1]",base:"group-not-only:group-first:rounded-b-none group-not-only:group-last:rounded-t-none group-not-last:group-not-first:rounded-none"}},size:{xs:{base:"px-2 py-1 text-sm/4 gap-1",leading:"ps-2 inset-y-1",trailing:"pe-2 inset-y-1",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},sm:{base:"px-2.5 py-1.5 text-sm/4 gap-1.5",leading:"ps-2.5 inset-y-1.5",trailing:"pe-2.5 inset-y-1.5",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4"},md:{base:"px-2.5 py-1.5 text-base/5 gap-1.5",leading:"ps-2.5 inset-y-1.5",trailing:"pe-2.5 inset-y-1.5",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},lg:{base:"px-3 py-2 text-base/5 gap-2",leading:"ps-3 inset-y-2",trailing:"pe-3 inset-y-2",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5"},xl:{base:"px-3 py-2 text-base gap-2",leading:"ps-3 inset-y-2",trailing:"pe-3 inset-y-2",leadingIcon:"size-6",leadingAvatarSize:"xs",trailingIcon:"size-6"}},variant:{outline:"text-highlighted bg-default ring ring-inset ring-accented",soft:"text-highlighted bg-elevated/50 hover:bg-elevated focus:bg-elevated disabled:bg-elevated/50",subtle:"text-highlighted bg-elevated ring ring-inset ring-accented",ghost:"text-highlighted bg-transparent hover:bg-elevated focus:bg-elevated disabled:bg-transparent dark:disabled:bg-transparent",none:"text-highlighted bg-transparent focus:outline-none"},color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},leading:{true:""},trailing:{true:""},loading:{true:""},highlight:{true:""},fixed:{false:""},type:{file:"file:me-1.5 file:font-medium file:text-muted file:outline-none"},autoresize:{true:{base:"resize-none"}}},compoundVariants:[{color:"primary",variant:["outline","subtle"],class:"outline-primary/25 focus-visible:outline-3 focus-visible:ring-primary"},{color:"secondary",variant:["outline","subtle"],class:"outline-secondary/25 focus-visible:outline-3 focus-visible:ring-secondary"},{color:"success",variant:["outline","subtle"],class:"outline-success/25 focus-visible:outline-3 focus-visible:ring-success"},{color:"info",variant:["outline","subtle"],class:"outline-info/25 focus-visible:outline-3 focus-visible:ring-info"},{color:"warning",variant:["outline","subtle"],class:"outline-warning/25 focus-visible:outline-3 focus-visible:ring-warning"},{color:"error",variant:["outline","subtle"],class:"outline-error/25 focus-visible:outline-3 focus-visible:ring-error"},{color:"primary",variant:["soft","ghost"],class:"outline-primary/25 focus-visible:outline-3"},{color:"secondary",variant:["soft","ghost"],class:"outline-secondary/25 focus-visible:outline-3"},{color:"success",variant:["soft","ghost"],class:"outline-success/25 focus-visible:outline-3"},{color:"info",variant:["soft","ghost"],class:"outline-info/25 focus-visible:outline-3"},{color:"warning",variant:["soft","ghost"],class:"outline-warning/25 focus-visible:outline-3"},{color:"error",variant:["soft","ghost"],class:"outline-error/25 focus-visible:outline-3"},{color:"primary",highlight:!0,class:"ring ring-inset ring-primary"},{color:"secondary",highlight:!0,class:"ring ring-inset ring-secondary"},{color:"success",highlight:!0,class:"ring ring-inset ring-success"},{color:"info",highlight:!0,class:"ring ring-inset ring-info"},{color:"warning",highlight:!0,class:"ring ring-inset ring-warning"},{color:"error",highlight:!0,class:"ring ring-inset ring-error"},{color:"neutral",variant:["outline","subtle"],class:"outline-inverted/25 focus-visible:outline-3 focus-visible:ring-inverted"},{color:"neutral",variant:["soft","ghost"],class:"outline-inverted/25 focus-visible:outline-3"},{color:"neutral",highlight:!0,class:"ring ring-inset ring-inverted"},{leading:!0,size:"xs",class:"ps-7"},{leading:!0,size:"sm",class:"ps-8"},{leading:!0,size:"md",class:"ps-9"},{leading:!0,size:"lg",class:"ps-10"},{leading:!0,size:"xl",class:"ps-11"},{trailing:!0,size:"xs",class:"pe-7"},{trailing:!0,size:"sm",class:"pe-8"},{trailing:!0,size:"md",class:"pe-9"},{trailing:!0,size:"lg",class:"pe-10"},{trailing:!0,size:"xl",class:"pe-11"},{loading:!0,leading:!0,class:{leadingIcon:"animate-spin"}},{loading:!0,leading:!1,trailing:!0,class:{trailingIcon:"animate-spin"}},{fixed:!1,size:"xs",class:"md:text-xs"},{fixed:!1,size:"sm",class:"md:text-xs"},{fixed:!1,size:"md",class:"md:text-sm"},{fixed:!1,size:"lg",class:"md:text-sm"}],defaultVariants:{size:"md",color:"primary",variant:"outline"}},Pa=["id","value","name","rows","placeholder","disabled","required"],Da=Object.assign({inheritAttrs:!1},{__name:"Textarea",props:{as:{type:null,required:!1},id:{type:String,required:!1},name:{type:String,required:!1},placeholder:{type:String,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},required:{type:Boolean,required:!1},autofocus:{type:Boolean,required:!1},autofocusDelay:{type:Number,required:!1,default:0},autoresize:{type:Boolean,required:!1},autoresizeDelay:{type:Number,required:!1,default:0},disabled:{type:Boolean,required:!1},rows:{type:Number,required:!1,default:3},maxrows:{type:Number,required:!1,default:0},highlight:{type:Boolean,required:!1},fixed:{type:Boolean,required:!1},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1},modelModifiers:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1}},emits:["update:modelValue","blur","change"],setup(e,{expose:n,emit:l}){const a=e,c=l,r=Ce(),s=Re("textarea",a),v=Mt(s,"modelValue",c,{defaultValue:s.defaultValue}),x=ze(),{emitFormFocus:u,emitFormBlur:d,emitFormInput:y,emitFormChange:w,size:R,color:p,id:o,name:V,highlight:$,disabled:U,ariaAttrs:N}=dt(a,{deferInputValidation:!0}),{isLeading:q,isTrailing:H,leadingIconName:K,trailingIconName:ee}=Tt(s),z=B(()=>qe({extend:Ua,...x.ui?.textarea||{}})({color:p.value??s.color,variant:s.variant,size:R?.value??s.size,loading:s.loading,highlight:$.value??s.highlight,fixed:s.fixed,autoresize:s.autoresize,leading:q.value||!!s.avatar||!!r.leading,trailing:H.value||!!r.trailing})),S=At("textareaRef");function j(I){s.modelModifiers?.trim&&(typeof I=="string"||I===null||I===void 0)&&(I=I?.trim()??null),s.modelModifiers?.number&&(I=Et(I)),s.modelModifiers?.nullable&&(I||=null),s.modelModifiers?.optional&&!s.modelModifiers?.nullable&&I!==null&&(I||=void 0),v.value=I,y()}function W(I){se(),s.modelModifiers?.lazy||j(I.target.value)}function Z(I){const h=I.target.value;s.modelModifiers?.lazy&&j(h),s.modelModifiers?.trim&&(I.target.value=h.trim()),w(),c("change",I)}function G(I){d(),c("blur",I)}function te(){s.autofocus&&S.value?.focus()}function se(){if(s.autoresize&&S.value){S.value.rows=s.rows;const I=S.value.style.overflow;S.value.style.overflow="hidden";const h=window.getComputedStyle(S.value),J=Number.parseInt(h.paddingTop),ne=Number.parseInt(h.paddingBottom),ae=J+ne,he=Number.parseInt(h.lineHeight),{scrollHeight:ve}=S.value,fe=(ve-ae)/he;fe>s.rows&&(S.value.rows=s.maxrows?Math.min(fe,s.maxrows):fe),S.value.style.overflow=I}}return ce(v,()=>{Pe(se)}),ye(()=>{setTimeout(()=>{te()},s.autofocusDelay),setTimeout(async()=>{await Pe(),se()},s.autoresizeDelay)}),n({textareaRef:S,autoResize:se}),(I,h)=>(i(),E(t(ie),{as:t(s).as,"data-slot":I.$attrs["data-slot"]??"root",class:D(z.value.root({class:[t(s).ui?.root,t(s).class]}))},{default:T(()=>[g("textarea",de({id:t(o),ref_key:"textareaRef",ref:S,value:t(v),name:t(V),rows:t(s).rows,placeholder:t(s).placeholder,class:z.value.base({class:t(s).ui?.base}),disabled:t(U),required:t(s).required},{...I.$attrs,...t(N)},{"data-slot":"base",onInput:W,onBlur:G,onChange:Z,onFocus:h[0]||(h[0]=(...J)=>t(u)&&t(u)(...J))}),null,16,Pa),F(I.$slots,"default",{ui:z.value}),t(q)||t(s).avatar||r.leading?(i(),b("span",{key:0,"data-slot":"leading",class:D(z.value.leading({class:t(s).ui?.leading}))},[F(I.$slots,"leading",{ui:z.value},()=>[t(q)&&t(K)?(i(),E(me,{key:0,name:t(K),"data-slot":"leadingIcon",class:D(z.value.leadingIcon({class:t(s).ui?.leadingIcon}))},null,8,["name","class"])):t(s).avatar?(i(),E(ut,de({key:1,size:t(s).ui?.leadingAvatarSize||z.value.leadingAvatarSize()},t(s).avatar,{"data-slot":"leadingAvatar",class:z.value.leadingAvatar({class:t(s).ui?.leadingAvatar})}),null,16,["size","class"])):C("",!0)])],2)):C("",!0),t(H)||r.trailing?(i(),b("span",{key:1,"data-slot":"trailing",class:D(z.value.trailing({class:t(s).ui?.trailing}))},[F(I.$slots,"trailing",{ui:z.value},()=>[t(ee)?(i(),E(me,{key:0,name:t(ee),"data-slot":"trailingIcon",class:D(z.value.trailingIcon({class:t(s).ui?.trailingIcon}))},null,8,["name","class"])):C("",!0)])],2)):C("",!0)]),_:3},8,["as","data-slot","class"]))}}),Na={slots:{root:"",wrapper:"",labelWrapper:"flex content-center items-center justify-between gap-1",label:"block font-medium text-default",container:"relative",description:"text-muted",error:"mt-2 text-error",hint:"text-muted",help:"mt-2 text-muted"},variants:{size:{xs:{root:"text-xs"},sm:{root:"text-xs"},md:{root:"text-sm"},lg:{root:"text-sm"},xl:{root:"text-base"}},required:{true:{label:"after:content-['*'] after:ms-0.5 after:text-error"}},orientation:{vertical:{container:"mt-1"},horizontal:{root:"flex justify-between place-items-baseline gap-2"}}},defaultVariants:{size:"md"}},Fa=["id"],Oa=["id"],La=["id"],Ka=["id"],He={__name:"FormField",props:{as:{type:null,required:!1},name:{type:String,required:!1},errorPattern:{type:null,required:!1},label:{type:String,required:!1},description:{type:String,required:!1},help:{type:String,required:!1},error:{type:[Boolean,String],required:!1,default:void 0},hint:{type:String,required:!1},size:{type:null,required:!1},required:{type:Boolean,required:!1},eagerValidation:{type:Boolean,required:!1},validateOnInputDelay:{type:Number,required:!1},orientation:{type:null,required:!1,default:"vertical"},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const n=e,l=Ce(),a=Re("formField",n),c=ze(),r=B(()=>qe({extend:Na,...c.ui?.formField||{}})({size:a.size,required:a.required,orientation:a.orientation})),s=Ze(jt,null),v=B(()=>a.error||s?.value?.find(y=>y.name===a.name||a.errorPattern&&y.name?.match(a.errorPattern))?.message),x=M(Ke()),u=x.value,d=Ze(Bt,void 0);return ce(x,()=>{d&&a.name&&(d.value[a.name]={id:x.value,pattern:a.errorPattern})},{immediate:!0}),Xe(Ut,x),Xe(Pt,B(()=>({error:v.value,name:a.name,size:a.size,eagerValidation:a.eagerValidation,validateOnInputDelay:a.validateOnInputDelay,errorPattern:a.errorPattern,hint:a.hint,description:a.description,help:a.help,ariaId:u}))),(y,w)=>(i(),E(t(ie),{as:t(a).as,"data-orientation":t(a).orientation,"data-slot":"root",class:D(r.value.root({class:[t(a).ui?.root,t(a).class]}))},{default:T(()=>[g("div",{"data-slot":"wrapper",class:D(r.value.wrapper({class:t(a).ui?.wrapper}))},[t(a).label||l.label?(i(),b("div",{key:0,"data-slot":"labelWrapper",class:D(r.value.labelWrapper({class:t(a).ui?.labelWrapper}))},[m(t(pt),{for:x.value,"data-slot":"label",class:D(r.value.label({class:t(a).ui?.label}))},{default:T(()=>[F(y.$slots,"label",{label:t(a).label},()=>[L(A(t(a).label),1)])]),_:3},8,["for","class"]),t(a).hint||l.hint?(i(),b("span",{key:0,id:`${t(u)}-hint`,"data-slot":"hint",class:D(r.value.hint({class:t(a).ui?.hint}))},[F(y.$slots,"hint",{hint:t(a).hint},()=>[L(A(t(a).hint),1)])],10,Fa)):C("",!0)],2)):C("",!0),t(a).description||l.description?(i(),b("p",{key:1,id:`${t(u)}-description`,"data-slot":"description",class:D(r.value.description({class:t(a).ui?.description}))},[F(y.$slots,"description",{description:t(a).description},()=>[L(A(t(a).description),1)])],10,Oa)):C("",!0)],2),g("div",{class:D([(t(a).label||!!l.label||t(a).description||!!l.description)&&r.value.container({class:t(a).ui?.container})])},[F(y.$slots,"default",{error:v.value}),t(a).error!==!1&&(typeof v.value=="string"&&v.value||l.error)?(i(),b("div",{key:0,id:`${t(u)}-error`,"data-slot":"error",class:D(r.value.error({class:t(a).ui?.error}))},[F(y.$slots,"error",{error:v.value},()=>[L(A(v.value),1)])],10,La)):t(a).help||l.help?(i(),b("div",{key:1,id:`${t(u)}-help`,"data-slot":"help",class:D(r.value.help({class:t(a).ui?.help}))},[F(y.$slots,"help",{help:t(a).help},()=>[L(A(t(a).help),1)])],10,Ka)):C("",!0)],2)]),_:3},8,["as","data-orientation","class"]))}},Wa={class:"space-y-2"},Ha=["onDrop"],Ga=["onDragstart"],cn=Y({__name:"EditableListEditor",props:Ae({reorderable:{type:Boolean},readonly:{type:Boolean},placeholder:{},addLabel:{},itemLabel:{}},{modelValue:{default:()=>[]},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const n=e,l=Me(e,"modelValue"),a=M(null),c=B(()=>n.placeholder===void 0?{}:{placeholder:n.placeholder});function r(d,y){if(y<0||y>=l.value.length)return;const w=[...l.value],[R]=w.splice(d,1);w.splice(y,0,R??""),l.value=w}function s(d){a.value!==null&&(r(a.value,d),a.value=null)}function v(d,y){const w=[...l.value];w[d]=y,l.value=w}function x(){l.value=[...l.value,""]}function u(d){l.value=l.value.filter((y,w)=>w!==d)}return(d,y)=>{const w=me,R=ke,p=ge;return i(),b("div",Wa,[(i(!0),b(O,null,le(l.value,(o,V)=>(i(),b("div",{key:V,class:"flex items-center gap-2",onDragover:y[0]||(y[0]=xe(()=>{},["prevent"])),onDrop:$=>s(V)},[e.reorderable&&!e.readonly?(i(),b("span",{key:0,class:"cursor-grab text-dimmed",draggable:"true","aria-label":"Drag to reorder",onDragstart:$=>a.value=V},[m(w,{name:"i-lucide-grip-vertical"})],40,Ga)):C("",!0),m(R,de({"model-value":o},{ref_for:!0},c.value,{disabled:e.readonly,"aria-label":e.itemLabel??"List item",class:"flex-1 font-mono","onUpdate:modelValue":$=>v(V,$)}),null,16,["model-value","disabled","aria-label","onUpdate:modelValue"]),e.reorderable&&!e.readonly?(i(),b(O,{key:1},[m(p,{icon:"i-lucide-chevron-up",color:"neutral",variant:"ghost",disabled:V===0,"aria-label":"Move up",onClick:$=>r(V,V-1)},null,8,["disabled","onClick"]),m(p,{icon:"i-lucide-chevron-down",color:"neutral",variant:"ghost",disabled:V===l.value.length-1,"aria-label":"Move down",onClick:$=>r(V,V+1)},null,8,["disabled","onClick"])],64)):C("",!0),e.readonly?C("",!0):(i(),E(p,{key:2,icon:"i-lucide-x",color:"neutral",variant:"ghost","aria-label":"Remove item",onClick:$=>u(V)},null,8,["onClick"]))],40,Ha))),128)),e.readonly?C("",!0):(i(),E(p,{key:0,label:e.addLabel??"Add",icon:"i-lucide-plus",color:"neutral",variant:"outline",size:"sm",onClick:x},null,8,["label"]))])}}}),Ja={class:"space-y-4"},Za={class:"text-xs font-semibold uppercase tracking-wide text-dimmed"},Xa={class:"grid gap-2 sm:grid-cols-2"},Qa=["checked","aria-label","onChange"],Ya={class:"min-w-0"},el={class:"block text-sm font-medium text-highlighted"},tl={class:"block text-xs text-dimmed"},al={class:"block text-xs text-dimmed"},pn=Y({__name:"LspServersEditor",props:{modelValue:{},serverIds:{}},emits:["update:modelValue"],setup(e,{emit:n}){const l=e,a=n,c=B(()=>{const v=l.serverIds?new Set(l.serverIds):null,x=new Map;for(const u of _e){if(v&&!v.has(u.id))continue;const d=x.get(u.group)??[];d.push(u),x.set(u.group,d)}return[...x.entries()].map(([u,d])=>({label:u,servers:d}))});function r(v){return l.modelValue.includes(v)}function s(v,x){const u=x.target.checked,d=new Set(l.modelValue);u?d.add(v):d.delete(v),a("update:modelValue",_e.map(y=>y.id).filter(y=>d.has(y)))}return(v,x)=>(i(),b("div",Ja,[(i(!0),b(O,null,le(c.value,u=>(i(),b("div",{key:u.label,class:"space-y-2"},[g("h4",Za,A(u.label),1),g("div",Xa,[(i(!0),b(O,null,le(u.servers,d=>(i(),b("label",{key:d.id,class:"flex cursor-pointer items-start gap-3 rounded-md border border-default p-3 hover:bg-elevated/50"},[g("input",{type:"checkbox",class:"mt-1 accent-primary",checked:r(d.id),"aria-label":`Enable ${d.label} language server`,onChange:y=>s(d.id,y)},null,40,Qa),g("span",Ya,[g("span",el,A(d.label),1),g("span",tl,A(d.extensions.join(", ")),1),g("span",al,A(d.ram)+" · "+A(d.toolchain),1)])]))),128))])]))),128))]))}}),ll={class:"relative"},sl=["aria-label"],nl={key:0,class:"px-3 py-2 text-sm text-dimmed"},il={key:1,class:"px-3 py-2 text-sm text-dimmed"},ol=["id","aria-selected","onMouseenter","onClick"],et=2,rl=250,vn=Y({__name:"ForgeUserCombobox",props:Ae({projectId:{},ariaLabel:{},placeholder:{}},{modelValue:{default:""},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const n=Me(e,"modelValue"),l=e,c=`assignee-listbox-${Ke()}`,r=z=>`${c}-option-${z}`,s=M(""),v=M([]),x=M(!1),u=M(!1),d=M(-1),y=new Map;let w,R=0;const p=B(()=>u.value&&s.value.trim().length>=et),o=B(()=>p.value&&!x.value&&v.value.length===0);function V(z){if(!z)return"";const S=v.value.find(j=>j.username===z);return S?`@${S.username} — ${S.name}`:`@${z}`}function $(z){return`${l.projectId??"global"}:${z.toLowerCase()}`}async function U(z){const S=++R,j=$(z),W=y.get(j);if(W){v.value=W,x.value=!1;return}x.value=!0;const Z=l.projectId==null?"":`&projectId=${encodeURIComponent(String(l.projectId))}`,{data:G,error:te}=await Q(`/api/forge/users?q=${encodeURIComponent(z)}${Z}`);if(S!==R)return;if(x.value=!1,te){v.value=[];return}const se=G?.users??[];y.set(j,se),v.value=se}ce(s,z=>{w&&clearTimeout(w),R+=1,d.value=-1;const S=z.trim();if(S.length<et){v.value=[],x.value=!1;return}u.value=!0,w=setTimeout(()=>{U(S)},rl)}),ce(n,z=>{u.value||(s.value=z?V(z):"")},{immediate:!0});function N(){u.value=!0}function q(){u.value=!1,d.value=-1,s.value=n.value?V(n.value):""}function H(z){n.value=z.username,s.value=`@${z.username} — ${z.name}`,u.value=!1,d.value=-1}function K(){n.value="",s.value="",v.value=[],u.value=!1,d.value=-1}function ee(z){if(z.key==="Escape"){if(!p.value)return;z.preventDefault(),u.value=!1,d.value=-1;return}if(z.key==="ArrowDown"){if(z.preventDefault(),!p.value){u.value=!0;return}if(v.value.length===0)return;d.value=d.value<0?0:(d.value+1)%v.value.length;return}if(z.key==="ArrowUp"){if(!p.value||v.value.length===0)return;z.preventDefault(),d.value=d.value<=0?v.value.length-1:d.value-1;return}if(z.key==="Enter"&&p.value&&d.value>=0){const S=v.value[d.value];S&&(z.preventDefault(),H(S))}}return nt(()=>{w&&clearTimeout(w)}),(z,S)=>{const j=ge,W=ke;return i(),b("div",ll,[m(W,{modelValue:s.value,"onUpdate:modelValue":S[1]||(S[1]=Z=>s.value=Z),placeholder:e.placeholder??"Type at least 2 characters…","aria-label":e.ariaLabel??"Forge user",role:"combobox","aria-autocomplete":"list","aria-expanded":p.value,"aria-controls":c,"aria-activedescendant":d.value>=0?r(d.value):void 0,loading:x.value,class:"w-full font-mono",onFocus:N,onBlur:q,onKeydown:ee},{trailing:T(()=>[n.value?(i(),E(j,{key:0,icon:"i-lucide-x",color:"neutral",variant:"ghost",size:"xs","aria-label":"Clear assignee",onMousedown:S[0]||(S[0]=xe(()=>{},["prevent"])),onClick:K})):C("",!0)]),_:1},8,["modelValue","placeholder","aria-label","aria-expanded","aria-activedescendant","loading"]),p.value?(i(),b("div",{key:0,id:c,role:"listbox","aria-label":e.ariaLabel??"Forge users",class:"absolute z-20 mt-1 w-full overflow-hidden rounded-md border border-default bg-default shadow-lg"},[x.value?(i(),b("p",nl,"Searching…")):o.value?(i(),b("p",il,"No users found.")):C("",!0),(i(!0),b(O,null,le(v.value,(Z,G)=>(i(),b("button",{id:r(G),key:Z.id,type:"button",role:"option","aria-selected":G===d.value,class:D(["block w-full px-3 py-2 text-left text-sm hover:bg-elevated",G===d.value?"bg-elevated":""]),onMousedown:S[2]||(S[2]=xe(()=>{},["prevent"])),onMouseenter:te=>d.value=G,onClick:te=>H(Z)}," @"+A(Z.username)+" — "+A(Z.name),43,ol))),128))],8,sl)):C("",!0)])}}}),ul={slots:{root:"relative flex items-start",base:["inline-flex items-center shrink-0 rounded-full border-2 border-transparent focus-visible:outline-3 data-[state=unchecked]:bg-accented","transition-[background] duration-200"],container:"flex items-center",thumb:"group pointer-events-none rounded-full bg-default shadow-lg ring-0 transition-transform duration-200 data-[state=unchecked]:translate-x-0 data-[state=unchecked]:rtl:-translate-x-0 flex items-center justify-center",icon:["absolute shrink-0 group-data-[state=unchecked]:text-dimmed opacity-0 size-10/12","transition-[color,opacity] duration-200"],wrapper:"ms-2",label:"block font-medium text-default",description:"text-muted"},variants:{color:{primary:{base:"data-[state=checked]:bg-primary outline-primary/25",icon:"group-data-[state=checked]:text-primary"},secondary:{base:"data-[state=checked]:bg-secondary outline-secondary/25",icon:"group-data-[state=checked]:text-secondary"},success:{base:"data-[state=checked]:bg-success outline-success/25",icon:"group-data-[state=checked]:text-success"},info:{base:"data-[state=checked]:bg-info outline-info/25",icon:"group-data-[state=checked]:text-info"},warning:{base:"data-[state=checked]:bg-warning outline-warning/25",icon:"group-data-[state=checked]:text-warning"},error:{base:"data-[state=checked]:bg-error outline-error/25",icon:"group-data-[state=checked]:text-error"},neutral:{base:"data-[state=checked]:bg-inverted outline-inverted/25",icon:"group-data-[state=checked]:text-highlighted"}},size:{xs:{base:"w-7",container:"h-4",thumb:"size-3 data-[state=checked]:translate-x-3 data-[state=checked]:rtl:-translate-x-3",wrapper:"text-xs"},sm:{base:"w-8",container:"h-4",thumb:"size-3.5 data-[state=checked]:translate-x-3.5 data-[state=checked]:rtl:-translate-x-3.5",wrapper:"text-xs"},md:{base:"w-9",container:"h-5",thumb:"size-4 data-[state=checked]:translate-x-4 data-[state=checked]:rtl:-translate-x-4",wrapper:"text-sm"},lg:{base:"w-10",container:"h-5",thumb:"size-4.5 data-[state=checked]:translate-x-4.5 data-[state=checked]:rtl:-translate-x-4.5",wrapper:"text-sm"},xl:{base:"w-11",container:"h-6",thumb:"size-5 data-[state=checked]:translate-x-5 data-[state=checked]:rtl:-translate-x-5",wrapper:"text-base"}},checked:{true:{icon:"group-data-[state=checked]:opacity-100"}},unchecked:{true:{icon:"group-data-[state=unchecked]:opacity-100"}},loading:{true:{icon:"animate-spin"}},highlight:{true:""},required:{true:{label:"after:content-['*'] after:ms-0.5 after:text-error"}},disabled:{true:{root:"opacity-75",base:"cursor-not-allowed",label:"cursor-not-allowed",description:"cursor-not-allowed"}}},compoundVariants:[{color:"primary",highlight:!0,class:{base:"ring ring-primary"}},{color:"secondary",highlight:!0,class:{base:"ring ring-secondary"}},{color:"success",highlight:!0,class:{base:"ring ring-success"}},{color:"info",highlight:!0,class:{base:"ring ring-info"}},{color:"warning",highlight:!0,class:{base:"ring ring-warning"}},{color:"error",highlight:!0,class:{base:"ring ring-error"}},{color:"neutral",highlight:!0,class:{base:"ring ring-inverted"}}],defaultVariants:{color:"primary",size:"md"}},Ge=Object.assign({inheritAttrs:!1},{__name:"Switch",props:{as:{type:null,required:!1},color:{type:null,required:!1},size:{type:null,required:!1},highlight:{type:Boolean,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1},checkedIcon:{type:null,required:!1},uncheckedIcon:{type:null,required:!1},label:{type:String,required:!1},description:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},disabled:{type:Boolean,required:!1},id:{type:String,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1},value:{type:String,required:!1},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1},trueValue:{type:null,required:!1},falseValue:{type:null,required:!1}},emits:["change","update:modelValue"],setup(e,{emit:n}){const l=e,a=Ce(),c=n,r=Re("switch",l),s=ze(),v=ot(rt(r,"required","value","defaultValue","modelValue","trueValue","falseValue"),c),{id:x,emitFormChange:u,emitFormInput:d,size:y,color:w,highlight:R,name:p,disabled:o,ariaAttrs:V}=dt(l),$=x.value??Ke(),U=Dt(),N=B(()=>{const{"data-state":K,...ee}=U;return ee}),q=B(()=>qe({extend:ul,...s.ui?.switch||{}})({size:y.value??r.size,color:w.value??r.color,highlight:R.value??r.highlight,required:r.required,loading:r.loading,disabled:o.value||r.loading}));function H(K){const ee=new Event("change",{target:{value:K}});c("change",ee),u(),d()}return(K,ee)=>(i(),E(t(ie),{as:t(r).as,"data-slot":K.$attrs["data-slot"]??"root",class:D(q.value.root({class:[t(r).ui?.root,t(r).class]}))},{default:T(()=>[g("div",{"data-slot":"container",class:D(q.value.container({class:t(r).ui?.container}))},[m(t(ra),de({id:t($)},{...t(v),...N.value,...t(V)},{name:t(p),disabled:t(o)||t(r).loading,"data-slot":"base",class:q.value.base({class:t(r).ui?.base}),"onUpdate:modelValue":H}),{default:T(()=>[m(t(da),{"data-slot":"thumb",class:D(q.value.thumb({class:t(r).ui?.thumb}))},{default:T(()=>[t(r).loading?(i(),E(me,{key:0,name:t(r).loadingIcon||t(s).ui.icons.loading,"data-slot":"icon",class:D(q.value.icon({class:t(r).ui?.icon,checked:!0,unchecked:!0}))},null,8,["name","class"])):(i(),b(O,{key:1},[t(r).checkedIcon?(i(),E(me,{key:0,name:t(r).checkedIcon,"data-slot":"icon",class:D(q.value.icon({class:t(r).ui?.icon,checked:!0}))},null,8,["name","class"])):C("",!0),t(r).uncheckedIcon?(i(),E(me,{key:1,name:t(r).uncheckedIcon,"data-slot":"icon",class:D(q.value.icon({class:t(r).ui?.icon,unchecked:!0}))},null,8,["name","class"])):C("",!0)],64))]),_:1},8,["class"])]),_:1},16,["id","name","disabled","class"])],2),t(r).label||a.label||t(r).description||a.description?(i(),b("div",{key:0,"data-slot":"wrapper",class:D(q.value.wrapper({class:t(r).ui?.wrapper}))},[t(r).label||a.label?(i(),E(t(pt),{key:0,for:t($),"data-slot":"label",class:D(q.value.label({class:t(r).ui?.label}))},{default:T(()=>[F(K.$slots,"label",{label:t(r).label},()=>[L(A(t(r).label),1)])]),_:3},8,["for","class"])):C("",!0),t(r).description||a.description?(i(),b("p",{key:1,"data-slot":"description",class:D(q.value.description({class:t(r).ui?.description}))},[F(K.$slots,"description",{description:t(r).description},()=>[L(A(t(r).description),1)])],2)):C("",!0)],2)):C("",!0)]),_:3},8,["as","data-slot","class"]))}}),dl=/^[a-z0-9]+(-[a-z0-9]+)*$/,cl=64;function bt(e){return e.length>=1&&e.length<=cl&&dl.test(e)}function pl(e){return/^https?:\/\/\S+$/.test(e.trim())}function vl(e){return!(!bt(e.name)||!pl(e.url))}function fl(e,n=!0){const l={url:e.url.trim(),enabled:e.enabled};return n&&(l.token=e.token),l}const ml={class:"space-y-4"},gl={class:"flex items-start justify-between gap-2"},hl={class:"text-sm font-semibold text-highlighted"},bl={class:"text-sm text-muted"},yl={key:0,class:"space-y-3"},kl={key:0,class:"space-y-2"},xl={key:1,class:"divide-y divide-default"},_l={class:"min-w-0"},wl={class:"flex items-center gap-2 flex-wrap"},Sl={class:"font-medium text-default truncate"},$l={class:"text-sm text-dimmed truncate font-mono"},Il={class:"flex items-center gap-1"},Vl={key:2,class:"text-center py-4 text-muted"},Cl={key:1,class:"space-y-4"},Rl={class:"flex items-center gap-2"},ql={class:"flex items-center justify-end gap-2"},fn=Y({__name:"CustomReposPanel",props:{project:{default:null},scope:{default:"project"},kind:{default:"skills"}},setup(e,{expose:n}){const l=e,a=Te(),c=B(()=>l.scope==="global"),r=B(()=>c.value?`/api/settings/custom-repos/${l.kind}`:`/api/projects/${l.project?.projectId}/custom-repos/${l.kind}`),s=B(()=>c.value||l.project!==null),v=B(()=>l.kind==="skills"?"skill":"agent"),x=B(()=>l.kind==="skills"?"Skill repositories":"Subagent repositories"),u=M([]),d=M(!1),y=M(null),w=M(!1),R=M(null),p=M({}),o=M(null),V=We({name:"",url:"",token:"",enabled:!0,isNew:!0}),$=B(()=>vl(V));function U(){V.name="",V.url="",V.token="",V.enabled=!0,V.isNew=!0,p.value={},o.value=null}async function N(){if(!s.value)return;d.value=!0;const{data:S,error:j,status:W}=await Q(r.value);if(d.value=!1,j){W!==401&&a.add({title:"Failed to load repositories",description:j,color:"error",icon:"i-lucide-alert-circle"}),u.value=[];return}u.value=S?.repos??[]}function q(){U(),R.value="add"}function H(S){U(),R.value=S.name,V.name=S.name,V.url=S.url,V.enabled=S.enabled,V.isNew=!1}function K(){R.value=null,U()}async function ee(){if(!s.value||!$.value)return;w.value=!0;const S=V.isNew||V.token.trim()!=="",j=fl(V,S),{error:W,status:Z,data:G}=await Q(`${r.value}/${encodeURIComponent(V.name)}`,{method:"PUT",body:JSON.stringify(j)});if(w.value=!1,W){Z===400&&G?.issues&&(p.value=Object.fromEntries(G.issues.map(te=>[te.path.join("."),te.message]))),a.add({title:"Save failed",description:W,color:"error",icon:"i-lucide-alert-circle"});return}a.add({title:V.isNew?"Added":"Updated",description:V.name,color:"success",icon:"i-lucide-check-circle"}),R.value=null,U(),await N()}async function z(S){if(!s.value)return;y.value=S;const{status:j,error:W}=await Q(`${r.value}/${encodeURIComponent(S)}`,{method:"DELETE"});if(y.value=null,j===204||j===404){a.add({title:"Deleted",description:S,color:"success",icon:"i-lucide-check-circle"}),o.value=null,await N();return}a.add({title:"Delete failed",description:W??"unknown",color:"error",icon:"i-lucide-alert-circle"})}return ce(()=>[l.project?.projectId,l.kind,l.scope],()=>{N()},{immediate:!0}),ye(()=>{N()}),n({loadRepos:N,startAdd:q}),(S,j)=>{const W=ge,Z=Ee,G=we,te=ke,se=He,I=Ge;return i(),b("div",ml,[g("div",gl,[g("div",null,[g("h3",hl,A(x.value),1),g("p",bl,A(c.value?"Applied to every project unless a project overrides a repository of the same name.":e.project?.projectPath??""),1)]),R.value===null?(i(),E(W,{key:0,label:`Add ${v.value} repo`,icon:"i-lucide-plus",color:"primary",variant:"outline",onClick:q},null,8,["label"])):C("",!0)]),R.value===null?(i(),b("div",yl,[d.value?(i(),b("div",kl,[(i(),b(O,null,le(2,h=>m(Z,{key:h,class:"h-12 w-full"})),64))])):(i(),b("ul",xl,[(i(!0),b(O,null,le(u.value,h=>(i(),b("li",{key:h.name,class:"flex items-center justify-between py-3 gap-2"},[g("div",_l,[g("div",wl,[g("p",Sl,A(h.name),1),h.enabled?C("",!0):(i(),E(G,{key:0,label:"Disabled",color:"neutral",variant:"subtle",size:"sm"})),h.hasToken?(i(),E(G,{key:1,label:"Token stored",color:"success",variant:"subtle",icon:"i-lucide-key-round",size:"sm"})):(i(),E(G,{key:2,label:"Public",color:"neutral",variant:"subtle",size:"sm"}))]),g("p",$l,A(h.url),1)]),g("div",Il,[m(W,{icon:"i-lucide-pencil",color:"neutral",variant:"ghost","aria-label":"Edit",onClick:J=>H(h)},null,8,["onClick"]),m(W,{icon:o.value===h.name?"i-lucide-check":"i-lucide-trash",color:o.value===h.name?"error":"neutral",variant:"ghost",loading:y.value===h.name,"aria-label":"Delete",onClick:J=>o.value===h.name?z(h.name):o.value=h.name},null,8,["icon","color","loading","onClick"])])]))),128))])),!d.value&&u.value.length===0?(i(),b("div",Vl," No "+A(v.value)+" repositories configured. ",1)):C("",!0)])):(i(),b("div",Cl,[m(se,{label:"Name",error:p.value.name??!1},{default:T(()=>[m(te,{modelValue:V.name,"onUpdate:modelValue":j[0]||(j[0]=h=>V.name=h),placeholder:e.kind==="skills"?"team-skills":"team-agents","aria-label":"Repository name",class:"w-full font-mono",disabled:R.value!=="add"},null,8,["modelValue","placeholder","disabled"]),j[4]||(j[4]=g("p",{class:"text-xs text-dimmed mt-1"},"Lowercase letters, digits, and single hyphens.",-1))]),_:1},8,["error"]),m(se,{label:"Git URL",error:p.value.url??!1},{default:T(()=>[m(te,{modelValue:V.url,"onUpdate:modelValue":j[1]||(j[1]=h=>V.url=h),placeholder:"https://example.com/team/skills.git","aria-label":"Git URL",class:"w-full font-mono"},null,8,["modelValue"])]),_:1},8,["error"]),m(se,{label:"Token (optional)"},{default:T(()=>[m(te,{modelValue:V.token,"onUpdate:modelValue":j[2]||(j[2]=h=>V.token=h),type:"password",placeholder:V.isNew?"Leave blank for a public repo":"Leave blank to keep the stored token","aria-label":"Access token",class:"w-full"},null,8,["modelValue","placeholder"]),j[5]||(j[5]=g("p",{class:"text-xs text-dimmed mt-1"},"Sent only to the repository's own host. Public repositories need no token.",-1))]),_:1}),g("div",Rl,[m(I,{modelValue:V.enabled,"onUpdate:modelValue":j[3]||(j[3]=h=>V.enabled=h),"aria-label":"Enabled"},null,8,["modelValue"]),j[6]||(j[6]=g("span",{class:"text-sm"},"Enabled",-1))]),g("div",ql,[m(W,{label:"Cancel",color:"neutral",variant:"outline",disabled:w.value,onClick:K},null,8,["disabled"]),m(W,{label:R.value==="add"?"Add":"Save",icon:"i-lucide-check",color:"primary",loading:w.value,disabled:!$.value||!t(bt)(V.name),onClick:ee},null,8,["label","loading","disabled"])])]))])}}}),zl={class:"space-y-2"},Ml={key:0,class:"text-sm font-medium text-default"},Ne=Y({__name:"KeyValueEditor",props:Ae({label:{}},{modelValue:{default:()=>[]},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const n=Me(e,"modelValue");return(l,a)=>{const c=ke,r=ge;return i(),b("div",zl,[e.label?(i(),b("p",Ml,A(e.label),1)):C("",!0),(i(!0),b(O,null,le(n.value,(s,v)=>(i(),b("div",{key:v,class:"flex items-center gap-2"},[m(c,{modelValue:s.key,"onUpdate:modelValue":x=>s.key=x,placeholder:"KEY","aria-label":"Key",class:"flex-1"},null,8,["modelValue","onUpdate:modelValue"]),m(c,{modelValue:s.value,"onUpdate:modelValue":x=>s.value=x,placeholder:"value","aria-label":"Value",class:"flex-1"},null,8,["modelValue","onUpdate:modelValue"]),m(r,{icon:"i-lucide-x",color:"neutral",variant:"ghost","aria-label":"Remove row",onClick:x=>n.value.splice(v,1)},null,8,["onClick"])]))),128)),m(r,{label:"Add row",icon:"i-lucide-plus",color:"neutral",variant:"outline",size:"sm",onClick:a[0]||(a[0]=s=>n.value.push({key:"",value:""}))})])}}}),Al=/^[a-zA-Z0-9_-]{1,50}$/,yt=new Set(["devbot-forge","chrome-devtools"]);function tt(e){const n={};for(const l of e)l.key.trim()&&(n[l.key.trim()]=l.value);return n}function kt(e){const n=e.timeout===""?void 0:Number(e.timeout);if(e.type==="local"){const c=e.command.trim().split(/\s+/).filter(Boolean);if(c.length===0)return null;const r={type:"local",command:c,enabled:e.enabled},s=tt(e.envRows);return Object.keys(s).length&&(r.environment=s),e.cwd.trim()&&(r.cwd=e.cwd.trim()),n!==void 0&&!Number.isNaN(n)&&(r.timeout=n),r}if(!/^https:\/\//i.test(e.url.trim()))return null;const l={type:"remote",url:e.url.trim(),enabled:e.enabled},a=tt(e.headerRows);if(Object.keys(a).length&&(l.headers=a),e.oauthMode==="disabled")l.oauth=!1;else if(e.oauthMode==="configured"){if(!e.oauthClientId.trim()||!e.oauthClientSecret.trim())return null;const c={clientId:e.oauthClientId.trim(),clientSecret:e.oauthClientSecret.trim()};e.oauthScope.trim()&&(c.scope=e.oauthScope.trim()),l.oauth=c}return n!==void 0&&!Number.isNaN(n)&&(l.timeout=n),l}function Tl(e){return!(!Al.test(e.name)||yt.has(e.name)||kt(e)===null||e.oauthMode==="configured"&&(!e.oauthClientId.trim()||!e.oauthClientSecret.trim()))}const El={class:"space-y-4"},jl={class:"flex items-start justify-between gap-2"},Bl={class:"text-lg font-semibold text-highlighted"},Ul={class:"text-sm text-muted"},Pl={key:0,class:"space-y-4"},Dl={key:0,class:"space-y-2"},Nl={key:1,class:"divide-y divide-default"},Fl={class:"min-w-0"},Ol={class:"flex items-center gap-2"},Ll={class:"font-medium text-default truncate"},Kl={class:"text-sm text-dimmed truncate"},Wl={class:"min-w-0"},Hl={class:"flex items-center gap-2 flex-wrap"},Gl={class:"font-medium text-default truncate"},Jl={class:"text-sm text-dimmed truncate"},Zl={class:"min-w-0"},Xl={class:"flex items-center gap-2 flex-wrap"},Ql={class:"font-medium text-default truncate"},Yl={key:2,class:"text-xs text-dimmed"},es={class:"text-sm text-dimmed truncate"},ts={class:"flex items-center gap-1"},as={key:2,class:"text-center py-4 text-muted"},ls={key:3,class:"text-center py-4 text-muted"},ss={key:1,class:"space-y-4"},ns={key:0,class:"text-sm text-error mt-1"},is={key:0,class:"text-sm text-error mt-1"},os={class:"flex items-center gap-2"},rs={class:"flex items-center justify-end gap-2"},mn=Y({__name:"McpConfigPanel",props:{project:{default:null},scope:{default:"project"},title:{default:""},description:{default:""}},setup(e,{expose:n}){const l=e,a=Te(),c=B(()=>l.scope==="global"),r=B(()=>c.value?"/api/settings/mcp":`/api/projects/${l.project?.projectId}/mcp`),s=B(()=>c.value||l.project!==null),v=M([]),x=M([]),u=M({}),d=M(!1),y=M(null),w=M(!1),R=M(null),p=M(null),o=We({name:"",type:"local",enabled:!0,timeout:"",command:"",cwd:"",envRows:[],url:"",headerRows:[],oauthMode:"none",oauthClientId:"",oauthClientSecret:"",oauthScope:"",authPaste:""}),V=[{name:"chrome-devtools",summary:"local · chromium (always active)"},{name:"devbot-forge",summary:"remote · devbot (always active)"}],$=M({}),U=M(null),N=M(null),q=B(()=>o.type==="remote"&&o.oauthMode!=="disabled"),H=B(()=>Tl(o));async function K(){if(!s.value)return;d.value=!0;const{data:f,error:k,status:P}=await Q(r.value);if(k){P!==401&&a.add({title:"Failed to load MCP servers",description:k,color:"error",icon:"i-lucide-alert-circle"}),v.value=[],x.value=[],u.value={},d.value=!1;return}v.value=f?.servers??[],x.value=f?.inherited??[],u.value={};for(const oe of v.value)oe.config.type==="remote"&&oe.config.oauth!==!1&&ee(oe.name);d.value=!1}async function ee(f){if(!s.value)return;const{data:k,status:P}=await Q(`${r.value}/${encodeURIComponent(f)}/auth`);if(P===404||!k){u.value[f]=null;return}u.value[f]=k.summary}function z(f){return f.config.type==="local"?`local · ${f.config.command.join(" ")}`:`remote · ${f.config.url}`}function S(f){const k=u.value[f];if(k===void 0)return null;if(k===null)return{label:"Not authenticated",color:"neutral",icon:"i-lucide-circle-slash"};const P=k.expiresAt!==void 0&&k.expiresAt*1e3<Date.now();return P&&k.hasRefreshToken?{label:"Expired · refreshes on next run",color:"warning",icon:"i-lucide-refresh-cw"}:P?{label:"Expired",color:"error",icon:"i-lucide-alert-circle"}:{label:"Authenticated",color:"success",icon:"i-lucide-check-circle"}}function j(f){if(f.config.type!=="remote"||f.config.oauth===!1)return null;const k=f.authSummary;if(!k)return{label:"Not authenticated",color:"neutral",icon:"i-lucide-circle-slash"};const P=k.expiresAt!==void 0&&k.expiresAt*1e3<Date.now();return P&&k.hasRefreshToken?{label:"Expired · refreshes on next run",color:"warning",icon:"i-lucide-refresh-cw"}:P?{label:"Expired",color:"error",icon:"i-lucide-alert-circle"}:{label:"Authenticated",color:"success",icon:"i-lucide-check-circle"}}function W(f){return u.value[f]?.hasRefreshToken===!0}function Z(f){const k=u.value[f];return!k||k.expiresAt===void 0?null:new Date(k.expiresAt*1e3).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}function G(){I(),p.value="add"}function te(f){I(),p.value=f.name,o.name=f.name,o.type=f.config.type,o.enabled=f.config.enabled??!0,o.timeout=f.config.timeout??"",f.config.type==="local"?(o.command=f.config.command.join(" "),o.cwd=f.config.cwd??"",o.envRows=Object.entries(f.config.environment??{}).map(([k,P])=>({key:k,value:P}))):(o.url=f.config.url,o.headerRows=Object.entries(f.config.headers??{}).map(([k,P])=>({key:k,value:P})),f.config.oauth===!1?o.oauthMode="disabled":f.config.oauth?(o.oauthMode="configured",o.oauthClientId=f.config.oauth.clientId,o.oauthClientSecret=f.config.oauth.clientSecret,o.oauthScope=f.config.oauth.scope??""):o.oauthMode="none")}function se(){p.value=null}function I(){o.name="",o.type="local",o.enabled=!0,o.timeout="",o.command="",o.cwd="",o.envRows=[],o.url="",o.headerRows=[],o.oauthMode="none",o.oauthClientId="",o.oauthClientSecret="",o.oauthScope="",o.authPaste="",$.value={},U.value=null,N.value=null}async function h(){if(!s.value||!H.value)return;const f=kt(o);w.value=!0;const{error:k,status:P,data:oe}=await Q(`${r.value}/${encodeURIComponent(o.name)}`,{method:"PUT",body:JSON.stringify(f)});if(w.value=!1,k){P===400&&oe?.issues?($.value=Object.fromEntries(oe.issues.map(X=>[X.path.join("."),X.message])),a.add({title:"Validation error",description:oe.issues.map(X=>X.message).join("; "),color:"error",icon:"i-lucide-alert-circle"})):P===409?a.add({title:"Reserved name",description:`"${o.name}" is reserved.`,color:"error",icon:"i-lucide-alert-circle"}):a.add({title:"Save failed",description:k,color:"error",icon:"i-lucide-alert-circle"});return}if(o.authPaste.trim()&&q.value){const X=await ne(o.name);if(X){a.add({title:"Saved, but tokens failed",description:X,color:"warning",icon:"i-lucide-alert-triangle"}),p.value=null,await K();return}}a.add({title:p.value==="add"?"Added":"Updated",description:o.name,color:"success",icon:"i-lucide-check-circle"}),p.value=null,await K()}const J=B(()=>{if(!o.authPaste.trim())return!0;try{return JSON.parse(o.authPaste.trim()),!0}catch{return!1}});async function ne(f){if(!s.value)return"no scope";const k=o.authPaste.trim();if(!k)return"empty";let P;try{P=JSON.parse(k)}catch(re){return re instanceof Error?re.message:"invalid JSON"}const{error:oe,status:X}=await Q(`${r.value}/${encodeURIComponent(f)}/auth`,{method:"PUT",body:JSON.stringify(P)});return oe?X===404?"server not found — save the config first":X===400?"invalid entry — check tokens.accessToken is present":oe:null}async function ae(f){if(!s.value)return;y.value=f+":auth";const{error:k,status:P}=await Q(`${r.value}/${encodeURIComponent(f)}/auth`,{method:"DELETE"});if(y.value=null,P===204){a.add({title:"Tokens cleared",description:f,color:"success",icon:"i-lucide-check-circle"}),u.value[f]=null;return}a.add({title:"Clear failed",description:k??"unknown",color:"error",icon:"i-lucide-alert-circle"})}async function he(f){if(!s.value)return;R.value=f;const{data:k,error:P}=await Q(`${r.value}/${encodeURIComponent(f)}/auth/refresh`,{method:"POST"});if(R.value=null,P||!k){a.add({title:"Refresh failed",description:P??"unknown",color:"error",icon:"i-lucide-alert-circle"});return}u.value[f]=k.summary,a.add({title:"Tokens refreshed",description:f,color:"success",icon:"i-lucide-check-circle"})}async function ve(f){if(!s.value)return;y.value=f;const{status:k,error:P}=await Q(`${r.value}/${encodeURIComponent(f)}`,{method:"DELETE"});if(y.value=null,k===204||k===404){a.add({title:"Deleted",description:f,color:"success",icon:"i-lucide-check-circle"}),U.value=null,await K();return}a.add({title:"Delete failed",description:P??"unknown",color:"error",icon:"i-lucide-alert-circle"})}const fe=[{label:"Local",value:"local"},{label:"Remote",value:"remote"}],Se=[{label:"No OAuth",value:"none"},{label:"Disabled (oauth: false)",value:"disabled"},{label:"Configured",value:"configured"}];return ye(()=>{K()}),n({loadServers:K,startAdd:G}),(f,k)=>{const P=ge,oe=Ee,X=we,re=ke,ue=He,Je=Zt,_t=Da,wt=Ge;return i(),b("div",El,[g("div",jl,[g("div",null,[g("h2",Bl,A(e.title||(c.value?"Global MCP servers":"Configure MCP servers")),1),g("p",Ul,A(e.description||(c.value?"Available to every project (a project server with the same name overrides it).":e.project?.projectPath??"")),1)]),p.value===null?(i(),E(P,{key:0,label:"Add server",icon:"i-lucide-plus",color:"primary",variant:"outline",onClick:G})):C("",!0)]),p.value===null?(i(),b("div",Pl,[d.value?(i(),b("div",Dl,[(i(),b(O,null,le(3,_=>m(oe,{key:_,class:"h-12 w-full"})),64))])):(i(),b("ul",Nl,[(i(),b(O,null,le(V,_=>g("li",{key:_.name,class:"flex items-center justify-between py-3"},[g("div",Fl,[g("div",Ol,[g("p",Ll,A(_.name),1),m(X,{label:"Internal",color:"primary",variant:"subtle",icon:"i-lucide-shield"})]),g("p",Kl,A(_.summary),1)]),m(X,{label:"Always active",color:"success",variant:"subtle",icon:"i-lucide-check-circle"})])),64)),(i(!0),b(O,null,le(x.value,_=>(i(),b("li",{key:"global:"+_.name,class:"flex items-center justify-between py-3 gap-2"},[g("div",Wl,[g("div",Hl,[g("p",Gl,A(_.name),1),m(X,{label:"Inherited",color:"neutral",variant:"subtle",icon:"i-lucide-globe"}),_.enabled?C("",!0):(i(),E(X,{key:0,label:"Disabled",color:"warning",variant:"subtle",icon:"i-lucide-circle-off"})),_.overriddenByProject?(i(),E(X,{key:1,label:"Overridden",color:"neutral",variant:"subtle",icon:"i-lucide-replace"})):C("",!0),j(_)?(i(),E(X,{key:2,label:j(_).label,color:j(_).color,icon:j(_).icon,variant:"subtle",size:"sm"},null,8,["label","color","icon"])):C("",!0)]),g("p",Jl,A(z(_)),1)]),k[14]||(k[14]=g("span",{class:"text-xs text-dimmed whitespace-nowrap"},"from Settings → MCP",-1))]))),128)),(i(!0),b(O,null,le(v.value,_=>(i(),b("li",{key:_.name,class:"flex items-center justify-between py-3 gap-2"},[g("div",Zl,[g("div",Xl,[g("p",Ql,A(_.name),1),(_.config.enabled??!0)===!1?(i(),E(X,{key:0,label:"Disabled",color:"warning",variant:"subtle",icon:"i-lucide-circle-off"})):C("",!0),S(_.name)?(i(),E(X,{key:1,label:S(_.name).label,color:S(_.name).color,icon:S(_.name).icon,variant:"subtle",size:"sm"},null,8,["label","color","icon"])):C("",!0),Z(_.name)?(i(),b("span",Yl,"expires "+A(Z(_.name)),1)):C("",!0)]),g("p",es,A(z(_)),1)]),g("div",ts,[W(_.name)?(i(),E(P,{key:0,icon:"i-lucide-refresh-cw",color:"neutral",variant:"ghost","aria-label":"Refresh tokens now",loading:R.value===_.name,onClick:Ue=>he(_.name)},null,8,["loading","onClick"])):C("",!0),S(_.name)!==null?(i(),E(P,{key:1,icon:N.value===_.name?"i-lucide-check":S(_.name)?.label==="Authenticated"?"i-lucide-key-round":"i-lucide-key",color:N.value===_.name?"error":"neutral",variant:"ghost","aria-label":S(_.name)?.label==="Authenticated"?"Manage tokens":"Paste tokens",loading:y.value===_.name+":auth",onClick:Ue=>S(_.name)?.label==="Authenticated"?N.value===_.name?ae(_.name):N.value=_.name:te(_)},null,8,["icon","color","aria-label","loading","onClick"])):C("",!0),m(P,{icon:"i-lucide-pencil",color:"neutral",variant:"ghost","aria-label":"Edit",onClick:Ue=>te(_)},null,8,["onClick"]),m(P,{icon:U.value===_.name?"i-lucide-check":"i-lucide-trash",color:U.value===_.name?"error":"neutral",variant:"ghost",loading:y.value===_.name,"aria-label":"Delete",onClick:Ue=>U.value===_.name?ve(_.name):U.value=_.name},null,8,["icon","color","loading","onClick"])])]))),128))])),!d.value&&v.value.length===0&&x.value.length===0?(i(),b("div",as,A(c.value?"No global MCP servers configured.":"No external MCP servers configured for this project."),1)):!d.value&&v.value.length===0&&x.value.length>0?(i(),b("div",ls,A(c.value?"":"No project-specific MCP servers — this project uses the inherited global servers above."),1)):C("",!0)])):(i(),b("div",ss,[m(ue,{label:"Name",error:$.value.name??!1},{default:T(()=>[m(re,{modelValue:o.name,"onUpdate:modelValue":k[0]||(k[0]=_=>o.name=_),placeholder:"e.g. sentry","aria-label":"Server name",class:"w-full",disabled:p.value!=="add"},null,8,["modelValue","disabled"]),t(yt).has(o.name)?(i(),b("p",ns,'"'+A(o.name)+'" is reserved.',1)):C("",!0)]),_:1},8,["error"]),m(ue,{label:"Type"},{default:T(()=>[m(Je,{modelValue:o.type,"onUpdate:modelValue":k[1]||(k[1]=_=>o.type=_),items:fe,disabled:p.value!=="add","aria-label":"Server type"},null,8,["modelValue","disabled"])]),_:1}),o.type==="local"?(i(),b(O,{key:0},[m(ue,{label:"Command",error:$.value.command??!1},{default:T(()=>[m(re,{modelValue:o.command,"onUpdate:modelValue":k[2]||(k[2]=_=>o.command=_),placeholder:"npx -y @mcp/server","aria-label":"Command (space-separated)",class:"w-full"},null,8,["modelValue"]),k[15]||(k[15]=g("p",{class:"text-xs text-dimmed mt-1"},"Whitespace-separated; no shell quoting.",-1))]),_:1},8,["error"]),m(Ne,{modelValue:o.envRows,"onUpdate:modelValue":k[3]||(k[3]=_=>o.envRows=_),label:"Environment"},null,8,["modelValue"]),m(ue,{label:"Working directory (optional)"},{default:T(()=>[m(re,{modelValue:o.cwd,"onUpdate:modelValue":k[4]||(k[4]=_=>o.cwd=_),"aria-label":"cwd",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):(i(),b(O,{key:1},[m(ue,{label:"URL",error:$.value.url??!1},{default:T(()=>[m(re,{modelValue:o.url,"onUpdate:modelValue":k[5]||(k[5]=_=>o.url=_),placeholder:"https://...","aria-label":"Server URL",class:"w-full"},null,8,["modelValue"])]),_:1},8,["error"]),m(Ne,{modelValue:o.headerRows,"onUpdate:modelValue":k[6]||(k[6]=_=>o.headerRows=_),label:"Headers"},null,8,["modelValue"]),m(ue,{label:"OAuth"},{default:T(()=>[m(Je,{modelValue:o.oauthMode,"onUpdate:modelValue":k[7]||(k[7]=_=>o.oauthMode=_),items:Se,"aria-label":"OAuth mode"},null,8,["modelValue"]),k[16]||(k[16]=g("p",{class:"text-xs text-dimmed mt-1"},[L(" Use "),g("code",null,"Disabled"),L(" + an "),g("code",null,"Authorization"),L(" header for API-key providers. Use "),g("code",null,"Configured"),L(" or leave at "),g("code",null,"No OAuth"),L(" for OAuth-gated providers, then paste tokens below. ")],-1))]),_:1}),o.oauthMode==="configured"?(i(),b(O,{key:0},[m(ue,{label:"Client ID"},{default:T(()=>[m(re,{modelValue:o.oauthClientId,"onUpdate:modelValue":k[8]||(k[8]=_=>o.oauthClientId=_),"aria-label":"OAuth client id",class:"w-full"},null,8,["modelValue"])]),_:1}),m(ue,{label:"Client secret"},{default:T(()=>[m(re,{modelValue:o.oauthClientSecret,"onUpdate:modelValue":k[9]||(k[9]=_=>o.oauthClientSecret=_),type:"password","aria-label":"OAuth client secret",class:"w-full"},null,8,["modelValue"])]),_:1}),m(ue,{label:"Scope (optional)"},{default:T(()=>[m(re,{modelValue:o.oauthScope,"onUpdate:modelValue":k[10]||(k[10]=_=>o.oauthScope=_),"aria-label":"OAuth scope",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):C("",!0),q.value?(i(),E(ue,{key:1,label:"OAuth tokens (optional)"},{default:T(()=>[m(_t,{modelValue:o.authPaste,"onUpdate:modelValue":k[11]||(k[11]=_=>o.authPaste=_),placeholder:"Paste the entry for this server from ~/.local/share/opencode/mcp-auth.json",rows:5,"aria-label":"Paste mcp-auth.json entry",class:"w-full font-mono text-xs"},null,8,["modelValue"]),o.authPaste.trim()&&!J.value?(i(),b("p",is," Invalid JSON. ")):C("",!0),k[17]||(k[17]=g("p",{class:"text-xs text-dimmed mt-1"},[L(" Run "),g("code",null,"opencode mcp auth <name>"),L(" on your machine, then paste the entry for "),g("code",null,"<name>"),L(" from "),g("code",null,"~/.local/share/opencode/mcp-auth.json"),L(". "),g("a",{href:"https://opencode.ai/docs/mcp-servers/#oauth",target:"_blank",rel:"noopener",class:"underline"},"Docs"),L(". ")],-1))]),_:1})):C("",!0)],64)),g("div",os,[m(wt,{modelValue:o.enabled,"onUpdate:modelValue":k[12]||(k[12]=_=>o.enabled=_),"aria-label":"Enabled"},null,8,["modelValue"]),k[18]||(k[18]=g("span",{class:"text-sm"},"Enabled",-1))]),m(ue,{label:"Timeout ms (optional)"},{default:T(()=>[m(re,{modelValue:o.timeout,"onUpdate:modelValue":k[13]||(k[13]=_=>o.timeout=_),type:"number","aria-label":"Timeout",class:"w-full"},null,8,["modelValue"])]),_:1}),g("div",rs,[m(P,{label:"Cancel",color:"neutral",variant:"outline",disabled:w.value,onClick:se},null,8,["disabled"]),m(P,{label:p.value==="add"?"Add":"Save",icon:"i-lucide-check",color:"primary",loading:w.value,disabled:!H.value||!!(q.value&&o.authPaste.trim()&&!J.value),onClick:h},null,8,["label","loading","disabled"])])]))])}}}),us=/^[a-zA-Z0-9_-]{1,50}$/,Fe=[{label:"Run started",value:"run.started"},{label:"Run succeeded",value:"run.succeeded"},{label:"Run failed",value:"run.failed"},{label:"Run cancelled",value:"run.cancelled"},{label:"Merge/pull request created",value:"mr.created"},{label:"Merge/pull request updated",value:"mr.updated"}];function ds(e){const n={};for(const l of e)l.key.trim()&&(n[l.key.trim()]=l.value);return n}function xt(e){if(e.events.length===0)return null;const n=e.url.trim();return/^https?:\/\//i.test(n)?{url:n,events:[...e.events],headers:ds(e.headerRows),enabled:e.enabled}:null}function cs(e){return us.test(e.name)?xt(e)!==null:!1}const ps={class:"space-y-3"},vs={key:0,class:"space-y-2"},fs={key:1,class:"text-sm text-muted py-6 text-center"},ms={key:2,class:"divide-y divide-default"},gs={class:"min-w-0"},hs={class:"text-sm text-default"},bs={class:"ml-2"},ys={class:"text-xs text-dimmed"},ks={key:0},xs={key:1},_s={class:"flex items-center gap-1 shrink-0"},ws={key:3,class:"rounded-md border border-default p-3 space-y-2"},Ss={class:"flex items-center justify-between"},$s={class:"text-sm font-medium text-default"},Is={class:"text-xs overflow-auto max-h-60 bg-elevated rounded p-2"},Vs={class:"text-xs overflow-auto max-h-40 bg-elevated rounded p-2"},Cs=Y({__name:"WebhookDeliveriesSlideover",props:Ae({basePath:{},name:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:["update:open"],setup(e){const n=Me(e,"open"),l=e,a=Te(),c=M([]),r=M(!1),s=M(null),v=M(null);function x(p){return Fe.find(o=>o.value===p)?.label??p}function u(p){return p==="succeeded"?"success":p==="failed"?"error":p==="delivering"?"warning":"neutral"}function d(p){return new Date(p*1e3).toLocaleString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}ce(n,async p=>{!p||!l.name||(s.value=null,await y())});async function y(){if(!l.name)return;r.value=!0;const{data:p}=await Q(`${l.basePath}/${encodeURIComponent(l.name)}/deliveries`);r.value=!1,c.value=p?.deliveries??[]}async function w(p){if(!l.name)return;const{data:o}=await Q(`${l.basePath}/${encodeURIComponent(l.name)}/deliveries/${p}`);s.value=o?.delivery??null}async function R(p){if(!l.name)return;v.value=p;const{status:o}=await Q(`${l.basePath}/${encodeURIComponent(l.name)}/deliveries/${p}/replay`,{method:"POST"});v.value=null,o===200&&(a.add({title:"Delivery re-queued",color:"success",icon:"i-lucide-check-circle"}),await y())}return(p,o)=>{const V=Ee,$=we,U=ge,N=Nt;return i(),E(N,{open:n.value,"onUpdate:open":o[1]||(o[1]=q=>n.value=q),title:"Webhook deliveries",description:e.name??"",ui:{content:"max-w-4xl"}},{body:T(()=>[g("div",ps,[r.value&&c.value.length===0?(i(),b("div",vs,[(i(),b(O,null,le(3,q=>m(V,{key:q,class:"h-10 w-full"})),64))])):c.value.length===0?(i(),b("p",fs,"No deliveries yet.")):(i(),b("ul",ms,[(i(!0),b(O,null,le(c.value,q=>(i(),b("li",{key:q.id,class:"flex items-center justify-between gap-2 py-3"},[g("div",gs,[g("p",hs,[m($,{color:u(q.status),variant:"subtle",size:"sm",label:q.status},null,8,["color","label"]),g("span",bs,A(x(q.event)),1)]),g("p",ys,[L(A(d(q.createdAt))+" · attempts "+A(q.attempts)+" ",1),q.responseStatus?(i(),b("span",ks," · HTTP "+A(q.responseStatus),1)):C("",!0),q.lastError?(i(),b("span",xs," · "+A(q.lastError),1)):C("",!0)])]),g("div",_s,[m(U,{icon:"i-lucide-eye",color:"neutral",variant:"ghost",size:"sm","aria-label":`View delivery ${q.id}`,onClick:H=>w(q.id)},null,8,["aria-label","onClick"]),m(U,{icon:"i-lucide-rotate-ccw",color:"neutral",variant:"ghost",size:"sm","aria-label":`Replay delivery ${q.id}`,loading:v.value===q.id,onClick:H=>R(q.id)},null,8,["aria-label","loading","onClick"])])]))),128))])),s.value?(i(),b("div",ws,[g("div",Ss,[g("p",$s,"Delivery #"+A(s.value.id),1),m(U,{icon:"i-lucide-x",color:"neutral",variant:"ghost",size:"sm","aria-label":"Close delivery",onClick:o[0]||(o[0]=q=>s.value=null)})]),o[3]||(o[3]=g("p",{class:"text-xs text-dimmed"},"Payload",-1)),g("pre",Is,A(s.value.payload),1),s.value.responseBody?(i(),b(O,{key:0},[o[2]||(o[2]=g("p",{class:"text-xs text-dimmed"},"Response",-1)),g("pre",Vs,A(s.value.responseBody),1)],64)):C("",!0)])):C("",!0)])]),_:1},8,["open","description"])}}}),Rs={class:"space-y-4"},qs={key:0,class:"space-y-4"},zs={key:0,class:"space-y-2"},Ms={key:0,class:"divide-y divide-default"},As={class:"flex items-start justify-between gap-2"},Ts={class:"min-w-0"},Es={class:"flex items-center gap-2 flex-wrap"},js={class:"font-medium text-default truncate"},Bs={class:"text-sm text-dimmed truncate"},Us={class:"text-xs text-dimmed"},Ps={class:"flex items-center gap-1 shrink-0"},Ds={key:0,class:"rounded-md border border-default px-3 py-2"},Ns={class:"text-xs break-all text-default"},Fs={key:1,class:"text-center py-4 text-muted"},Os={key:1,class:"space-y-4"},Ls={class:"flex items-center gap-2"},Ks={key:0,class:"flex items-center gap-2 rounded-md border border-default px-3 py-2"},Ws={class:"flex items-center justify-end gap-2"},gn=Y({__name:"WebhookConfigPanel",props:{project:{default:null},scope:{default:"project"}},setup(e){const n=e,l=Te(),a=B(()=>n.scope==="global"),c=B(()=>a.value?"/api/settings/webhooks":`/api/projects/${n.project?.projectId}/webhooks`),r=B(()=>a.value||n.project!==null),s=M([]),v=M(!1),x=M(!1),u=M(null),d=M(null),y=M({}),w=M(null),R=M(null),p=M(null),o=M(!1),V=M(null),$=We({name:"",url:"",events:[],headerRows:[],enabled:!0}),U=M({}),N=B(()=>cs($)),q=Fe;ye(()=>{H()});async function H(){if(!r.value)return;v.value=!0;const{data:I,error:h,status:J}=await Q(c.value);if(v.value=!1,h){J!==401&&l.add({title:"Failed to load webhooks",description:h,color:"error",icon:"i-lucide-alert-circle"}),s.value=[];return}s.value=I?.webhooks??[]}function K(I){return Fe.find(h=>h.value===I)?.label??I}function ee(){j(),p.value="add"}function z(I){j(),p.value=I.name,$.name=I.name,$.url=I.url,$.events=[...I.events],$.enabled=I.enabled,$.headerRows=I.headers.map(h=>({key:h.name,value:""}))}function S(){p.value=null}function j(){$.name="",$.url="",$.events=[],$.headerRows=[],$.enabled=!0,U.value={},w.value=null,R.value=null}async function W(){if(!r.value||!N.value)return;const I=xt($);x.value=!0;const{error:h,status:J,data:ne}=await Q(`${c.value}/${encodeURIComponent($.name)}`,{method:"PUT",body:JSON.stringify({...I,...R.value===$.name?{secret:"rotate"}:{}})});if(x.value=!1,h){J===400&&ne?.issues?(U.value=Object.fromEntries(ne.issues.map(ae=>[ae.path.join("."),ae.message])),l.add({title:"Validation error",description:ne.issues.map(ae=>ae.message).join("; "),color:"error",icon:"i-lucide-alert-circle"})):l.add({title:"Save failed",description:h,color:"error",icon:"i-lucide-alert-circle"});return}l.add({title:p.value==="add"?"Added":"Updated",description:$.name,color:"success",icon:"i-lucide-check-circle"}),delete y.value[$.name],p.value=null,await H()}async function Z(I){if(!r.value)return;const{status:h,error:J}=await Q(`${c.value}/${encodeURIComponent(I)}`,{method:"DELETE"});if(h===204||h===404){l.add({title:"Deleted",description:I,color:"success",icon:"i-lucide-check-circle"}),w.value=null,V.value===I&&(o.value=!1),await H();return}l.add({title:"Delete failed",description:J??"unknown",color:"error",icon:"i-lucide-alert-circle"})}async function G(I){if(!r.value)return;d.value=I;const{data:h,error:J,status:ne}=await Q(`${c.value}/${encodeURIComponent(I)}/secret`);if(d.value=null,ne===404||!h){l.add({title:"Secret unavailable",description:J??"not found",color:"error",icon:"i-lucide-alert-circle"});return}y.value[I]=h.secret}async function te(I){if(!r.value)return;u.value=I;const{data:h,error:J,status:ne}=await Q(`${c.value}/${encodeURIComponent(I)}/test`,{method:"POST"});if(u.value=null,ne!==200||!h){l.add({title:"Test failed",description:J??"unknown",color:"error",icon:"i-lucide-alert-circle"});return}l.add({title:h.ok?"Test delivered":"Test failed",description:h.ok?`HTTP ${h.status}`:h.error||`HTTP ${h.status}`,color:h.ok?"success":"error",icon:h.ok?"i-lucide-check-circle":"i-lucide-alert-circle"})}function se(I){V.value=I,o.value=!0}return(I,h)=>{const J=Ee,ne=we,ae=ge,he=ke,ve=He,fe=Jt,Se=Ge;return i(),b("div",Rs,[p.value===null?(i(),b("div",qs,[h[8]||(h[8]=Ft('<p class="text-sm text-dimmed"> DevBot POSTs signed JSON events to these URLs when a run starts (<code>run.started</code>), reaches a terminal state (<code>run.succeeded</code> / <code>run.failed</code> / <code>run.cancelled</code>) or a merge/pull request is created or updated (<code>mr.created</code> / <code>mr.updated</code>). Requests are signed with <code>X-DevBot-Signature-256</code>. </p>',1)),v.value?(i(),b("div",zs,[(i(),b(O,null,le(3,f=>m(J,{key:f,class:"h-12 w-full"})),64))])):(i(),b(O,{key:1},[s.value.length>0?(i(),b("ul",Ms,[(i(!0),b(O,null,le(s.value,f=>(i(),b("li",{key:f.name,class:"py-3 space-y-2"},[g("div",As,[g("div",Ts,[g("div",Es,[g("p",js,A(f.name),1),f.enabled?C("",!0):(i(),E(ne,{key:0,label:"Disabled",color:"neutral",variant:"subtle",size:"sm"}))]),g("p",Bs,A(f.url),1),g("p",Us,A(f.events.map(K).join(", ")),1)]),g("div",Ps,[m(ae,{icon:d.value===f.name?"i-lucide-loader":"i-lucide-key-round",color:"neutral",variant:"ghost","aria-label":"Reveal signing secret",loading:d.value===f.name,onClick:k=>G(f.name)},null,8,["icon","loading","onClick"]),m(ae,{icon:"i-lucide-send",color:"neutral",variant:"ghost","aria-label":"Send test delivery",loading:u.value===f.name,onClick:k=>te(f.name)},null,8,["loading","onClick"]),m(ae,{icon:"i-lucide-list",color:"neutral",variant:"ghost","aria-label":`View deliveries for ${f.name}`,onClick:k=>se(f.name)},null,8,["aria-label","onClick"]),m(ae,{icon:"i-lucide-pencil",color:"neutral",variant:"ghost","aria-label":"Edit webhook",onClick:k=>z(f)},null,8,["onClick"]),m(ae,{icon:w.value===f.name?"i-lucide-check":"i-lucide-trash",color:w.value===f.name?"error":"neutral",variant:"ghost","aria-label":"Delete webhook",onClick:k=>w.value===f.name?Z(f.name):w.value=f.name},null,8,["icon","color","onClick"])])]),y.value[f.name]?(i(),b("div",Ds,[h[7]||(h[7]=g("p",{class:"text-xs text-dimmed mb-1"},"Signing secret (X-DevBot-Signature-256: sha256=HMAC(body))",-1)),g("code",Ns,A(y.value[f.name]),1)])):C("",!0)]))),128))])):(i(),b("div",Fs,A(a.value?"No global webhooks configured.":"No webhooks configured for this project."),1)),m(ae,{label:"Add webhook",icon:"i-lucide-plus",color:"primary",variant:"outline",class:"w-full justify-center",onClick:ee})],64))])):(i(),b("div",Os,[m(ve,{label:"Name",error:U.value.name??!1},{default:T(()=>[m(he,{modelValue:$.name,"onUpdate:modelValue":h[0]||(h[0]=f=>$.name=f),placeholder:"e.g. ci","aria-label":"Webhook name",class:"w-full",disabled:p.value!=="add"},null,8,["modelValue","disabled"])]),_:1},8,["error"]),m(ve,{label:"URL",error:U.value.url??!1},{default:T(()=>[m(he,{modelValue:$.url,"onUpdate:modelValue":h[1]||(h[1]=f=>$.url=f),placeholder:"https://hooks.example.com/ci","aria-label":"Webhook URL",class:"w-full"},null,8,["modelValue"])]),_:1},8,["error"]),m(ve,{label:"Events",error:U.value.events??!1},{default:T(()=>[m(fe,{modelValue:$.events,"onUpdate:modelValue":h[2]||(h[2]=f=>$.events=f),items:t(q),multiple:"","value-key":"value","label-key":"label",placeholder:"Select events","aria-label":"Webhook events",class:"w-full"},null,8,["modelValue","items"])]),_:1},8,["error"]),m(Ne,{modelValue:$.headerRows,"onUpdate:modelValue":h[3]||(h[3]=f=>$.headerRows=f),label:"Custom headers (empty value keeps the stored one)"},null,8,["modelValue"]),g("div",Ls,[m(Se,{modelValue:$.enabled,"onUpdate:modelValue":h[4]||(h[4]=f=>$.enabled=f),"aria-label":"Enabled"},null,8,["modelValue"]),h[9]||(h[9]=g("span",{class:"text-sm"},"Enabled",-1))]),p.value!=="add"?(i(),b("div",Ks,[m(Se,{"model-value":R.value===$.name,"aria-label":"Rotate signing secret","onUpdate:modelValue":h[5]||(h[5]=f=>R.value=f?$.name:null)},null,8,["model-value"]),h[10]||(h[10]=g("span",{class:"text-sm"},"Rotate signing secret on save",-1))])):C("",!0),h[11]||(h[11]=g("p",{class:"text-xs text-dimmed"},[L(" Requests are POSTed as JSON with "),g("code",null,"X-DevBot-Event"),L(", "),g("code",null,"X-DevBot-Delivery"),L(", and "),g("code",null,"X-DevBot-Signature-256: sha256=<HMAC-SHA256(body)>"),L(". ")],-1)),g("div",Ws,[m(ae,{label:"Cancel",color:"neutral",variant:"outline",disabled:x.value,onClick:S},null,8,["disabled"]),m(ae,{label:p.value==="add"?"Add":"Save",icon:"i-lucide-check",color:"primary",loading:x.value,disabled:!N.value,onClick:W},null,8,["label","loading","disabled"])])])),m(Cs,{open:o.value,"onUpdate:open":h[6]||(h[6]=f=>o.value=f),"base-path":c.value,name:V.value},null,8,["open","base-path","name"])])}}});export{De as A,Qs as D,_e as L,ta as R,vn as _,la as a,an as b,pt as c,He as d,cn as e,pn as f,Da as g,Ge as h,tn as i,on as j,Xs as k,gn as l,dn as m,mn as n,fn as o,nn as p,Ys as q,en as r,wa as s,un as t,Xt as u,sn as v,ln as w,rn as x};
@@ -1 +1 @@
1
- import{d as c,e as i,c as a,f as r,t as e}from"./index-C5RBBrPj.js";const m={class:"min-w-0"},d={class:"text-sm text-dimmed truncate"},k=c({__name:"WorkItemCell",props:{workItemIid:{},workItemTitle:{},projectPath:{},projectId:{}},emits:["open"],setup(t,{emit:n}){const s=n;return(l,o)=>(i(),a("div",m,[r("button",{type:"button",class:"font-medium text-primary hover:underline truncate block text-left bg-transparent border-0 p-0 cursor-pointer",onClick:o[0]||(o[0]=p=>s("open"))}," #"+e(t.workItemIid)+" "+e(t.workItemTitle),1),r("p",d,e(t.projectPath||`project ${t.projectId}`),1)]))}});export{k as _};
1
+ import{d as c,e as i,c as a,f as r,t as e}from"./index-Cs2OnrL7.js";const m={class:"min-w-0"},d={class:"text-sm text-dimmed truncate"},k=c({__name:"WorkItemCell",props:{workItemIid:{},workItemTitle:{},projectPath:{},projectId:{}},emits:["open"],setup(t,{emit:n}){const s=n;return(l,o)=>(i(),a("div",m,[r("button",{type:"button",class:"font-medium text-primary hover:underline truncate block text-left bg-transparent border-0 p-0 cursor-pointer",onClick:o[0]||(o[0]=p=>s("open"))}," #"+e(t.workItemIid)+" "+e(t.workItemTitle),1),r("p",d,e(t.projectPath||`project ${t.projectId}`),1)]))}});export{k as _};