@dhzh/foundry 1.0.0 → 1.1.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.
@@ -0,0 +1 @@
1
+ (()=>{"use strict";var e,t,a,r,n,i,s={2627(e,t,a){var r=a(5511),n=a(6255),i=a(9366),s=a(4021),d=a(6653),l=a(9924),o=a(3372),c=a(1212);function u(){for(var e=arguments.length,t=Array(e),a=0;a<e;a++)t[a]=arguments[a];return(0,c.QP)((0,o.$)(t))}let x=(0,l.F)("group/alert relative grid w-full gap-0.5 rounded-lg border px-2 py-1.5 text-start text-xs/relaxed has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pe-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-1.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-3.5",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"}},defaultVariants:{variant:"default"}});function m(e){let{className:t,variant:a,...n}=e;return(0,r.jsx)("div",{"data-slot":"alert",role:"alert",className:u(x({variant:a}),t),...n})}function p(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"alert-title",className:u("font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground",t),...a})}function h(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"alert-description",className:u("text-xs/relaxed text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",t),...a})}var f=a(9757);let g=(0,l.F)("group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-xs/relaxed font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/80",outline:"border-border hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:bg-input/30",secondary:"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-7 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&_svg:not([class*='size-'])]:size-3.5",xs:"h-5 gap-1 rounded-sm px-2 text-[0.625rem] has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&_svg:not([class*='size-'])]:size-2.5",sm:"h-6 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&_svg:not([class*='size-'])]:size-3",lg:"h-8 gap-1 px-2.5 text-xs/relaxed has-data-[icon=inline-end]:pe-2 has-data-[icon=inline-start]:ps-2 [&_svg:not([class*='size-'])]:size-4",icon:"size-7 [&_svg:not([class*='size-'])]:size-3.5","icon-xs":"size-5 rounded-sm [&_svg:not([class*='size-'])]:size-2.5","icon-sm":"size-6 [&_svg:not([class*='size-'])]:size-3","icon-lg":"size-8 [&_svg:not([class*='size-'])]:size-4"}},defaultVariants:{variant:"default",size:"default"}});function v(e){let{className:t,variant:a="default",size:n="default",...i}=e;return(0,r.jsx)(f.$,{"data-slot":"button",className:u(g({variant:a,size:n,className:t})),...i})}var b=a(7616),j=a(9356);function y(e){let{className:t,...a}=e;return(0,r.jsx)(b.n,{icon:j.A,strokeWidth:2,"data-slot":"spinner",role:"status","aria-label":"Loading",className:u("size-4 animate-spin",t),...a})}var N=a(3479),w=a(1085);let k=["settings"];async function _(e){if(!e.ok)throw Error("The Foundry Server could not load Application Settings.");return(await e.json()).data}async function z(){return _(await fetch("/api/settings",{cache:"no-store"}))}async function C(e){return _(await fetch("/api/settings",{body:JSON.stringify(e),headers:{"content-type":"application/json"},method:"PATCH"}))}let A="(prefers-color-scheme: dark)",E=n.createContext(void 0);function P(){return window.matchMedia(A).matches?"dark":"light"}function O(e,t){let a,r="system"===e?P():e,n=t?((a=document.createElement("style")).appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;transition:none!important}")),document.head.appendChild(a),()=>{window.getComputedStyle(document.body),requestAnimationFrame(()=>{requestAnimationFrame(()=>{a.remove()})})}):null;return document.documentElement.classList.remove("light","dark"),document.documentElement.classList.add(r),n?.(),r}var S=a(1402),T=a(3735),M=a(3573),F=a(3966),L=a(2918),D=a(186),I=a(8288);function R(e){let{...t}=e;return(0,r.jsx)(T.s,{"data-slot":"tooltip",...t})}function U(e){let{...t}=e;return(0,r.jsx)(M.k,{"data-slot":"tooltip-trigger",...t})}function H(e){let{className:t,side:a="top",sideOffset:n=4,align:i="center",alignOffset:s=0,children:d,...l}=e;return(0,r.jsx)(F.K,{children:(0,r.jsx)(L.o,{align:i,alignOffset:s,side:a,sideOffset:n,className:"isolate z-50",children:(0,r.jsxs)(D.o,{"data-slot":"tooltip-content",className:u("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pe-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-start-2 data-[side=inline-start]:slide-in-from-end-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...l,children:[d,(0,r.jsx)(I.P,{className:"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-inset-s-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-inset-e-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5"})]})})})}let W=new(a(7632)).E;var K=a(8071),$=a(6551);let q=["health"],B={pending:"Foundry · Checking…",success:"Foundry · Healthy",error:"Foundry · Unhealthy"};var V=a(3676),J=a(8517),Y=a(2802),X=a(3138),G=a(4344),Q=a(6280),Z=a(4038),ee=a(4930),et=a(7886),ea=a(4890),er=a(2817),en=a(3586),ei=a(1585),es=a(3227),ed=a(3373),el=a(9544);let eo=V.V();function ec(e){let{...t}=e;return(0,r.jsx)(J.t,{...t})}function eu(e){let{...t}=e;return(0,r.jsx)(Y.S,{"data-slot":"toast-portal",...t})}function ex(e){let{className:t,...a}=e;return(0,r.jsx)(X.U,{"data-slot":"toast-viewport",className:u("pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:end-4 sm:start-auto sm:mx-0 sm:w-full",t),...a})}function em(e){let{className:t,...a}=e;return(0,r.jsx)(G.m,{"data-slot":"toast",className:u("group/toast pointer-events-auto absolute end-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-md border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]","h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]","after:absolute after:top-full after:start-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']","data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]","data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]","[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]","data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]","data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]","data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]","data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]","data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]","data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]","data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]","data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]",t),...a})}function ep(e){let{className:t,...a}=e;return(0,r.jsx)(Q.p,{"data-slot":"toast-content",className:u("flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] data-behind:opacity-0 data-expanded:opacity-100",t),...a})}function eh(e){let{className:t,...a}=e;return(0,r.jsx)(Z.S,{"data-slot":"toast-title",className:u("text-sm font-medium",t),...a})}function ef(e){let{className:t,...a}=e;return(0,r.jsx)(ee.a,{"data-slot":"toast-description",className:u("text-sm text-muted-foreground",t),...a})}function eg(e){let{className:t,render:a=(0,r.jsx)(v,{variant:"outline",size:"sm"}),...n}=e;return(0,r.jsx)(et.Q,{"data-slot":"toast-action",render:a,className:u("shrink-0",t),...n})}function ev(e){let{className:t,children:a,render:n=(0,r.jsx)(v,{variant:"ghost",size:"icon-sm"}),...i}=e;return(0,r.jsx)(ea.e,{"data-slot":"toast-close","aria-label":"Close toast",render:n,className:u("relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground",t),...i,children:a??(0,r.jsx)(b.n,{icon:en.A,strokeWidth:2,"aria-hidden":"true"})})}function eb(e){let{type:t}=e,a=null;return("success"===t&&(a=(0,r.jsx)(b.n,{icon:ei.A,strokeWidth:2,"aria-hidden":"true"})),"info"===t&&(a=(0,r.jsx)(b.n,{icon:es.A,strokeWidth:2,"aria-hidden":"true"})),"warning"===t&&(a=(0,r.jsx)(b.n,{icon:ed.A,strokeWidth:2,"aria-hidden":"true"})),"error"===t&&(a=(0,r.jsx)(b.n,{icon:el.A,strokeWidth:2,className:"text-destructive","aria-hidden":"true"})),"loading"===t&&(a=(0,r.jsx)(b.n,{icon:j.A,strokeWidth:2,className:"animate-spin","aria-hidden":"true"})),a)?(0,r.jsx)("span",{"data-slot":"toast-icon",className:"shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",children:a}):null}function ej(){let{toasts:e}=er.I();return e.map(e=>(0,r.jsx)(em,{toast:e,children:(0,r.jsxs)(ep,{children:[(0,r.jsx)(eb,{type:e.type}),(0,r.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[(0,r.jsx)(eh,{}),(0,r.jsx)(ef,{})]}),(0,r.jsx)(eg,{}),(0,r.jsx)(ev,{})]})},e.id))}function ey(e){let{children:t,toastManager:a=eo,...n}=e;return(0,r.jsxs)(ec,{toastManager:a,...n,children:[t,(0,r.jsx)(eu,{children:(0,r.jsx)(ex,{children:(0,r.jsx)(ej,{})})})]})}V.V,er.I;var eN=a(4709),ew=a(8189),ek=a(1204),e_=a(9512),ez=a(8337);function eC(e){let{className:t,type:a,...n}=e;return(0,r.jsx)(ez.p,{type:a,"data-slot":"input",className:u("h-7 w-full min-w-0 rounded-md border border-input bg-input/20 px-2 py-0.5 text-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-xs/relaxed file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-xs/relaxed dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",t),...n})}var eA=a(8695);function eE(e){let{className:t,orientation:a="horizontal",...n}=e;return(0,r.jsx)(eA.w,{"data-slot":"separator",orientation:a,className:u("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",t),...n})}var eP=a(1372),eO=a(3708),eS=a(3596),eT=a(6695),eM=a(6746),eF=a(5470),eL=a(94);function eD(e){let{...t}=e;return(0,r.jsx)(eP.D,{"data-slot":"sheet",...t})}function eI(e){let{...t}=e;return(0,r.jsx)(eO.Z,{"data-slot":"sheet-portal",...t})}function eR(e){let{className:t,...a}=e;return(0,r.jsx)(eS.X,{"data-slot":"sheet-overlay",className:u("fixed inset-0 z-50 bg-black/80 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",t),...a})}function eU(e){let{className:t,children:a,side:n="right",showCloseButton:i=!0,...s}=e;return(0,r.jsxs)(eI,{children:[(0,r.jsx)(eR,{}),(0,r.jsxs)(eT.h,{"data-slot":"sheet-content","data-side":n,className:u("fixed z-50 flex flex-col bg-popover bg-clip-padding text-xs/relaxed text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-10 data-[side=bottom]:data-starting-style:translate-y-10 data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-e data-[side=left]:data-ending-style:-translate-x-10 rtl:data-[side=left]:data-ending-style:translate-x-10 data-[side=left]:data-starting-style:-translate-x-10 rtl:data-[side=left]:data-starting-style:translate-x-10 data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-s data-[side=right]:data-ending-style:translate-x-10 rtl:data-[side=right]:data-ending-style:-translate-x-10 data-[side=right]:data-starting-style:translate-x-10 rtl:data-[side=right]:data-starting-style:-translate-x-10 data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:-translate-y-10 data-[side=top]:data-starting-style:-translate-y-10 data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",t),...s,children:[a,i&&(0,r.jsxs)(eM.H,{"data-slot":"sheet-close",render:(0,r.jsx)(v,{variant:"ghost",className:"absolute inset-e-4 top-4",size:"icon-sm"}),children:[(0,r.jsx)(b.n,{icon:en.A,strokeWidth:2}),(0,r.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function eH(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"sheet-header",className:u("flex flex-col gap-1.5 p-6",t),...a})}function eW(e){let{className:t,...a}=e;return(0,r.jsx)(eF.L,{"data-slot":"sheet-title",className:u("font-heading text-sm font-medium text-foreground",t),...a})}function eK(e){let{className:t,...a}=e;return(0,r.jsx)(eL.r,{"data-slot":"sheet-description",className:u("text-xs/relaxed text-muted-foreground",t),...a})}function e$(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"skeleton",className:u("animate-pulse rounded-md bg-muted",t),...a})}var eq=a(8472);let eB=n.createContext(null);function eV(){let e=n.useContext(eB);if(!e)throw Error("useSidebar must be used within a SidebarProvider.");return e}function eJ(e){let{defaultOpen:t=!0,open:a,onOpenChange:i,className:s,style:d,children:l,...o}=e,c=function(){let[e,t]=n.useState(()=>matchMedia("(max-width: 767px)").matches);return n.useEffect(()=>{let e=matchMedia("(max-width: 767px)"),a=()=>{t(e.matches)};return e.addEventListener("change",a),()=>e.removeEventListener("change",a)},[]),e}(),[x,m]=n.useState(!1),[p,h]=n.useState(t),f=a??p,g=n.useCallback(e=>{let t="function"==typeof e?e(f):e;i?i(t):h(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[i,f]),v=n.useCallback(()=>c?m(e=>!e):g(e=>!e),[c,g,m]);n.useEffect(()=>{let e=e=>{"b"===e.key&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),v())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[v]);let b=f?"expanded":"collapsed",j=n.useMemo(()=>({state:b,open:f,setOpen:g,isMobile:c,openMobile:x,setOpenMobile:m,toggleSidebar:v}),[b,f,g,c,x,m,v]);return(0,r.jsx)(eB.Provider,{value:j,children:(0,r.jsx)("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":"13rem","--sidebar-width-icon":"3rem",...d},className:u("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",s),...o,children:l})})}function eY(e){let{side:t="left",variant:a="sidebar",collapsible:n="offcanvas",className:i,children:s,dir:d,...l}=e,{isMobile:o,state:c,openMobile:x,setOpenMobile:m}=eV();return"none"===n?(0,r.jsx)("div",{"data-slot":"sidebar",className:u("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",i),...l,children:s}):o?(0,r.jsx)(eD,{open:x,onOpenChange:m,...l,children:(0,r.jsxs)(eU,{dir:d,"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{"--sidebar-width":"16rem"},side:t,children:[(0,r.jsxs)(eH,{className:"sr-only",children:[(0,r.jsx)(eW,{children:"Sidebar"}),(0,r.jsx)(eK,{children:"Displays the mobile sidebar."})]}),(0,r.jsx)("div",{className:"flex size-full flex-col",children:s})]})}):(0,r.jsxs)("div",{className:"group peer hidden text-sidebar-foreground md:block","data-state":c,"data-collapsible":"collapsed"===c?n:"","data-variant":a,"data-side":t,"data-slot":"sidebar",children:[(0,r.jsx)("div",{"data-slot":"sidebar-gap",className:u("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180","floating"===a||"inset"===a?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),(0,r.jsx)("div",{"data-slot":"sidebar-container","data-side":t,className:u("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:-left-(--sidebar-width) data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:-right-(--sidebar-width) md:flex","floating"===a||"inset"===a?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-e group-data-[side=right]:border-s",i),...l,children:(0,r.jsx)("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border",children:s})})]})}function eX(e){let{className:t,onClick:a,...n}=e,{toggleSidebar:i}=eV();return(0,r.jsxs)(v,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon-sm",className:u(t),onClick:e=>{a?.(e),i()},...n,children:[(0,r.jsx)(b.n,{icon:eq.A,strokeWidth:2,className:"rtl:rotate-180"}),(0,r.jsx)("span",{className:"sr-only",children:"Toggle Sidebar"})]})}function eG(e){let{className:t,...a}=e;return(0,r.jsx)("main",{"data-slot":"sidebar-inset",className:u("relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ms-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ms-2",t),...a})}function eQ(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:u("no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-hidden",t),...a})}function eZ(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:u("relative flex w-full min-w-0 flex-col px-2 py-1",t),...a})}function e0(e){let{className:t,render:a,...r}=e;return(0,e_.C)({defaultTagName:"div",props:(0,ek.v6)({className:u("flex h-8 shrink-0 items-center rounded-md px-2 text-xs text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:pointer-events-none group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",t)},r),render:a,state:{slot:"sidebar-group-label",sidebar:"group-label"}})}function e2(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:u("w-full text-xs",t),...a})}function e1(e){let{className:t,...a}=e;return(0,r.jsx)("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:u("flex w-full min-w-0 flex-col gap-px",t),...a})}function e5(e){let{className:t,...a}=e;return(0,r.jsx)("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:u("group/menu-item relative",t),...a})}let e4=(0,l.F)("peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-[calc(var(--radius-sm)+2px)] p-2 text-start text-xs ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pe-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"},size:{default:"h-8 text-xs",sm:"h-7 text-xs",lg:"h-12 text-xs group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function e3(e){let{render:t,isActive:a=!1,variant:n="default",size:i="default",tooltip:s,className:d,...l}=e,{isMobile:o,state:c}=eV(),x=(0,e_.C)({defaultTagName:"button",props:(0,ek.v6)({className:u(e4({variant:n,size:i}),d)},l),render:s?(0,r.jsx)(U,{render:t}):t,state:{slot:"sidebar-menu-button",sidebar:"menu-button",size:i,active:a}});return s?("string"==typeof s&&(s={children:s}),(0,r.jsxs)(R,{children:[x,(0,r.jsx)(H,{side:"right",align:"center",hidden:"collapsed"!==c||o,...s})]})):x}var e6=a(9611),e8=a(1274),e7=a(3106),e9=a(2739),te=a(24),tt=a(2443);let ta=[{title:null,items:[{title:"Dashboard",href:"/dashboard",icon:e6.A}]},{title:"Capabilities",items:[{title:"Skills",href:"/skills",icon:e8.A},{title:"MCPs",href:"/mcps",icon:e7.A},{title:"Prompts",href:"/prompts",icon:e9.A}]},{title:"Execution",items:[{title:"Runtimes",href:"/runtimes",icon:te.A},{title:"Providers",href:"/providers",icon:tt.A,description:"Saved model-service connections for each Runtime."}]}];function tr(){let e=(0,ew.zy)(),{isMobile:t,setOpenMobile:a}=eV(),n=()=>{t&&a(!1)};return(0,r.jsx)(eY,{collapsible:"icon","data-testid":"app-sidebar",children:(0,r.jsx)(eQ,{children:ta.map(t=>(0,r.jsxs)(eZ,{children:[t.title&&(0,r.jsx)(e0,{children:t.title}),(0,r.jsx)(e2,{children:(0,r.jsx)(e1,{children:t.items.map(t=>(0,r.jsx)(e5,{children:(0,r.jsxs)(e3,{isActive:e.pathname===t.href,tooltip:t.title,render:(0,r.jsx)($.k2,{to:t.href,onClick:n}),children:[(0,r.jsx)(b.n,{icon:t.icon,strokeWidth:2}),(0,r.jsx)("span",{children:t.title})]})},t.href))})})]},t.title??"overview"))})})}var tn=a(6442);function ti(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"empty",className:u("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance",t),...a})}function ts(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"empty-header",className:u("flex max-w-sm flex-col items-center gap-1",t),...a})}function td(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"empty-title",className:u("font-heading text-sm font-medium tracking-tight",t),...a})}function tl(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"empty-description",className:u("text-xs/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",t),...a})}function to(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"empty-content",className:u("flex w-full max-w-sm min-w-0 flex-col items-center gap-2 text-xs/relaxed text-balance",t),...a})}function tc(e){let{title:t,description:a,action:n}=e;return(0,r.jsxs)(ti,{children:[(0,r.jsxs)(ts,{children:[(0,r.jsx)(td,{children:t}),(0,r.jsx)(tl,{children:a})]}),n?(0,r.jsx)(to,{children:n}):null]})}let tu=["system","light","dark"],tx=["codex","claude-code"],tm=["image/png","image/jpeg","image/webp","image/svg+xml"],tp=["effort","xhigh_effort","max_effort","thinking","adaptive_thinking","interleaved_thinking"];var th=a(1993),tf=a(324),tg=a(5596);function tv(e){let{className:t,...a}=e;return(0,r.jsx)("textarea",{"data-slot":"textarea",className:u("flex field-sizing-content min-h-16 w-full resize-none rounded-md border border-input bg-input/20 px-2 py-2 text-sm transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-xs/relaxed dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",t),...a})}function tb(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"input-group",role:"group",className:u("group/input-group relative flex h-7 w-full min-w-0 items-center rounded-md border border-input bg-input/20 transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-md has-data-[align=block-start]:rounded-md has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/30 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-2 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[textarea]:rounded-md has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pe-1.5 has-[>[data-align=inline-start]]:[&>input]:ps-1.5",t),...a})}let tj=(0,l.F)("flex h-auto cursor-text items-center justify-center gap-1 py-2 text-xs/relaxed font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 **:data-[slot=kbd]:rounded-[calc(var(--radius-sm)-2px)] **:data-[slot=kbd]:bg-muted-foreground/10 **:data-[slot=kbd]:px-1 **:data-[slot=kbd]:text-[0.625rem] [&>svg:not([class*='size-'])]:size-3.5",{variants:{align:{"inline-start":"order-first ps-2 has-[>button]:ms-[-0.275rem] has-[>kbd]:ms-[-0.275rem]","inline-end":"order-last pe-2 has-[>button]:me-[-0.275rem] has-[>kbd]:me-[-0.275rem]","block-start":"order-first w-full justify-start px-2 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2","block-end":"order-last w-full justify-start px-2 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"}},defaultVariants:{align:"inline-start"}});function ty(e){let{className:t,align:a="inline-start",...n}=e;return(0,r.jsx)("div",{role:"group","data-slot":"input-group-addon","data-align":a,className:u(tj({align:a}),t),onClick:e=>{e.target.closest("button")||e.currentTarget.parentElement?.querySelector("input")?.focus()},...n})}let tN=(0,l.F)("flex items-center gap-2 rounded-md text-xs/relaxed shadow-none",{variants:{size:{xs:"h-5 gap-1 rounded-[calc(var(--radius-sm)-2px)] px-1 [&>svg:not([class*='size-'])]:size-3",sm:"gap-1","icon-xs":"size-6 p-0 has-[>svg]:p-0","icon-sm":"size-7 p-0 has-[>svg]:p-0"}},defaultVariants:{size:"xs"}});function tw(e){let{className:t,type:a="button",variant:n="ghost",size:i="xs",...s}=e;return(0,r.jsx)(v,{type:a,"data-size":i,variant:n,className:u(tN({size:i}),t),...s})}function tk(e){let{className:t,...a}=e;return(0,r.jsx)(eC,{"data-slot":"input-group-control",className:u("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent",t),...a})}function t_(e){let{value:t,...a}=e,[i,s]=(0,n.useState)(!1);return(0,r.jsxs)(tb,{children:[(0,r.jsx)(tk,{...a,type:i?"text":"password",value:t}),(0,r.jsx)(ty,{align:"inline-end",children:(0,r.jsx)(tw,{"aria-label":i?"Hide API Key":"Show API Key",size:"icon-xs",onClick:()=>s(e=>!e),children:(0,r.jsx)(b.n,{icon:i?tf.A:tg.A,strokeWidth:2})})})]})}var tz=a(6091);function tC(e){let{...t}=e;return(0,r.jsx)(tz.V,{"data-slot":"alert-dialog",...t})}function tA(e){let{...t}=e;return(0,r.jsx)(eO.Z,{"data-slot":"alert-dialog-portal",...t})}function tE(e){let{className:t,...a}=e;return(0,r.jsx)(eS.X,{"data-slot":"alert-dialog-overlay",className:u("fixed inset-0 isolate z-50 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",t),...a})}function tP(e){let{className:t,size:a="default",...n}=e;return(0,r.jsxs)(tA,{children:[(0,r.jsx)(tE,{}),(0,r.jsx)(eT.h,{"data-slot":"alert-dialog-content","data-size":a,className:u("group/alert-dialog-content fixed top-1/2 start-1/2 z-50 grid w-full -translate-x-1/2 rtl:translate-x-1/2 -translate-y-1/2 gap-3 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-64 data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...n})]})}function tO(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"alert-dialog-header",className:u("grid grid-rows-[auto_1fr] place-items-center gap-1 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-start sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",t),...a})}function tS(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"alert-dialog-footer",className:u("flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",t),...a})}function tT(e){let{className:t,...a}=e;return(0,r.jsx)(eF.L,{"data-slot":"alert-dialog-title",className:u("font-heading text-sm font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",t),...a})}function tM(e){let{className:t,...a}=e;return(0,r.jsx)(eL.r,{"data-slot":"alert-dialog-description",className:u("text-xs/relaxed text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",t),...a})}function tF(e){let{className:t,...a}=e;return(0,r.jsx)(v,{"data-slot":"alert-dialog-action",className:u(t),...a})}function tL(e){let{className:t,variant:a="outline",size:n="default",...i}=e;return(0,r.jsx)(eM.H,{"data-slot":"alert-dialog-cancel",className:u(t),render:(0,r.jsx)(v,{variant:a,size:n}),...i})}var tD=a(3384),tI=a(2529),tR=a(7908);function tU(e){let{className:t,size:a="default",...n}=e;return(0,r.jsx)(tD.C,{"data-slot":"avatar","data-size":a,className:u("group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten",t),...n})}function tH(e){let{className:t,...a}=e;return(0,r.jsx)(tI.B,{"data-slot":"avatar-image",className:u("aspect-square size-full rounded-full object-cover",t),...a})}function tW(e){let{className:t,...a}=e;return(0,r.jsx)(tR.q,{"data-slot":"avatar-fallback",className:u("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs",t),...a})}var tK=a(8978),t$=a(7612),tq=a(8716);function tB(e){let{className:t,...a}=e;return(0,r.jsx)(tK.y,{"data-slot":"checkbox",className:u("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-shadow outline-none group-has-disabled/field:opacity-50 group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary",t),...a,children:(0,r.jsx)(t$.P,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none [&>svg]:size-3.5",children:(0,r.jsx)(b.n,{icon:tq.A,strokeWidth:2})})})}var tV=a(7904),tJ=a(8893),tY=a(2874);function tX(e){let{...t}=e;return(0,r.jsx)(tV.N,{"data-slot":"collapsible",...t})}function tG(e){let{...t}=e;return(0,r.jsx)(tJ.R,{"data-slot":"collapsible-trigger",...t})}function tQ(e){let{...t}=e;return(0,r.jsx)(tY.j,{"data-slot":"collapsible-content",...t})}function tZ(e){let{className:t,...a}=e;return(0,r.jsx)("label",{"data-slot":"label",className:u("flex items-center gap-2 text-xs/relaxed leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t),...a})}function t0(e){let{className:t,...a}=e;return(0,r.jsx)("fieldset",{"data-slot":"field-set",className:u("flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",t),...a})}function t2(e){let{className:t,variant:a="legend",...n}=e;return(0,r.jsx)("legend",{"data-slot":"field-legend","data-variant":a,className:u("mb-2 font-medium data-[variant=label]:text-xs/relaxed data-[variant=legend]:text-sm",t),...n})}function t1(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"field-group",className:u("group/field-group @container/field-group flex w-full flex-col gap-4 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4",t),...a})}let t5=(0,l.F)("group/field flex w-full gap-2 data-[invalid=true]:text-destructive",{variants:{orientation:{vertical:"flex-col *:w-full [&>.sr-only]:w-auto",horizontal:"flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",responsive:"flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"}},defaultVariants:{orientation:"vertical"}});function t4(e){let{className:t,orientation:a="vertical",...n}=e;return(0,r.jsx)("div",{role:"group","data-slot":"field","data-orientation":a,className:u(t5({orientation:a}),t),...n})}function t3(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"field-content",className:u("group/field-content flex flex-1 flex-col gap-0.5 leading-snug",t),...a})}function t6(e){let{children:t,className:a,required:n=!1,...i}=e;return(0,r.jsx)(tZ,{"data-slot":"field-label",className:u("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border has-[>[data-slot=field]]:not-has-[:disabled,[data-disabled]]:hover:bg-input/40 has-[>[data-slot=field]]:has-[:focus-visible]:border-ring has-[>[data-slot=field]]:has-[:focus-visible]:ring-2 has-[>[data-slot=field]]:has-[:focus-visible]:ring-ring/30 *:data-[slot=field]:p-2 dark:has-data-checked:bg-primary/10","has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",n&&"after:text-destructive after:content-['*']",a),...i,children:t})}function t8(e){let{className:t,...a}=e;return(0,r.jsx)("p",{"data-slot":"field-description",className:u("text-start text-xs/relaxed leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5","last:mt-0 nth-last-2:-mt-1","[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",t),...a})}function t7(e){let{children:t,className:a,...n}=e;return(0,r.jsxs)("div",{"data-slot":"field-separator","data-content":!!t,className:u("relative -my-2 h-5 text-xs/relaxed group-data-[variant=outline]/field-group:-mb-2",a),...n,children:[(0,r.jsx)(eE,{className:"absolute inset-0 top-1/2"}),t&&(0,r.jsx)("span",{className:"relative mx-auto block w-fit bg-background px-2 text-muted-foreground","data-slot":"field-separator-content",children:t})]})}function t9(e){let{className:t,children:a,errors:i,...s}=e,d=(0,n.useMemo)(()=>{if(a)return a;if(!i?.length)return null;let e=[...new Map(i.map(e=>[e?.message,e])).values()];return e?.length==1?e[0]?.message:(0,r.jsx)("ul",{className:"ms-4 flex list-disc flex-col gap-1",children:e.map((e,t)=>e?.message&&(0,r.jsx)("li",{children:e.message},t))})},[a,i]);return d?(0,r.jsx)("div",{role:"alert","data-slot":"field-error",className:u("text-xs/relaxed font-normal text-destructive",t),...s,children:d}):null}var ae=a(4435),at=a(3574),aa=a(614),ar=a(2120),an=a(7914),ai=a(860),as=a(5845),ad=a(8402),al=a(5696),ao=a(4334),ac=a(7631),au=a(9025),ax=a(850),am=a(6960),ap=a(5174),ah=a(5514),af=a(6539);let ag=ae.H;function av(e){let{className:t,...a}=e;return(0,r.jsx)(at.s,{"data-slot":"select-group",className:u("scroll-my-1 p-1",t),...a})}function ab(e){let{className:t,...a}=e;return(0,r.jsx)(aa.y,{"data-slot":"select-value",className:u("flex flex-1 text-start",t),...a})}function aj(e){let{className:t,size:a="default",children:n,...i}=e;return(0,r.jsxs)(ar.b,{"data-slot":"select-trigger","data-size":a,className:u("flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-input/20 px-2 py-1.5 text-xs/relaxed whitespace-nowrap transition-colors outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-7 data-[size=sm]:h-6 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5",t),...i,children:[n,(0,r.jsx)(an.w,{render:(0,r.jsx)(b.n,{icon:ap.A,strokeWidth:2,className:"pointer-events-none size-3.5 text-muted-foreground"})})]})}function ay(e){let{className:t,children:a,side:n="bottom",sideOffset:i=4,align:s="center",alignOffset:d=0,alignItemWithTrigger:l=!0,...o}=e;return(0,r.jsx)(ai.V,{children:(0,r.jsx)(as.l,{side:n,sideOffset:i,align:s,alignOffset:d,alignItemWithTrigger:l,className:"isolate z-50",children:(0,r.jsxs)(ad.t,{"data-slot":"select-content","data-align-trigger":l,className:u("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-start-2 data-[side=inline-start]:slide-in-from-end-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...o,children:[(0,r.jsx)(aw,{}),(0,r.jsx)(al.B,{children:a}),(0,r.jsx)(ak,{})]})})})}function aN(e){let{className:t,children:a,...n}=e;return(0,r.jsxs)(ao.e,{"data-slot":"select-item",className:u("relative flex min-h-7 w-full cursor-default items-center gap-2 rounded-md px-2 py-1 text-xs/relaxed outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...n,children:[(0,r.jsx)(ac.h,{className:"flex flex-1 shrink-0 gap-2 whitespace-nowrap",children:a}),(0,r.jsx)(au.h,{render:(0,r.jsx)("span",{className:"pointer-events-none absolute end-2 flex items-center justify-center"}),children:(0,r.jsx)(b.n,{icon:tq.A,strokeWidth:2,className:"pointer-events-none"})})]})}function aw(e){let{className:t,...a}=e;return(0,r.jsx)(ax.w,{"data-slot":"select-scroll-up-button",className:u("top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5",t),...a,children:(0,r.jsx)(b.n,{icon:ah.A,strokeWidth:2})})}function ak(e){let{className:t,...a}=e;return(0,r.jsx)(am.d,{"data-slot":"select-scroll-down-button",className:u("bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5",t),...a,children:(0,r.jsx)(b.n,{icon:af.A,strokeWidth:2})})}var a_=a(3859),az=a(712);let aC=(0,l.F)("group/toggle inline-flex items-center justify-center gap-1 rounded-md text-xs font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-transparent",outline:"border border-input bg-transparent hover:bg-muted"},size:{default:"h-7 min-w-7 px-2 has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5",sm:"h-6 min-w-6 rounded-[min(var(--radius-md),8px)] px-2 text-[0.625rem] has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&_svg:not([class*='size-'])]:size-3",lg:"h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pe-2 has-data-[icon=inline-start]:ps-2"}},defaultVariants:{variant:"default",size:"default"}}),aA=n.createContext({size:"default",variant:"default",spacing:2,orientation:"horizontal"});function aE(e){let{className:t,variant:a,size:n,spacing:i=2,orientation:s="horizontal",children:d,...l}=e;return(0,r.jsx)(az.O,{"data-slot":"toggle-group","data-variant":a,"data-size":n,"data-spacing":i,"data-orientation":s,style:{"--gap":i},className:u("group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-md data-[size=sm]:rounded-[min(var(--radius-md),8px)] data-vertical:flex-col data-vertical:items-stretch",t),...l,children:(0,r.jsx)(aA.Provider,{value:{variant:a,size:n,spacing:i,orientation:s},children:d})})}function aP(e){let{className:t,children:a,variant:i="default",size:s="default",...d}=e,l=n.useContext(aA);return(0,r.jsx)(a_.l,{"data-slot":"toggle-group-item","data-variant":l.variant||i,"data-size":l.size||s,"data-spacing":l.spacing,className:u("shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pe-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:ps-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-s-md group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-e-md group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-md group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-s-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-s group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t",aC({variant:l.variant||i,size:l.size||s}),t),...d,children:a})}function aO(e){return["providers",e]}async function aS(e){if(!e.ok)throw Error("The Foundry Server could not load Providers.");return(await e.json()).data}async function aT(e){return aS(await fetch(`/api/providers?runtime=${encodeURIComponent(e)}`,{cache:"no-store"}))}async function aM(e){let t=await fetch("/api/providers",{body:JSON.stringify(e),headers:{"content-type":"application/json"},method:"POST"});if(!t.ok)throw Error("The Foundry Server could not create the Provider.");return(await t.json()).data}function aF(e){return(0,N.I)({queryKey:aO(e),queryFn:()=>aT(e),refetchOnWindowFocus:!1,retry:!1})}let aL={"claude-code":"Claude Code",codex:"Codex"},aD={adaptive_thinking:"Adaptive thinking",effort:"Effort",interleaved_thinking:"Interleaved thinking",max_effort:"Max effort",thinking:"Thinking",xhigh_effort:"XHigh effort"},aI=[{description:"Remove Claude Code attribution from commits, pull requests, and session links.",key:"hideAiAttribution",label:"Hide AI attribution"},{description:"Enable experimental agent teams for interactive sessions.",key:"teammatesMode",label:"Teammates mode"},{description:"Discover MCP tools on demand. The configured endpoint must support tool references.",key:"enableToolSearch",label:"Enable tool search"},{description:"Force Claude Code sessions to use the maximum available reasoning effort.",key:"maxEffortThinking",label:"Max effort thinking"},{description:"Disable background update checks while keeping manual updates available.",key:"disableAutoUpdater",label:"Disable auto-updater"}];function aR(){return{avatar:null,name:"",officialWebsite:"",remark:""}}function aU(){return{apiKey:"",baseUrl:"",defaultModel:"",reviewModel:""}}function aH(){return{description:"",displayName:"",model:"",supportedCapabilities:[]}}function aW(){return{apiKey:"",apiKeyHeader:"authorization",baseUrl:"",fableModel:aH(),haikuModel:aH(),opusModel:aH(),defaultModel:"",sonnetModel:aH(),subagentModel:"",subagentModelForce:!1,hideAiAttribution:!1,teammatesMode:!1,enableToolSearch:!1,maxEffortThinking:!1,disableAutoUpdater:!1}}function aK(e){return e.trim()||null}function a$(e){let t=e.model.trim();return""===t?null:{description:aK(e.description),displayName:aK(e.displayName),model:t,supportedCapabilities:e.supportedCapabilities}}function aq(e){let{id:t,label:a,value:n,onChange:i}=e,s=""!==n.model.trim();return(0,r.jsxs)(t0,{children:[(0,r.jsx)(t2,{children:a}),(0,r.jsxs)(t1,{children:[(0,r.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:`${t}-model`,children:"Model ID"}),(0,r.jsx)(eC,{id:`${t}-model`,maxLength:200,value:n.model,onChange:e=>i({...n,model:e.target.value})})]}),(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:`${t}-display-name`,children:"Display name"}),(0,r.jsx)(eC,{disabled:!s,id:`${t}-display-name`,maxLength:100,value:n.displayName,onChange:e=>i({...n,displayName:e.target.value})})]})]}),(0,r.jsxs)(tX,{children:[(0,r.jsxs)(tG,{className:"group flex w-fit items-center gap-1 rounded-sm py-1 text-xs/relaxed font-medium text-muted-foreground outline-none hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/30 disabled:pointer-events-none disabled:opacity-50",children:[(0,r.jsx)(b.n,{className:"size-3 transition-transform group-data-panel-open:rotate-90",icon:th.A,strokeWidth:2}),(0,r.jsx)("span",{children:"Advanced model options"})]}),(0,r.jsx)(tQ,{className:"h-[var(--collapsible-panel-height)] overflow-hidden transition-[height] duration-150 data-ending-style:h-0 data-starting-style:h-0",children:(0,r.jsx)("div",{className:"ms-3 min-w-0 border-s border-border py-2 ps-4",children:(0,r.jsxs)(t1,{children:[(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:`${t}-description`,children:"Description"}),(0,r.jsx)(tv,{disabled:!s,id:`${t}-description`,maxLength:2e3,value:n.description,onChange:e=>i({...n,description:e.target.value})})]}),(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:`${t}-capabilities`,children:"Supported capabilities"}),(0,r.jsxs)(ag,{disabled:!s,id:`${t}-capabilities`,multiple:!0,value:n.supportedCapabilities,onValueChange:e=>i({...n,supportedCapabilities:tp.filter(t=>e.includes(t))}),children:[(0,r.jsx)(aj,{className:"w-full",children:(0,r.jsx)(ab,{children:()=>0===n.supportedCapabilities.length?"Select capabilities":n.supportedCapabilities.map(e=>aD[e]).join(", ")})}),(0,r.jsx)(ay,{align:"start",children:(0,r.jsx)(av,{children:tp.map(e=>(0,r.jsx)(aN,{value:e,children:aD[e]},e))})})]})]})]})})})]})]})]})}var aB=a(6989),aV=a(5817),aJ=a(8727),aY=a(7414),aX=a(1721);function aG(e){let{className:t,size:a="default",...n}=e;return(0,r.jsx)("div",{"data-slot":"card","data-size":a,className:u("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-lg bg-card py-(--card-spacing) text-xs/relaxed text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg",t),...n})}function aQ(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"card-header",className:u("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-lg px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",t),...a})}function aZ(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"card-title",className:u("font-heading text-sm font-medium",t),...a})}function a0(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"card-description",className:u("text-xs/relaxed text-muted-foreground",t),...a})}function a2(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"card-action",className:u("col-start-2 row-span-2 row-start-1 self-start justify-self-end",t),...a})}function a1(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"card-content",className:u("px-(--card-spacing)",t),...a})}function a5(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"card-footer",className:u("flex items-center rounded-b-lg px-(--card-spacing) [.border-t]:pt-(--card-spacing)",t),...a})}let a4={"claude-code":"Claude Code",codex:"Codex"};function a3(e){return null!==e&&tx.includes(e)}function a6(e){let{provider:t}=e;return(0,r.jsx)(aG,{"data-testid":`provider-${t.id}`,size:"sm",children:(0,r.jsxs)(aQ,{className:"has-data-[slot=card-action]:grid-cols-1 @sm/card-header:has-data-[slot=card-action]:grid-cols-[1fr_auto]",children:[(0,r.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,r.jsxs)(tU,{size:"lg",children:[t.avatar?(0,r.jsx)(tH,{alt:"",src:`data:${t.avatar.mimeType};base64,${t.avatar.data}`}):null,(0,r.jsx)(tW,{children:t.name.charAt(0)||"P"})]}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)(aZ,{className:"truncate",children:t.name}),(0,r.jsx)(a0,{className:"truncate",children:t.baseUrl})]})]}),(0,r.jsxs)(a2,{className:"col-start-1 row-start-2 mt-2 flex flex-wrap items-center gap-1 justify-self-start @sm/card-header:col-start-2 @sm/card-header:row-span-2 @sm/card-header:row-start-1 @sm/card-header:mt-0 @sm/card-header:self-center @sm/card-header:justify-self-end",children:[(0,r.jsx)(v,{"aria-label":`Enable ${t.name}`,type:"button",children:"Enable"}),(0,r.jsxs)(R,{children:[(0,r.jsx)(U,{render:(0,r.jsx)(v,{"aria-label":`Edit ${t.name}`,size:"icon",type:"button",variant:"ghost"}),children:(0,r.jsx)(b.n,{icon:aB.A,strokeWidth:2})}),(0,r.jsx)(H,{children:"Edit"})]}),(0,r.jsxs)(R,{children:[(0,r.jsx)(U,{render:(0,r.jsx)(v,{"aria-label":`Copy ${t.name}`,size:"icon",type:"button",variant:"ghost"}),children:(0,r.jsx)(b.n,{icon:aV.A,strokeWidth:2})}),(0,r.jsx)(H,{children:"Copy"})]}),(0,r.jsxs)(R,{children:[(0,r.jsx)(U,{render:(0,r.jsx)(v,{"aria-label":`Test ${t.name} connection`,size:"icon",type:"button",variant:"ghost"}),children:(0,r.jsx)(b.n,{icon:aJ.A,strokeWidth:2})}),(0,r.jsx)(H,{children:"Test connection"})]}),(0,r.jsxs)(R,{children:[(0,r.jsx)(U,{render:(0,r.jsx)(v,{"aria-label":`Delete ${t.name}`,size:"icon",type:"button",variant:"destructive"}),children:(0,r.jsx)(b.n,{icon:aY.A,strokeWidth:2})}),(0,r.jsx)(H,{children:"Delete"})]})]})]})})}function a8(e){let{...t}=e;return(0,r.jsx)(eP.D,{"data-slot":"dialog",...t})}function a7(e){let{...t}=e;return(0,r.jsx)(eO.Z,{"data-slot":"dialog-portal",...t})}function a9(e){let{className:t,...a}=e;return(0,r.jsx)(eS.X,{"data-slot":"dialog-overlay",className:u("fixed inset-0 isolate z-50 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",t),...a})}function re(e){let{className:t,children:a,showCloseButton:n=!0,...i}=e;return(0,r.jsxs)(a7,{children:[(0,r.jsx)(a9,{}),(0,r.jsxs)(eT.h,{"data-slot":"dialog-content",className:u("fixed top-1/2 start-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 rtl:translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-xs/relaxed text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",t),...i,children:[a,n&&(0,r.jsxs)(eM.H,{"data-slot":"dialog-close",render:(0,r.jsx)(v,{variant:"ghost",className:"absolute top-2 end-2",size:"icon-sm"}),children:[(0,r.jsx)(b.n,{icon:en.A,strokeWidth:2}),(0,r.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function rt(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"dialog-header",className:u("flex flex-col gap-1",t),...a})}function ra(e){let{className:t,showCloseButton:a=!1,children:n,...i}=e;return(0,r.jsxs)("div",{"data-slot":"dialog-footer",className:u("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...i,children:[n,a&&(0,r.jsx)(eM.H,{render:(0,r.jsx)(v,{variant:"outline"}),children:"Close"})]})}function rr(e){let{className:t,...a}=e;return(0,r.jsx)(eF.L,{"data-slot":"dialog-title",className:u("font-heading text-sm font-medium",t),...a})}function rn(e){let{className:t,...a}=e;return(0,r.jsx)(eL.r,{"data-slot":"dialog-description",className:u("text-xs/relaxed text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",t),...a})}let ri=["runtimes"];class rs extends Error{}async function rd(e,t){if(!e.ok)throw new rs(t);let a=await e.json();if("SUCCESS"!==a.status||null===a.data)throw new rs(a.message??t);return a.data}async function rl(){return rd(await fetch("/api/runtimes",{cache:"no-store"}),"The Foundry Server could not load Runtimes.")}async function ro(e,t){return rd(await fetch(`/api/runtimes/${e}/preview`,{body:JSON.stringify(t),headers:{"content-type":"application/json"},method:"POST"}),"The Runtime configuration could not be previewed.")}async function rc(e,t){return rd(await fetch(`/api/runtimes/${e}/apply`,{body:JSON.stringify(t),headers:{"content-type":"application/json"},method:"POST"}),"The Runtime configuration could not be applied.")}let ru="official-default",rx={"claude-code":"Claude Code",codex:"Codex"},rm={"claude-code":["env.ANTHROPIC_BASE_URL","env.ANTHROPIC_AUTH_TOKEN","env.ANTHROPIC_API_KEY","env.ANTHROPIC_MODEL","env.ANTHROPIC_DEFAULT_OPUS_MODEL","env.ANTHROPIC_DEFAULT_OPUS_MODEL_NAME","env.ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION","env.ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES","env.ANTHROPIC_DEFAULT_SONNET_MODEL","env.ANTHROPIC_DEFAULT_SONNET_MODEL_NAME","env.ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION","env.ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES","env.ANTHROPIC_DEFAULT_HAIKU_MODEL","env.ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME","env.ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION","env.ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES","env.ANTHROPIC_DEFAULT_FABLE_MODEL","env.ANTHROPIC_DEFAULT_FABLE_MODEL_NAME","env.ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION","env.ANTHROPIC_DEFAULT_FABLE_MODEL_SUPPORTED_CAPABILITIES","env.CLAUDE_CODE_SUBAGENT_MODEL","env.CLAUDE_CODE_SUBAGENT_MODEL_FORCE"],codex:["model","review_model","model_provider","[model_providers.<key>].name","[model_providers.<key>].base_url","[model_providers.<key>].wire_api","[model_providers.<key>].experimental_bearer_token"]};function rp(e,t){eo.add({description:e instanceof rs?e.message:"An unexpected error occurred.",priority:"high",title:t,type:"error"})}function rh(e){let{value:t}=e,[a,i]=(0,n.useState)(!1);return"absent"===t.kind?(0,r.jsx)("code",{className:"text-muted-foreground",children:"null"}):"plain"===t.kind?(0,r.jsx)("code",{className:"break-all",children:JSON.stringify(t.value)}):(0,r.jsxs)("span",{className:"inline-flex min-w-0 items-center gap-1",children:[(0,r.jsx)("code",{className:"break-all",children:a?JSON.stringify(t.value):"••••••••"}),(0,r.jsx)(v,{"aria-label":a?"Hide API Key":"Show API Key",size:"icon-xs",variant:"ghost",onClick:()=>i(e=>!e),children:(0,r.jsx)(b.n,{icon:a?tf.A:tg.A,strokeWidth:2})})]})}function rf(e){let{field:t}=e;return(0,r.jsxs)("div",{className:"grid gap-2 rounded-md border bg-muted/30 p-3 sm:grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] sm:items-center",children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("code",{className:"mb-1 block break-all text-[0.6875rem] text-muted-foreground",children:t.key}),(0,r.jsx)(rh,{value:t.current})]}),(0,r.jsx)("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"→"}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("span",{className:"mb-1 block text-[0.6875rem] uppercase tracking-wide text-muted-foreground",children:t.operation}),(0,r.jsx)(rh,{value:t.proposed})]})]})}function rg(e){let{fields:t}=e;return 0===t.length?(0,r.jsx)("p",{className:"text-muted-foreground",children:"No fields in this section."}):(0,r.jsx)("div",{className:"flex flex-col gap-2",children:t.map(e=>(0,r.jsx)(rf,{field:e},e.key))})}function rv(e){let{runtime:t}=e,a=rm[t];return(0,r.jsx)(tX,{children:(0,r.jsxs)("div",{className:"rounded-md border bg-muted/20",children:[(0,r.jsxs)(tG,{render:(0,r.jsx)(v,{className:"h-auto w-full justify-between px-3 py-2",variant:"ghost"}),children:[(0,r.jsxs)("span",{className:"text-start",children:[(0,r.jsx)("span",{className:"block font-medium",children:"Foundry managed fields"}),(0,r.jsx)("span",{className:"block font-normal text-muted-foreground",children:"Static display reference only"})]}),(0,r.jsx)("span",{className:"text-muted-foreground",children:a.length})]}),(0,r.jsx)(tQ,{className:"border-t px-3 py-3",children:(0,r.jsx)("div",{className:"flex max-h-64 flex-col gap-1 overflow-y-auto",children:a.map(e=>(0,r.jsx)("code",{className:"break-all rounded bg-muted px-2 py-1 text-[0.6875rem]",children:e},e))})})]})})}function rb(e){let t,{isOpen:a,runtime:i,target:d,onOpenChange:l}=e,o=(0,w.n)({mutationFn:e=>ro(i,e)}),c=(t=(0,s.jE)(),(0,w.n)({mutationFn:e=>rc(i,e),onSuccess:e=>{t.setQueryData(ri,t=>t?.map(t=>t.runtime===e.runtime?e:t))}})),u=o.mutate,[x,m]=(0,n.useState)([]),[p,h]=(0,n.useState)(),f=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p;u({providerKey:e,target:d},{onError:e=>rp(e,"Preview failed"),onSuccess:e=>{"provider-key-selection"===e.kind&&m(e.providerKeys)}})},g=o.data,b=g?.kind==="ready"?g:null;return(0,n.useEffect)(()=>{u({target:d},{onError:e=>rp(e,"Preview failed"),onSuccess:e=>{"provider-key-selection"===e.kind&&m(e.providerKeys)}})},[u,d]),(0,r.jsx)(a8,{open:a,onOpenChange:l,children:(0,r.jsxs)(re,{className:"max-h-[85vh] overflow-y-auto sm:max-w-3xl",children:[(0,r.jsxs)(rt,{children:[(0,r.jsx)(rr,{children:"Preview Changes"}),(0,r.jsx)(rn,{children:"Review every field Foundry manages before applying this Runtime configuration."})]}),o.isPending&&(0,r.jsxs)("div",{className:"flex items-center gap-2 py-8 text-muted-foreground",role:"status",children:[(0,r.jsx)(y,{}),"Reading Runtime configuration…"]}),g&&(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,r.jsxs)("div",{className:"rounded-md border bg-muted/30 p-3",children:[(0,r.jsx)("span",{className:"block text-muted-foreground",children:"Configuration file"}),(0,r.jsx)("code",{className:"break-all",children:g.file.path})]}),x.length>1&&(0,r.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,r.jsx)("label",{className:"font-medium",htmlFor:`${i}-provider-key`,children:"Codex Provider key"}),(0,r.jsxs)(ag,{id:`${i}-provider-key`,value:p,onValueChange:e=>{e&&(h(e),f(e))},children:[(0,r.jsx)(aj,{className:"w-full",children:(0,r.jsx)(ab,{placeholder:"Select a Provider key"})}),(0,r.jsx)(ay,{align:"start",children:(0,r.jsx)(av,{children:x.map(e=>(0,r.jsx)(aN,{value:e,children:(0,r.jsx)("code",{children:e})},e))})})]})]}),b&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("section",{className:"flex flex-col gap-2",children:[(0,r.jsx)("h3",{className:"font-medium",children:"Changes"}),(0,r.jsx)(rg,{fields:b.changes})]}),(0,r.jsxs)(tX,{children:[(0,r.jsxs)(tG,{render:(0,r.jsx)(v,{className:"w-full justify-between",variant:"outline"}),children:["Unchanged managed fields",(0,r.jsx)("span",{children:b.unchanged.length})]}),(0,r.jsx)(tQ,{className:"pt-2",children:(0,r.jsx)(rg,{fields:b.unchanged})})]})]})]}),(0,r.jsxs)(ra,{children:[(0,r.jsx)(v,{disabled:o.isPending||c.isPending,variant:"outline",onClick:()=>f(),children:"Refresh"}),(0,r.jsxs)(v,{disabled:!b||o.isPending||c.isPending,onClick:()=>{b&&c.mutate({expectedFileHash:b.file.hash,providerKey:b.providerKey??void 0,target:d},{onError:e=>rp(e,"Apply failed"),onSuccess:()=>{eo.add({description:`${rx[i]} now uses the selected configuration.`,title:"Runtime saved",type:"success"}),l(!1)}})},children:[c.isPending&&(0,r.jsx)(y,{"data-icon":"inline-start"}),(0,r.jsx)("span",{children:"Apply"})]})]})]})})}function rj(e){let{summary:t,onDetect:a}=e,i=aF(t.runtime),s=t.managed&&t.providerId?t.providerId:ru,[d,l]=(0,n.useState)(s),[o,c]=(0,n.useState)(!1),u=(0,n.useMemo)(()=>d===ru?{kind:"official-default"}:{kind:"provider",providerId:d},[d]),x=t.detection,f="detected"===x.status;return(0,r.jsxs)(aG,{children:[(0,r.jsxs)(aQ,{children:[(0,r.jsx)(aZ,{children:rx[t.runtime]}),(0,r.jsx)(a0,{children:t.managed?null===t.providerId?"Managed by Foundry · Official Default":"Managed by Foundry":"Not managed by Foundry"}),(0,r.jsx)(a2,{children:(0,r.jsx)("span",{className:f?"text-emerald-600":"text-destructive",children:f?"Detected":"Not detected"})})]}),(0,r.jsxs)(a1,{className:"flex flex-col gap-4",children:[(0,r.jsxs)("dl",{className:"grid gap-2 text-muted-foreground sm:grid-cols-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("dt",{children:"Version"}),(0,r.jsx)("dd",{className:"font-mono text-foreground",children:x.version??"Unavailable"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("dt",{children:"Configuration"}),(0,r.jsx)("dd",{className:"break-all font-mono text-foreground",children:x.configurationPath})]})]}),x.message&&(0,r.jsxs)(m,{variant:"destructive",children:[(0,r.jsx)(p,{children:"Runtime unavailable"}),(0,r.jsx)(h,{children:x.message})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,r.jsx)("label",{className:"font-medium",htmlFor:`${t.runtime}-provider`,children:"Provider"}),(0,r.jsxs)(ag,{id:`${t.runtime}-provider`,value:d,onValueChange:e=>e&&l(e),children:[(0,r.jsx)(aj,{className:"w-full",children:(0,r.jsx)(ab,{})}),(0,r.jsx)(ay,{align:"start",children:(0,r.jsxs)(av,{children:[(0,r.jsx)(aN,{value:ru,children:"Official Default"}),i.data?.map(e=>(0,r.jsx)(aN,{value:e.id,children:e.name},e.id))]})})]})]}),(0,r.jsx)(rv,{runtime:t.runtime})]}),(0,r.jsxs)(a5,{className:"justify-end gap-2",children:[(0,r.jsx)(v,{variant:"outline",onClick:a,children:"Detect Again"}),(0,r.jsx)(v,{disabled:!f||i.isPending,onClick:()=>c(!0),children:"Save"})]}),o&&(0,r.jsx)(rb,{isOpen:!0,runtime:t.runtime,target:u,onOpenChange:c})]})}var ry=a(1656),rN=a(2498),rw=a(8474);let rk={dark:{icon:ry.A,label:"Dark"},light:{icon:rN.A,label:"Light"},system:{icon:rw.A,label:"System"}},r_=[{Component:function(){let e;return e=(0,N.I)({queryKey:q,queryFn:async()=>{if(200!==(await fetch("/api/health",{cache:"no-store"})).status)throw Error("Health check failed");return!0},networkMode:"always",staleTime:"static",gcTime:1/0,retry:!1,retryOnMount:!1,refetchOnMount:!1,refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchInterval:!1}),(0,n.useEffect)(()=>{document.title=B[e.status]},[e.status]),(0,r.jsx)(ey,{children:(0,r.jsx)(K.sv,{})})},children:[{index:!0,element:(0,r.jsx)(K.C5,{to:"/dashboard",replace:!0})},{Component:function(){let e=(0,ew.zy)(),t=(0,ew.Zp)(),a=function(e){for(let t of ta)for(let a of t.items)if(a.href===e)return a.title;return"Foundry"}(e.pathname),n=function(e){for(let t of ta)for(let a of t.items)if(a.href===e)return"description"in a?a.description:null;return null}(e.pathname),i=`${e.pathname}${e.search}${e.hash}`;return(0,r.jsxs)(eJ,{children:[(0,r.jsx)(tr,{}),(0,r.jsxs)(eG,{children:[(0,r.jsxs)("header",{className:"flex h-10 shrink-0 items-center gap-2 px-3",children:[(0,r.jsx)(eX,{"data-testid":"sidebar-trigger"}),(0,r.jsx)(eE,{orientation:"vertical",className:"h-4"}),(0,r.jsx)("span",{className:"text-xs font-medium","data-testid":"page-title",children:a}),n&&(0,r.jsx)("span",{className:"text-xs text-muted-foreground",children:n}),(0,r.jsx)(v,{variant:"ghost",size:"icon-sm",className:"ms-auto","aria-label":"Settings","data-testid":"settings-button",onClick:()=>t("/settings",{state:{returnTo:i}}),children:(0,r.jsx)(b.n,{icon:eN.A,strokeWidth:2})})]}),(0,r.jsx)(eE,{}),(0,r.jsx)("div",{className:"flex flex-1 p-4",children:(0,r.jsx)(K.sv,{})})]})]})},children:[{path:"dashboard",Component:function(){return(0,r.jsx)(tc,{title:"Dashboard",description:"Dashboard content will be added here."})}},{path:"prompts",Component:function(){return(0,r.jsx)(tc,{title:"Prompts",description:"Prompt management will be added here."})}},{path:"skills",Component:function(){return(0,r.jsx)(tc,{title:"Skills",description:"Local skill management will be added here."})}},{path:"mcps",Component:function(){return(0,r.jsx)(tc,{title:"MCPs",description:"MCP server management will be added here."})}},{path:"providers",Component:function(){let[e,t]=(0,$.ok)(),a=e.get("runtime"),i=a3(a)?a:"codex",s=aF(i),d=`/providers?runtime=${i}`;return(0,n.useEffect)(()=>{a3(a)||t({runtime:i},{replace:!0})},[a,i,t]),(0,r.jsxs)("main",{className:"flex w-full flex-col gap-5 pb-12",children:[(0,r.jsxs)("header",{className:"flex flex-wrap items-center justify-between gap-4",children:[(0,r.jsx)(aE,{"aria-label":"Provider Runtime",spacing:0,value:[i],variant:"outline",children:tx.map(e=>(0,r.jsx)(aP,{nativeButton:!1,render:(0,r.jsx)($.N_,{to:`/providers?runtime=${e}`}),value:e,children:a4[e]},e))}),(0,r.jsxs)(v,{className:"ms-auto",nativeButton:!1,render:(0,r.jsx)($.N_,{to:"/providers/new",state:{returnTo:d}}),children:[(0,r.jsx)(b.n,{icon:aX.A,strokeWidth:2,"data-icon":"inline-start"}),"Add Provider"]})]}),s.isPending?(0,r.jsxs)("div",{className:"flex flex-col gap-4","aria-label":"Loading Providers",role:"status",children:[(0,r.jsx)(e$,{className:"h-20 w-full"}),(0,r.jsx)(e$,{className:"h-20 w-full"})]}):null,s.isError?(0,r.jsxs)(m,{variant:"destructive",children:[(0,r.jsx)(p,{children:"Providers could not be loaded"}),(0,r.jsx)(h,{children:"Check the Foundry Server and try again."})]}):null,s.data?.length===0?(0,r.jsx)(ti,{children:(0,r.jsxs)(ts,{children:[(0,r.jsxs)(td,{children:["No"," ",a4[i]," ","Providers"]}),(0,r.jsx)(tl,{children:"Add a Provider to verify the creation and listing flow."})]})}):null,s.data&&s.data.length>0&&(0,r.jsx)("div",{className:"flex flex-col gap-4",children:s.data.map(e=>(0,r.jsx)(a6,{provider:e},e.id))})]})}},{path:"runtimes",Component:function(){let e=(0,N.I)({queryKey:ri,queryFn:rl,refetchOnWindowFocus:!1,retry:!1});return e.isPending?(0,r.jsxs)("main",{className:"grid gap-4 md:grid-cols-2","aria-label":"Loading Runtimes",role:"status",children:[(0,r.jsx)(e$,{className:"h-80"}),(0,r.jsx)(e$,{className:"h-80"})]}):e.isError?(0,r.jsxs)(m,{variant:"destructive",children:[(0,r.jsx)(p,{children:"Runtimes could not be loaded"}),(0,r.jsx)(h,{children:"Check the Foundry Server and try again."})]}):(0,r.jsx)("main",{className:"grid gap-4 pb-12 md:grid-cols-2",children:e.data.map(t=>(0,r.jsx)(rj,{summary:t,onDetect:()=>void e.refetch()},t.runtime))})}}]},{Component:function(){let e=(0,ew.zy)(),t="string"==typeof e.state?.returnTo?e.state.returnTo:"/dashboard";return(0,r.jsx)("div",{className:"min-h-svh p-4",children:(0,r.jsxs)("div",{className:"mx-auto flex min-h-[calc(100svh-2rem)] w-full max-w-2xl flex-col gap-4",children:[(0,r.jsxs)($.N_,{to:t,replace:!0,className:g({variant:"link",size:"sm",className:"-ms-2 self-start"}),"data-testid":"standalone-back",children:[(0,r.jsx)(b.n,{icon:tn.A,strokeWidth:2,"data-icon":"inline-start"}),"Back"]}),(0,r.jsx)("div",{className:"flex flex-1",children:(0,r.jsx)(K.sv,{})})]})})},children:[{path:"providers/new",Component:function(){let e,t=(0,ew.zy)(),a=(0,ew.Zp)(),i=(e=(0,s.jE)(),(0,w.n)({mutationFn:aM,onSuccess:t=>{e.setQueryData(aO(t.runtime),e=>[t,...e??[]])}})),[d,l]=(0,n.useState)(null),[o,c]=(0,n.useState)(null),[u,x]=(0,n.useState)(aR),[f,g]=(0,n.useState)(aU),[b,j]=(0,n.useState)(aW),[N,k]=(0,n.useState)(null),_=(0,n.useRef)(null),z="claude-code"===d&&"authorization"===b.apiKeyHeader?"Auth Token":"API Key",C=""!==b.subagentModel.trim(),A="string"==typeof t.state?.returnTo?t.state.returnTo:"/providers?runtime=codex",E=JSON.stringify(u)!==JSON.stringify(aR())||"codex"===d&&JSON.stringify(f)!==JSON.stringify(aU())||"claude-code"===d&&JSON.stringify(b)!==JSON.stringify(aW()),P=e=>{x(aR()),g(aU()),j(aW()),k(null),i.reset(),l(e),c(null)},O=async e=>{if(!e){x(e=>({...e,avatar:null})),k(null);return}if(!tm.includes(e.type)||e.size>2097152){x(e=>({...e,avatar:null})),k("Choose a PNG, JPEG, WebP, or SVG image no larger than 2 MB.");return}try{let t=await new Promise((t,a)=>{let r=new FileReader;r.addEventListener("error",()=>a(Error("Avatar could not be read."))),r.addEventListener("load",()=>{if("string"!=typeof r.result)return void a(Error("Avatar could not be read."));let n=r.result.indexOf(",");-1===n?a(Error("Avatar could not be read.")):t({data:r.result.slice(n+1),mimeType:e.type})}),r.readAsDataURL(e)});x(e=>({...e,avatar:t})),k(null)}catch{x(e=>({...e,avatar:null})),k("The avatar could not be read.")}};return(0,r.jsxs)("main",{className:"w-full pb-12",children:[(0,r.jsx)("header",{className:"pb-5",children:(0,r.jsx)("h1",{className:"text-xl font-semibold",children:"Add Provider"})}),(0,r.jsx)("form",{onSubmit:e=>{let t;if(e.preventDefault(),null!==d&&null===N){if("codex"===d)t={avatar:u.avatar,configuration:{apiKey:f.apiKey||null,baseUrl:f.baseUrl,defaultModel:f.defaultModel,protocol:"responses",reviewModel:aK(f.reviewModel)},name:u.name,officialWebsite:aK(u.officialWebsite),remark:aK(u.remark),runtime:d};else{let e=b.defaultModel.trim();if(""===e)return;t={avatar:u.avatar,configuration:{apiKey:b.apiKey,apiKeyHeader:b.apiKeyHeader,baseUrl:b.baseUrl,fableModel:a$(b.fableModel),haikuModel:a$(b.haikuModel),opusModel:a$(b.opusModel),defaultModel:e,protocol:"messages",sonnetModel:a$(b.sonnetModel),subagentModel:aK(b.subagentModel),subagentModelForce:b.subagentModelForce,hideAiAttribution:b.hideAiAttribution,teammatesMode:b.teammatesMode,enableToolSearch:b.enableToolSearch,maxEffortThinking:b.maxEffortThinking,disableAutoUpdater:b.disableAutoUpdater},name:u.name,officialWebsite:aK(u.officialWebsite),remark:aK(u.remark),runtime:d}}i.mutate(t,{onSuccess:e=>{a(`/providers?runtime=${e.runtime}`,{replace:!0})}})}},children:(0,r.jsxs)(t1,{children:[(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{required:!0,children:"Runtime"}),(0,r.jsx)(aE,{"aria-label":"Runtime",spacing:0,value:d?[d]:[],variant:"outline",onValueChange:e=>{let[t]=e.slice(-1);tx.includes(t)&&(e=>{if(e!==d){if(null!==d&&E)return c(e);P(e)}})(t)},children:tx.map(e=>(0,r.jsx)(aP,{value:e,children:aL[e]},e))}),(0,r.jsx)(t8,{children:"Choose the Runtime this Provider can be applied to."})]}),null===d?(0,r.jsxs)(m,{children:[(0,r.jsx)(p,{children:"Choose a Runtime"}),(0,r.jsx)(h,{children:"Provider fields appear after a Runtime is selected."})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t7,{children:"Provider"}),(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:"provider-name",required:!0,children:"Name"}),(0,r.jsx)(eC,{id:"provider-name",maxLength:100,required:!0,value:u.name,onChange:e=>x({...u,name:e.target.value})})]}),(0,r.jsxs)(t4,{"data-invalid":null!==N||void 0,children:[(0,r.jsx)(t6,{htmlFor:"provider-avatar",children:"Avatar"}),(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)("button",{"aria-label":"Choose provider avatar",className:"size-10 cursor-pointer rounded-full outline-none focus-visible:ring-2 focus-visible:ring-ring/30",type:"button",onClick:()=>_.current?.click(),children:(0,r.jsxs)(tU,{size:"lg",children:[u.avatar?(0,r.jsx)(tH,{alt:"Provider avatar preview",src:`data:${u.avatar.mimeType};base64,${u.avatar.data}`}):null,(0,r.jsx)(tW,{children:u.name.trim().charAt(0)||"P"})]})}),(0,r.jsx)(v,{disabled:null===u.avatar,type:"button",variant:"outline",onClick:()=>{x(e=>({...e,avatar:null})),k(null),_.current&&(_.current.value="")},children:"Remove avatar"}),(0,r.jsx)(eC,{accept:tm.join(","),"aria-invalid":null!==N||void 0,className:"sr-only size-px",id:"provider-avatar",ref:_,type:"file",onChange:e=>{O(e.target.files?.[0])}})]}),(0,r.jsx)(t8,{children:"Click the avatar to choose a PNG, JPEG, WebP, or SVG up to 2 MB."}),(0,r.jsx)(t9,{children:N})]}),(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:"provider-website",children:"Official website"}),(0,r.jsx)(eC,{id:"provider-website",maxLength:2048,placeholder:"https://example.com",type:"url",value:u.officialWebsite,onChange:e=>x({...u,officialWebsite:e.target.value})})]}),(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:"provider-remark",children:"Remark"}),(0,r.jsx)(tv,{id:"provider-remark",maxLength:2e3,value:u.remark,onChange:e=>x({...u,remark:e.target.value})})]}),(0,r.jsx)(t7,{children:"Connection"}),(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:"provider-protocol",children:"Protocol"}),(0,r.jsx)(eC,{id:"provider-protocol",readOnly:!0,value:"codex"===d?"Responses API":"Anthropic Messages API"})]}),(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:"provider-base-url",required:!0,children:"Base URL"}),(0,r.jsx)(eC,{id:"provider-base-url",maxLength:2048,placeholder:"codex"===d?"https://example.com/v1":"https://example.com",required:!0,type:"url",value:"codex"===d?f.baseUrl:b.baseUrl,onChange:e=>{"codex"===d?g({...f,baseUrl:e.target.value}):j({...b,baseUrl:e.target.value})}})]}),"claude-code"===d?(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{required:!0,children:"Authentication method"}),(0,r.jsxs)(aE,{"aria-label":"Authentication method",spacing:0,value:[b.apiKeyHeader],variant:"outline",onValueChange:e=>{let[t]=e.slice(-1);("authorization"===t||"x-api-key"===t)&&j({...b,apiKeyHeader:t})},children:[(0,r.jsxs)(R,{children:[(0,r.jsx)(U,{render:(0,r.jsx)(aP,{value:"authorization"}),children:"Auth Token"}),(0,r.jsx)(H,{children:(0,r.jsx)("code",{className:"font-mono",children:"Authorization: Bearer <xxx>"})})]}),(0,r.jsxs)(R,{children:[(0,r.jsx)(U,{render:(0,r.jsx)(aP,{value:"x-api-key"}),children:"API Key"}),(0,r.jsx)(H,{children:(0,r.jsx)("code",{className:"font-mono",children:"X-Api-Key: <xxx>"})})]})]})]}):null,(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:"provider-api-key",required:"claude-code"===d,children:z}),(0,r.jsx)(t_,{autoComplete:"off",id:"provider-api-key",maxLength:16384,required:"claude-code"===d,value:"codex"===d?f.apiKey:b.apiKey,onChange:e=>{"codex"===d?g({...f,apiKey:e.target.value}):j({...b,apiKey:e.target.value})}}),"codex"===d?(0,r.jsx)(t8,{children:"Leave blank only when the endpoint accepts requests without credentials."}):null]}),"codex"===d?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t7,{children:"Models"}),(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:"codex-default-model",required:!0,children:"Default model"}),(0,r.jsx)(eC,{id:"codex-default-model",maxLength:200,required:!0,value:f.defaultModel,onChange:e=>g({...f,defaultModel:e.target.value})})]}),(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:"codex-review-model",children:"Review model"}),(0,r.jsx)(eC,{id:"codex-review-model",maxLength:200,value:f.reviewModel,onChange:e=>g({...f,reviewModel:e.target.value})})]})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t7,{children:"Models"}),(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:"claude-default-model",required:!0,children:"Default model"}),(0,r.jsx)(eC,{id:"claude-default-model",maxLength:200,required:!0,value:b.defaultModel,onChange:e=>j({...b,defaultModel:e.target.value})})]}),[["opusModel","Opus model"],["sonnetModel","Sonnet model"],["haikuModel","Haiku model"],["fableModel","Fable model"]].map(e=>{let[t,a]=e;return(0,r.jsx)(aq,{id:`claude-${t}`,label:a,value:b[t],onChange:e=>j({...b,[t]:e})},t)}),(0,r.jsxs)(t4,{children:[(0,r.jsx)(t6,{htmlFor:"claude-subagent-model",children:"Subagent model"}),(0,r.jsx)(eC,{id:"claude-subagent-model",maxLength:200,value:b.subagentModel,onChange:e=>{let t=e.target.value;j({...b,subagentModel:t,subagentModelForce:""!==t.trim()&&b.subagentModelForce})}})]}),(0,r.jsxs)(t4,{"data-disabled":!C,orientation:"horizontal",children:[(0,r.jsx)(tB,{checked:b.subagentModelForce,disabled:!C,id:"claude-subagent-model-force",onCheckedChange:e=>j({...b,subagentModelForce:e})}),(0,r.jsxs)(t3,{children:[(0,r.jsx)(t6,{htmlFor:"claude-subagent-model-force",children:"Force subagent model"}),(0,r.jsx)(t8,{children:"Force Claude Code to use the configured subagent model."})]})]}),(0,r.jsx)(t7,{children:"Others"}),(0,r.jsxs)(t0,{children:[(0,r.jsx)(t2,{className:"sr-only",children:"Other Claude Code options"}),(0,r.jsx)(t1,{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:aI.map(e=>{let t=`claude-${e.key}`;return(0,r.jsxs)(t4,{className:"min-w-0",orientation:"horizontal",children:[(0,r.jsx)(tB,{checked:b[e.key],id:t,onCheckedChange:t=>j({...b,[e.key]:t})}),(0,r.jsxs)(t3,{className:"min-w-0",children:[(0,r.jsx)(t6,{htmlFor:t,children:e.label}),(0,r.jsx)(t8,{children:e.description})]})]},e.key)})})]})]}),i.isError?(0,r.jsxs)(m,{variant:"destructive",children:[(0,r.jsx)(p,{children:"Provider was not saved"}),(0,r.jsx)(h,{children:"Check the fields and Foundry Server, then try again."})]}):null,(0,r.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,r.jsx)(v,{nativeButton:!1,render:(0,r.jsx)($.N_,{to:A,replace:!0}),variant:"outline",children:"Cancel"}),(0,r.jsxs)(v,{disabled:i.isPending||null!==N,type:"submit",children:[i.isPending?(0,r.jsx)(y,{"data-icon":"inline-start"}):null,(0,r.jsx)("span",{children:"Add Provider"})]})]})]})]})},d??"unselected"),(0,r.jsx)(tC,{open:null!==o,onOpenChange:e=>{e||c(null)},children:(0,r.jsxs)(tP,{children:[(0,r.jsxs)(tO,{children:[(0,r.jsx)(tT,{children:"Change Runtime?"}),(0,r.jsx)(tM,{children:"Changing the Runtime will clear the information you've entered."})]}),(0,r.jsxs)(tS,{children:[(0,r.jsx)(tL,{children:"Cancel"}),(0,r.jsx)(tF,{onClick:()=>{o&&P(o)},children:"Change Runtime"})]})]})})]})}},{path:"settings",Component:function(){let e,{theme:t}=function(){let e=n.useContext(E);if(!e)throw Error("useTheme must be used within a ThemeProvider");return e}(),a=(e=(0,s.jE)(),(0,w.n)({mutationFn:C,onSuccess:t=>{e.setQueryData(k,t)}}));return(0,r.jsxs)("main",{className:"w-full pb-12",children:[(0,r.jsx)("header",{className:"pb-5",children:(0,r.jsx)("h1",{className:"text-xl font-semibold",children:"Settings"})}),(0,r.jsxs)("section",{"aria-labelledby":"color-mode-heading",className:"grid gap-4 border-y py-5 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-center",children:[(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)("h2",{id:"color-mode-heading",className:"text-sm font-medium",children:"Color mode"}),(0,r.jsx)("p",{className:"text-xs/relaxed text-muted-foreground",children:"Match your system, or use light or dark mode."})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(aE,{"aria-label":"Color mode",disabled:a.isPending,spacing:0,value:[t],variant:"outline",onValueChange:e=>{var r;let n=e[0];n!==t&&void 0!==(r=n)&&tu.includes(r)&&a.mutate({colorMode:n})},children:tu.map(e=>{let t=rk[e];return(0,r.jsxs)(aP,{value:e,children:[(0,r.jsx)(b.n,{icon:t.icon,strokeWidth:2,"data-icon":"inline-start"}),t.label]},e)})}),(0,r.jsx)("span",{className:"grid size-4 place-items-center",children:a.isPending?(0,r.jsx)(y,{"aria-label":"Saving Color Mode"}):null})]}),a.isError?(0,r.jsxs)(m,{className:"sm:col-span-2",variant:"destructive",children:[(0,r.jsx)(p,{children:"Color Mode was not saved"}),(0,r.jsx)(h,{children:"Check the Foundry Server and try again."})]}):null]})]})}},{path:"*",Component:function(){let e=(0,ew.zy)();return(0,r.jsxs)(ti,{children:[(0,r.jsxs)(ts,{className:"max-w-md gap-3",children:[(0,r.jsx)("p",{"aria-hidden":"true",className:"font-mono text-7xl font-semibold tracking-tighter text-muted-foreground/20",children:"404"}),(0,r.jsx)("h1",{className:"font-heading text-xl font-semibold tracking-tight",children:"This page doesn't exist"}),(0,r.jsx)(tl,{children:"The address may be incorrect, or the page may have moved."})]}),(0,r.jsxs)(to,{className:"gap-4",children:[(0,r.jsxs)("p",{className:"flex max-w-full items-center gap-2 text-muted-foreground",children:[(0,r.jsx)("span",{children:"Requested path"}),(0,r.jsx)("code",{className:"max-w-64 truncate rounded-md bg-muted px-2 py-1 font-mono text-foreground",children:e.pathname})]}),(0,r.jsxs)(v,{nativeButton:!1,render:(0,r.jsx)($.N_,{to:"/dashboard","data-testid":"not-found-dashboard"}),children:[(0,r.jsx)(b.n,{icon:e6.A,strokeWidth:2,"data-icon":"inline-start"}),"Go to dashboard"]})]})]})}}]}]}],rz=(0,$.Ge)(r_),rC=document.getElementById("root");rC&&i.createRoot(rC).render((0,r.jsx)(n.StrictMode,{children:(0,r.jsx)(s.Ht,{client:W,children:(0,r.jsx)(function(e){let{children:t,disableTransitionOnChange:a=!0}=e,i=(0,N.I)({queryKey:k,queryFn:z,refetchOnWindowFocus:!1,retry:!1,staleTime:1/0}),s=i.data?.colorMode??"system",[d,l]=n.useState(P);return(n.useLayoutEffect(()=>{if(localStorage.removeItem("theme"),l(O(s,a)),"system"!==s)return;let e=window.matchMedia(A),t=()=>{l(O("system",a))};return e.addEventListener("change",t),()=>{e.removeEventListener("change",t)}},[a,s]),i.isPending)?(0,r.jsx)("div",{className:"grid min-h-svh place-items-center",children:(0,r.jsx)(y,{"aria-label":"Loading Foundry"})}):i.isError?(0,r.jsx)("main",{className:"grid min-h-svh place-items-center p-4",children:(0,r.jsxs)(m,{variant:"destructive",className:"max-w-sm",children:[(0,r.jsx)(p,{children:"Unable to load Foundry"}),(0,r.jsx)(h,{children:"Application Settings could not be loaded."}),(0,r.jsx)(v,{className:"mt-2 justify-self-start",size:"sm",variant:"outline",onClick:()=>i.refetch(),children:"Retry"})]})}):(0,r.jsx)(E.Provider,{value:{resolvedTheme:d,theme:s},children:t})},{children:(0,r.jsx)(function(e){let{delay:t=0,...a}=e;return(0,r.jsx)(S.B,{"data-slot":"tooltip-provider",delay:t,...a})},{children:(0,r.jsx)(d.p,{router:rz})})})})}))}},d={};function l(e){var t=d[e];if(void 0!==t)return t.exports;var a=d[e]={exports:{}};return s[e](a,a.exports,l),a.exports}l.m=s,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,l.t=function(a,r){if(1&r&&(a=this(a)),8&r||"object"==typeof a&&a&&(4&r&&a.__esModule||16&r&&"function"==typeof a.then))return a;var n=Object.create(null);l.r(n);var i={};e=e||[null,t({}),t([]),t(t)];for(var s=2&r&&a;("object"==typeof s||"function"==typeof s)&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach(e=>{i[e]=()=>a[e]});return i.default=()=>a,l.d(n,i),n},l.d=(e,t,a)=>{var r=(t,a)=>{for(var r in t)l.o(t,r)&&!l.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,[a]:t[r]})};r(t,"get"),r(a,"value")},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a=[],l.O=(e,t,r,n)=>{if(t){n=n||0;for(var i=a.length;i>0&&a[i-1][2]>n;i--)a[i]=a[i-1];a[i]=[t,r,n];return}for(var s=1/0,i=0;i<a.length;i++){for(var[t,r,n]=a[i],d=!0,o=0;o<t.length;o++)(!1&n||s>=n)&&Object.keys(l.O).every(e=>l.O[e](t[o]))?t.splice(o--,1):(d=!1,n<s&&(s=n));if(d){a.splice(i--,1);var c=r();void 0!==c&&(e=c)}}return e},r={410:0},l.O.j=e=>0===r[e],n=(e,t)=>{var a,n,[i,s,d]=t,o=0;if(i.some(e=>0!==r[e])){for(a in s)l.o(s,a)&&(l.m[a]=s[a]);if(d)var c=d(l)}for(e&&e(t);o<i.length;o++)n=i[o],l.o(r,n)&&r[n]&&r[n][0](),r[n]=0;return l.O(c)},(i=self.rspackChunk_dhzh_foundry_app=self.rspackChunk_dhzh_foundry_app||[]).forEach(n.bind(null,0)),i.push=n.bind(null,i.push.bind(i));var o=l.O(void 0,["783","535","597"],()=>l(2627));o=l.O(o)})();
package/dist/cli.mjs CHANGED
@@ -1,26 +1,26 @@
1
1
  #!/usr/bin/env node
2
- import{t as e}from"./package-Dg-nUTkb.mjs";import{defineCommand as t,renderUsage as n,runMain as r}from"citty";import i from"node:process";import a from"open";import{serve as o}from"@hono/node-server";import{serveStatic as s}from"@hono/node-server/serve-static";import{zValidator as c}from"@hono/zod-validator";import{constants as l,existsSync as u}from"node:fs";import d from"node:path";import{Hono as f}from"hono";import{z as p}from"zod";import{Buffer as m}from"node:buffer";import{TextDecoder as ee,promisify as te}from"node:util";import ne from"better-sqlite3";import{drizzle as re}from"drizzle-orm/better-sqlite3";import{createHash as ie,randomUUID as ae,randomUUIDv7 as oe}from"node:crypto";import{access as se,chmod as ce,lstat as le,mkdir as h,readFile as ue,readdir as de,realpath as fe,rename as pe,rm as g,stat as me,writeFile as he}from"node:fs/promises";import{readMigrationFiles as ge}from"drizzle-orm/migrator";import _e from"env-paths";import{homedir as ve}from"node:os";import{and as _,desc as v,eq as y,isNull as b,sql as x}from"drizzle-orm";import{blob as ye,check as S,index as be,integer as C,sqliteTable as w,text as T,uniqueIndex as xe}from"drizzle-orm/sqlite-core";import{parse as Se,patch as Ce,stringify as we}from"@decimalturn/toml-patch";import{execFile as Te}from"node:child_process";var E=Object.defineProperty,Ee=(e,t)=>{let n={};for(var r in e)E(n,r,{get:e[r],enumerable:!0});return t||E(n,Symbol.toStringTag,{value:`Module`}),n};const D={providerNotFound:`PROVIDER_NOT_FOUND`,runtimeApplyFailed:`RUNTIME_APPLY_FAILED`,runtimeConfigurationChanged:`RUNTIME_CONFIGURATION_CHANGED`,runtimeConfigurationInvalid:`RUNTIME_CONFIGURATION_INVALID`,runtimeNotDetected:`RUNTIME_NOT_DETECTED`,success:`SUCCESS`},De=[`system`,`light`,`dark`],O=[`codex`,`claude-code`],Oe=[`image/png`,`image/jpeg`,`image/webp`,`image/svg+xml`],ke=[`authorization`,`x-api-key`],Ae=[`effort`,`xhigh_effort`,`max_effort`,`thinking`,`adaptive_thinking`,`interleaved_thinking`],je=/^[A-Za-z0-9+/]+={0,2}$/u;function Me(e,t){for(let n of e){let e=n.codePointAt(0)??0,r=t&&[9,10,13].includes(e);if(e===127||!r&&e<32)return!0}return!1}function k(e){return p.string().trim().max(e).refine(e=>!Me(e,!0),{message:`Control characters are not allowed.`})}function A(e){return k(e).nullable().transform(e=>e===``?null:e)}function Ne(e,t){try{let n=new URL(e);return[`http:`,`https:`].includes(n.protocol)&&n.username===``&&n.password===``&&(t||n.search===``&&n.hash===``)}catch{return!1}}const Pe=k(2048).min(1).refine(e=>Ne(e,!1),{message:`Provide an HTTP or HTTPS URL without credentials, a query, or a fragment.`}),Fe=A(2048).refine(e=>e===null||Ne(e,!0),{message:`Provide an HTTP or HTTPS URL without credentials.`}),Ie=k(100).min(1),Le=A(100),Re=A(2e3),j=k(200).min(1),M=A(200),ze=A(2e3),Be=p.string().min(1).max(16384).refine(e=>!Me(e,!1),{message:`Control characters are not allowed.`}),Ve=p.union([Be,p.literal(``),p.null()]).transform(e=>e===``?null:e);function He(e,t){if(e===`image/png`)return[137,80,78,71,13,10,26,10].every((e,n)=>t[n]===e);if(e===`image/jpeg`)return t[0]===255&&t[1]===216&&t[2]===255;if(e===`image/svg+xml`)try{let e=new ee(`utf-8`,{fatal:!0}).decode(t);return/^\s*(?:(?:<\?xml[\s\S]*?\?>|<!--[\s\S]*?-->|<!DOCTYPE[\s\S]*?>)\s*)*<svg(?:\s|>)/u.test(e)}catch{return!1}return t[0]===82&&t[1]===73&&t[2]===70&&t[3]===70&&t[8]===87&&t[9]===69&&t[10]===66&&t[11]===80}const Ue=p.strictObject({data:p.string().min(1).max(2796204),mimeType:p.enum(Oe)}).superRefine((e,t)=>{if(!je.test(e.data)){t.addIssue({code:`custom`,message:`Avatar data must be valid Base64.`});return}let n=m.from(e.data,`base64`);(n.byteLength===0||n.byteLength>2097152||n.toString(`base64`)!==e.data||!He(e.mimeType,n))&&t.addIssue({code:`custom`,message:`Avatar data must be a valid PNG, JPEG, WebP, or SVG image no larger than 2 MB.`})}),We=p.array(p.enum(Ae)).max(Ae.length).refine(e=>new Set(e).size===e.length,{message:`Model capabilities must be unique.`}),N=p.strictObject({description:Re,displayName:Le,model:j,supportedCapabilities:We}),Ge=p.strictObject({apiKey:Ve,baseUrl:Pe,primaryModel:j,protocol:p.literal(`responses`),reviewModel:M}),Ke=p.strictObject({apiKey:Be,apiKeyHeader:p.enum(ke),baseUrl:Pe,fableModel:N.nullable(),haikuModel:N.nullable(),opusModel:N.nullable(),primaryModel:N,protocol:p.literal(`messages`),sonnetModel:N.nullable(),subagentModel:M}),qe={avatar:Ue.nullable(),name:Ie,officialWebsite:Fe,remark:ze},Je=p.discriminatedUnion(`runtime`,[p.strictObject({...qe,configuration:Ge,runtime:p.literal(`codex`)}),p.strictObject({...qe,configuration:Ke,runtime:p.literal(`claude-code`)})]),Ye=p.strictObject({runtime:p.enum(O)});function Xe(e){return Je.parse(e)}function Ze(e){return Ge.parse(e)}function Qe(e){return Ke.parse(e)}function $e(e){return e===null?null:m.from(Ue.parse(e).data,`base64`)}function et(e,t){e.get(`/api/providers`,c(`query`,Ye),e=>e.json({status:D.success,data:t.listProviders(e.req.valid(`query`).runtime)})),e.post(`/api/providers`,c(`json`,Je),e=>e.json({status:D.success,data:t.createProvider(e.req.valid(`json`))},201))}var P=class extends Error{status;constructor(e,t){super(t),this.status=e}};const F=p.discriminatedUnion(`kind`,[p.strictObject({kind:p.literal(`official-default`)}),p.strictObject({kind:p.literal(`provider`),providerId:p.string().min(1)})]),I=p.strictObject({runtime:p.enum(O)}),tt=p.strictObject({}),nt=p.strictObject({providerKey:p.string().min(1).max(200).optional(),target:F}),rt=p.strictObject({expectedFileHash:p.string().regex(/^[0-9a-f]{64}$/),providerKey:p.string().min(1).max(200).optional(),target:F});function it(e,t){e.get(`/api/runtimes`,c(`query`,tt),async e=>e.json({status:D.success,data:await t.listRuntimes()})),e.post(`/api/runtimes/:runtime/preview`,c(`param`,I),c(`json`,nt),async e=>{try{return e.json({status:D.success,data:await t.previewConfiguration(e.req.valid(`param`).runtime,e.req.valid(`json`))})}catch(t){if(t instanceof P)return e.json({status:t.status,data:null,message:t.message});throw t}}),e.post(`/api/runtimes/:runtime/apply`,c(`param`,I),c(`json`,rt),async e=>{try{return e.json({status:D.success,data:await t.applyConfiguration(e.req.valid(`param`).runtime,e.req.valid(`json`))})}catch(t){if(t instanceof P)return e.json({status:t.status,data:null,message:t.message});throw t}})}const at=p.strictObject({}),ot=p.strictObject({colorMode:p.enum(De)});function st(e,t){e.get(`/api/settings`,c(`query`,at),e=>e.json({status:D.success,data:t.getApplicationSettings()})),e.patch(`/api/settings`,c(`json`,ot),e=>e.json({status:D.success,data:t.updateApplicationSettings(e.req.valid(`json`))}))}const ct=p.strictObject({});function lt(){return[d.resolve(import.meta.dirname,`app`),d.resolve(import.meta.dirname,`../../dist/app`)].find(e=>u(e))}function ut(e){let t=new f;t.get(`/api/health`,c(`query`,ct),e=>e.json({status:D.success,data:!0,message:`Service is healthy.`})),st(t,e.settingsStore),et(t,e.providerStore),it(t,e.runtimeService);let n=e.webRoot??lt();return n&&t.use(`*`,s({root:n})),t}const L=`__drizzle_migrations`;function dt(e){return!!e.prepare(`
2
+ import{t as e}from"./package-DoFH3Rau.mjs";import{defineCommand as t,renderUsage as n,runMain as r}from"citty";import i from"node:process";import a from"open";import{serve as o}from"@hono/node-server";import{serveStatic as s}from"@hono/node-server/serve-static";import{zValidator as c}from"@hono/zod-validator";import{constants as l,existsSync as u}from"node:fs";import d from"node:path";import{Hono as f}from"hono";import{z as p}from"zod";import{Buffer as m}from"node:buffer";import{TextDecoder as ee,promisify as te}from"node:util";import ne from"better-sqlite3";import{drizzle as re}from"drizzle-orm/better-sqlite3";import{createHash as ie,randomUUID as ae,randomUUIDv7 as oe}from"node:crypto";import{access as se,chmod as ce,lstat as le,mkdir as h,readFile as ue,readdir as de,realpath as fe,rename as pe,rm as g,stat as me,writeFile as he}from"node:fs/promises";import{readMigrationFiles as ge}from"drizzle-orm/migrator";import _e from"env-paths";import{homedir as ve}from"node:os";import{and as _,desc as ye,eq as v,isNull as y,sql as b}from"drizzle-orm";import{blob as be,check as x,index as xe,integer as S,sqliteTable as C,text as w,uniqueIndex as Se}from"drizzle-orm/sqlite-core";import{parse as Ce,patch as we,stringify as Te}from"@decimalturn/toml-patch";import{execFile as Ee}from"node:child_process";var T=Object.defineProperty,De=(e,t)=>{let n={};for(var r in e)T(n,r,{get:e[r],enumerable:!0});return t||T(n,Symbol.toStringTag,{value:`Module`}),n};const E={providerNotFound:`PROVIDER_NOT_FOUND`,runtimeApplyFailed:`RUNTIME_APPLY_FAILED`,runtimeConfigurationChanged:`RUNTIME_CONFIGURATION_CHANGED`,runtimeConfigurationInvalid:`RUNTIME_CONFIGURATION_INVALID`,runtimeNotDetected:`RUNTIME_NOT_DETECTED`,success:`SUCCESS`},D=[`system`,`light`,`dark`],O=[`codex`,`claude-code`],Oe=[`image/png`,`image/jpeg`,`image/webp`,`image/svg+xml`],ke=[`authorization`,`x-api-key`],k=[`effort`,`xhigh_effort`,`max_effort`,`thinking`,`adaptive_thinking`,`interleaved_thinking`],Ae=/^[A-Za-z0-9+/]+={0,2}$/u;function A(e,t){for(let n of e){let e=n.codePointAt(0)??0,r=t&&[9,10,13].includes(e);if(e===127||!r&&e<32)return!0}return!1}function j(e){return p.string().trim().max(e).refine(e=>!A(e,!0),{message:`Control characters are not allowed.`})}function M(e){return j(e).nullable().transform(e=>e===``?null:e)}function N(e,t){try{let n=new URL(e);return[`http:`,`https:`].includes(n.protocol)&&n.username===``&&n.password===``&&(t||n.search===``&&n.hash===``)}catch{return!1}}const P=j(2048).min(1).refine(e=>N(e,!1),{message:`Provide an HTTP or HTTPS URL without credentials, a query, or a fragment.`}),je=M(2048).refine(e=>e===null||N(e,!0),{message:`Provide an HTTP or HTTPS URL without credentials.`}),Me=j(100).min(1),Ne=M(100),Pe=M(2e3),F=j(200).min(1),I=M(200),Fe=M(2e3),Ie=p.string().min(1).max(16384).refine(e=>!A(e,!1),{message:`Control characters are not allowed.`}),Le=p.union([Ie,p.literal(``),p.null()]).transform(e=>e===``?null:e);function Re(e,t){if(e===`image/png`)return[137,80,78,71,13,10,26,10].every((e,n)=>t[n]===e);if(e===`image/jpeg`)return t[0]===255&&t[1]===216&&t[2]===255;if(e===`image/svg+xml`)try{let e=new ee(`utf-8`,{fatal:!0}).decode(t);return/^\s*(?:(?:<\?xml[\s\S]*?\?>|<!--[\s\S]*?-->|<!DOCTYPE[\s\S]*?>)\s*)*<svg(?:\s|>)/u.test(e)}catch{return!1}return t[0]===82&&t[1]===73&&t[2]===70&&t[3]===70&&t[8]===87&&t[9]===69&&t[10]===66&&t[11]===80}const ze=p.strictObject({data:p.string().min(1).max(2796204),mimeType:p.enum(Oe)}).superRefine((e,t)=>{if(!Ae.test(e.data)){t.addIssue({code:`custom`,message:`Avatar data must be valid Base64.`});return}let n=m.from(e.data,`base64`);(n.byteLength===0||n.byteLength>2097152||n.toString(`base64`)!==e.data||!Re(e.mimeType,n))&&t.addIssue({code:`custom`,message:`Avatar data must be a valid PNG, JPEG, WebP, or SVG image no larger than 2 MB.`})}),Be=p.array(p.enum(k)).max(k.length).refine(e=>new Set(e).size===e.length,{message:`Model capabilities must be unique.`}),L=p.strictObject({description:Pe,displayName:Ne,model:F,supportedCapabilities:Be}),Ve=p.union([F,L.transform(e=>e.model)]),He=p.strictObject({apiKey:Le,baseUrl:P,defaultModel:F,protocol:p.literal(`responses`),reviewModel:I}),Ue=p.strictObject({apiKey:Ie,apiKeyHeader:p.enum(ke),baseUrl:P,fableModel:L.nullable(),haikuModel:L.nullable(),opusModel:L.nullable(),defaultModel:Ve,protocol:p.literal(`messages`),sonnetModel:L.nullable(),subagentModel:I,subagentModelForce:p.boolean().default(!1),hideAiAttribution:p.boolean().default(!1),teammatesMode:p.boolean().default(!1),enableToolSearch:p.boolean().default(!1),maxEffortThinking:p.boolean().default(!1),disableAutoUpdater:p.boolean().default(!1)}),We={avatar:ze.nullable(),name:Me,officialWebsite:je,remark:Fe},Ge=p.discriminatedUnion(`runtime`,[p.strictObject({...We,configuration:He,runtime:p.literal(`codex`)}),p.strictObject({...We,configuration:Ue,runtime:p.literal(`claude-code`)})]),Ke=p.strictObject({runtime:p.enum(O)});function qe(e){return Ge.parse(e)}function Je(e){return He.parse(e)}function Ye(e){return Ue.parse(e)}function Xe(e){return e===null?null:m.from(ze.parse(e).data,`base64`)}function Ze(e){return{avatar:e.avatar,baseUrl:e.configuration.baseUrl,id:e.id,name:e.name,officialWebsite:e.officialWebsite,remark:e.remark,runtime:e.runtime}}function Qe(e,t){e.get(`/api/providers`,c(`query`,Ke),e=>e.json({status:E.success,data:t.listProviders(e.req.valid(`query`).runtime).map(e=>Ze(e))})),e.post(`/api/providers`,c(`json`,Ge),e=>{let n=e.req.valid(`json`),r=Ze(t.createProvider(n));return e.json({status:E.success,data:r},201)})}var R=class extends Error{status;constructor(e,t){super(t),this.status=e}};const z=p.discriminatedUnion(`kind`,[p.strictObject({kind:p.literal(`official-default`)}),p.strictObject({kind:p.literal(`provider`),providerId:p.string().min(1)})]),$e=p.strictObject({runtime:p.enum(O)}),et=p.strictObject({}),tt=p.strictObject({providerKey:p.string().min(1).max(200).optional(),target:z}),nt=p.strictObject({expectedFileHash:p.string().regex(/^[0-9a-f]{64}$/),providerKey:p.string().min(1).max(200).optional(),target:z});function rt(e,t){e.get(`/api/runtimes`,c(`query`,et),async e=>e.json({status:E.success,data:await t.listRuntimes()})),e.post(`/api/runtimes/:runtime/preview`,c(`param`,$e),c(`json`,tt),async e=>{try{return e.json({status:E.success,data:await t.previewConfiguration(e.req.valid(`param`).runtime,e.req.valid(`json`))})}catch(t){if(t instanceof R)return e.json({status:t.status,data:null,message:t.message});throw t}}),e.post(`/api/runtimes/:runtime/apply`,c(`param`,$e),c(`json`,nt),async e=>{try{return e.json({status:E.success,data:await t.applyConfiguration(e.req.valid(`param`).runtime,e.req.valid(`json`))})}catch(t){if(t instanceof R)return e.json({status:t.status,data:null,message:t.message});throw t}})}const it=p.strictObject({}),at=p.strictObject({colorMode:p.enum(D)});function ot(e,t){e.get(`/api/settings`,c(`query`,it),e=>e.json({status:E.success,data:t.getApplicationSettings()})),e.patch(`/api/settings`,c(`json`,at),e=>e.json({status:E.success,data:t.updateApplicationSettings(e.req.valid(`json`))}))}const st=p.strictObject({});function ct(){return[d.resolve(import.meta.dirname,`app`),d.resolve(import.meta.dirname,`../../dist/app`)].find(e=>u(e))}function lt(e){let t=new f;t.get(`/api/health`,c(`query`,st),e=>e.json({status:E.success,data:!0,message:`Service is healthy.`})),ot(t,e.settingsStore),Qe(t,e.providerStore),rt(t,e.runtimeService);let n=e.webRoot??ct();return n&&t.use(`*`,s({root:n})),t}const B=`__drizzle_migrations`;function ut(e){return!!e.prepare(`
3
3
  SELECT 1
4
4
  FROM sqlite_master
5
5
  WHERE type = 'table' AND name = ?
6
- `).pluck().get(L)}function R(e){return dt(e)?e.prepare(`
6
+ `).pluck().get(B)}function dt(e){return ut(e)?e.prepare(`
7
7
  SELECT hash, created_at
8
- FROM ${L}
8
+ FROM ${B}
9
9
  ORDER BY created_at ASC
10
- `).all():[]}function z(e,t){if(e.length>t.length)throw Error(`The Foundry database was migrated by a newer CLI version.`);for(let[n,r]of e.entries()){let e=t[n];if(r.hash!==e.hash||r.created_at!==e.folderMillis)throw Error(`The Foundry database migration history is incompatible.`)}}async function ft(e){let t=(await de(e)).filter(e=>e.endsWith(`.sqlite`)).toSorted((e,t)=>e.localeCompare(t)).slice(0,-1);await Promise.all(t.map(t=>g(d.join(e,t),{force:!0})))}async function pt(e,t,n){let r=d.join(d.dirname(t),`backups`);await h(r,{recursive:!0});let a=new Date(n()).toISOString().replaceAll(`:`,`-`),o=d.join(r,`foundry-before-${a}-${i.pid}.sqlite`);await e.backup(o),await ft(r)}function mt(e,t){e.exec(`BEGIN IMMEDIATE`);try{e.exec(`
11
- CREATE TABLE IF NOT EXISTS ${L} (
10
+ `).all():[]}function ft(e,t){if(e.length>t.length)throw Error(`The Foundry database was migrated by a newer CLI version.`);for(let[n,r]of e.entries()){let e=t[n];if(r.hash!==e.hash||r.created_at!==e.folderMillis)throw Error(`The Foundry database migration history is incompatible.`)}}async function pt(e){let t=(await de(e)).filter(e=>e.startsWith(`foundry-before-`)&&e.endsWith(`.sqlite`)).toSorted((e,t)=>e.localeCompare(t)).slice(0,-1);await Promise.all(t.map(t=>g(d.join(e,t),{force:!0})))}async function mt(e,t,n){let r=d.join(d.dirname(t),`backups`);await h(r,{recursive:!0});let a=new Date(n()).toISOString().replaceAll(`:`,`-`),o=d.join(r,`foundry-before-${a}-${i.pid}.sqlite`);await e.backup(o),await pt(r)}function ht(e,t){e.exec(`BEGIN IMMEDIATE`);try{e.exec(`
11
+ CREATE TABLE IF NOT EXISTS ${B} (
12
12
  id INTEGER PRIMARY KEY AUTOINCREMENT,
13
13
  hash TEXT NOT NULL,
14
14
  created_at INTEGER NOT NULL
15
15
  )
16
- `);let n=R(e);z(n,t);let r=e.prepare(`
17
- INSERT INTO ${L} (hash, created_at)
16
+ `);let n=dt(e);ft(n,t);let r=e.prepare(`
17
+ INSERT INTO ${B} (hash, created_at)
18
18
  VALUES (?, ?)
19
- `);for(let i of t.slice(n.length)){for(let t of i.sql)e.exec(t);r.run(i.hash,i.folderMillis)}e.exec(`COMMIT`)}catch(t){throw e.exec(`ROLLBACK`),t}}async function ht(e,t){let n=ge({migrationsFolder:t.migrationsFolder}),r=R(e);z(r,n),r.length!==n.length&&(t.isExistingDatabase&&await pt(e,t.databasePath,t.now??Date.now),mt(e,n))}function gt(){return i.platform!==`darwin`&&i.platform!==`win32`&&i.env.XDG_DATA_HOME&&!d.isAbsolute(i.env.XDG_DATA_HOME)?d.join(ve(),`.local`,`share`,`foundry`):_e(`foundry`,{suffix:``}).data}function _t(){return d.join(gt(),`foundry.sqlite`)}var vt=Ee({providers:()=>V,runtimes:()=>H,settings:()=>B});const B=w(`settings`,{id:T(`id`).primaryKey(),key:T(`key`).notNull(),value:T(`value`,{mode:`json`}).$type().notNull(),createdAt:C(`created_at`).notNull(),updatedAt:C(`updated_at`).notNull(),deletedAt:C(`deleted_at`)},e=>[xe(`settings_key_unique`).on(e.key),S(`settings_id_not_empty`,x`length(${e.id}) > 0`),S(`settings_key_not_empty`,x`length(trim(${e.key})) > 0`),S(`settings_value_json`,x`json_valid(${e.value})`),S(`settings_created_at_nonnegative`,x`${e.createdAt} >= 0`),S(`settings_updated_at_valid`,x`${e.updatedAt} >= ${e.createdAt}`),S(`settings_deleted_at_valid`,x`${e.deletedAt} IS NULL OR ${e.deletedAt} >= ${e.createdAt}`)]),V=w(`providers`,{id:T(`id`).primaryKey(),runtime:T(`runtime`,{enum:[`codex`,`claude-code`]}).notNull(),name:T(`name`).notNull(),officialWebsite:T(`official_website`),remark:T(`remark`),avatarMimeType:T(`avatar_mime_type`,{enum:[`image/png`,`image/jpeg`,`image/webp`,`image/svg+xml`]}),avatarData:ye(`avatar_data`,{mode:`buffer`}),configuration:T(`configuration`,{mode:`json`}).$type().notNull(),createdAt:C(`created_at`).notNull(),updatedAt:C(`updated_at`).notNull(),deletedAt:C(`deleted_at`)},e=>[be(`providers_runtime_created_at_index`).on(e.runtime,e.createdAt),S(`providers_id_not_empty`,x`length(${e.id}) > 0`),S(`providers_runtime_valid`,x`${e.runtime} IN ('codex', 'claude-code')`),S(`providers_name_valid`,x`length(trim(${e.name})) BETWEEN 1 AND 100`),S(`providers_official_website_valid`,x`${e.officialWebsite} IS NULL OR length(${e.officialWebsite}) <= 2048`),S(`providers_remark_valid`,x`${e.remark} IS NULL OR length(${e.remark}) <= 2000`),S(`providers_avatar_valid`,x`(${e.avatarMimeType} IS NULL AND ${e.avatarData} IS NULL) OR (${e.avatarMimeType} IN ('image/png', 'image/jpeg', 'image/webp', 'image/svg+xml') AND ${e.avatarData} IS NOT NULL AND length(${e.avatarData}) BETWEEN 1 AND 2097152)`),S(`providers_configuration_json`,x`json_valid(${e.configuration})`),S(`providers_created_at_nonnegative`,x`${e.createdAt} >= 0`),S(`providers_updated_at_valid`,x`${e.updatedAt} >= ${e.createdAt}`),S(`providers_deleted_at_valid`,x`${e.deletedAt} IS NULL OR ${e.deletedAt} >= ${e.createdAt}`)]),H=w(`runtimes`,{runtime:T(`runtime`,{enum:[`codex`,`claude-code`]}).primaryKey(),managed:C(`managed`,{mode:`boolean`}).notNull().default(!1),providerId:T(`provider_id`).references(()=>V.id,{onDelete:`restrict`}),appliedAt:C(`applied_at`)},e=>[S(`runtimes_runtime_valid`,x`${e.runtime} IN ('codex', 'claude-code')`),S(`runtimes_state_valid`,x`(${e.managed} = 0 AND ${e.providerId} IS NULL AND ${e.appliedAt} IS NULL) OR (${e.managed} = 1 AND ${e.appliedAt} IS NOT NULL)`),S(`runtimes_applied_at_nonnegative`,x`${e.appliedAt} IS NULL OR ${e.appliedAt} >= 0`)]);function yt(){let e=[d.resolve(import.meta.dirname,`migrations`),d.resolve(import.meta.dirname,`../../../drizzle`)].find(e=>u(e));if(!e)throw Error(`Foundry database migrations could not be found.`);return e}async function bt(e={}){let t=e.databasePath??_t(),n=u(t);await h(d.dirname(t),{recursive:!0});let r=new ne(t,{timeout:5e3});try{return r.pragma(`foreign_keys = ON`),r.function(`uuid_v7`,()=>oe()),await ht(r,{isExistingDatabase:n,databasePath:t,migrationsFolder:e.migrationsFolder??yt(),now:e.now}),{client:r,db:re({client:r,schema:vt})}}catch(e){throw r.close(),e}}function xt(e){if(e.avatarMimeType===null&&e.avatarData===null)return null;if(e.avatarMimeType===null||e.avatarData===null)throw Error(`Stored Provider avatar is invalid.`);return{data:e.avatarData.toString(`base64`),mimeType:e.avatarMimeType}}function U(e){let t={avatar:xt(e),createdAt:e.createdAt,id:e.id,name:e.name,officialWebsite:e.officialWebsite,remark:e.remark,updatedAt:e.updatedAt};return e.runtime===`codex`?{...t,configuration:Ze(e.configuration),runtime:e.runtime}:{...t,configuration:Qe(e.configuration),runtime:e.runtime}}var St=class{database;now;createId;constructor(e,t=Date.now,n=oe){this.database=e,this.now=t,this.createId=n}createProvider(e){let t=Xe(e),n=$e(t.avatar),r=this.now(),i=this.createId();return this.database.insert(V).values({avatarData:n,avatarMimeType:t.avatar?.mimeType??null,configuration:t.configuration,createdAt:r,deletedAt:null,id:i,name:t.name,officialWebsite:t.officialWebsite,remark:t.remark,runtime:t.runtime,updatedAt:r}).run(),U({avatarData:n,avatarMimeType:t.avatar?.mimeType??null,configuration:t.configuration,createdAt:r,deletedAt:null,id:i,name:t.name,officialWebsite:t.officialWebsite,remark:t.remark,runtime:t.runtime,updatedAt:r})}getProvider(e){let t=this.database.select().from(V).where(_(y(V.id,e),b(V.deletedAt))).get();return t?U(t):null}listProviders(e){return this.database.select().from(V).where(_(y(V.runtime,e),b(V.deletedAt))).orderBy(v(V.createdAt),v(V.id)).all().map(e=>U(e))}};function W(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ct(e){if(typeof e==`string`)return e;if(typeof e==`bigint`)return e.toString();let t=JSON.stringify(e);return typeof t==`string`?t:String(e)}function wt(e,t){return e===void 0?{kind:`absent`}:t?{kind:`secret`,value:Ct(e)}:{kind:`plain`,value:Ct(e)}}function G(e,t,n,r=!1){let i;return i=t===void 0&&n===void 0?`unchanged`:t===void 0?`add`:n===void 0?`remove`:t===n?`unchanged`:`update`,{current:wt(t,r),key:e,operation:i,proposed:wt(n,r)}}function K(e){return{changes:e.filter(e=>e.operation!==`unchanged`),unchanged:e.filter(e=>e.operation===`unchanged`)}}function q(e){return ie(`sha256`).update(e===null?`absent\0`:`present\0${e}`).digest(`hex`)}function Tt(e,t){try{let n=e===`codex`?Se(t):JSON.parse(t);if(!W(n))throw Error(`Configuration root must be an object.`);return n}catch{throw new P(`RUNTIME_CONFIGURATION_INVALID`,`The ${e===`codex`?`Codex`:`Claude Code`} configuration cannot be safely parsed.`)}}async function Et(e,t){try{let n=await le(t);if(!n.isFile())throw new P(`RUNTIME_CONFIGURATION_INVALID`,`The Runtime configuration path is not a regular file.`);let r=await ue(t,`utf8`);return{content:r,exists:!0,hash:q(r),mode:n.mode&511,values:Tt(e,r)}}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)return{content:null,exists:!1,hash:q(null),mode:384,values:{}};throw e instanceof P?e:new P(`RUNTIME_APPLY_FAILED`,`The Runtime configuration could not be read.`)}}function J(e){return structuredClone(e)}function Y(e,t,n){n===void 0?delete e[t]:e[t]=n}function Dt(e,t){return e.content===null?we(t):Ce(e.content,t)}function Ot(e){let t=/(?:\r\n|\n)([\t ]+)"/.exec(e)?.[1];if(t!==void 0)return t.includes(` `)?` `:t.length}function kt(e,t){if(e.content===null)return`${JSON.stringify(t,null,2)}\n`;let n=e.content.includes(`\r
19
+ `);for(let i of t.slice(n.length)){for(let t of i.sql)e.exec(t);r.run(i.hash,i.folderMillis)}e.exec(`COMMIT`)}catch(t){throw e.exec(`ROLLBACK`),t}}async function gt(e,t){let n=ge({migrationsFolder:t.migrationsFolder}),r=dt(e);ft(r,n),r.length!==n.length&&(t.isExistingDatabase&&await mt(e,t.databasePath,t.now??Date.now),ht(e,n))}function _t(){return i.platform!==`darwin`&&i.platform!==`win32`&&i.env.XDG_DATA_HOME&&!d.isAbsolute(i.env.XDG_DATA_HOME)?d.join(ve(),`.local`,`share`,`foundry`):_e(`foundry`,{suffix:``}).data}function vt(){return d.join(_t(),`foundry.sqlite`)}var yt=De({providers:()=>H,runtimes:()=>U,settings:()=>V});const V=C(`settings`,{id:w(`id`).primaryKey(),key:w(`key`).notNull(),value:w(`value`,{mode:`json`}).$type().notNull(),createdAt:S(`created_at`).notNull(),updatedAt:S(`updated_at`).notNull(),deletedAt:S(`deleted_at`)},e=>[Se(`settings_key_unique`).on(e.key),x(`settings_id_not_empty`,b`length(${e.id}) > 0`),x(`settings_key_not_empty`,b`length(trim(${e.key})) > 0`),x(`settings_value_json`,b`json_valid(${e.value})`),x(`settings_created_at_nonnegative`,b`${e.createdAt} >= 0`),x(`settings_updated_at_valid`,b`${e.updatedAt} >= ${e.createdAt}`),x(`settings_deleted_at_valid`,b`${e.deletedAt} IS NULL OR ${e.deletedAt} >= ${e.createdAt}`)]),H=C(`providers`,{id:w(`id`).primaryKey(),runtime:w(`runtime`,{enum:[`codex`,`claude-code`]}).notNull(),name:w(`name`).notNull(),officialWebsite:w(`official_website`),remark:w(`remark`),avatarMimeType:w(`avatar_mime_type`,{enum:[`image/png`,`image/jpeg`,`image/webp`,`image/svg+xml`]}),avatarData:be(`avatar_data`,{mode:`buffer`}),configuration:w(`configuration`,{mode:`json`}).$type().notNull(),createdAt:S(`created_at`).notNull(),updatedAt:S(`updated_at`).notNull(),deletedAt:S(`deleted_at`)},e=>[xe(`providers_runtime_created_at_index`).on(e.runtime,e.createdAt),x(`providers_id_not_empty`,b`length(${e.id}) > 0`),x(`providers_runtime_valid`,b`${e.runtime} IN ('codex', 'claude-code')`),x(`providers_name_valid`,b`length(trim(${e.name})) BETWEEN 1 AND 100`),x(`providers_official_website_valid`,b`${e.officialWebsite} IS NULL OR length(${e.officialWebsite}) <= 2048`),x(`providers_remark_valid`,b`${e.remark} IS NULL OR length(${e.remark}) <= 2000`),x(`providers_avatar_valid`,b`(${e.avatarMimeType} IS NULL AND ${e.avatarData} IS NULL) OR (${e.avatarMimeType} IN ('image/png', 'image/jpeg', 'image/webp', 'image/svg+xml') AND ${e.avatarData} IS NOT NULL AND length(${e.avatarData}) BETWEEN 1 AND 2097152)`),x(`providers_configuration_json`,b`json_valid(${e.configuration})`),x(`providers_created_at_nonnegative`,b`${e.createdAt} >= 0`),x(`providers_updated_at_valid`,b`${e.updatedAt} >= ${e.createdAt}`),x(`providers_deleted_at_valid`,b`${e.deletedAt} IS NULL OR ${e.deletedAt} >= ${e.createdAt}`)]),U=C(`runtimes`,{runtime:w(`runtime`,{enum:[`codex`,`claude-code`]}).primaryKey(),managed:S(`managed`,{mode:`boolean`}).notNull().default(!1),providerId:w(`provider_id`).references(()=>H.id,{onDelete:`restrict`}),appliedAt:S(`applied_at`)},e=>[x(`runtimes_runtime_valid`,b`${e.runtime} IN ('codex', 'claude-code')`),x(`runtimes_state_valid`,b`(${e.managed} = 0 AND ${e.providerId} IS NULL AND ${e.appliedAt} IS NULL) OR (${e.managed} = 1 AND ${e.appliedAt} IS NOT NULL)`),x(`runtimes_applied_at_nonnegative`,b`${e.appliedAt} IS NULL OR ${e.appliedAt} >= 0`)]);function bt(){let e=[d.resolve(import.meta.dirname,`migrations`),d.resolve(import.meta.dirname,`../../../drizzle`)].find(e=>u(e));if(!e)throw Error(`Foundry database migrations could not be found.`);return e}async function xt(e={}){let t=e.databasePath??vt(),n=u(t);await h(d.dirname(t),{recursive:!0});let r=new ne(t,{timeout:5e3});try{return r.pragma(`foreign_keys = ON`),r.function(`uuid_v7`,()=>oe()),await gt(r,{isExistingDatabase:n,databasePath:t,migrationsFolder:e.migrationsFolder??bt(),now:e.now}),{client:r,db:re({client:r,schema:yt})}}catch(e){throw r.close(),e}}function St(e){if(e.avatarMimeType===null&&e.avatarData===null)return null;if(e.avatarMimeType===null||e.avatarData===null)throw Error(`Stored Provider avatar is invalid.`);return{data:e.avatarData.toString(`base64`),mimeType:e.avatarMimeType}}function W(e){let t={avatar:St(e),createdAt:e.createdAt,id:e.id,name:e.name,officialWebsite:e.officialWebsite,remark:e.remark,updatedAt:e.updatedAt};return e.runtime===`codex`?{...t,configuration:Je(e.configuration),runtime:e.runtime}:{...t,configuration:Ye(e.configuration),runtime:e.runtime}}var Ct=class{database;now;createId;constructor(e,t=Date.now,n=oe){this.database=e,this.now=t,this.createId=n}createProvider(e){let t=qe(e),n=Xe(t.avatar),r=this.now(),i=this.createId();return this.database.insert(H).values({avatarData:n,avatarMimeType:t.avatar?.mimeType??null,configuration:t.configuration,createdAt:r,deletedAt:null,id:i,name:t.name,officialWebsite:t.officialWebsite,remark:t.remark,runtime:t.runtime,updatedAt:r}).run(),W({avatarData:n,avatarMimeType:t.avatar?.mimeType??null,configuration:t.configuration,createdAt:r,deletedAt:null,id:i,name:t.name,officialWebsite:t.officialWebsite,remark:t.remark,runtime:t.runtime,updatedAt:r})}getProvider(e){let t=this.database.select().from(H).where(_(v(H.id,e),y(H.deletedAt))).get();return t?W(t):null}listProviders(e){return this.database.select().from(H).where(_(v(H.runtime,e),y(H.deletedAt))).orderBy(ye(H.createdAt),ye(H.id)).all().map(e=>W(e))}};function G(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wt(e){if(typeof e==`string`)return e;if(typeof e==`bigint`)return e.toString();let t=JSON.stringify(e);return typeof t==`string`?t:String(e)}function Tt(e,t){return e===void 0?{kind:`absent`}:t?{kind:`secret`,value:wt(e)}:{kind:`plain`,value:wt(e)}}function K(e,t,n,r=!1){let i;return i=t===void 0&&n===void 0?`unchanged`:t===void 0?`add`:n===void 0?`remove`:t===n?`unchanged`:`update`,{current:Tt(t,r),key:e,operation:i,proposed:Tt(n,r)}}function q(e){return{changes:e.filter(e=>e.operation!==`unchanged`),unchanged:e.filter(e=>e.operation===`unchanged`)}}function Et(e){return ie(`sha256`).update(e===null?`absent\0`:`present\0${e}`).digest(`hex`)}function Dt(e,t){try{let n=e===`codex`?Ce(t):JSON.parse(t);if(!G(n))throw Error(`Configuration root must be an object.`);return n}catch{throw new R(`RUNTIME_CONFIGURATION_INVALID`,`The ${e===`codex`?`Codex`:`Claude Code`} configuration cannot be safely parsed.`)}}async function Ot(e,t){try{let n=await le(t);if(!n.isFile())throw new R(`RUNTIME_CONFIGURATION_INVALID`,`The Runtime configuration path is not a regular file.`);let r=await ue(t,`utf8`);return{content:r,exists:!0,hash:Et(r),mode:n.mode&511,values:Dt(e,r)}}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)return{content:null,exists:!1,hash:Et(null),mode:384,values:{}};throw e instanceof R?e:new R(`RUNTIME_APPLY_FAILED`,`The Runtime configuration could not be read.`)}}function J(e){return structuredClone(e)}function Y(e,t,n){n===void 0?delete e[t]:e[t]=n}function kt(e,t){return e.content===null?Te(t):we(e.content,t)}function At(e){let t=/(?:\r\n|\n)([\t ]+)"/.exec(e)?.[1];if(t!==void 0)return t.includes(` `)?` `:t.length}function jt(e,t){if(e.content===null)return`${JSON.stringify(t,null,2)}\n`;let n=e.content.includes(`\r
20
20
  `)?`\r
21
21
  `:`
22
22
  `,r=e.content.endsWith(`
23
- `),i=JSON.stringify(t,null,Ot(e.content));return n===`\r
23
+ `),i=JSON.stringify(t,null,At(e.content));return n===`\r
24
24
  `&&(i=i.replaceAll(`
25
25
  `,`\r
26
- `)),r?`${i}${n}`:i}function At(e,t){return d.join(d.dirname(e),`.${d.basename(e)}.foundry-${t}-${ae()}.tmp`)}async function X(e,t,n,r){let i=At(e,r);try{await he(i,t,{encoding:`utf8`,flag:`wx`,mode:n}),await ce(i,n),await pe(i,e)}catch(e){try{await g(i,{force:!0})}catch{}throw e}}async function jt(e,t,n,r){if(n.source.hash!==r)throw new P(`RUNTIME_CONFIGURATION_CHANGED`,`The Runtime configuration changed after Preview. Refresh and review it again.`);let{source:i}=n,a=d.dirname(t),o=`${t}.foundry-backup`;if(!(!i.exists||n.content!==i.content))return{rollback:async()=>{}};Tt(e,n.content);try{await h(a,{mode:448,recursive:!0}),i.exists&&i.content!==null?await X(o,i.content,384,`backup`):await g(o,{force:!0}),await X(t,n.content,i.mode,`write`)}catch(e){throw e instanceof P?e:new P(`RUNTIME_APPLY_FAILED`,`The Runtime configuration could not be safely updated.`)}return{rollback:async()=>{try{i.exists&&i.content!==null?await X(t,i.content,i.mode,`rollback`):await g(t,{force:!0})}catch{throw new P(`RUNTIME_APPLY_FAILED`,`The previous Runtime configuration could not be restored.`)}}}}const Mt=[`ANTHROPIC_DEFAULT_MODEL`,`ANTHROPIC_DEFAULT_OPUS_MODEL`,`ANTHROPIC_DEFAULT_SONNET_MODEL`,`ANTHROPIC_DEFAULT_HAIKU_MODEL`,`ANTHROPIC_DEFAULT_FABLE_MODEL`],Nt=[``,`_NAME`,`_DESCRIPTION`,`_SUPPORTED_CAPABILITIES`],Z=[`ANTHROPIC_BASE_URL`,`ANTHROPIC_AUTH_TOKEN`,`ANTHROPIC_API_KEY`,...Mt.flatMap(e=>Nt.map(t=>`${e}${t}`)),`CLAUDE_CODE_SUBAGENT_MODEL`];function Pt(e){return e===null?[void 0,void 0,void 0,void 0]:[e.model,e.displayName??void 0,e.description??void 0,e.supportedCapabilities.length>0?e.supportedCapabilities.join(`,`):void 0]}function Ft(e){let t=Object.fromEntries(Z.map(e=>[e,void 0]));if(e===null)return t;t.ANTHROPIC_BASE_URL=e.baseUrl,t.ANTHROPIC_AUTH_TOKEN=e.apiKeyHeader===`authorization`?e.apiKey:void 0,t.ANTHROPIC_API_KEY=e.apiKeyHeader===`x-api-key`?e.apiKey:void 0;let n=[e.primaryModel,e.opusModel,e.sonnetModel,e.haikuModel,e.fableModel];for(let[e,r]of Mt.entries()){let i=Pt(n[e]);for(let[e,n]of Nt.entries())t[`${r}${n}`]=i[e]}return t.CLAUDE_CODE_SUBAGENT_MODEL=e.subagentModel??void 0,t}function It(e,t,n,r){let i=e.values.env;if(i!==void 0&&!W(i))throw new P(`RUNTIME_CONFIGURATION_INVALID`,`Claude Code env must be an object.`);let a=i??{},o=Ft(r?.configuration??null),s=Z.map(e=>G(`env.${e}`,a[e],o[e],e===`ANTHROPIC_AUTH_TOKEN`||e===`ANTHROPIC_API_KEY`)),c=J(e.values),l=W(c.env)?c.env:{};c.env=l;for(let e of Z)Y(l,e,o[e]);Object.keys(l).length===0&&delete c.env;let u=K(s);return{content:kt(e,c),preview:{...u,file:{exists:e.exists,hash:e.hash,path:t},kind:`ready`,providerKey:null,runtime:`claude-code`,target:n},source:e}}const Q=[`model`,`review_model`,`model_provider`],Lt=[`name`,`base_url`,`wire_api`,`experimental_bearer_token`];function Rt(e){let t=e.model_providers;if(t===void 0)return{};if(!W(t))throw new P(`RUNTIME_CONFIGURATION_INVALID`,`Codex model_providers must be a table.`);return t}function zt(e){return Object.entries(Rt(e)).filter(e=>W(e[1])).map(([e])=>e)}function Bt(e,t){let n=zt(e);if(n.length===0){if(t!==void 0&&t!==`foundry`)throw new P(`RUNTIME_CONFIGURATION_INVALID`,`The selected Codex Provider key is unavailable.`);return{key:`foundry`,keys:n}}if(n.length===1){if(t!==void 0&&t!==n[0])throw new P(`RUNTIME_CONFIGURATION_INVALID`,`The selected Codex Provider key is unavailable.`);return{key:n[0],keys:n}}if(t===void 0)return{key:null,keys:n};if(!n.includes(t))throw new P(`RUNTIME_CONFIGURATION_INVALID`,`The selected Codex Provider key is unavailable.`);return{key:t,keys:n}}function Vt(e,t){let n=Rt(e)[t];if(n===void 0)return{};if(!W(n))throw new P(`RUNTIME_CONFIGURATION_INVALID`,`Codex model_providers.${t} must be a table.`);return n}function Ht(e,t,n,r,i){if(n.kind===`official-default`){let r=Q.map(t=>G(t,e.values[t],void 0)),i=J(e.values);for(let e of Q)delete i[e];let a=K(r);return{content:Dt(e,i),preview:{...a,file:{exists:e.exists,hash:e.hash,path:t},kind:`ready`,providerKey:null,runtime:`codex`,target:n},source:e}}if(r===null)throw new P(`PROVIDER_NOT_FOUND`,`The selected Provider is unavailable.`);let a=Bt(e.values,i);if(a.key===null)return{file:{exists:e.exists,hash:e.hash,path:t},kind:`provider-key-selection`,providerKeys:a.keys,runtime:`codex`,target:n};let o=a.key,s=Vt(e.values,o),c={model:r.configuration.primaryModel,model_provider:o,review_model:r.configuration.reviewModel??void 0},l={base_url:r.configuration.baseUrl,experimental_bearer_token:r.configuration.apiKey??void 0,name:r.name,wire_api:`responses`},u=[...Q.map(t=>G(t,e.values[t],c[t])),...Lt.map(e=>G(`[model_providers.${o}].${e}`,s[e],l[e],e===`experimental_bearer_token`))],d=J(e.values);for(let e of Q)Y(d,e,c[e]);let f=W(d.model_providers)?d.model_providers:{};d.model_providers=f;let p=W(f[o])?f[o]:{};f[o]=p;for(let e of Lt)Y(p,e,l[e]);let m=K(u);return{content:Dt(e,d),preview:{...m,file:{exists:e.exists,hash:e.hash,path:t},kind:`ready`,providerKey:o,runtime:`codex`,target:n},source:e}}function Ut(e,t,n){if(t.kind===`official-default`)return null;if(n?.id!==t.providerId||n.runtime!==e)throw new P(`PROVIDER_NOT_FOUND`,`The selected Provider is unavailable.`);return n}async function Wt(e,t,n,r,i){let a=await Et(e,t),o=Ut(e,n,r);return e===`codex`?Ht(a,t,n,o,i):It(a,t,n,o)}function Gt(e){return`preview`in e}var Kt=class{async preview(e,t,n,r,i){let a=await Wt(e,t,n,r,i);return Gt(a)?a.preview:a}async apply(e,t,n,r,i,a){let o=await Wt(e,t,n,r,a);if(!Gt(o))throw new P(`RUNTIME_CONFIGURATION_INVALID`,`Select a Codex Provider key before applying changes.`);return jt(e,t,o,i)}};const qt=te(Te),Jt={"claude-code":{command:`claude`,configurationPath:d.join(`.claude`,`settings.json`)},codex:{command:`codex`,configurationPath:d.join(`.codex`,`config.toml`)}};async function Yt(e){try{return await me(e),!0}catch(e){return!!(e&&typeof e==`object`&&`code`in e&&e.code!==`ENOENT`)}}async function Xt(e,t){let n=i.platform===`win32`?(i.env.PATHEXT??`.EXE;.CMD;.BAT;.COM`).split(`;`):[``];for(let r of t.split(d.delimiter))if(r)for(let t of n){let n=d.join(r,`${e}${t}`);try{return await se(n,i.platform===`win32`?l.F_OK:l.X_OK),await fe(n)}catch{}}return null}var Zt=class{homeDirectory;environmentPath;runVersion;constructor(e=ve(),t=i.env.PATH??``,n=async e=>{let t=await qt(e,[`--version`],{timeout:3e3,windowsHide:!0});return(t.stdout||t.stderr).trim()}){this.homeDirectory=e,this.environmentPath=t,this.runVersion=n}async detect(e){let t=Jt[e],n=d.join(this.homeDirectory,t.configurationPath),r=await Yt(n),i=await Xt(t.command,this.environmentPath);if(!i)return{configurationExists:r,configurationPath:n,executablePath:null,message:`${t.command} was not found in PATH.`,status:`not-detected`,version:null};try{return{configurationExists:r,configurationPath:n,executablePath:i,message:null,status:`detected`,version:await this.runVersion(i)}}catch{return{configurationExists:r,configurationPath:n,executablePath:i,message:`${t.command} --version could not be completed.`,status:`failed`,version:null}}}},Qt=class{runtimeStore;providerStore;detector;configurationManager;inFlightRuntimes=new Set;constructor(e,t,n,r){this.runtimeStore=e,this.providerStore=t,this.detector=n,this.configurationManager=r}resolveProvider(e,t){if(t.kind===`official-default`)return null;let n=this.providerStore.getProvider(t.providerId);if(n?.runtime!==e)throw new P(`PROVIDER_NOT_FOUND`,`The selected Provider is unavailable.`);return n}async requireDetection(e){let t=await this.detector.detect(e);if(t.status!==`detected`)throw new P(`RUNTIME_NOT_DETECTED`,t.message??`The Runtime could not be detected.`);return t}async listRuntimes(){let e=new Map(this.runtimeStore.listAssignments().map(e=>[e.runtime,e])),t=await Promise.all(O.map(e=>this.detector.detect(e)));return O.map((n,r)=>{let i=e.get(n);if(!i)throw Error(`Runtime assignment ${n} is missing.`);return{...i,detection:t[r]}})}async previewConfiguration(e,t){let n=await this.requireDetection(e),r=this.resolveProvider(e,t.target);return this.configurationManager.preview(e,n.configurationPath,t.target,r,t.providerKey)}async applyConfiguration(e,t){if(this.inFlightRuntimes.has(e))throw new P(`RUNTIME_APPLY_FAILED`,`A configuration update is already running for this Runtime.`);this.inFlightRuntimes.add(e);try{let n=await this.requireDetection(e),r=this.resolveProvider(e,t.target),i=await this.configurationManager.apply(e,n.configurationPath,t.target,r,t.expectedFileHash,t.providerKey);try{return{...this.runtimeStore.recordAssignment(e,t.target),detection:{...n,configurationExists:!0}}}catch(e){throw await i.rollback(),e}}finally{this.inFlightRuntimes.delete(e)}}},$t=class{database;now;constructor(e,t=Date.now){this.database=e,this.now=t}listAssignments(){let e=new Map(this.database.select().from(H).all().map(e=>[e.runtime,{appliedAt:e.appliedAt,managed:e.managed,providerId:e.providerId,runtime:e.runtime}]));return O.map(t=>{let n=e.get(t);if(!n)throw Error(`Runtime assignment ${t} is missing.`);return n})}recordAssignment(e,t){return this.database.transaction(()=>{let n=t.kind===`provider`?t.providerId:null;if(n!==null&&!this.database.select({runtime:V.runtime}).from(V).where(_(y(V.id,n),y(V.runtime,e),b(V.deletedAt))).get())throw new P(`PROVIDER_NOT_FOUND`,`The selected Provider is unavailable.`);let r=this.now();if(this.database.update(H).set({appliedAt:r,managed:!0,providerId:n}).where(y(H.runtime,e)).run().changes!==1)throw Error(`Runtime assignment ${e} could not be saved.`);return{appliedAt:r,managed:!0,providerId:n,runtime:e}})}};const en=`color_mode`,tn=p.enum(De);var nn=class{database;now;constructor(e,t=Date.now){this.database=e,this.now=t}getApplicationSettings(){let e=this.database.select({deletedAt:B.deletedAt,key:B.key,value:B.value}).from(B).all();if(e.length!==1)throw Error(`Stored Application Settings are invalid.`);let[t]=e;if(t.key!==en||t.deletedAt!==null)throw Error(`Stored Application Settings are invalid.`);return{colorMode:tn.parse(t.value)}}updateApplicationSettings(e){if(this.database.update(B).set({updatedAt:this.now(),value:e.colorMode}).where(y(B.key,en)).run().changes!==1)throw Error(`Stored Application Settings are invalid.`);return this.getApplicationSettings()}};const $=`127.0.0.1`;function rn(e){return new Promise((t,n)=>{e.close(e=>{if(e){n(e);return}t()})})}async function an(e={}){let t=e.port??54321,n=await bt({databasePath:e.databasePath,migrationsFolder:e.migrationsFolder}),r=new St(n.db),i=ut({providerStore:r,runtimeService:new Qt(new $t(n.db),r,new Zt,new Kt),settingsStore:new nn(n.db)});return new Promise((e,r)=>{let a=e=>{n.client.close(),r(e)},s=o({fetch:i.fetch,hostname:$,port:t},t=>{s.off(`error`,a);let r,i=t.port,o=async()=>{try{await rn(s)}finally{n.client.close()}};e({close:()=>(r??=o(),r),hostname:$,port:i,url:`http://${$}:${i}`})});s.once(`error`,a)})}function on(e,t){return e instanceof Error&&`code`in e&&e.code===`EADDRINUSE`?`Port ${t} is already in use on 127.0.0.1.`:`Could not start Foundry Server: ${e instanceof Error?e.message:String(e)}`}function sn(e,t=i,n=console.error){let r=!1,a=()=>{r||(r=!0,t.off(`SIGINT`,a),t.off(`SIGTERM`,a),e.close().catch(e=>{n(`Could not stop Foundry Server: ${e instanceof Error?e.message:String(e)}`),t.exitCode=1}))};return t.once(`SIGINT`,a),t.once(`SIGTERM`,a),()=>{t.off(`SIGINT`,a),t.off(`SIGTERM`,a)}}const cn={error:console.error,log:console.info,openBrowser:a,registerShutdown:e=>{sn(e)},setExitCode:e=>{i.exitCode=e},startServer:an};function ln(e){for(let t=0;t<e.length;t+=1){let n=e[t];if(n===`--port`){if(t+1>=e.length||e[t+1].startsWith(`--`))return`Missing value for option: --port`;t+=1;continue}if(!n.startsWith(`--port=`)&&n!==`--open`&&n!==`--no-open`)return`${n.startsWith(`-`)?`Unknown option`:`Unexpected argument`}: ${n}`}}function un(e){let t=Number(e);if(!Number.isSafeInteger(t)||t<1||t>65535)throw RangeError(`Port must be an integer between 1 and 65535. Received "${e}".`);return t}function dn(e=cn){return t({meta:{description:`Start the Local Web UI`,name:`ui`},args:{port:{default:`54321`,description:`Port for the Local Web UI`,type:`string`,valueHint:`port`},open:{default:!0,description:`Open the Local Web UI in the default browser`,negativeDescription:`Do not open the default browser`,type:`boolean`}},async run({args:t,rawArgs:n}){let r=ln(n);if(r){e.error(`${r}\nRun \`foundry ui --help\` for usage.`),e.setExitCode(1);return}let i;try{i=un(t.port)}catch(t){e.error(`${t instanceof Error?t.message:String(t)}\nRun \`foundry ui --help\` for usage.`),e.setExitCode(1);return}let a;try{a=await e.startServer({port:i})}catch(t){e.error(on(t,i)),e.setExitCode(1);return}if(e.registerShutdown(a),e.log(`Foundry Local Web UI: ${a.url}`),t.open)try{await e.openBrowser(a.url)}catch{e.error(`Could not open the default browser. Open ${a.url} manually.`)}}})}const fn=t({meta:{description:`An AI-native local developer runtime`,name:`foundry`,version:e},subCommands:{ui:dn()}});function pn(e){if(!e.some(e=>e===`--help`||e===`-h`)&&(e.length!==1||e[0]!==`--version`&&e[0]!==`-v`)&&!(e[0]===`ui`||!e[0]?.startsWith(`-`)))return`Unknown option: ${e[0]}`}async function mn(e=i.argv.slice(2)){if(e.length===0){console.info(`${await n(fn)}\n`);return}let t=pn(e);if(t){console.error(`${t}\nRun \`foundry --help\` for usage.`),i.exitCode=1;return}await r(fn,{rawArgs:e})}mn();export{};
26
+ `)),r?`${i}${n}`:i}function Mt(e,t){return d.join(d.dirname(e),`.${d.basename(e)}.foundry-${t}-${ae()}.tmp`)}async function X(e,t,n,r){let i=Mt(e,r);try{await he(i,t,{encoding:`utf8`,flag:`wx`,mode:n}),await ce(i,n),await pe(i,e)}catch(e){try{await g(i,{force:!0})}catch{}throw e}}async function Nt(e,t,n,r){if(n.source.hash!==r)throw new R(`RUNTIME_CONFIGURATION_CHANGED`,`The Runtime configuration changed after Preview. Refresh and review it again.`);let{source:i}=n,a=d.dirname(t),o=`${t}.foundry-backup`;if(!(!i.exists||n.content!==i.content))return{rollback:async()=>{}};Dt(e,n.content);try{await h(a,{mode:448,recursive:!0}),i.exists&&i.content!==null?await X(o,i.content,384,`backup`):await g(o,{force:!0}),await X(t,n.content,i.mode,`write`)}catch(e){throw e instanceof R?e:new R(`RUNTIME_APPLY_FAILED`,`The Runtime configuration could not be safely updated.`)}return{rollback:async()=>{try{i.exists&&i.content!==null?await X(t,i.content,i.mode,`rollback`):await g(t,{force:!0})}catch{throw new R(`RUNTIME_APPLY_FAILED`,`The previous Runtime configuration could not be restored.`)}}}}const Pt=[`ANTHROPIC_DEFAULT_OPUS_MODEL`,`ANTHROPIC_DEFAULT_SONNET_MODEL`,`ANTHROPIC_DEFAULT_HAIKU_MODEL`,`ANTHROPIC_DEFAULT_FABLE_MODEL`],Ft=[``,`_NAME`,`_DESCRIPTION`,`_SUPPORTED_CAPABILITIES`],It=Pt.flatMap(e=>Ft.map(t=>`${e}${t}`)),Lt=[`CLAUDE_CODE_SUBAGENT_MODEL`,`CLAUDE_CODE_SUBAGENT_MODEL_FORCE`],Rt=[`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`,`ENABLE_TOOL_SEARCH`,`CLAUDE_CODE_EFFORT_LEVEL`,`DISABLE_AUTOUPDATER`],zt=[`commit`,`pr`,`sessionUrl`],Z=[`ANTHROPIC_BASE_URL`,`ANTHROPIC_AUTH_TOKEN`,`ANTHROPIC_API_KEY`,`ANTHROPIC_MODEL`,...It,...Lt,...Rt];function Bt(e,t){if(t===null)return Z.filter(t=>e[t]!==void 0);let n=[`ANTHROPIC_BASE_URL`,t.apiKeyHeader===`authorization`?`ANTHROPIC_AUTH_TOKEN`:`ANTHROPIC_API_KEY`,`ANTHROPIC_MODEL`,...It,...Lt,...Rt],r=new Set(n);return[...n,...Z.filter(t=>!r.has(t)&&e[t]!==void 0)]}function Vt(e){return e===null?[void 0,void 0,void 0,void 0]:[e.model,e.displayName??void 0,e.description??void 0,e.supportedCapabilities.length>0?e.supportedCapabilities.join(`,`):void 0]}function Ht(e){let t=Object.fromEntries(Z.map(e=>[e,void 0]));if(e===null)return t;t.ANTHROPIC_BASE_URL=e.baseUrl,t.ANTHROPIC_AUTH_TOKEN=e.apiKeyHeader===`authorization`?e.apiKey:void 0,t.ANTHROPIC_API_KEY=e.apiKeyHeader===`x-api-key`?e.apiKey:void 0,t.ANTHROPIC_MODEL=e.defaultModel;let n=[e.opusModel,e.sonnetModel,e.haikuModel,e.fableModel];for(let[e,r]of Pt.entries()){let i=Vt(n[e]);for(let[e,n]of Ft.entries())t[`${r}${n}`]=i[e]}return t.CLAUDE_CODE_SUBAGENT_MODEL=e.subagentModel??void 0,t.CLAUDE_CODE_SUBAGENT_MODEL_FORCE=e.subagentModelForce?`1`:void 0,t.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=e.teammatesMode?`1`:void 0,t.ENABLE_TOOL_SEARCH=e.enableToolSearch?`true`:void 0,t.CLAUDE_CODE_EFFORT_LEVEL=e.maxEffortThinking?`max`:void 0,t.DISABLE_AUTOUPDATER=e.disableAutoUpdater?`1`:void 0,t}function Ut(e){let t=e?.hideAiAttribution===!0;return{commit:t?``:void 0,pr:t?``:void 0,sessionUrl:!t&&void 0}}function Wt(e,t,n,r){let i=e.values.env;if(i!==void 0&&!G(i))throw new R(`RUNTIME_CONFIGURATION_INVALID`,`Claude Code env must be an object.`);let a=i??{},o=Ht(r?.configuration??null),s=e.values.attribution;if(s!==void 0&&!G(s))throw new R(`RUNTIME_CONFIGURATION_INVALID`,`Claude Code attribution must be an object.`);let c=s??{},l=Ut(r?.configuration??null),u=[...Bt(a,r?.configuration??null).map(e=>K(`env.${e}`,a[e],o[e],e===`ANTHROPIC_AUTH_TOKEN`||e===`ANTHROPIC_API_KEY`)),...zt.map(e=>K(`attribution.${e}`,c[e],l[e]))],d=J(e.values),f=G(d.env)?d.env:{};d.env=f;for(let e of Z)Y(f,e,o[e]);Object.keys(f).length===0&&delete d.env;let p=G(d.attribution)?d.attribution:{};d.attribution=p;for(let e of zt){let t=l[e];t===void 0?delete p[e]:p[e]=t}Object.keys(p).length===0&&delete d.attribution;let m=q(u);return{content:jt(e,d),preview:{...m,file:{exists:e.exists,hash:e.hash,path:t},kind:`ready`,providerKey:null,runtime:`claude-code`,target:n},source:e}}const Q=[`model`,`review_model`,`model_provider`],Gt=[`name`,`base_url`,`wire_api`,`experimental_bearer_token`];function Kt(e){let t=e.model_providers;if(t===void 0)return{};if(!G(t))throw new R(`RUNTIME_CONFIGURATION_INVALID`,`Codex model_providers must be a table.`);return t}function qt(e){return Object.entries(Kt(e)).filter(e=>G(e[1])).map(([e])=>e)}function Jt(e,t){let n=qt(e);if(n.length===0){if(t!==void 0&&t!==`foundry`)throw new R(`RUNTIME_CONFIGURATION_INVALID`,`The selected Codex Provider key is unavailable.`);return{key:`foundry`,keys:n}}if(n.length===1){if(t!==void 0&&t!==n[0])throw new R(`RUNTIME_CONFIGURATION_INVALID`,`The selected Codex Provider key is unavailable.`);return{key:n[0],keys:n}}if(t===void 0)return{key:null,keys:n};if(!n.includes(t))throw new R(`RUNTIME_CONFIGURATION_INVALID`,`The selected Codex Provider key is unavailable.`);return{key:t,keys:n}}function Yt(e,t){let n=Kt(e)[t];if(n===void 0)return{};if(!G(n))throw new R(`RUNTIME_CONFIGURATION_INVALID`,`Codex model_providers.${t} must be a table.`);return n}function Xt(e,t,n,r,i){if(n.kind===`official-default`){let r=Q.map(t=>K(t,e.values[t],void 0)),i=J(e.values);for(let e of Q)delete i[e];let a=q(r);return{content:kt(e,i),preview:{...a,file:{exists:e.exists,hash:e.hash,path:t},kind:`ready`,providerKey:null,runtime:`codex`,target:n},source:e}}if(r===null)throw new R(`PROVIDER_NOT_FOUND`,`The selected Provider is unavailable.`);let a=Jt(e.values,i);if(a.key===null)return{file:{exists:e.exists,hash:e.hash,path:t},kind:`provider-key-selection`,providerKeys:a.keys,runtime:`codex`,target:n};let o=a.key,s=Yt(e.values,o),c={model:r.configuration.defaultModel,model_provider:o,review_model:r.configuration.reviewModel??void 0},l={base_url:r.configuration.baseUrl,experimental_bearer_token:r.configuration.apiKey??void 0,name:r.name,wire_api:`responses`},u=[...Q.map(t=>K(t,e.values[t],c[t])),...Gt.map(e=>K(`[model_providers.${o}].${e}`,s[e],l[e],e===`experimental_bearer_token`))],d=J(e.values);for(let e of Q)Y(d,e,c[e]);let f=G(d.model_providers)?d.model_providers:{};d.model_providers=f;let p=G(f[o])?f[o]:{};f[o]=p;for(let e of Gt)Y(p,e,l[e]);let m=q(u);return{content:kt(e,d),preview:{...m,file:{exists:e.exists,hash:e.hash,path:t},kind:`ready`,providerKey:o,runtime:`codex`,target:n},source:e}}function Zt(e,t,n){if(t.kind===`official-default`)return null;if(n?.id!==t.providerId||n.runtime!==e)throw new R(`PROVIDER_NOT_FOUND`,`The selected Provider is unavailable.`);return n}async function Qt(e,t,n,r,i){let a=await Ot(e,t),o=Zt(e,n,r);return e===`codex`?Xt(a,t,n,o,i):Wt(a,t,n,o)}function $t(e){return`preview`in e}var en=class{async preview(e,t,n,r,i){let a=await Qt(e,t,n,r,i);return $t(a)?a.preview:a}async apply(e,t,n,r,i,a){let o=await Qt(e,t,n,r,a);if(!$t(o))throw new R(`RUNTIME_CONFIGURATION_INVALID`,`Select a Codex Provider key before applying changes.`);return Nt(e,t,o,i)}};const tn=te(Ee),nn={"claude-code":{command:`claude`,configurationPath:d.join(`.claude`,`settings.json`)},codex:{command:`codex`,configurationPath:d.join(`.codex`,`config.toml`)}};async function rn(e){try{return await me(e),!0}catch(e){return!!(e&&typeof e==`object`&&`code`in e&&e.code!==`ENOENT`)}}async function an(e,t){let n=i.platform===`win32`?(i.env.PATHEXT??`.EXE;.CMD;.BAT;.COM`).split(`;`):[``];for(let r of t.split(d.delimiter))if(r)for(let t of n){let n=d.join(r,`${e}${t}`);try{return await se(n,i.platform===`win32`?l.F_OK:l.X_OK),await fe(n)}catch{}}return null}var on=class{homeDirectory;environmentPath;runVersion;constructor(e=ve(),t=i.env.PATH??``,n=async e=>{let t=await tn(e,[`--version`],{timeout:3e3,windowsHide:!0});return(t.stdout||t.stderr).trim()}){this.homeDirectory=e,this.environmentPath=t,this.runVersion=n}async detect(e){let t=nn[e],n=d.join(this.homeDirectory,t.configurationPath),r=await rn(n),i=await an(t.command,this.environmentPath);if(!i)return{configurationExists:r,configurationPath:n,executablePath:null,message:`${t.command} was not found in PATH.`,status:`not-detected`,version:null};try{return{configurationExists:r,configurationPath:n,executablePath:i,message:null,status:`detected`,version:await this.runVersion(i)}}catch{return{configurationExists:r,configurationPath:n,executablePath:i,message:`${t.command} --version could not be completed.`,status:`failed`,version:null}}}},sn=class{runtimeStore;providerStore;detector;configurationManager;inFlightRuntimes=new Set;constructor(e,t,n,r){this.runtimeStore=e,this.providerStore=t,this.detector=n,this.configurationManager=r}resolveProvider(e,t){if(t.kind===`official-default`)return null;let n=this.providerStore.getProvider(t.providerId);if(n?.runtime!==e)throw new R(`PROVIDER_NOT_FOUND`,`The selected Provider is unavailable.`);return n}async requireDetection(e){let t=await this.detector.detect(e);if(t.status!==`detected`)throw new R(`RUNTIME_NOT_DETECTED`,t.message??`The Runtime could not be detected.`);return t}async listRuntimes(){let e=new Map(this.runtimeStore.listAssignments().map(e=>[e.runtime,e])),t=await Promise.all(O.map(e=>this.detector.detect(e)));return O.map((n,r)=>{let i=e.get(n);if(!i)throw Error(`Runtime assignment ${n} is missing.`);return{...i,detection:t[r]}})}async previewConfiguration(e,t){let n=await this.requireDetection(e),r=this.resolveProvider(e,t.target);return this.configurationManager.preview(e,n.configurationPath,t.target,r,t.providerKey)}async applyConfiguration(e,t){if(this.inFlightRuntimes.has(e))throw new R(`RUNTIME_APPLY_FAILED`,`A configuration update is already running for this Runtime.`);this.inFlightRuntimes.add(e);try{let n=await this.requireDetection(e),r=this.resolveProvider(e,t.target),i=await this.configurationManager.apply(e,n.configurationPath,t.target,r,t.expectedFileHash,t.providerKey);try{return{...this.runtimeStore.recordAssignment(e,t.target),detection:{...n,configurationExists:!0}}}catch(e){throw await i.rollback(),e}}finally{this.inFlightRuntimes.delete(e)}}},cn=class{database;now;constructor(e,t=Date.now){this.database=e,this.now=t}listAssignments(){let e=new Map(this.database.select().from(U).all().map(e=>[e.runtime,{appliedAt:e.appliedAt,managed:e.managed,providerId:e.providerId,runtime:e.runtime}]));return O.map(t=>{let n=e.get(t);if(!n)throw Error(`Runtime assignment ${t} is missing.`);return n})}recordAssignment(e,t){return this.database.transaction(()=>{let n=t.kind===`provider`?t.providerId:null;if(n!==null&&!this.database.select({runtime:H.runtime}).from(H).where(_(v(H.id,n),v(H.runtime,e),y(H.deletedAt))).get())throw new R(`PROVIDER_NOT_FOUND`,`The selected Provider is unavailable.`);let r=this.now();if(this.database.update(U).set({appliedAt:r,managed:!0,providerId:n}).where(v(U.runtime,e)).run().changes!==1)throw Error(`Runtime assignment ${e} could not be saved.`);return{appliedAt:r,managed:!0,providerId:n,runtime:e}})}};const ln=`color_mode`,un=p.enum(D);var dn=class{database;now;constructor(e,t=Date.now){this.database=e,this.now=t}getApplicationSettings(){let e=this.database.select({deletedAt:V.deletedAt,key:V.key,value:V.value}).from(V).all();if(e.length!==1)throw Error(`Stored Application Settings are invalid.`);let[t]=e;if(t.key!==ln||t.deletedAt!==null)throw Error(`Stored Application Settings are invalid.`);return{colorMode:un.parse(t.value)}}updateApplicationSettings(e){if(this.database.update(V).set({updatedAt:this.now(),value:e.colorMode}).where(v(V.key,ln)).run().changes!==1)throw Error(`Stored Application Settings are invalid.`);return this.getApplicationSettings()}};const $=`127.0.0.1`;function fn(e){return new Promise((t,n)=>{e.close(e=>{if(e){n(e);return}t()})})}async function pn(e={}){let t=e.port??54321,n=await xt({databasePath:e.databasePath,migrationsFolder:e.migrationsFolder}),r=new Ct(n.db),i=lt({providerStore:r,runtimeService:new sn(new cn(n.db),r,new on,new en),settingsStore:new dn(n.db)});return new Promise((e,r)=>{let a=e=>{n.client.close(),r(e)},s=o({fetch:i.fetch,hostname:$,port:t},t=>{s.off(`error`,a);let r,i=t.port,o=async()=>{try{await fn(s)}finally{n.client.close()}};e({close:()=>(r??=o(),r),hostname:$,port:i,url:`http://${$}:${i}`})});s.once(`error`,a)})}function mn(e,t){return e instanceof Error&&`code`in e&&e.code===`EADDRINUSE`?`Port ${t} is already in use on 127.0.0.1.`:`Could not start Foundry Server: ${e instanceof Error?e.message:String(e)}`}function hn(e,t=i,n=console.error){let r=!1,a=()=>{r||(r=!0,t.off(`SIGINT`,a),t.off(`SIGTERM`,a),e.close().catch(e=>{n(`Could not stop Foundry Server: ${e instanceof Error?e.message:String(e)}`),t.exitCode=1}))};return t.once(`SIGINT`,a),t.once(`SIGTERM`,a),()=>{t.off(`SIGINT`,a),t.off(`SIGTERM`,a)}}const gn={error:console.error,log:console.info,openBrowser:a,registerShutdown:e=>{hn(e)},setExitCode:e=>{i.exitCode=e},startServer:pn};function _n(e){for(let t=0;t<e.length;t+=1){let n=e[t];if(n===`--port`){if(t+1>=e.length||e[t+1].startsWith(`--`))return`Missing value for option: --port`;t+=1;continue}if(!n.startsWith(`--port=`)&&n!==`--open`&&n!==`--no-open`)return`${n.startsWith(`-`)?`Unknown option`:`Unexpected argument`}: ${n}`}}function vn(e){let t=Number(e);if(!Number.isSafeInteger(t)||t<1||t>65535)throw RangeError(`Port must be an integer between 1 and 65535. Received "${e}".`);return t}function yn(e=gn){return t({meta:{description:`Start the Local Web UI`,name:`ui`},args:{port:{default:`54321`,description:`Port for the Local Web UI`,type:`string`,valueHint:`port`},open:{default:!0,description:`Open the Local Web UI in the default browser`,negativeDescription:`Do not open the default browser`,type:`boolean`}},async run({args:t,rawArgs:n}){let r=_n(n);if(r){e.error(`${r}\nRun \`foundry ui --help\` for usage.`),e.setExitCode(1);return}let i;try{i=vn(t.port)}catch(t){e.error(`${t instanceof Error?t.message:String(t)}\nRun \`foundry ui --help\` for usage.`),e.setExitCode(1);return}let a;try{a=await e.startServer({port:i})}catch(t){e.error(mn(t,i)),e.setExitCode(1);return}if(e.registerShutdown(a),e.log(`Foundry Local Web UI: ${a.url}`),t.open)try{await e.openBrowser(a.url)}catch{e.error(`Could not open the default browser. Open ${a.url} manually.`)}}})}const bn=t({meta:{description:`An AI-native local developer runtime`,name:`foundry`,version:e},subCommands:{ui:yn()}});function xn(e){if(!e.some(e=>e===`--help`||e===`-h`)&&(e.length!==1||e[0]!==`--version`&&e[0]!==`-v`)&&!(e[0]===`ui`||!e[0]?.startsWith(`-`)))return`Unknown option: ${e[0]}`}async function Sn(e=i.argv.slice(2)){if(e.length===0){console.info(`${await n(bn)}\n`);return}let t=xn(e);if(t){console.error(`${t}\nRun \`foundry --help\` for usage.`),i.exitCode=1;return}await r(bn,{rawArgs:e})}Sn();export{};
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
 
2
- import{t as e}from"./package-Dg-nUTkb.mjs";function t(){return e}export{t as getVersion};
2
+ import{t as e}from"./package-DoFH3Rau.mjs";function t(){return e}export{t as getVersion};
@@ -0,0 +1,21 @@
1
+ UPDATE `providers`
2
+ SET `configuration` = json_set(
3
+ `configuration`,
4
+ '$.defaultModel',
5
+ CASE
6
+ WHEN json_type(`configuration`, '$.primaryModel') = 'text'
7
+ THEN json_extract(`configuration`, '$.primaryModel')
8
+ WHEN json_type(`configuration`, '$.primaryModel.model') = 'text'
9
+ THEN json_extract(`configuration`, '$.primaryModel.model')
10
+ END
11
+ )
12
+ WHERE json_type(`configuration`, '$.defaultModel') IS NULL
13
+ AND (
14
+ json_type(`configuration`, '$.primaryModel') = 'text'
15
+ OR json_type(`configuration`, '$.primaryModel.model') = 'text'
16
+ );
17
+ --> statement-breakpoint
18
+ UPDATE `providers`
19
+ SET `configuration` = json_remove(`configuration`, '$.primaryModel')
20
+ WHERE json_type(`configuration`, '$.defaultModel') = 'text'
21
+ AND json_type(`configuration`, '$.primaryModel') IS NOT NULL;
@@ -22,6 +22,13 @@
22
22
  "when": 1788624400853,
23
23
  "tag": "0002_brainy_patriot",
24
24
  "breakpoints": true
25
+ },
26
+ {
27
+ "idx": 3,
28
+ "version": "6",
29
+ "when": 1788800436687,
30
+ "tag": "0003_rename_provider_default_model",
31
+ "breakpoints": true
25
32
  }
26
33
  ]
27
34
  }
@@ -0,0 +1,2 @@
1
+
2
+ var e=`1.1.0`;export{e as t};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dhzh/foundry",
3
3
  "type": "module",
4
- "version": "1.0.0",
4
+ "version": "1.1.0",
5
5
  "devEngines": {
6
6
  "packageManager": {
7
7
  "name": "pnpm",