diff --git a/lib/public/assets/icons/whatsapp.svg b/lib/public/assets/icons/whatsapp.svg new file mode 100644 index 0000000..70e0037 --- /dev/null +++ b/lib/public/assets/icons/whatsapp.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/lib/public/css/tailwind.generated.css b/lib/public/css/tailwind.generated.css index 88ed46b..5ebf357 100644 --- a/lib/public/css/tailwind.generated.css +++ b/lib/public/css/tailwind.generated.css @@ -1 +1 @@ -*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:JetBrains Mono,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.bottom-0{bottom:0}.bottom-3{bottom:.75rem}.bottom-4{bottom:1rem}.left-0{left:0}.left-3{left:.75rem}.right-0{right:0}.right-2\.5{right:.625rem}.right-3{right:.75rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\/2{top:50%}.top-4{top:1rem}.top-5{top:1.25rem}.top-6{top:1.5rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[80\]{z-index:80}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.mx-auto{margin-left:auto;margin-right:auto}.-ml-0\.5{margin-left:-.125rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mr-2\.5{margin-right:.625rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[22px\]{height:22px}.h-\[34px\]{height:34px}.h-full{height:100%}.h-px{height:1px}.max-h-80{max-height:20rem}.max-h-\[66vh\]{max-height:66vh}.max-h-\[92vh\]{max-height:92vh}.min-h-6{min-height:1.5rem}.min-h-\[200px\]{min-height:200px}.min-h-\[220px\]{min-height:220px}.min-h-\[26rem\]{min-height:26rem}.min-h-\[300px\]{min-height:300px}.min-h-\[320px\]{min-height:320px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\[88px\]{min-width:88px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-64{max-width:16rem}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.-rotate-90{--tw-rotate:-90deg}.-rotate-90,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.rotate-90{--tw-rotate:90deg}.rotate-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-1{row-gap:.25rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem*var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:var(--border)}.justify-self-start{justify-self:start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-y{border-top-width:1px}.border-b,.border-y{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-blue-400\/30{border-color:rgba(96,165,250,.3)}.border-border{border-color:var(--border)}.border-cyan-400{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity,1))}.border-cyan-400\/30{border-color:rgba(34,211,238,.3)}.border-cyan-500\/40{border-color:rgba(6,182,212,.4)}.border-fg-muted{border-color:var(--text-muted)}.border-gray-400\/30{border-color:rgba(156,163,175,.3)}.border-green-500\/30{border-color:rgba(34,197,94,.3)}.border-purple-400\/30{border-color:rgba(192,132,252,.3)}.border-red-500\/20{border-color:rgba(239,68,68,.2)}.border-status-error-border{border-color:var(--status-error-border)}.border-status-info-border{border-color:var(--status-info-border)}.border-status-success-border{border-color:var(--status-success-border)}.border-status-warning-border{border-color:var(--status-warning-border)}.border-transparent{border-color:transparent}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.border-yellow-500\/30{border-color:rgba(234,179,8,.3)}.border-yellow-500\/35{border-color:rgba(234,179,8,.35)}.border-yellow-500\/40{border-color:rgba(234,179,8,.4)}.border-t-transparent{border-top-color:transparent}.bg-\[\#151922\]{--tw-bg-opacity:1;background-color:rgb(21 25 34/var(--tw-bg-opacity,1))}.bg-blue-400\/10{background-color:rgba(96,165,250,.1)}.bg-blue-500\/10{background-color:rgba(59,130,246,.1)}.bg-border{background-color:var(--border)}.bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity,1))}.bg-cyan-400\/10{background-color:rgba(34,211,238,.1)}.bg-cyan-500\/10{background-color:rgba(6,182,212,.1)}.bg-field{background-color:var(--field-bg-contrast)}.bg-gray-400\/10{background-color:rgba(156,163,175,.1)}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.bg-gray-500\/10{background-color:hsla(220,9%,46%,.1)}.bg-gray-500\/70{background-color:hsla(220,9%,46%,.7)}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-500\/10{background-color:rgba(34,197,94,.1)}.bg-green-500\/90{background-color:rgba(34,197,94,.9)}.bg-indigo-500\/10{background-color:rgba(99,102,241,.1)}.bg-overlay{background-color:var(--overlay)}.bg-purple-400\/10{background-color:rgba(192,132,252,.1)}.bg-purple-500\/10{background-color:rgba(168,85,247,.1)}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-500\/10{background-color:rgba(239,68,68,.1)}.bg-red-500\/90{background-color:rgba(239,68,68,.9)}.bg-status-error-bg{background-color:var(--status-error-bg)}.bg-status-info-bg{background-color:var(--status-info-bg)}.bg-status-success-bg{background-color:var(--status-success-bg)}.bg-status-warning-bg{background-color:var(--status-warning-bg)}.bg-surface{background-color:var(--bg-sidebar)}.bg-transparent{background-color:transparent}.bg-white\/15{background-color:hsla(0,0%,100%,.15)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity,1))}.bg-yellow-400\/90{background-color:rgba(250,204,21,.9)}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-yellow-500\/10{background-color:rgba(234,179,8,.1)}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-0\.5{padding-bottom:.125rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pl-2\.5{padding-left:.625rem}.pl-3{padding-left:.75rem}.pl-3\.5{padding-left:.875rem}.pl-6{padding-left:1.5rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-8{padding-right:2rem}.pr-9{padding-right:2.25rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-10{padding-top:2.5rem}.pt-12{padding-top:3rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-\[18px\]{line-height:18px}.leading-none{line-height:1}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-body{color:var(--text)}.text-bright{color:var(--text-bright)}.text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity,1))}.text-fg-dim{color:var(--text-dim)}.text-fg-muted{color:var(--text-muted)}.text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity,1))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-status-error{color:var(--status-error)}.text-status-error-muted{color:var(--status-error-muted)}.text-status-info{color:var(--status-info)}.text-status-success{color:var(--status-success)}.text-status-success-muted{color:var(--status-success-muted)}.text-status-warning{color:var(--status-warning)}.text-status-warning-muted{color:var(--status-warning-muted)}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/80{color:hsla(0,0%,100%,.8)}.underline{text-decoration-line:underline}.placeholder-fg-dim::-moz-placeholder{color:var(--text-dim)}.placeholder-fg-dim::placeholder{color:var(--text-dim)}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-90{opacity:.9}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_rgba\(234\2c 179\2c 8\2c 0\.22\)\2c 0_0_18px_rgba\(234\2c 179\2c 8\2c 0\.12\)\]{--tw-shadow:0 0 0 1px rgba(234,179,8,.22),0 0 18px rgba(234,179,8,.12);--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color),0 0 18px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_rgba\(34\2c 211\2c 238\2c 0\.08\)\]{--tw-shadow:0 0 0 1px rgba(34,211,238,.08);--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color)}.shadow-\[0_0_0_1px_rgba\(34\2c 211\2c 238\2c 0\.08\)\],.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[filter\]{transition-property:filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-transform{transition-duration:.15s}.duration-200{transition-duration:.2s}.first\:rounded-l-lg:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.last\:rounded-r-lg:last-child{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.last\:border-0:last-child{border-width:0}.last\:border-b-0:last-child{border-bottom-width:0}.focus-within\:border-fg-muted:focus-within{border-color:var(--text-muted)}.focus-within\:text-body:focus-within{color:var(--text)}.hover\:border-fg-muted:hover{border-color:var(--text-muted)}.hover\:border-red-500:hover{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.hover\:border-white\/20:hover{border-color:hsla(0,0%,100%,.2)}.hover\:border-yellow-400\/60:hover{border-color:rgba(250,204,21,.6)}.hover\:bg-field:hover{background-color:var(--field-bg-contrast)}.hover\:bg-surface:hover{background-color:var(--bg-sidebar)}.hover\:bg-yellow-500\/15:hover{background-color:rgba(234,179,8,.15)}.hover\:text-body:hover{color:var(--text)}.hover\:text-bright:hover{color:var(--text-bright)}.hover\:text-status-error:hover{color:var(--status-error)}.hover\:text-status-error-muted:hover{color:var(--status-error-muted)}.hover\:text-status-success:hover{color:var(--status-success)}.hover\:text-status-warning:hover{color:var(--status-warning)}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:brightness-110:hover{--tw-brightness:brightness(1.1)}.hover\:brightness-110:hover,.hover\:brightness-125:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:brightness-125:hover{--tw-brightness:brightness(1.25)}.focus\:border-fg-muted:focus{border-color:var(--text-muted)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-border:focus{--tw-ring-color:var(--border)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group[open] .group-open\:rotate-90{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[open] .group-open\:border-b{border-bottom-width:1px}.group[open] .group-open\:border-border{border-color:var(--border)}.group:hover .group-hover\:bg-surface{background-color:var(--bg-sidebar)}.group:hover .group-hover\:bg-white\/10{background-color:hsla(0,0%,100%,.1)}.group:hover .group-hover\:text-body{color:var(--text)}@media (min-width:640px){.sm\:flex{display:flex}.sm\:w-auto{width:auto}.sm\:min-w-0{min-width:0}.sm\:flex-1{flex:1 1 0%}.sm\:shrink-0{flex-shrink:0}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}}@media (min-width:768px){.md\:inline{display:inline}.md\:inline-flex{display:inline-flex}.md\:hidden{display:none}.md\:min-w-0{min-width:0}.md\:shrink-0{flex-shrink:0}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:justify-between{justify-content:space-between}.md\:gap-3{gap:.75rem}.md\:text-right{text-align:right}} \ No newline at end of file +*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:JetBrains Mono,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.bottom-0{bottom:0}.bottom-3{bottom:.75rem}.bottom-4{bottom:1rem}.left-0{left:0}.left-3{left:.75rem}.right-0{right:0}.right-2\.5{right:.625rem}.right-3{right:.75rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\/2{top:50%}.top-4{top:1rem}.top-5{top:1.25rem}.top-6{top:1.5rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[80\]{z-index:80}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.mx-auto{margin-left:auto;margin-right:auto}.-ml-0\.5{margin-left:-.125rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mr-2\.5{margin-right:.625rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[22px\]{height:22px}.h-\[340px\]{height:340px}.h-\[34px\]{height:34px}.h-full{height:100%}.h-px{height:1px}.max-h-80{max-height:20rem}.max-h-\[66vh\]{max-height:66vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[92vh\]{max-height:92vh}.min-h-6{min-height:1.5rem}.min-h-\[200px\]{min-height:200px}.min-h-\[220px\]{min-height:220px}.min-h-\[26rem\]{min-height:26rem}.min-h-\[300px\]{min-height:300px}.min-h-\[320px\]{min-height:320px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\[88px\]{min-width:88px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-64{max-width:16rem}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.-rotate-90{--tw-rotate:-90deg}.-rotate-90,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.rotate-90{--tw-rotate:90deg}.rotate-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-1{row-gap:.25rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem*var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:var(--border)}.justify-self-start{justify-self:start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-y{border-top-width:1px}.border-b,.border-y{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-blue-400\/30{border-color:rgba(96,165,250,.3)}.border-border{border-color:var(--border)}.border-cyan-400{--tw-border-opacity:1;border-color:rgb(34 211 238/var(--tw-border-opacity,1))}.border-cyan-400\/30{border-color:rgba(34,211,238,.3)}.border-cyan-500\/40{border-color:rgba(6,182,212,.4)}.border-fg-muted{border-color:var(--text-muted)}.border-gray-400\/30{border-color:rgba(156,163,175,.3)}.border-green-500\/30{border-color:rgba(34,197,94,.3)}.border-purple-400\/30{border-color:rgba(192,132,252,.3)}.border-red-500\/20{border-color:rgba(239,68,68,.2)}.border-status-error-border{border-color:var(--status-error-border)}.border-status-info-border{border-color:var(--status-info-border)}.border-status-success-border{border-color:var(--status-success-border)}.border-status-warning-border{border-color:var(--status-warning-border)}.border-transparent{border-color:transparent}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.border-yellow-500\/30{border-color:rgba(234,179,8,.3)}.border-yellow-500\/35{border-color:rgba(234,179,8,.35)}.border-yellow-500\/40{border-color:rgba(234,179,8,.4)}.border-t-transparent{border-top-color:transparent}.bg-\[\#151922\]{--tw-bg-opacity:1;background-color:rgb(21 25 34/var(--tw-bg-opacity,1))}.bg-black\/30{background-color:rgba(0,0,0,.3)}.bg-blue-400\/10{background-color:rgba(96,165,250,.1)}.bg-blue-500\/10{background-color:rgba(59,130,246,.1)}.bg-border{background-color:var(--border)}.bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity,1))}.bg-cyan-400\/10{background-color:rgba(34,211,238,.1)}.bg-cyan-500\/10{background-color:rgba(6,182,212,.1)}.bg-field{background-color:var(--field-bg-contrast)}.bg-gray-400\/10{background-color:rgba(156,163,175,.1)}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.bg-gray-500\/10{background-color:hsla(220,9%,46%,.1)}.bg-gray-500\/70{background-color:hsla(220,9%,46%,.7)}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-500\/10{background-color:rgba(34,197,94,.1)}.bg-green-500\/90{background-color:rgba(34,197,94,.9)}.bg-indigo-500\/10{background-color:rgba(99,102,241,.1)}.bg-overlay{background-color:var(--overlay)}.bg-purple-400\/10{background-color:rgba(192,132,252,.1)}.bg-purple-500\/10{background-color:rgba(168,85,247,.1)}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-500\/10{background-color:rgba(239,68,68,.1)}.bg-red-500\/90{background-color:rgba(239,68,68,.9)}.bg-status-error-bg{background-color:var(--status-error-bg)}.bg-status-info-bg{background-color:var(--status-info-bg)}.bg-status-success-bg{background-color:var(--status-success-bg)}.bg-status-warning-bg{background-color:var(--status-warning-bg)}.bg-surface{background-color:var(--bg-sidebar)}.bg-transparent{background-color:transparent}.bg-white\/15{background-color:hsla(0,0%,100%,.15)}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity,1))}.bg-yellow-400\/90{background-color:rgba(250,204,21,.9)}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-yellow-500\/10{background-color:rgba(234,179,8,.1)}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-0\.5{padding-bottom:.125rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pl-2\.5{padding-left:.625rem}.pl-3{padding-left:.75rem}.pl-3\.5{padding-left:.875rem}.pl-6{padding-left:1.5rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-8{padding-right:2rem}.pr-9{padding-right:2.25rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-10{padding-top:2.5rem}.pt-12{padding-top:3rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-\[1\.1\]{line-height:1.1}.leading-\[18px\]{line-height:18px}.leading-none{line-height:1}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-body{color:var(--text)}.text-bright{color:var(--text-bright)}.text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity,1))}.text-fg-dim{color:var(--text-dim)}.text-fg-muted{color:var(--text-muted)}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity,1))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-status-error{color:var(--status-error)}.text-status-error-muted{color:var(--status-error-muted)}.text-status-info{color:var(--status-info)}.text-status-success{color:var(--status-success)}.text-status-success-muted{color:var(--status-success-muted)}.text-status-warning{color:var(--status-warning)}.text-status-warning-muted{color:var(--status-warning-muted)}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/80{color:hsla(0,0%,100%,.8)}.underline{text-decoration-line:underline}.placeholder-fg-dim::-moz-placeholder{color:var(--text-dim)}.placeholder-fg-dim::placeholder{color:var(--text-dim)}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-90{opacity:.9}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_rgba\(234\2c 179\2c 8\2c 0\.22\)\2c 0_0_18px_rgba\(234\2c 179\2c 8\2c 0\.12\)\]{--tw-shadow:0 0 0 1px rgba(234,179,8,.22),0 0 18px rgba(234,179,8,.12);--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color),0 0 18px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_rgba\(34\2c 211\2c 238\2c 0\.08\)\]{--tw-shadow:0 0 0 1px rgba(34,211,238,.08);--tw-shadow-colored:0 0 0 1px var(--tw-shadow-color)}.shadow-\[0_0_0_1px_rgba\(34\2c 211\2c 238\2c 0\.08\)\],.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[filter\]{transition-property:filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-transform{transition-duration:.15s}.duration-200{transition-duration:.2s}.first\:rounded-l-lg:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.last\:rounded-r-lg:last-child{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.last\:border-0:last-child{border-width:0}.last\:border-b-0:last-child{border-bottom-width:0}.focus-within\:border-fg-muted:focus-within{border-color:var(--text-muted)}.focus-within\:text-body:focus-within{color:var(--text)}.hover\:border-fg-muted:hover{border-color:var(--text-muted)}.hover\:border-red-500:hover{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.hover\:border-white\/20:hover{border-color:hsla(0,0%,100%,.2)}.hover\:border-yellow-400\/60:hover{border-color:rgba(250,204,21,.6)}.hover\:bg-field:hover{background-color:var(--field-bg-contrast)}.hover\:bg-surface:hover{background-color:var(--bg-sidebar)}.hover\:bg-yellow-500\/15:hover{background-color:rgba(234,179,8,.15)}.hover\:text-body:hover{color:var(--text)}.hover\:text-bright:hover{color:var(--text-bright)}.hover\:text-status-error:hover{color:var(--status-error)}.hover\:text-status-error-muted:hover{color:var(--status-error-muted)}.hover\:text-status-success:hover{color:var(--status-success)}.hover\:text-status-warning:hover{color:var(--status-warning)}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:brightness-110:hover{--tw-brightness:brightness(1.1)}.hover\:brightness-110:hover,.hover\:brightness-125:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:brightness-125:hover{--tw-brightness:brightness(1.25)}.focus\:border-fg-muted:focus{border-color:var(--text-muted)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-border:focus{--tw-ring-color:var(--border)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group[open] .group-open\:rotate-90{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[open] .group-open\:border-b{border-bottom-width:1px}.group[open] .group-open\:border-border{border-color:var(--border)}.group:hover .group-hover\:bg-surface{background-color:var(--bg-sidebar)}.group:hover .group-hover\:bg-white\/10{background-color:hsla(0,0%,100%,.1)}.group:hover .group-hover\:text-body{color:var(--text)}@media (min-width:640px){.sm\:flex{display:flex}.sm\:w-auto{width:auto}.sm\:min-w-0{min-width:0}.sm\:flex-1{flex:1 1 0%}.sm\:shrink-0{flex-shrink:0}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}}@media (min-width:768px){.md\:inline{display:inline}.md\:inline-flex{display:inline-flex}.md\:hidden{display:none}.md\:min-w-0{min-width:0}.md\:shrink-0{flex-shrink:0}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:justify-between{justify-content:space-between}.md\:gap-3{gap:.75rem}.md\:text-right{text-align:right}} \ No newline at end of file diff --git a/lib/public/dist/app.bundle.js b/lib/public/dist/app.bundle.js index 0bd5c67..0023615 100644 --- a/lib/public/dist/app.bundle.js +++ b/lib/public/dist/app.bundle.js @@ -1,5 +1,5 @@ -import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa={},ra=[],Ck=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Rr=Array.isArray;function _n(t,e){for(var n in e)t[n]=e[n];return t}function qc(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function T(t,e,n){var s,o,r,i={};for(r in e)r=="key"?s=e[r]:r=="ref"?o=e[r]:i[r]=e[r];if(arguments.length>2&&(i.children=arguments.length>3?Tr.call(arguments,2):n),typeof t=="function"&&t.defaultProps!=null)for(r in t.defaultProps)i[r]===void 0&&(i[r]=t.defaultProps[r]);return Ar(t,i,s,o,null)}function Ar(t,e,n,s,o){var r={type:t,props:e,key:n,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o??++qf,__i:-1,__u:0};return o==null&&Se.vnode!=null&&Se.vnode(r),r}function ln(t){return t.children}function hn(t,e){this.props=t,this.context=e}function $o(t,e){if(e==null)return t.__?$o(t.__,t.__i+1):null;for(var n;ee&&hs.sort(Zf),t=hs.shift(),e=hs.length,_k(t)}finally{hs.length=ia.__r=0}}function eh(t,e,n,s,o,r,i,a,l,c,d){var u,p,f,g,m,h,b,x=s&&s.__k||ra,v=e.length;for(l=Mk(n,e,x,l,v),u=0;u0?i=t.__k[r]=Ar(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):t.__k[r]=i,l=r+p,i.__=t,i.__b=t.__b+1,a=null,(c=i.__i=Ak(i,n,l,u))!=-1&&(u--,(a=n[c])&&(a.__u|=2)),a==null||a.__v==null?(c==-1&&(o>d?p--:ol?p--:p++,i.__u|=4))):t.__k[r]=null;if(u)for(r=0;r(d?1:0)){for(o=n-1,r=n+1;o>=0||r=0?o--:r++])!=null&&(2&c.__u)==0&&a==c.key&&l==c.type)return i}return-1}function Kf(t,e,n){e[0]=="-"?t.setProperty(e,n??""):t[e]=n==null?"":typeof n!="number"||Ck.test(e)?n:n+"px"}function sa(t,e,n,s,o){var r,i;e:if(e=="style")if(typeof n=="string")t.style.cssText=n;else{if(typeof s=="string"&&(t.style.cssText=s=""),s)for(e in s)n&&e in n||Kf(t.style,e,"");if(n)for(e in n)s&&n[e]==s[e]||Kf(t.style,e,n[e])}else if(e[0]=="o"&&e[1]=="n")r=e!=(e=e.replace(Yf,"$1")),i=e.toLowerCase(),e=i in t||e=="onFocusOut"||e=="onFocusIn"?i.slice(2):e.slice(2),t.l||(t.l={}),t.l[e+r]=n,n?s?n.u=s.u:(n.u=Gc,t.addEventListener(e,r?zc:jc,r)):t.removeEventListener(e,r?zc:jc,r);else{if(o=="http://www.w3.org/2000/svg")e=e.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(e!="width"&&e!="height"&&e!="href"&&e!="list"&&e!="form"&&e!="tabIndex"&&e!="download"&&e!="rowSpan"&&e!="colSpan"&&e!="role"&&e!="popover"&&e in t)try{t[e]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&e[4]!="-"?t.removeAttribute(e):t.setAttribute(e,e=="popover"&&n==1?"":n))}}function Gf(t){return function(e){if(this.l){var n=this.l[e.type+t];if(e.t==null)e.t=Gc++;else if(e.t0?t:Rr(t)?t.map(sh):_n({},t)}function Tk(t,e,n,s,o,r,i,a,l){var c,d,u,p,f,g,m,h=n.props||oa,b=e.props,x=e.type;if(x=="svg"?o="http://www.w3.org/2000/svg":x=="math"?o="http://www.w3.org/1998/Math/MathML":o||(o="http://www.w3.org/1999/xhtml"),r!=null){for(c=0;c2&&(a.children=arguments.length>3?Tr.call(arguments,2):n),Ar(t.type,a,s||t.key,o||t.ref,null)}function ko(t){function e(n){var s,o;return this.getChildContext||(s=new Set,(o={})[e.__c]=this,this.getChildContext=function(){return o},this.componentWillUnmount=function(){s=null},this.shouldComponentUpdate=function(r){this.props.value!=r.value&&s.forEach(function(i){i.__e=!0,Uc(i)})},this.sub=function(r){s.add(r);var i=r.componentWillUnmount;r.componentWillUnmount=function(){s&&s.delete(r),i&&i.call(r)}}),n.children}return e.__c="__cC"+Xf++,e.__=t,e.Provider=e.__l=(e.Consumer=function(n,s){return n.children(s)}).contextType=e,e}Tr=ra.slice,Se={__e:function(t,e,n,s){for(var o,r,i;e=e.__;)if((o=e.__c)&&!o.__)try{if((r=o.constructor)&&r.getDerivedStateFromError!=null&&(o.setState(r.getDerivedStateFromError(t)),i=o.__d),o.componentDidCatch!=null&&(o.componentDidCatch(t,s||{}),i=o.__d),i)return o.__E=o}catch(a){t=a}throw t}},qf=0,Pr=function(t){return t!=null&&t.constructor===void 0},hn.prototype.setState=function(t,e){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=_n({},this.state),typeof t=="function"&&(t=t(_n({},n),this.props)),t&&_n(n,t),t!=null&&this.__v&&(e&&this._sb.push(e),Uc(this))},hn.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),Uc(this))},hn.prototype.render=ln,hs=[],Jf=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Zf=function(t,e){return t.__v.__b-e.__v.__b},ia.__r=0,Yf=/(PointerCapture)$|Capture$/i,Gc=0,jc=Gf(!1),zc=Gf(!0),Xf=0;var Ws,tt,Yc,rh,Ir=0,fh=[],ut=Se,ih=ut.__b,ah=ut.__r,lh=ut.diffed,ch=ut.__c,dh=ut.unmount,uh=ut.__;function Dr(t,e){ut.__h&&ut.__h(tt,t,Ir||e),Ir=0;var n=tt.__H||(tt.__H={__:[],__h:[]});return t>=n.__.length&&n.__.push({}),n.__[t]}function y(t){return Ir=1,hh(mh,t)}function hh(t,e,n){var s=Dr(Ws++,2);if(s.t=t,!s.__c&&(s.__=[n?n(e):mh(void 0,e),function(a){var l=s.__N?s.__N[0]:s.__[0],c=s.t(l,a);l!==c&&(s.__N=[c,s.__[1]],s.__c.setState({}))}],s.__c=tt,!tt.__f)){var o=function(a,l,c){if(!s.__c.__H)return!0;var d=s.__c.__H.__.filter(function(p){return p.__c});if(d.every(function(p){return!p.__N}))return!r||r.call(this,a,l,c);var u=s.__c.props!==a;return d.some(function(p){if(p.__N){var f=p.__[0];p.__=p.__N,p.__N=void 0,f!==p.__[0]&&(u=!0)}}),r&&r.call(this,a,l,c)||u};tt.__f=!0;var r=tt.shouldComponentUpdate,i=tt.componentWillUpdate;tt.componentWillUpdate=function(a,l,c){if(this.__e){var d=r;r=void 0,o(a,l,c),r=d}i&&i.call(this,a,l,c)},tt.shouldComponentUpdate=o}return s.__N||s.__}function L(t,e){var n=Dr(Ws++,3);!ut.__s&&Qc(n.__H,e)&&(n.__=t,n.u=e,tt.__H.__h.push(n))}function Vs(t,e){var n=Dr(Ws++,4);!ut.__s&&Qc(n.__H,e)&&(n.__=t,n.u=e,tt.__h.push(n))}function ee(t){return Ir=5,F(function(){return{current:t}},[])}function F(t,e){var n=Dr(Ws++,7);return Qc(n.__H,e)&&(n.__=t(),n.__H=e,n.__h=t),n.__}function q(t,e){return Ir=8,F(function(){return t},e)}function Nr(t){var e=tt.context[t.__c],n=Dr(Ws++,9);return n.c=t,e?(n.__==null&&(n.__=!0,e.sub(tt)),e.props.value):t.__}function Rk(){for(var t;t=fh.shift();){var e=t.__H;if(t.__P&&e)try{e.__h.some(aa),e.__h.some(Xc),e.__h=[]}catch(n){e.__h=[],ut.__e(n,t.__v)}}}ut.__b=function(t){tt=null,ih&&ih(t)},ut.__=function(t,e){t&&e.__k&&e.__k.__m&&(t.__m=e.__k.__m),uh&&uh(t,e)},ut.__r=function(t){ah&&ah(t),Ws=0;var e=(tt=t.__c).__H;e&&(Yc===tt?(e.__h=[],tt.__h=[],e.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(e.__h.some(aa),e.__h.some(Xc),e.__h=[],Ws=0)),Yc=tt},ut.diffed=function(t){lh&&lh(t);var e=t.__c;e&&e.__H&&(e.__H.__h.length&&(fh.push(e)!==1&&rh===ut.requestAnimationFrame||((rh=ut.requestAnimationFrame)||Lk)(Rk)),e.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),Yc=tt=null},ut.__c=function(t,e){e.some(function(n){try{n.__h.some(aa),n.__h=n.__h.filter(function(s){return!s.__||Xc(s)})}catch(s){e.some(function(o){o.__h&&(o.__h=[])}),e=[],ut.__e(s,n.__v)}}),ch&&ch(t,e)},ut.unmount=function(t){dh&&dh(t);var e,n=t.__c;n&&n.__H&&(n.__H.__.some(function(s){try{aa(s)}catch(o){e=o}}),n.__H=void 0,e&&ut.__e(e,n.__v))};var ph=typeof requestAnimationFrame=="function";function Lk(t){var e,n=function(){clearTimeout(s),ph&&cancelAnimationFrame(e),setTimeout(t)},s=setTimeout(n,35);ph&&(e=requestAnimationFrame(n))}function aa(t){var e=tt,n=t.__c;typeof n=="function"&&(t.__c=void 0,n()),tt=e}function Xc(t){var e=tt;t.__c=t.__(),tt=e}function Qc(t,e){return!t||t.length!==e.length||e.some(function(n,s){return n!==t[s]})}function mh(t,e){return typeof e=="function"?e(t):e}var bh=function(t,e,n,s){var o;e[0]=0;for(var r=1;r=5&&((i||!p&&r===5)&&(l.push(r,0,i,o),r=6),p&&(l.push(r,p,0,o),r=6)),i=""},d=0;d"?(r=1,i=""):i=s+i[0]:a?s===a?a="":i+=s:s==='"'||s==="'"?a=s:s===">"?(c(),r=1):r&&(s==="="?(r=5,o=i,i=""):s==="/"&&(r<5||n[d][u+1]===">")?(c(),r===3&&(l=l[0]),r=l,(l=l[0]).push(2,0,r),r=0):s===" "||s===" "||s===` -`||s==="\r"?(c(),r=2):i+=s),r===3&&i==="!--"&&(r=4,l=l[0])}return c(),l})(t)),e),arguments,[])).length>1?e:e[0]}function xh(t,e){if(t instanceof RegExp)return{keys:!1,pattern:t};var n,s,o,r,i=[],a="",l=t.split("/");for(l[0]||l.shift();o=l.shift();)n=o[0],n==="*"?(i.push(n),a+=o[1]==="?"?"(?:/(.*))?":"/(.*)"):n===":"?(s=o.indexOf("?",1),r=o.indexOf(".",1),i.push(o.substring(1,~s?s:~r?r:o.length)),a+=~s&&!~r?"(?:/([^/]+?))?":"/([^/]+?)",~r&&(a+=(~s?"?":"")+"\\"+o.substring(r))):a+="/"+o;return{keys:i,pattern:new RegExp("^"+a+(e?"(?=$|/)":"/?$"),"i")}}var Ek=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function ed(t,e){return t===e&&(t!==0||1/t===1/e)||t!==t&&e!==e}function yh(t,e,n){n&&!Ek&&(e=n);let s=e(),[{_instance:o},r]=y({_instance:{_value:s,_getSnapshot:e}});return Vs(()=>{o._value=s,o._getSnapshot=e,ed(o._value,e())||r({_instance:o})},[t,s,e]),L(()=>(ed(o._value,o._getSnapshot())||r({_instance:o}),t(()=>{ed(o._value,o._getSnapshot())||r({_instance:o})})),[t]),s}var td=t=>{let e=ee([t,(...n)=>e[0](...n)]).current;return Vs(()=>{e[0]=t}),e[1]};var Ik="popstate",nd="pushState",sd="replaceState",Dk="hashchange",vh=[Ik,nd,sd,Dk],Nk=t=>{for(let e of vh)addEventListener(e,t);return()=>{for(let e of vh)removeEventListener(e,t)}},Sh=(t,e)=>yh(Nk,t,e),$h=()=>location.search,Ch=({ssrSearch:t}={})=>Sh($h,t!=null?()=>t:$h),wh=()=>location.pathname,Ok=({ssrPath:t}={})=>Sh(wh,t!=null?()=>t:wh);var Bk=(t,{replace:e=!1,state:n=null}={})=>history[e?sd:nd](n,"",t),_h=(t={})=>[Ok(t),Bk],kh=Symbol.for("wouter_v3");if(typeof history<"u"&&typeof window[kh]>"u"){for(let t of[nd,sd]){let e=history[t];history[t]=function(){let n=e.apply(this,arguments),s=new Event(t);return s.arguments=arguments,dispatchEvent(s),n}}Object.defineProperty(window,kh,{value:!0})}var Fk=(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())?"~"+e:e.slice(t.length)||"/",Ah=(t="")=>t==="/"?"":t,Th=(t,e)=>t[0]==="~"?t.slice(1):Ah(e)+t,Ph=(t="",e)=>Fk(Mh(Ah(t)),Mh(e));var Mh=t=>{try{return decodeURI(t)}catch{return t}};var Lh={hook:_h,searchHook:Ch,parser:xh,base:"",ssrPath:void 0,ssrSearch:void 0,ssrContext:void 0,hrefs:t=>t,aroundNav:(t,e,n)=>t(e,n)},Eh=ko(Lh),Or=()=>Nr(Eh),Ih={},Dh=ko(Ih),Hk=()=>Nr(Dh),la=t=>{let[e,n]=t.hook(t);return[Ph(t.base,e),td((s,o)=>t.aroundNav(n,Th(s,t.base),o))]},ca=()=>la(Or());var Nh=(t,e,n,s)=>{let{pattern:o,keys:r}=e instanceof RegExp?{keys:!1,pattern:e}:t(e||"*",s),i=o.exec(n)||[],[a,...l]=i;return a!==void 0?[!0,(()=>{let c=r!==!1?Object.fromEntries(r.map((u,p)=>[u,l[p]])):i.groups,d={...l};return c&&Object.assign(d,c),d})(),...s?[a]:[]]:[!1,null]};var da=({children:t,...e})=>{let n=Or(),s=e.hook?Lh:n,o=s,[r,i=e.ssrSearch??""]=e.ssrPath?.split("?")??[];r&&(e.ssrSearch=i,e.ssrPath=r),e.hrefs=e.hrefs??e.hook?.hrefs,e.searchHook=e.searchHook??e.hook?.searchHook;let a=ee({}),l=a.current,c=l;for(let d in s){let u=d==="base"?s[d]+(e[d]??""):e[d]??s[d];l===c&&u!==c[d]&&(a.current=c={...c}),c[d]=u,(u!==s[d]||u!==o[d])&&(o=c)}return T(Eh.Provider,{value:o,children:t})},Rh=({children:t,component:e},n)=>e?T(e,{params:n}):typeof t=="function"?t(n):t,Wk=t=>{let e=ee(Ih),n=e.current;return e.current=Object.keys(t).length!==Object.keys(n).length||Object.entries(t).some(([s,o])=>o!==n[s])?t:n};var rt=({path:t,nest:e,match:n,...s})=>{let o=Or(),[r]=la(o),[i,a,l]=n??Nh(o.parser,t,r,e),c=Wk({...Hk(),...a});if(!i)return null;let d=l?T(da,{base:l},Rh(s,c)):Rh(s,c);return T(Dh.Provider,{value:c,children:d})},l4=(t,e)=>{let n=Or(),[s,o]=la(n),{to:r="",href:i=r,onClick:a,asChild:l,children:c,className:d,replace:u,state:p,transition:f,...g}=t,m=td(b=>{b.ctrlKey||b.metaKey||b.altKey||b.shiftKey||b.button!==0||(a?.(b),b.defaultPrevented||(b.preventDefault(),o(i,t)))}),h=n.hrefs(i[0]==="~"?i.slice(1):n.base+i,n);return l&&Pr(c)?Er(c,{onClick:m,href:h}):T("a",{...g,onClick:m,href:h,className:d?.call?d(s===i):d,children:c,ref:e})},Oh=t=>Array.isArray(t)?t.flatMap(e=>Oh(e&&e.type===ln?e.props.children:e)):[t],od=({children:t,location:e})=>{let n=Or(),[s]=la(n);for(let o of Oh(t)){let r=0;if(Pr(o)&&(r=Nh(n.parser,o.props.path,e||s,o.props.nest))[0])return Er(o,{match:r})}return null};var rd=t=>{if(typeof t!="string"||!t.trim())return{};try{return JSON.parse(t)}catch{return{}}},Bh=({url:t="",onMessage:e=()=>{},onError:n=()=>{}})=>{if(typeof window?.EventSource!="function")throw new Error("Server events are not supported in this browser");let s=new window.EventSource(String(t||""),{withCredentials:!0}),o=l=>{e({event:"phase",data:rd(l?.data||"")})},r=l=>{e({event:"done",data:rd(l?.data||"")})},i=l=>{e({event:"error",data:rd(l?.data||"")})},a=l=>{n(l)};return s.addEventListener("phase",o),s.addEventListener("done",r),s.addEventListener("error",i),s.onerror=a,()=>{s.removeEventListener("phase",o),s.removeEventListener("done",r),s.removeEventListener("error",i),s.onerror=null,s.close()}};var Fh="x-client-timezone",Vk=()=>{try{return Intl?.DateTimeFormat?.().resolvedOptions?.().timeZone||""}catch{return""}},Y=async(t,e={})=>{let n={...e},s=new Headers(e?.headers||{});if(!s.has(Fh)){let r=Vk();r&&s.set(Fh,r)}n.headers=s;let o=await fetch(t,n);if(o.status===401){try{window.localStorage?.clear?.()}catch{}throw window.location.href="/setup",new Error("Unauthorized")}return o},Hh=({onMessage:t=()=>{},onOpen:e=()=>{},onError:n=()=>{}}={})=>{if(typeof window?.EventSource!="function")throw new Error("Server events are not supported in this browser");let s=new window.EventSource("/api/events/status",{withCredentials:!0}),o=r=>{let i={};try{i=r?.data?JSON.parse(r.data):{}}catch{}t(i||{})};return s.addEventListener("status",o),s.onopen=()=>e(),s.onerror=r=>n(r),()=>{s.removeEventListener("status",o),s.onopen=null,s.onerror=null,s.close()}};async function So(){return(await Y("/api/status")).json()}async function Co(){return(await Y("/api/pairings")).json()}async function _o(t,e,n=""){return(await Y(`/api/pairings/${t}/approve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channel:e,accountId:n})})).json()}async function Mo(t,e,n=""){let s=await Y(`/api/pairings/${t}/reject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channel:e,accountId:n})});return fe(s,"Could not reject pairing")}async function Wh(){return(await Y("/api/google/accounts")).json()}async function Vh({accountId:t="",client:e=""}={}){let n=new URLSearchParams;t&&n.set("accountId",String(t)),e&&n.set("client",String(e));let s=n.toString()?`?${n.toString()}`:"";return(await Y(`/api/google/credentials${s}`)).json()}async function jh(t=""){let e=new URLSearchParams;t&&e.set("accountId",String(t));let n=e.toString()?`?${e.toString()}`:"";return(await Y(`/api/google/check${n}`)).json()}async function zh({clientId:t,clientSecret:e,email:n,services:s=[],client:o="default",personal:r=!1,accountId:i=""}){return(await Y("/api/google/credentials",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientId:t,clientSecret:e,email:n,services:s,client:o,personal:r,accountId:i})})).json()}async function Uh({email:t,services:e=[],client:n="default",personal:s=!1,accountId:o=""}){return(await Y("/api/google/accounts",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t,services:e,client:n,personal:s,accountId:o})})).json()}async function Kh(t=""){return(await Y("/api/google/disconnect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accountId:t})})).json()}var Gh=async()=>{let t=await Y("/api/gmail/config");return fe(t,"Could not load Gmail watch config")},qh=async({client:t="default",topicPath:e="",projectId:n="",regeneratePushToken:s=!1}={})=>{let o=await Y("/api/gmail/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client:t,topicPath:e,projectId:n,regeneratePushToken:s})});return fe(o,"Could not save Gmail watch config")},Jh=async(t,{destination:e=null}={})=>{let n=await Y("/api/gmail/watch/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accountId:String(t||""),...e?{destination:e}:{}})});return fe(n,"Could not start Gmail watch")},Zh=async t=>{let e=await Y("/api/gmail/watch/stop",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accountId:String(t||"")})});return fe(e,"Could not stop Gmail watch")},Yh=async({accountId:t="",force:e=!0}={})=>{let n=await Y("/api/gmail/watch/renew",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accountId:String(t||""),force:!!e})});return fe(n,"Could not renew Gmail watch")},Xh=async()=>{let t=await Y("/api/agent/sessions");return fe(t,"Could not load agent sessions")},ua=async()=>{let t=await Y("/api/doctor/status");return fe(t,"Could not load Doctor status")},Qh=async()=>{let t=await Y("/api/doctor/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});return fe(t,"Could not start Doctor run")};var em=async(t=10)=>{let e=new URLSearchParams({limit:String(t)}),n=await Y(`/api/doctor/runs?${e.toString()}`);return fe(n,"Could not load Doctor runs")},tm=async({runId:t="all"}={})=>{let e=new URLSearchParams;String(t||"").trim()&&e.set("runId",String(t||""));let n=e.toString()?`?${e.toString()}`:"",s=await Y(`/api/doctor/cards${n}`);return fe(s,"Could not load Doctor findings")};var pa=async({cardId:t,status:e})=>{let n=await Y(`/api/doctor/cards/${encodeURIComponent(String(t||""))}/status`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:String(e||"")})});return fe(n,"Could not update Doctor card status")},nm=async({cardId:t,sessionId:e="",replyChannel:n="",replyTo:s="",prompt:o=""}={})=>{let r=await Y(`/api/doctor/findings/${encodeURIComponent(String(t||""))}/fix`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:String(e||""),replyChannel:String(n||""),replyTo:String(s||""),prompt:String(o||"")})});return fe(r,"Could not send Doctor fix request")},fa=async({message:t="",sessionKey:e=""}={})=>{let n=await Y("/api/agent/message",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:String(t||""),sessionKey:String(e||"")})});return fe(n,"Could not send message to agent")};async function sm(){let t=await Y("/api/gateway/restart",{method:"POST"});return fe(t,"Could not restart gateway")}async function om(){let t=await Y("/api/restart-status");return fe(t,"Could not load restart status")}async function rm(){let t=await Y("/api/restart-status/dismiss",{method:"POST"});return fe(t,"Could not dismiss restart status")}async function im(){let t=await Y("/api/watchdog/status");return fe(t,"Could not load watchdog status")}async function am(t=30){let e=new URLSearchParams({days:String(t)}),n=await Y(`/api/usage/summary?${e.toString()}`);return fe(n,"Could not load usage summary")}async function lm(t=50){let e=new URLSearchParams({limit:String(t)}),n=await Y(`/api/usage/sessions?${e.toString()}`);return fe(n,"Could not load usage sessions")}async function cm(t){let e=await Y(`/api/usage/sessions/${encodeURIComponent(String(t||""))}`);return fe(e,"Could not load usage session detail")}async function dm(t=20){let e=await Y(`/api/watchdog/events?limit=${encodeURIComponent(String(t))}`);return fe(e,"Could not load watchdog events")}async function um(t=65536){let e=await Y(`/api/watchdog/logs?tail=${encodeURIComponent(String(t))}`);if(!e.ok)throw new Error("Could not load watchdog logs");return e.text()}async function id(t){let e=await Y("/api/watchdog/terminal/close",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:String(t||"")})});return fe(e,"Could not close watchdog terminal")}async function ha(){let t=await Y("/api/watchdog/repair",{method:"POST"});return fe(t,"Could not trigger watchdog repair")}async function pm(){let t=await Y("/api/watchdog/resources");return fe(t,"Could not load system resources")}async function fm(){let t=await Y("/api/watchdog/settings");return fe(t,"Could not load watchdog settings")}async function ad(t){let e=await Y("/api/watchdog/settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return fe(e,"Could not update watchdog settings")}async function hm(){return(await Y("/api/gateway/dashboard")).json()}async function mm(t=!1){return(await Y(`/api/openclaw/version${t?"?refresh=1":""}`)).json()}async function ma(){return(await Y("/api/openclaw/update",{method:"POST"})).json()}async function gm(t=!1){return(await Y(`/api/alphaclaw/version${t?"?refresh=1":""}`)).json()}async function bm(t=""){let e=String(t||"").trim(),n=e?`?${new URLSearchParams({tag:e}).toString()}`:"";try{let s=await Y(`/api/alphaclaw/release-notes${n}`);return await fe(s,"Could not load release notes")}catch{let s=e?`https://api.github.com/repos/chrysb/alphaclaw/releases/tags/${encodeURIComponent(e)}`:"https://api.github.com/repos/chrysb/alphaclaw/releases/latest",o=await fetch(s,{headers:{Accept:"application/vnd.github+json"}}),r=await o.text(),i=null;try{i=r?JSON.parse(r):null}catch{throw new Error(r||"Could not load release notes")}if(!o.ok)throw new Error(i?.message||r||"Could not load release notes");return{ok:!0,tag:String(i?.tag_name||e||""),name:String(i?.name||""),body:String(i?.body||""),htmlUrl:String(i?.html_url||""),publishedAt:String(i?.published_at||"")}}}async function xm(){return(await Y("/api/alphaclaw/update",{method:"POST"})).json()}async function ym(t){let e=await Y("/api/sync-cron",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await e.text(),s;try{s=n?JSON.parse(n):{}}catch{throw new Error(n||"Could not parse sync cron response")}if(!e.ok)throw new Error(s.error||n||`HTTP ${e.status}`);return s}async function vm({sortBy:t="nextRunAtMs",sortDir:e="asc"}={}){let n=new URLSearchParams;t&&n.set("sortBy",String(t)),e&&n.set("sortDir",String(e));let s=n.toString()?`?${n.toString()}`:"",o=await Y(`/api/cron/jobs${s}`);return fe(o,"Could not load cron jobs")}async function $m(){let t=await Y("/api/cron/status");return fe(t,"Could not load cron status")}async function ld(t,{limit:e=20,offset:n=0,status:s="all",deliveryStatus:o="all",sortDir:r="desc",query:i=""}={}){let a=new URLSearchParams({limit:String(e),offset:String(n),status:String(s||"all"),deliveryStatus:String(o||"all"),sortDir:String(r||"desc")});String(i||"").trim()&&a.set("query",String(i).trim());let l=encodeURIComponent(String(t||"")),c=await Y(`/api/cron/jobs/${l}/runs?${a.toString()}`);return fe(c,"Could not load cron run history")}async function wm(t,{days:e=30}={}){let n=new URLSearchParams({days:String(e)}),s=encodeURIComponent(String(t||"")),o=await Y(`/api/cron/jobs/${s}/usage?${n.toString()}`);return fe(o,"Could not load cron job usage")}async function km(t,{range:e="7d"}={}){let n=new URLSearchParams({range:String(e||"7d")}),s=encodeURIComponent(String(t||"")),o=await Y(`/api/cron/jobs/${s}/trends?${n.toString()}`);return fe(o,"Could not load cron job trends")}async function Sm({days:t=30}={}){let e=new URLSearchParams({days:String(t)}),n=await Y(`/api/cron/usage/bulk?${e.toString()}`);return fe(n,"Could not load cron usage overview")}async function Cm({sinceMs:t=0,limitPerJob:e=20,status:n="all",deliveryStatus:s="all",sortDir:o="desc"}={}){let r=new URLSearchParams({sinceMs:String(t||0),limitPerJob:String(e||20),status:String(n||"all"),deliveryStatus:String(s||"all"),sortDir:String(o||"desc")}),i=await Y(`/api/cron/runs/bulk?${r.toString()}`);return fe(i,"Could not load cron run outcomes")}async function _m(t){let e=encodeURIComponent(String(t||"")),n=await Y(`/api/cron/jobs/${e}/run`,{method:"POST"});return fe(n,"Could not trigger cron job run")}async function Mm(t,e){let n=encodeURIComponent(String(t||"")),o=await Y(`/api/cron/jobs/${n}/${e?"enable":"disable"}`,{method:"POST"});return fe(o,"Could not update cron job state")}async function Am(t,e){let n=encodeURIComponent(String(t||"")),s=await Y(`/api/cron/jobs/${n}/prompt`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:String(e||"")})});return fe(s,"Could not update cron prompt")}async function Tm(t,{sessionTarget:e="",wakeMode:n="",deliveryMode:s="",deliveryChannel:o="",deliveryTo:r=""}={}){let i=encodeURIComponent(String(t||"")),a=await Y(`/api/cron/jobs/${i}/routing`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionTarget:String(e||""),wakeMode:String(n||""),deliveryMode:String(s||""),deliveryChannel:String(o||""),deliveryTo:String(r||"")})});return fe(a,"Could not update cron routing")}async function ga(){return(await Y("/api/devices")).json()}async function ba(t){return(await Y(`/api/devices/${t}/approve`,{method:"POST"})).json()}async function xa(t){return(await Y(`/api/devices/${t}/reject`,{method:"POST"})).json()}var Pm=async()=>{let t=await Y("/api/nodes");return fe(t,"Could not load nodes")};var Rm=async t=>{let e=encodeURIComponent(String(t||"")),n=await Y(`/api/nodes/${e}`,{method:"DELETE"});return fe(n,"Could not remove node")},Lm=async t=>{let e=encodeURIComponent(String(t||"")),n=new AbortController,s=setTimeout(()=>n.abort(),2e4);try{let o=await Y(`/api/nodes/${e}/route`,{method:"POST",signal:n.signal});return fe(o,"Could not route execution to node")}catch(o){throw String(o?.name||"")==="AbortError"?new Error("Routing timed out. Gateway may be restarting or unavailable."):o}finally{clearTimeout(s)}},ya=async()=>{let t=await Y("/api/nodes/connect-info");return fe(t,"Could not load connect info")},Em=async(t,e="user")=>{let n=encodeURIComponent(String(t||"")),s=new URLSearchParams({profile:String(e||"user")}),o=await Y(`/api/nodes/${n}/browser-status?${s.toString()}`);return fe(o,"Could not load node browser status")};var Im=async()=>(await Y("/api/auth/status")).json(),Dm=async()=>(await Y("/api/auth/logout",{method:"POST"})).json();async function Nm(){return(await Y("/api/onboard/status")).json()}async function Om(t,e,{importMode:n=!1}={}){return(await Y("/api/onboard",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({vars:t,modelKey:e,importMode:n})})).json()}async function va(t,e,n="new"){return(await Y("/api/onboard/github/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({repo:t,token:e,mode:n})})).json()}async function Bm(t){return(await Y("/api/onboard/import/scan",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tempDir:t})})).json()}async function Fm({tempDir:t,approvedSecrets:e=[],skipSecretExtraction:n=!1,githubRepo:s="",githubToken:o=""}){return(await Y("/api/onboard/import/apply",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tempDir:t,approvedSecrets:e,skipSecretExtraction:n,githubRepo:s,githubToken:o})})).json()}var Br=async()=>(await Y("/api/models")).json();var Hm=async({agentId:t}={})=>{let e=t?`?agentId=${encodeURIComponent(t)}`:"";return(await Y(`/api/models/config${e}`)).json()},Wm=async({primary:t,configuredModels:e,profiles:n,authOrder:s,agentId:o}={})=>{let r=o?`?agentId=${encodeURIComponent(o)}`:"";return(await Y(`/api/models/config${r}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({primary:t,configuredModels:e,profiles:n,authOrder:s})})).json()};var Ao=async()=>{let t=await Y("/api/agents");return fe(t,"Could not load agents")},To=async()=>{let t=await Y("/api/channels/accounts");return fe(t,"Could not load channel accounts")},Vm=async({provider:t="",accountId:e="default"}={})=>{let n=new URLSearchParams({provider:String(t||""),accountId:String(e||"default")}),s=await Y(`/api/channels/accounts/token?${n.toString()}`);return fe(s,"Could not load channel token")},jm=async t=>{let e=await Y("/api/channels/accounts",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return fe(e,"Could not create channel account")},zm=async t=>{let e=await Y("/api/channels/accounts/jobs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return fe(e,"Could not start channel account operation")},Um=({operationId:t="",onMessage:e=()=>{},onError:n=()=>{}})=>Bh({url:`/api/operations/${encodeURIComponent(String(t||""))}/events`,onMessage:e,onError:n}),Fr=async t=>{let e=await Y("/api/channels/accounts",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return fe(e,"Could not update channel account")},$a=async t=>{let e=await Y("/api/channels/accounts",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return fe(e,"Could not delete channel account")};var Km=async t=>{let e=await Y(`/api/agents/${encodeURIComponent(String(t||""))}/workspace-size`);return fe(e,"Could not load workspace size")},Gm=async t=>{let e=await Y(`/api/agents/${encodeURIComponent(String(t||""))}/bindings`);return fe(e,"Could not load agent bindings")},qm=async t=>{let e=await Y("/api/agents",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return fe(e,"Could not create agent")},Jm=async(t,e)=>{let n=await Y(`/api/agents/${encodeURIComponent(String(t||""))}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e||{})});return fe(n,"Could not update agent")};var Zm=async(t,{keepWorkspace:e=!0}={})=>{let n=new URLSearchParams({keepWorkspace:e?"true":"false"}),s=await Y(`/api/agents/${encodeURIComponent(String(t||""))}?${n.toString()}`,{method:"DELETE"});return fe(s,"Could not delete agent")},Ym=async t=>{let e=await Y(`/api/agents/${encodeURIComponent(String(t||""))}/default`,{method:"POST"});return fe(e,"Could not set default agent")},Po=async()=>(await Y("/api/codex/status")).json(),Hr=async()=>(await Y("/api/codex/disconnect",{method:"POST"})).json(),Wr=async t=>(await Y("/api/codex/exchange",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({input:t})})).json();async function Vr(){return(await Y("/api/env")).json()}async function cd(t){let e=await Y("/api/env",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({vars:t})}),n=await e.text(),s;try{s=n?JSON.parse(n):{}}catch{throw new Error(n||"Could not parse env save response")}if(!e.ok)throw new Error(s.error||n||`HTTP ${e.status}`);return s}var fe=async(t,e)=>{let n=await t.text(),s;try{s=n?JSON.parse(n):{}}catch{throw new Error(n||e)}if(!t.ok||s?.ok===!1)throw new Error(s.error||n||`HTTP ${t.status}`);return s};async function Xm(){let t=await Y("/api/webhooks");return fe(t,"Could not load webhooks")}async function Qm(t){let e=await Y(`/api/webhooks/${encodeURIComponent(t)}`);return fe(e,"Could not load webhook detail")}async function eg(t,{destination:e=null,oauthCallback:n=!1}={}){let s=await Y("/api/webhooks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,...e?{destination:e}:{},oauthCallback:!!n})});return fe(s,"Could not create webhook")}async function tg(t,{deleteTransformDir:e=!1}={}){let n=await Y(`/api/webhooks/${encodeURIComponent(t)}`,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({deleteTransformDir:!!e})});return fe(n,"Could not delete webhook")}async function ng(t,{destination:e=null}={}){let n=await Y(`/api/webhooks/${encodeURIComponent(t)}/destination`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({destination:e})});return fe(n,"Could not update webhook destination")}async function sg(t){let e=await Y(`/api/webhooks/${encodeURIComponent(t)}/oauth-callback/rotate`,{method:"POST"});return fe(e,"Could not rotate OAuth callback")}async function og(t,{limit:e=50,offset:n=0,status:s="all"}={}){let o=new URLSearchParams({limit:String(e),offset:String(n),status:String(s||"all")}),r=await Y(`/api/webhooks/${encodeURIComponent(t)}/requests?${o.toString()}`);return fe(r,"Could not load webhook requests")}async function rg(t,e){let n=await Y(`/api/webhooks/${encodeURIComponent(t)}/requests/${encodeURIComponent(String(e))}`);return fe(n,"Could not load webhook request")}var ig=async(t=10)=>{let e=new URLSearchParams({depth:String(t)}),n=await Y(`/api/browse/tree?${e.toString()}`);return fe(n,"Could not load file tree")},dd=async t=>{let e=new URLSearchParams({path:String(t||"")}),n=await Y(`/api/browse/read?${e.toString()}`);return fe(n,"Could not load file content")},ag=async(t,e)=>{let n=String(t||""),s=typeof e=="string"?e:String(e??""),o=await Y("/api/browse/write",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:n,content:s})});return fe(o,"Could not save file")},lg=async t=>{let e=await Y("/api/browse/create-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:String(t||"")})});return fe(e,"Could not create file")},cg=async t=>{let e=await Y("/api/browse/create-folder",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:String(t||"")})});return fe(e,"Could not create folder")},dg=async(t,e)=>{let n=await Y("/api/browse/move",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({from:String(t||""),to:String(e||"")})});return fe(n,"Could not move path")},wa=async t=>{let e=await Y("/api/browse/delete",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:String(t||"")})});return fe(e,"Could not delete file")},ug=async t=>{let e=new URLSearchParams({path:String(t||"")}),n=await Y(`/api/browse/download?${e.toString()}`);if(!n.ok){let a=await n.text();throw new Error(a||"Could not download file")}let s=await n.blob(),o=window?.URL||URL;if(!o?.createObjectURL||!o?.revokeObjectURL)throw new Error("Download is not supported in this browser");let r=o.createObjectURL(s),i=String(t||"").split("/").filter(Boolean).pop()||"download";try{let a=document.createElement("a");a.href=r,a.download=i,document.body?.appendChild(a),a.click(),a.remove()}finally{o.revokeObjectURL(r)}return{ok:!0}},pg=async t=>{let e=await Y("/api/browse/restore",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:String(t||"")})});return fe(e,"Could not restore file")},ud=async()=>{let t=await Y("/api/browse/git-summary");return fe(t,"Could not load git summary")},fg=async t=>{let e=new URLSearchParams({path:String(t||"")}),n=await Y(`/api/browse/git-diff?${e.toString()}`);return fe(n,"Could not load file diff")},hg=async({filePath:t,table:e,limit:n=50,offset:s=0})=>{let o=new URLSearchParams({path:String(t||""),table:String(e||""),limit:String(n),offset:String(s)}),r=await Y(`/api/browse/sqlite-table?${o.toString()}`);return fe(r,"Could not load sqlite table data")},mg=async(t="")=>{let e=await Y("/api/browse/git-sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:String(t||"")})});return fe(e,"Could not sync changes")};var js=t=>String(t||"").split("/")[0]||"",Ro=t=>{let e=String(t||"").trim();return e==="openai-codex"?"openai":e==="volcengine-plan"?"volcengine":e==="byteplus-plan"?"byteplus":e},jk=[{label:"Opus 4.6",preferredKeys:["anthropic/claude-opus-4-6"]},{label:"Sonnet 4.6",preferredKeys:["anthropic/claude-sonnet-4-6"]},{label:"Codex 5.3",preferredKeys:["openai-codex/gpt-5.3-codex"]},{label:"GPT-5.4",preferredKeys:["openai-codex/gpt-5.4"]},{label:"Gemini 3.1 Pro",preferredKeys:["google/gemini-3.1-pro-preview"]}],Lo=t=>{let e=[],n=new Set;return jk.forEach(s=>{let o=s.preferredKeys.map(r=>t.find(i=>i.key===r)).find(Boolean);!o||n.has(o.key)||(e.push({...o,featuredLabel:s.label}),n.add(o.key))}),e},Mn={anthropic:[{key:"ANTHROPIC_API_KEY",label:"Anthropic API Key",url:"https://console.anthropic.com",linkText:"Get key",placeholder:"sk-ant-..."},{key:"ANTHROPIC_TOKEN",label:"Anthropic Setup Token",hint:"From claude setup-token (uses your Claude subscription)",linkText:"Get token",placeholder:"Token..."}],openai:[{key:"OPENAI_API_KEY",label:"OpenAI API Key",url:"https://platform.openai.com",linkText:"Get key",placeholder:"sk-..."}],google:[{key:"GEMINI_API_KEY",label:"Gemini API Key",url:"https://aistudio.google.com",linkText:"Get key",placeholder:"AI..."}],opencode:[{key:"OPENCODE_API_KEY",label:"OpenCode API Key",placeholder:"oc-..."}],openrouter:[{key:"OPENROUTER_API_KEY",label:"OpenRouter API Key",url:"https://openrouter.ai",linkText:"Get key",placeholder:"sk-or-..."}],zai:[{key:"ZAI_API_KEY",label:"Z.AI API Key",placeholder:"zai-..."}],"vercel-ai-gateway":[{key:"AI_GATEWAY_API_KEY",label:"AI Gateway API Key",placeholder:"aigw_..."}],kilocode:[{key:"KILOCODE_API_KEY",label:"KiloCode API Key",placeholder:"kilo_..."}],xai:[{key:"XAI_API_KEY",label:"xAI API Key",placeholder:"xai-..."}],mistral:[{key:"MISTRAL_API_KEY",label:"Mistral API Key",url:"https://console.mistral.ai",linkText:"Get key",placeholder:"sk-..."}],voyage:[{key:"VOYAGE_API_KEY",label:"Voyage API Key",url:"https://dash.voyageai.com",linkText:"Get key",placeholder:"pa-..."}],groq:[{key:"GROQ_API_KEY",label:"Groq API Key",url:"https://console.groq.com",linkText:"Get key",placeholder:"gsk_..."}],cerebras:[{key:"CEREBRAS_API_KEY",label:"Cerebras API Key",placeholder:"csk-..."}],moonshot:[{key:"MOONSHOT_API_KEY",label:"Moonshot API Key",placeholder:"sk-..."}],"kimi-coding":[{key:"KIMI_API_KEY",label:"Kimi API Key",placeholder:"sk-..."}],volcengine:[{key:"VOLCANO_ENGINE_API_KEY",label:"Volcano Engine API Key",placeholder:"ve-..."}],byteplus:[{key:"BYTEPLUS_API_KEY",label:"BytePlus API Key",placeholder:"bp-..."}],synthetic:[{key:"SYNTHETIC_API_KEY",label:"Synthetic API Key",placeholder:"syn-..."}],minimax:[{key:"MINIMAX_API_KEY",label:"MiniMax API Key",placeholder:"minimax-..."}],deepgram:[{key:"DEEPGRAM_API_KEY",label:"Deepgram API Key",url:"https://console.deepgram.com",linkText:"Get key",placeholder:"dg-..."}],vllm:[{key:"VLLM_API_KEY",label:"vLLM API Key",placeholder:"vllm-local"}]},zs={anthropic:"Anthropic",openai:"OpenAI",google:"Gemini",opencode:"OpenCode Zen",openrouter:"OpenRouter",zai:"Z.AI","vercel-ai-gateway":"Vercel AI Gateway",kilocode:"Kilo Gateway",xai:"xAI",mistral:"Mistral",cerebras:"Cerebras",moonshot:"Moonshot","kimi-coding":"Kimi Coding",volcengine:"Volcano Engine",byteplus:"BytePlus",synthetic:"Synthetic",minimax:"MiniMax",voyage:"Voyage",groq:"Groq",deepgram:"Deepgram",vllm:"vLLM"},jr=["anthropic","openai","google","zai","xai","openrouter","opencode","kilocode","vercel-ai-gateway","minimax","moonshot","kimi-coding","volcengine","byteplus","synthetic","mistral","cerebras","voyage","groq","deepgram","vllm"];var gg=[{id:"embeddings",label:"Memory Embeddings",tag:"Embeddings",providers:["openai","google","voyage","mistral"]},{id:"audio",label:"Audio Transcription",tag:"Audio",hasDefault:!0,providers:["openai","groq","deepgram","google","mistral"]}],bg=t=>{if(t==="openai-codex")return new Set;let e=Ro(t),n=Mn[e]||[];return new Set(n.map(s=>s.key))},xg=Object.values(Mn).flat().filter((t,e,n)=>n.findIndex(s=>s.key===t.key)===e);var Eo=P.bind(T),pd="new",fd="existing",An="fresh",Ot="import",Tn="create",qn="existing-empty",zk=t=>String(t||"").trim().replace(/^git@github\.com:/,"").replace(/^https:\/\/github\.com\//,"").replace(/\.git$/,""),zr=t=>{let e=zk(t);if(!e)return!1;let n=e.split("/").filter(Boolean);return n.length===2&&!n.some(s=>/\s/.test(s))},Ht=[{id:"github",title:"GitHub",description:"Auto-backup your config and workspace",fields:[{key:"_GITHUB_SOURCE_REPO",label:"Source Repo",placeholder:"username/existing-openclaw",isText:!0},{key:"GITHUB_WORKSPACE_REPO",label:"New Workspace Repo",placeholder:"username/my-agent",isText:!0},{key:"GITHUB_TOKEN",label:"Personal Access Token",hint:Eo`Create a${" "}2&&(i.children=arguments.length>3?Tr.call(arguments,2):n),typeof t=="function"&&t.defaultProps!=null)for(r in t.defaultProps)i[r]===void 0&&(i[r]=t.defaultProps[r]);return Mr(t,i,s,o,null)}function Mr(t,e,n,s,o){var r={type:t,props:e,key:n,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o??++qf,__i:-1,__u:0};return o==null&&Se.vnode!=null&&Se.vnode(r),r}function ln(t){return t.children}function hn(t,e){this.props=t,this.context=e}function $o(t,e){if(e==null)return t.__?$o(t.__,t.__i+1):null;for(var n;ee&&ms.sort(Zf),t=ms.shift(),e=ms.length,Tk(t)}finally{ms.length=ia.__r=0}}function eh(t,e,n,s,o,r,i,a,l,c,d){var u,p,f,g,m,h,b,x=s&&s.__k||ra,v=e.length;for(l=Pk(n,e,x,l,v),u=0;u0?i=t.__k[r]=Mr(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):t.__k[r]=i,l=r+p,i.__=t,i.__b=t.__b+1,a=null,(c=i.__i=Rk(i,n,l,u))!=-1&&(u--,(a=n[c])&&(a.__u|=2)),a==null||a.__v==null?(c==-1&&(o>d?p--:ol?p--:p++,i.__u|=4))):t.__k[r]=null;if(u)for(r=0;r(d?1:0)){for(o=n-1,r=n+1;o>=0||r=0?o--:r++])!=null&&(2&c.__u)==0&&a==c.key&&l==c.type)return i}return-1}function Kf(t,e,n){e[0]=="-"?t.setProperty(e,n??""):t[e]=n==null?"":typeof n!="number"||Mk.test(e)?n:n+"px"}function sa(t,e,n,s,o){var r,i;e:if(e=="style")if(typeof n=="string")t.style.cssText=n;else{if(typeof s=="string"&&(t.style.cssText=s=""),s)for(e in s)n&&e in n||Kf(t.style,e,"");if(n)for(e in n)s&&n[e]==s[e]||Kf(t.style,e,n[e])}else if(e[0]=="o"&&e[1]=="n")r=e!=(e=e.replace(Yf,"$1")),i=e.toLowerCase(),e=i in t||e=="onFocusOut"||e=="onFocusIn"?i.slice(2):e.slice(2),t.l||(t.l={}),t.l[e+r]=n,n?s?n.u=s.u:(n.u=Gc,t.addEventListener(e,r?zc:jc,r)):t.removeEventListener(e,r?zc:jc,r);else{if(o=="http://www.w3.org/2000/svg")e=e.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(e!="width"&&e!="height"&&e!="href"&&e!="list"&&e!="form"&&e!="tabIndex"&&e!="download"&&e!="rowSpan"&&e!="colSpan"&&e!="role"&&e!="popover"&&e in t)try{t[e]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&e[4]!="-"?t.removeAttribute(e):t.setAttribute(e,e=="popover"&&n==1?"":n))}}function Gf(t){return function(e){if(this.l){var n=this.l[e.type+t];if(e.t==null)e.t=Gc++;else if(e.t0?t:Rr(t)?t.map(sh):_n({},t)}function Lk(t,e,n,s,o,r,i,a,l){var c,d,u,p,f,g,m,h=n.props||oa,b=e.props,x=e.type;if(x=="svg"?o="http://www.w3.org/2000/svg":x=="math"?o="http://www.w3.org/1998/Math/MathML":o||(o="http://www.w3.org/1999/xhtml"),r!=null){for(c=0;c2&&(a.children=arguments.length>3?Tr.call(arguments,2):n),Mr(t.type,a,s||t.key,o||t.ref,null)}function ko(t){function e(n){var s,o;return this.getChildContext||(s=new Set,(o={})[e.__c]=this,this.getChildContext=function(){return o},this.componentWillUnmount=function(){s=null},this.shouldComponentUpdate=function(r){this.props.value!=r.value&&s.forEach(function(i){i.__e=!0,Uc(i)})},this.sub=function(r){s.add(r);var i=r.componentWillUnmount;r.componentWillUnmount=function(){s&&s.delete(r),i&&i.call(r)}}),n.children}return e.__c="__cC"+Xf++,e.__=t,e.Provider=e.__l=(e.Consumer=function(n,s){return n.children(s)}).contextType=e,e}Tr=ra.slice,Se={__e:function(t,e,n,s){for(var o,r,i;e=e.__;)if((o=e.__c)&&!o.__)try{if((r=o.constructor)&&r.getDerivedStateFromError!=null&&(o.setState(r.getDerivedStateFromError(t)),i=o.__d),o.componentDidCatch!=null&&(o.componentDidCatch(t,s||{}),i=o.__d),i)return o.__E=o}catch(a){t=a}throw t}},qf=0,Pr=function(t){return t!=null&&t.constructor===void 0},hn.prototype.setState=function(t,e){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=_n({},this.state),typeof t=="function"&&(t=t(_n({},n),this.props)),t&&_n(n,t),t!=null&&this.__v&&(e&&this._sb.push(e),Uc(this))},hn.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),Uc(this))},hn.prototype.render=ln,ms=[],Jf=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Zf=function(t,e){return t.__v.__b-e.__v.__b},ia.__r=0,Yf=/(PointerCapture)$|Capture$/i,Gc=0,jc=Gf(!1),zc=Gf(!0),Xf=0;var Vs,nt,Yc,rh,Ir=0,fh=[],ut=Se,ih=ut.__b,ah=ut.__r,lh=ut.diffed,ch=ut.__c,dh=ut.unmount,uh=ut.__;function Dr(t,e){ut.__h&&ut.__h(nt,t,Ir||e),Ir=0;var n=nt.__H||(nt.__H={__:[],__h:[]});return t>=n.__.length&&n.__.push({}),n.__[t]}function y(t){return Ir=1,hh(mh,t)}function hh(t,e,n){var s=Dr(Vs++,2);if(s.t=t,!s.__c&&(s.__=[n?n(e):mh(void 0,e),function(a){var l=s.__N?s.__N[0]:s.__[0],c=s.t(l,a);l!==c&&(s.__N=[c,s.__[1]],s.__c.setState({}))}],s.__c=nt,!nt.__f)){var o=function(a,l,c){if(!s.__c.__H)return!0;var d=s.__c.__H.__.filter(function(p){return p.__c});if(d.every(function(p){return!p.__N}))return!r||r.call(this,a,l,c);var u=s.__c.props!==a;return d.some(function(p){if(p.__N){var f=p.__[0];p.__=p.__N,p.__N=void 0,f!==p.__[0]&&(u=!0)}}),r&&r.call(this,a,l,c)||u};nt.__f=!0;var r=nt.shouldComponentUpdate,i=nt.componentWillUpdate;nt.componentWillUpdate=function(a,l,c){if(this.__e){var d=r;r=void 0,o(a,l,c),r=d}i&&i.call(this,a,l,c)},nt.shouldComponentUpdate=o}return s.__N||s.__}function L(t,e){var n=Dr(Vs++,3);!ut.__s&&Qc(n.__H,e)&&(n.__=t,n.u=e,nt.__H.__h.push(n))}function js(t,e){var n=Dr(Vs++,4);!ut.__s&&Qc(n.__H,e)&&(n.__=t,n.u=e,nt.__h.push(n))}function ee(t){return Ir=5,F(function(){return{current:t}},[])}function F(t,e){var n=Dr(Vs++,7);return Qc(n.__H,e)&&(n.__=t(),n.__H=e,n.__h=t),n.__}function q(t,e){return Ir=8,F(function(){return t},e)}function Nr(t){var e=nt.context[t.__c],n=Dr(Vs++,9);return n.c=t,e?(n.__==null&&(n.__=!0,e.sub(nt)),e.props.value):t.__}function Ik(){for(var t;t=fh.shift();){var e=t.__H;if(t.__P&&e)try{e.__h.some(aa),e.__h.some(Xc),e.__h=[]}catch(n){e.__h=[],ut.__e(n,t.__v)}}}ut.__b=function(t){nt=null,ih&&ih(t)},ut.__=function(t,e){t&&e.__k&&e.__k.__m&&(t.__m=e.__k.__m),uh&&uh(t,e)},ut.__r=function(t){ah&&ah(t),Vs=0;var e=(nt=t.__c).__H;e&&(Yc===nt?(e.__h=[],nt.__h=[],e.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(e.__h.some(aa),e.__h.some(Xc),e.__h=[],Vs=0)),Yc=nt},ut.diffed=function(t){lh&&lh(t);var e=t.__c;e&&e.__H&&(e.__H.__h.length&&(fh.push(e)!==1&&rh===ut.requestAnimationFrame||((rh=ut.requestAnimationFrame)||Dk)(Ik)),e.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),Yc=nt=null},ut.__c=function(t,e){e.some(function(n){try{n.__h.some(aa),n.__h=n.__h.filter(function(s){return!s.__||Xc(s)})}catch(s){e.some(function(o){o.__h&&(o.__h=[])}),e=[],ut.__e(s,n.__v)}}),ch&&ch(t,e)},ut.unmount=function(t){dh&&dh(t);var e,n=t.__c;n&&n.__H&&(n.__H.__.some(function(s){try{aa(s)}catch(o){e=o}}),n.__H=void 0,e&&ut.__e(e,n.__v))};var ph=typeof requestAnimationFrame=="function";function Dk(t){var e,n=function(){clearTimeout(s),ph&&cancelAnimationFrame(e),setTimeout(t)},s=setTimeout(n,35);ph&&(e=requestAnimationFrame(n))}function aa(t){var e=nt,n=t.__c;typeof n=="function"&&(t.__c=void 0,n()),nt=e}function Xc(t){var e=nt;t.__c=t.__(),nt=e}function Qc(t,e){return!t||t.length!==e.length||e.some(function(n,s){return n!==t[s]})}function mh(t,e){return typeof e=="function"?e(t):e}var bh=function(t,e,n,s){var o;e[0]=0;for(var r=1;r=5&&((i||!p&&r===5)&&(l.push(r,0,i,o),r=6),p&&(l.push(r,p,0,o),r=6)),i=""},d=0;d"?(r=1,i=""):i=s+i[0]:a?s===a?a="":i+=s:s==='"'||s==="'"?a=s:s===">"?(c(),r=1):r&&(s==="="?(r=5,o=i,i=""):s==="/"&&(r<5||n[d][u+1]===">")?(c(),r===3&&(l=l[0]),r=l,(l=l[0]).push(2,0,r),r=0):s===" "||s===" "||s===` +`||s==="\r"?(c(),r=2):i+=s),r===3&&i==="!--"&&(r=4,l=l[0])}return c(),l})(t)),e),arguments,[])).length>1?e:e[0]}function xh(t,e){if(t instanceof RegExp)return{keys:!1,pattern:t};var n,s,o,r,i=[],a="",l=t.split("/");for(l[0]||l.shift();o=l.shift();)n=o[0],n==="*"?(i.push(n),a+=o[1]==="?"?"(?:/(.*))?":"/(.*)"):n===":"?(s=o.indexOf("?",1),r=o.indexOf(".",1),i.push(o.substring(1,~s?s:~r?r:o.length)),a+=~s&&!~r?"(?:/([^/]+?))?":"/([^/]+?)",~r&&(a+=(~s?"?":"")+"\\"+o.substring(r))):a+="/"+o;return{keys:i,pattern:new RegExp("^"+a+(e?"(?=$|/)":"/?$"),"i")}}var Nk=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function ed(t,e){return t===e&&(t!==0||1/t===1/e)||t!==t&&e!==e}function yh(t,e,n){n&&!Nk&&(e=n);let s=e(),[{_instance:o},r]=y({_instance:{_value:s,_getSnapshot:e}});return js(()=>{o._value=s,o._getSnapshot=e,ed(o._value,e())||r({_instance:o})},[t,s,e]),L(()=>(ed(o._value,o._getSnapshot())||r({_instance:o}),t(()=>{ed(o._value,o._getSnapshot())||r({_instance:o})})),[t]),s}var td=t=>{let e=ee([t,(...n)=>e[0](...n)]).current;return js(()=>{e[0]=t}),e[1]};var Ok="popstate",nd="pushState",sd="replaceState",Bk="hashchange",vh=[Ok,nd,sd,Bk],Fk=t=>{for(let e of vh)addEventListener(e,t);return()=>{for(let e of vh)removeEventListener(e,t)}},Sh=(t,e)=>yh(Fk,t,e),$h=()=>location.search,Ch=({ssrSearch:t}={})=>Sh($h,t!=null?()=>t:$h),wh=()=>location.pathname,Hk=({ssrPath:t}={})=>Sh(wh,t!=null?()=>t:wh);var Wk=(t,{replace:e=!1,state:n=null}={})=>history[e?sd:nd](n,"",t),_h=(t={})=>[Hk(t),Wk],kh=Symbol.for("wouter_v3");if(typeof history<"u"&&typeof window[kh]>"u"){for(let t of[nd,sd]){let e=history[t];history[t]=function(){let n=e.apply(this,arguments),s=new Event(t);return s.arguments=arguments,dispatchEvent(s),n}}Object.defineProperty(window,kh,{value:!0})}var Vk=(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())?"~"+e:e.slice(t.length)||"/",Mh=(t="")=>t==="/"?"":t,Th=(t,e)=>t[0]==="~"?t.slice(1):Mh(e)+t,Ph=(t="",e)=>Vk(Ah(Mh(t)),Ah(e));var Ah=t=>{try{return decodeURI(t)}catch{return t}};var Lh={hook:_h,searchHook:Ch,parser:xh,base:"",ssrPath:void 0,ssrSearch:void 0,ssrContext:void 0,hrefs:t=>t,aroundNav:(t,e,n)=>t(e,n)},Eh=ko(Lh),Or=()=>Nr(Eh),Ih={},Dh=ko(Ih),jk=()=>Nr(Dh),la=t=>{let[e,n]=t.hook(t);return[Ph(t.base,e),td((s,o)=>t.aroundNav(n,Th(s,t.base),o))]},ca=()=>la(Or());var Nh=(t,e,n,s)=>{let{pattern:o,keys:r}=e instanceof RegExp?{keys:!1,pattern:e}:t(e||"*",s),i=o.exec(n)||[],[a,...l]=i;return a!==void 0?[!0,(()=>{let c=r!==!1?Object.fromEntries(r.map((u,p)=>[u,l[p]])):i.groups,d={...l};return c&&Object.assign(d,c),d})(),...s?[a]:[]]:[!1,null]};var da=({children:t,...e})=>{let n=Or(),s=e.hook?Lh:n,o=s,[r,i=e.ssrSearch??""]=e.ssrPath?.split("?")??[];r&&(e.ssrSearch=i,e.ssrPath=r),e.hrefs=e.hrefs??e.hook?.hrefs,e.searchHook=e.searchHook??e.hook?.searchHook;let a=ee({}),l=a.current,c=l;for(let d in s){let u=d==="base"?s[d]+(e[d]??""):e[d]??s[d];l===c&&u!==c[d]&&(a.current=c={...c}),c[d]=u,(u!==s[d]||u!==o[d])&&(o=c)}return T(Eh.Provider,{value:o,children:t})},Rh=({children:t,component:e},n)=>e?T(e,{params:n}):typeof t=="function"?t(n):t,zk=t=>{let e=ee(Ih),n=e.current;return e.current=Object.keys(t).length!==Object.keys(n).length||Object.entries(t).some(([s,o])=>o!==n[s])?t:n};var rt=({path:t,nest:e,match:n,...s})=>{let o=Or(),[r]=la(o),[i,a,l]=n??Nh(o.parser,t,r,e),c=zk({...jk(),...a});if(!i)return null;let d=l?T(da,{base:l},Rh(s,c)):Rh(s,c);return T(Dh.Provider,{value:c,children:d})},f4=(t,e)=>{let n=Or(),[s,o]=la(n),{to:r="",href:i=r,onClick:a,asChild:l,children:c,className:d,replace:u,state:p,transition:f,...g}=t,m=td(b=>{b.ctrlKey||b.metaKey||b.altKey||b.shiftKey||b.button!==0||(a?.(b),b.defaultPrevented||(b.preventDefault(),o(i,t)))}),h=n.hrefs(i[0]==="~"?i.slice(1):n.base+i,n);return l&&Pr(c)?Er(c,{onClick:m,href:h}):T("a",{...g,onClick:m,href:h,className:d?.call?d(s===i):d,children:c,ref:e})},Oh=t=>Array.isArray(t)?t.flatMap(e=>Oh(e&&e.type===ln?e.props.children:e)):[t],od=({children:t,location:e})=>{let n=Or(),[s]=la(n);for(let o of Oh(t)){let r=0;if(Pr(o)&&(r=Nh(n.parser,o.props.path,e||s,o.props.nest))[0])return Er(o,{match:r})}return null};var rd=t=>{if(typeof t!="string"||!t.trim())return{};try{return JSON.parse(t)}catch{return{}}},Bh=({url:t="",onMessage:e=()=>{},onError:n=()=>{}})=>{if(typeof window?.EventSource!="function")throw new Error("Server events are not supported in this browser");let s=new window.EventSource(String(t||""),{withCredentials:!0}),o=l=>{e({event:"phase",data:rd(l?.data||"")})},r=l=>{e({event:"done",data:rd(l?.data||"")})},i=l=>{e({event:"error",data:rd(l?.data||"")})},a=l=>{n(l)};return s.addEventListener("phase",o),s.addEventListener("done",r),s.addEventListener("error",i),s.onerror=a,()=>{s.removeEventListener("phase",o),s.removeEventListener("done",r),s.removeEventListener("error",i),s.onerror=null,s.close()}};var Fh="x-client-timezone",Uk=()=>{try{return Intl?.DateTimeFormat?.().resolvedOptions?.().timeZone||""}catch{return""}},X=async(t,e={})=>{let n={...e},s=new Headers(e?.headers||{});if(!s.has(Fh)){let r=Uk();r&&s.set(Fh,r)}n.headers=s;let o=await fetch(t,n);if(o.status===401){try{window.localStorage?.clear?.()}catch{}throw window.location.href="/setup",new Error("Unauthorized")}return o},Hh=({onMessage:t=()=>{},onOpen:e=()=>{},onError:n=()=>{}}={})=>{if(typeof window?.EventSource!="function")throw new Error("Server events are not supported in this browser");let s=new window.EventSource("/api/events/status",{withCredentials:!0}),o=r=>{let i={};try{i=r?.data?JSON.parse(r.data):{}}catch{}t(i||{})};return s.addEventListener("status",o),s.onopen=()=>e(),s.onerror=r=>n(r),()=>{s.removeEventListener("status",o),s.onopen=null,s.onerror=null,s.close()}};async function So(){return(await X("/api/status")).json()}async function Co(){return(await X("/api/pairings")).json()}async function _o(t,e,n=""){return(await X(`/api/pairings/${t}/approve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channel:e,accountId:n})})).json()}async function Ao(t,e,n=""){let s=await X(`/api/pairings/${t}/reject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channel:e,accountId:n})});return he(s,"Could not reject pairing")}async function Wh(){return(await X("/api/google/accounts")).json()}async function Vh({accountId:t="",client:e=""}={}){let n=new URLSearchParams;t&&n.set("accountId",String(t)),e&&n.set("client",String(e));let s=n.toString()?`?${n.toString()}`:"";return(await X(`/api/google/credentials${s}`)).json()}async function jh(t=""){let e=new URLSearchParams;t&&e.set("accountId",String(t));let n=e.toString()?`?${e.toString()}`:"";return(await X(`/api/google/check${n}`)).json()}async function zh({clientId:t,clientSecret:e,email:n,services:s=[],client:o="default",personal:r=!1,accountId:i=""}){return(await X("/api/google/credentials",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientId:t,clientSecret:e,email:n,services:s,client:o,personal:r,accountId:i})})).json()}async function Uh({email:t,services:e=[],client:n="default",personal:s=!1,accountId:o=""}){return(await X("/api/google/accounts",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t,services:e,client:n,personal:s,accountId:o})})).json()}async function Kh(t=""){return(await X("/api/google/disconnect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accountId:t})})).json()}var Gh=async()=>{let t=await X("/api/gmail/config");return he(t,"Could not load Gmail watch config")},qh=async({client:t="default",topicPath:e="",projectId:n="",regeneratePushToken:s=!1}={})=>{let o=await X("/api/gmail/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client:t,topicPath:e,projectId:n,regeneratePushToken:s})});return he(o,"Could not save Gmail watch config")},Jh=async(t,{destination:e=null}={})=>{let n=await X("/api/gmail/watch/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accountId:String(t||""),...e?{destination:e}:{}})});return he(n,"Could not start Gmail watch")},Zh=async t=>{let e=await X("/api/gmail/watch/stop",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accountId:String(t||"")})});return he(e,"Could not stop Gmail watch")},Yh=async({accountId:t="",force:e=!0}={})=>{let n=await X("/api/gmail/watch/renew",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accountId:String(t||""),force:!!e})});return he(n,"Could not renew Gmail watch")},Xh=async()=>{let t=await X("/api/agent/sessions");return he(t,"Could not load agent sessions")},ua=async()=>{let t=await X("/api/doctor/status");return he(t,"Could not load Doctor status")},Qh=async()=>{let t=await X("/api/doctor/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});return he(t,"Could not start Doctor run")};var em=async(t=10)=>{let e=new URLSearchParams({limit:String(t)}),n=await X(`/api/doctor/runs?${e.toString()}`);return he(n,"Could not load Doctor runs")},tm=async({runId:t="all"}={})=>{let e=new URLSearchParams;String(t||"").trim()&&e.set("runId",String(t||""));let n=e.toString()?`?${e.toString()}`:"",s=await X(`/api/doctor/cards${n}`);return he(s,"Could not load Doctor findings")};var pa=async({cardId:t,status:e})=>{let n=await X(`/api/doctor/cards/${encodeURIComponent(String(t||""))}/status`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:String(e||"")})});return he(n,"Could not update Doctor card status")},nm=async({cardId:t,sessionId:e="",replyChannel:n="",replyTo:s="",prompt:o=""}={})=>{let r=await X(`/api/doctor/findings/${encodeURIComponent(String(t||""))}/fix`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:String(e||""),replyChannel:String(n||""),replyTo:String(s||""),prompt:String(o||"")})});return he(r,"Could not send Doctor fix request")},fa=async({message:t="",sessionKey:e=""}={})=>{let n=await X("/api/agent/message",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:String(t||""),sessionKey:String(e||"")})});return he(n,"Could not send message to agent")};async function sm(){let t=await X("/api/gateway/restart",{method:"POST"});return he(t,"Could not restart gateway")}async function om(){let t=await X("/api/restart-status");return he(t,"Could not load restart status")}async function rm(){let t=await X("/api/restart-status/dismiss",{method:"POST"});return he(t,"Could not dismiss restart status")}async function im(){let t=await X("/api/watchdog/status");return he(t,"Could not load watchdog status")}async function am(t=30){let e=new URLSearchParams({days:String(t)}),n=await X(`/api/usage/summary?${e.toString()}`);return he(n,"Could not load usage summary")}async function lm(t=50){let e=new URLSearchParams({limit:String(t)}),n=await X(`/api/usage/sessions?${e.toString()}`);return he(n,"Could not load usage sessions")}async function cm(t){let e=await X(`/api/usage/sessions/${encodeURIComponent(String(t||""))}`);return he(e,"Could not load usage session detail")}async function dm(t=20){let e=await X(`/api/watchdog/events?limit=${encodeURIComponent(String(t))}`);return he(e,"Could not load watchdog events")}async function um(t=65536){let e=await X(`/api/watchdog/logs?tail=${encodeURIComponent(String(t))}`);if(!e.ok)throw new Error("Could not load watchdog logs");return e.text()}async function id(t){let e=await X("/api/watchdog/terminal/close",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:String(t||"")})});return he(e,"Could not close watchdog terminal")}async function ha(){let t=await X("/api/watchdog/repair",{method:"POST"});return he(t,"Could not trigger watchdog repair")}async function pm(){let t=await X("/api/watchdog/resources");return he(t,"Could not load system resources")}async function fm(){let t=await X("/api/watchdog/settings");return he(t,"Could not load watchdog settings")}async function ad(t){let e=await X("/api/watchdog/settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return he(e,"Could not update watchdog settings")}async function hm(){return(await X("/api/gateway/dashboard")).json()}async function mm(t=!1){return(await X(`/api/openclaw/version${t?"?refresh=1":""}`)).json()}async function ma(){return(await X("/api/openclaw/update",{method:"POST"})).json()}async function gm(t=!1){return(await X(`/api/alphaclaw/version${t?"?refresh=1":""}`)).json()}async function bm(t=""){let e=String(t||"").trim(),n=e?`?${new URLSearchParams({tag:e}).toString()}`:"";try{let s=await X(`/api/alphaclaw/release-notes${n}`);return await he(s,"Could not load release notes")}catch{let s=e?`https://api.github.com/repos/chrysb/alphaclaw/releases/tags/${encodeURIComponent(e)}`:"https://api.github.com/repos/chrysb/alphaclaw/releases/latest",o=await fetch(s,{headers:{Accept:"application/vnd.github+json"}}),r=await o.text(),i=null;try{i=r?JSON.parse(r):null}catch{throw new Error(r||"Could not load release notes")}if(!o.ok)throw new Error(i?.message||r||"Could not load release notes");return{ok:!0,tag:String(i?.tag_name||e||""),name:String(i?.name||""),body:String(i?.body||""),htmlUrl:String(i?.html_url||""),publishedAt:String(i?.published_at||"")}}}async function xm(){return(await X("/api/alphaclaw/update",{method:"POST"})).json()}async function ym(t){let e=await X("/api/sync-cron",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await e.text(),s;try{s=n?JSON.parse(n):{}}catch{throw new Error(n||"Could not parse sync cron response")}if(!e.ok)throw new Error(s.error||n||`HTTP ${e.status}`);return s}async function vm({sortBy:t="nextRunAtMs",sortDir:e="asc"}={}){let n=new URLSearchParams;t&&n.set("sortBy",String(t)),e&&n.set("sortDir",String(e));let s=n.toString()?`?${n.toString()}`:"",o=await X(`/api/cron/jobs${s}`);return he(o,"Could not load cron jobs")}async function $m(){let t=await X("/api/cron/status");return he(t,"Could not load cron status")}async function ld(t,{limit:e=20,offset:n=0,status:s="all",deliveryStatus:o="all",sortDir:r="desc",query:i=""}={}){let a=new URLSearchParams({limit:String(e),offset:String(n),status:String(s||"all"),deliveryStatus:String(o||"all"),sortDir:String(r||"desc")});String(i||"").trim()&&a.set("query",String(i).trim());let l=encodeURIComponent(String(t||"")),c=await X(`/api/cron/jobs/${l}/runs?${a.toString()}`);return he(c,"Could not load cron run history")}async function wm(t,{days:e=30}={}){let n=new URLSearchParams({days:String(e)}),s=encodeURIComponent(String(t||"")),o=await X(`/api/cron/jobs/${s}/usage?${n.toString()}`);return he(o,"Could not load cron job usage")}async function km(t,{range:e="7d"}={}){let n=new URLSearchParams({range:String(e||"7d")}),s=encodeURIComponent(String(t||"")),o=await X(`/api/cron/jobs/${s}/trends?${n.toString()}`);return he(o,"Could not load cron job trends")}async function Sm({days:t=30}={}){let e=new URLSearchParams({days:String(t)}),n=await X(`/api/cron/usage/bulk?${e.toString()}`);return he(n,"Could not load cron usage overview")}async function Cm({sinceMs:t=0,limitPerJob:e=20,status:n="all",deliveryStatus:s="all",sortDir:o="desc"}={}){let r=new URLSearchParams({sinceMs:String(t||0),limitPerJob:String(e||20),status:String(n||"all"),deliveryStatus:String(s||"all"),sortDir:String(o||"desc")}),i=await X(`/api/cron/runs/bulk?${r.toString()}`);return he(i,"Could not load cron run outcomes")}async function _m(t){let e=encodeURIComponent(String(t||"")),n=await X(`/api/cron/jobs/${e}/run`,{method:"POST"});return he(n,"Could not trigger cron job run")}async function Am(t,e){let n=encodeURIComponent(String(t||"")),o=await X(`/api/cron/jobs/${n}/${e?"enable":"disable"}`,{method:"POST"});return he(o,"Could not update cron job state")}async function Mm(t,e){let n=encodeURIComponent(String(t||"")),s=await X(`/api/cron/jobs/${n}/prompt`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:String(e||"")})});return he(s,"Could not update cron prompt")}async function Tm(t,{sessionTarget:e="",wakeMode:n="",deliveryMode:s="",deliveryChannel:o="",deliveryTo:r=""}={}){let i=encodeURIComponent(String(t||"")),a=await X(`/api/cron/jobs/${i}/routing`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionTarget:String(e||""),wakeMode:String(n||""),deliveryMode:String(s||""),deliveryChannel:String(o||""),deliveryTo:String(r||"")})});return he(a,"Could not update cron routing")}async function ga(){return(await X("/api/devices")).json()}async function ba(t){return(await X(`/api/devices/${t}/approve`,{method:"POST"})).json()}async function xa(t){return(await X(`/api/devices/${t}/reject`,{method:"POST"})).json()}var Pm=async()=>{let t=await X("/api/nodes");return he(t,"Could not load nodes")};var Rm=async t=>{let e=encodeURIComponent(String(t||"")),n=await X(`/api/nodes/${e}`,{method:"DELETE"});return he(n,"Could not remove node")},Lm=async t=>{let e=encodeURIComponent(String(t||"")),n=new AbortController,s=setTimeout(()=>n.abort(),2e4);try{let o=await X(`/api/nodes/${e}/route`,{method:"POST",signal:n.signal});return he(o,"Could not route execution to node")}catch(o){throw String(o?.name||"")==="AbortError"?new Error("Routing timed out. Gateway may be restarting or unavailable."):o}finally{clearTimeout(s)}},ya=async()=>{let t=await X("/api/nodes/connect-info");return he(t,"Could not load connect info")},Em=async(t,e="user")=>{let n=encodeURIComponent(String(t||"")),s=new URLSearchParams({profile:String(e||"user")}),o=await X(`/api/nodes/${n}/browser-status?${s.toString()}`);return he(o,"Could not load node browser status")};var Im=async()=>(await X("/api/auth/status")).json(),Dm=async()=>(await X("/api/auth/logout",{method:"POST"})).json();async function Nm(){return(await X("/api/onboard/status")).json()}async function Om(t,e,{importMode:n=!1}={}){return(await X("/api/onboard",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({vars:t,modelKey:e,importMode:n})})).json()}async function va(t,e,n="new"){return(await X("/api/onboard/github/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({repo:t,token:e,mode:n})})).json()}async function Bm(t){return(await X("/api/onboard/import/scan",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tempDir:t})})).json()}async function Fm({tempDir:t,approvedSecrets:e=[],skipSecretExtraction:n=!1,githubRepo:s="",githubToken:o=""}){return(await X("/api/onboard/import/apply",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tempDir:t,approvedSecrets:e,skipSecretExtraction:n,githubRepo:s,githubToken:o})})).json()}var Br=async()=>(await X("/api/models")).json();var Hm=async({agentId:t}={})=>{let e=t?`?agentId=${encodeURIComponent(t)}`:"";return(await X(`/api/models/config${e}`)).json()},Wm=async({primary:t,configuredModels:e,profiles:n,authOrder:s,agentId:o}={})=>{let r=o?`?agentId=${encodeURIComponent(o)}`:"";return(await X(`/api/models/config${r}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({primary:t,configuredModels:e,profiles:n,authOrder:s})})).json()};var Mo=async()=>{let t=await X("/api/agents");return he(t,"Could not load agents")},To=async()=>{let t=await X("/api/channels/accounts");return he(t,"Could not load channel accounts")},Vm=async({provider:t="",accountId:e="default"}={})=>{let n=new URLSearchParams({provider:String(t||""),accountId:String(e||"default")}),s=await X(`/api/channels/accounts/token?${n.toString()}`);return he(s,"Could not load channel token")},jm=async t=>{let e=await X("/api/channels/accounts",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return he(e,"Could not create channel account")},zm=async t=>{let e=await X("/api/channels/accounts/jobs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return he(e,"Could not start channel account operation")},Um=({operationId:t="",onMessage:e=()=>{},onError:n=()=>{}})=>Bh({url:`/api/operations/${encodeURIComponent(String(t||""))}/events`,onMessage:e,onError:n}),Fr=async t=>{let e=await X("/api/channels/accounts",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return he(e,"Could not update channel account")},$a=async t=>{let e=await X("/api/channels/accounts",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return he(e,"Could not delete channel account")},Km=async t=>{let e=await X("/api/channels/accounts/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return he(e,"Could not run channel login")};var Gm=async t=>{let e=await X(`/api/agents/${encodeURIComponent(String(t||""))}/workspace-size`);return he(e,"Could not load workspace size")},qm=async t=>{let e=await X(`/api/agents/${encodeURIComponent(String(t||""))}/bindings`);return he(e,"Could not load agent bindings")},Jm=async t=>{let e=await X("/api/agents",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t||{})});return he(e,"Could not create agent")},Zm=async(t,e)=>{let n=await X(`/api/agents/${encodeURIComponent(String(t||""))}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e||{})});return he(n,"Could not update agent")};var Ym=async(t,{keepWorkspace:e=!0}={})=>{let n=new URLSearchParams({keepWorkspace:e?"true":"false"}),s=await X(`/api/agents/${encodeURIComponent(String(t||""))}?${n.toString()}`,{method:"DELETE"});return he(s,"Could not delete agent")},Xm=async t=>{let e=await X(`/api/agents/${encodeURIComponent(String(t||""))}/default`,{method:"POST"});return he(e,"Could not set default agent")},Po=async()=>(await X("/api/codex/status")).json(),Hr=async()=>(await X("/api/codex/disconnect",{method:"POST"})).json(),Wr=async t=>(await X("/api/codex/exchange",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({input:t})})).json();async function Vr(){return(await X("/api/env")).json()}async function cd(t){let e=await X("/api/env",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({vars:t})}),n=await e.text(),s;try{s=n?JSON.parse(n):{}}catch{throw new Error(n||"Could not parse env save response")}if(!e.ok)throw new Error(s.error||n||`HTTP ${e.status}`);return s}var he=async(t,e)=>{let n=await t.text(),s;try{s=n?JSON.parse(n):{}}catch{throw new Error(n||e)}if(!t.ok||s?.ok===!1)throw new Error(s.error||n||`HTTP ${t.status}`);return s};async function Qm(){let t=await X("/api/webhooks");return he(t,"Could not load webhooks")}async function eg(t){let e=await X(`/api/webhooks/${encodeURIComponent(t)}`);return he(e,"Could not load webhook detail")}async function tg(t,{destination:e=null,oauthCallback:n=!1}={}){let s=await X("/api/webhooks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,...e?{destination:e}:{},oauthCallback:!!n})});return he(s,"Could not create webhook")}async function ng(t,{deleteTransformDir:e=!1}={}){let n=await X(`/api/webhooks/${encodeURIComponent(t)}`,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({deleteTransformDir:!!e})});return he(n,"Could not delete webhook")}async function sg(t,{destination:e=null}={}){let n=await X(`/api/webhooks/${encodeURIComponent(t)}/destination`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({destination:e})});return he(n,"Could not update webhook destination")}async function og(t){let e=await X(`/api/webhooks/${encodeURIComponent(t)}/oauth-callback/rotate`,{method:"POST"});return he(e,"Could not rotate OAuth callback")}async function rg(t,{limit:e=50,offset:n=0,status:s="all"}={}){let o=new URLSearchParams({limit:String(e),offset:String(n),status:String(s||"all")}),r=await X(`/api/webhooks/${encodeURIComponent(t)}/requests?${o.toString()}`);return he(r,"Could not load webhook requests")}async function ig(t,e){let n=await X(`/api/webhooks/${encodeURIComponent(t)}/requests/${encodeURIComponent(String(e))}`);return he(n,"Could not load webhook request")}var ag=async(t=10)=>{let e=new URLSearchParams({depth:String(t)}),n=await X(`/api/browse/tree?${e.toString()}`);return he(n,"Could not load file tree")},dd=async t=>{let e=new URLSearchParams({path:String(t||"")}),n=await X(`/api/browse/read?${e.toString()}`);return he(n,"Could not load file content")},lg=async(t,e)=>{let n=String(t||""),s=typeof e=="string"?e:String(e??""),o=await X("/api/browse/write",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:n,content:s})});return he(o,"Could not save file")},cg=async t=>{let e=await X("/api/browse/create-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:String(t||"")})});return he(e,"Could not create file")},dg=async t=>{let e=await X("/api/browse/create-folder",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:String(t||"")})});return he(e,"Could not create folder")},ug=async(t,e)=>{let n=await X("/api/browse/move",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({from:String(t||""),to:String(e||"")})});return he(n,"Could not move path")},wa=async t=>{let e=await X("/api/browse/delete",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:String(t||"")})});return he(e,"Could not delete file")},pg=async t=>{let e=new URLSearchParams({path:String(t||"")}),n=await X(`/api/browse/download?${e.toString()}`);if(!n.ok){let a=await n.text();throw new Error(a||"Could not download file")}let s=await n.blob(),o=window?.URL||URL;if(!o?.createObjectURL||!o?.revokeObjectURL)throw new Error("Download is not supported in this browser");let r=o.createObjectURL(s),i=String(t||"").split("/").filter(Boolean).pop()||"download";try{let a=document.createElement("a");a.href=r,a.download=i,document.body?.appendChild(a),a.click(),a.remove()}finally{o.revokeObjectURL(r)}return{ok:!0}},fg=async t=>{let e=await X("/api/browse/restore",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:String(t||"")})});return he(e,"Could not restore file")},ud=async()=>{let t=await X("/api/browse/git-summary");return he(t,"Could not load git summary")},hg=async t=>{let e=new URLSearchParams({path:String(t||"")}),n=await X(`/api/browse/git-diff?${e.toString()}`);return he(n,"Could not load file diff")},mg=async({filePath:t,table:e,limit:n=50,offset:s=0})=>{let o=new URLSearchParams({path:String(t||""),table:String(e||""),limit:String(n),offset:String(s)}),r=await X(`/api/browse/sqlite-table?${o.toString()}`);return he(r,"Could not load sqlite table data")},gg=async(t="")=>{let e=await X("/api/browse/git-sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:String(t||"")})});return he(e,"Could not sync changes")};var zs=t=>String(t||"").split("/")[0]||"",Ro=t=>{let e=String(t||"").trim();return e==="openai-codex"?"openai":e==="volcengine-plan"?"volcengine":e==="byteplus-plan"?"byteplus":e},Kk=[{label:"Opus 4.6",preferredKeys:["anthropic/claude-opus-4-6"]},{label:"Sonnet 4.6",preferredKeys:["anthropic/claude-sonnet-4-6"]},{label:"Codex 5.3",preferredKeys:["openai-codex/gpt-5.3-codex"]},{label:"GPT-5.4",preferredKeys:["openai-codex/gpt-5.4"]},{label:"Gemini 3.1 Pro",preferredKeys:["google/gemini-3.1-pro-preview"]}],Lo=t=>{let e=[],n=new Set;return Kk.forEach(s=>{let o=s.preferredKeys.map(r=>t.find(i=>i.key===r)).find(Boolean);!o||n.has(o.key)||(e.push({...o,featuredLabel:s.label}),n.add(o.key))}),e},An={anthropic:[{key:"ANTHROPIC_API_KEY",label:"Anthropic API Key",url:"https://console.anthropic.com",linkText:"Get key",placeholder:"sk-ant-..."},{key:"ANTHROPIC_TOKEN",label:"Anthropic Setup Token",hint:"From claude setup-token (uses your Claude subscription)",linkText:"Get token",placeholder:"Token..."}],openai:[{key:"OPENAI_API_KEY",label:"OpenAI API Key",url:"https://platform.openai.com",linkText:"Get key",placeholder:"sk-..."}],google:[{key:"GEMINI_API_KEY",label:"Gemini API Key",url:"https://aistudio.google.com",linkText:"Get key",placeholder:"AI..."}],opencode:[{key:"OPENCODE_API_KEY",label:"OpenCode API Key",placeholder:"oc-..."}],openrouter:[{key:"OPENROUTER_API_KEY",label:"OpenRouter API Key",url:"https://openrouter.ai",linkText:"Get key",placeholder:"sk-or-..."}],zai:[{key:"ZAI_API_KEY",label:"Z.AI API Key",placeholder:"zai-..."}],"vercel-ai-gateway":[{key:"AI_GATEWAY_API_KEY",label:"AI Gateway API Key",placeholder:"aigw_..."}],kilocode:[{key:"KILOCODE_API_KEY",label:"KiloCode API Key",placeholder:"kilo_..."}],xai:[{key:"XAI_API_KEY",label:"xAI API Key",placeholder:"xai-..."}],mistral:[{key:"MISTRAL_API_KEY",label:"Mistral API Key",url:"https://console.mistral.ai",linkText:"Get key",placeholder:"sk-..."}],voyage:[{key:"VOYAGE_API_KEY",label:"Voyage API Key",url:"https://dash.voyageai.com",linkText:"Get key",placeholder:"pa-..."}],groq:[{key:"GROQ_API_KEY",label:"Groq API Key",url:"https://console.groq.com",linkText:"Get key",placeholder:"gsk_..."}],cerebras:[{key:"CEREBRAS_API_KEY",label:"Cerebras API Key",placeholder:"csk-..."}],moonshot:[{key:"MOONSHOT_API_KEY",label:"Moonshot API Key",placeholder:"sk-..."}],"kimi-coding":[{key:"KIMI_API_KEY",label:"Kimi API Key",placeholder:"sk-..."}],volcengine:[{key:"VOLCANO_ENGINE_API_KEY",label:"Volcano Engine API Key",placeholder:"ve-..."}],byteplus:[{key:"BYTEPLUS_API_KEY",label:"BytePlus API Key",placeholder:"bp-..."}],synthetic:[{key:"SYNTHETIC_API_KEY",label:"Synthetic API Key",placeholder:"syn-..."}],minimax:[{key:"MINIMAX_API_KEY",label:"MiniMax API Key",placeholder:"minimax-..."}],deepgram:[{key:"DEEPGRAM_API_KEY",label:"Deepgram API Key",url:"https://console.deepgram.com",linkText:"Get key",placeholder:"dg-..."}],vllm:[{key:"VLLM_API_KEY",label:"vLLM API Key",placeholder:"vllm-local"}]},Us={anthropic:"Anthropic",openai:"OpenAI",google:"Gemini",opencode:"OpenCode Zen",openrouter:"OpenRouter",zai:"Z.AI","vercel-ai-gateway":"Vercel AI Gateway",kilocode:"Kilo Gateway",xai:"xAI",mistral:"Mistral",cerebras:"Cerebras",moonshot:"Moonshot","kimi-coding":"Kimi Coding",volcengine:"Volcano Engine",byteplus:"BytePlus",synthetic:"Synthetic",minimax:"MiniMax",voyage:"Voyage",groq:"Groq",deepgram:"Deepgram",vllm:"vLLM"},jr=["anthropic","openai","google","zai","xai","openrouter","opencode","kilocode","vercel-ai-gateway","minimax","moonshot","kimi-coding","volcengine","byteplus","synthetic","mistral","cerebras","voyage","groq","deepgram","vllm"];var bg=[{id:"embeddings",label:"Memory Embeddings",tag:"Embeddings",providers:["openai","google","voyage","mistral"]},{id:"audio",label:"Audio Transcription",tag:"Audio",hasDefault:!0,providers:["openai","groq","deepgram","google","mistral"]}],xg=t=>{if(t==="openai-codex")return new Set;let e=Ro(t),n=An[e]||[];return new Set(n.map(s=>s.key))},yg=Object.values(An).flat().filter((t,e,n)=>n.findIndex(s=>s.key===t.key)===e);var Eo=P.bind(T),pd="new",fd="existing",Mn="fresh",Ot="import",Tn="create",Jn="existing-empty",Gk=t=>String(t||"").trim().replace(/^git@github\.com:/,"").replace(/^https:\/\/github\.com\//,"").replace(/\.git$/,""),zr=t=>{let e=Gk(t);if(!e)return!1;let n=e.split("/").filter(Boolean);return n.length===2&&!n.some(s=>/\s/.test(s))},Ht=[{id:"github",title:"GitHub",description:"Auto-backup your config and workspace",fields:[{key:"_GITHUB_SOURCE_REPO",label:"Source Repo",placeholder:"username/existing-openclaw",isText:!0},{key:"GITHUB_WORKSPACE_REPO",label:"New Workspace Repo",placeholder:"username/my-agent",isText:!0},{key:"GITHUB_TOKEN",label:"Personal Access Token",hint:Eo`Create a${" "}fine-grained token${" "}with Contents + Metadata access`,placeholder:"ghp_... or github_pat_..."}],validate:t=>{let e=t._GITHUB_FLOW||An,n=zr(t.GITHUB_WORKSPACE_REPO),s=e!==Ot||zr(t._GITHUB_SOURCE_REPO);return!!(t.GITHUB_TOKEN&&n&&s)}},{id:"ai",title:"Primary Agent Model",description:"Choose your main model and authenticate its provider",fields:xg,validate:(t,e={})=>!!(t.MODEL_KEY&&e.hasAi)},{id:"channels",title:"Channels",description:"At least one is required to talk to your agent",fields:[{key:"TELEGRAM_BOT_TOKEN",label:"Telegram Bot Token",hint:Eo`From${" "}${" "}with Contents + Metadata access`,placeholder:"ghp_... or github_pat_..."}],validate:t=>{let e=t._GITHUB_FLOW||Mn,n=zr(t.GITHUB_WORKSPACE_REPO),s=e!==Ot||zr(t._GITHUB_SOURCE_REPO);return!!(t.GITHUB_TOKEN&&n&&s)}},{id:"ai",title:"Primary Agent Model",description:"Choose your main model and authenticate its provider",fields:yg,validate:(t,e={})=>!!(t.MODEL_KEY&&e.hasAi)},{id:"channels",title:"Channels",description:"At least one is required to talk to your agent",fields:[{key:"TELEGRAM_BOT_TOKEN",label:"Telegram Bot Token",hint:Eo`From${" "}brave.com/search/api${" "}-${" "}free tier available`,placeholder:"BSA..."}],validate:()=>!0}];var Uk=P.bind(T),yg=({onSelectFlow:t})=>Uk` + >${" "}-${" "}free tier available`,placeholder:"BSA..."}],validate:()=>!0}];var qk=P.bind(T),vg=({onSelectFlow:t})=>qk`
- `;var Kk=P.bind(T),Ce=({className:t="h-4 w-4",ariaHidden:e=!0,style:n=""})=>Kk` + `;var Jk=P.bind(T),Ce=({className:t="h-4 w-4",ariaHidden:e=!0,style:n=""})=>Jk` -`;var Io=P.bind(T),vg={primary:"ac-btn-cyan",secondary:"ac-btn-secondary",success:"ac-btn-green",danger:"ac-btn-danger",ghost:"ac-btn-ghost"},Gk=(t,e)=>t==="subtle"||t==="neutral"?e?"border border-border text-fg-muted hover:text-body hover:border-fg-muted":"border border-border text-fg-muted":t==="warning"?e?"border border-yellow-500/35 text-status-warning-muted bg-yellow-500/10 hover:border-yellow-400/60 hover:text-status-warning hover:bg-yellow-500/15":"border border-yellow-500/35 text-status-warning-muted bg-yellow-500/10":vg[t]||vg.primary,$g={sm:"h-7 text-xs leading-none px-2.5 py-1 rounded-lg",md:"h-9 text-sm font-medium leading-none px-4 rounded-xl",lg:"h-10 text-sm font-medium leading-none px-5 rounded-lg"},wg={sm:"h-7 w-7 p-0 rounded-lg",md:"h-9 w-9 p-0 rounded-xl",lg:"h-10 w-10 p-0 rounded-lg"},Z=({onClick:t,type:e="button",disabled:n=!1,loading:s=!1,tone:o="primary",size:r="sm",idleLabel:i="Action",loadingLabel:a="Working...",loadingMode:l="replace",className:c="",idleIcon:d=null,idleIconClassName:u="h-3 w-3",iconOnly:p=!1,title:f="",ariaLabel:g=""})=>{let m=n||s,b=Gk(o,!m),x=p?wg[r]||wg.sm:$g[r]||$g.sm,v=s?`cursor-not-allowed ${o==="warning"?"opacity-90 animate-pulse shadow-[0_0_0_1px_rgba(234,179,8,0.22),0_0_18px_rgba(234,179,8,0.12)]":"opacity-80"}`:"",w=r==="md"||r==="lg"?"h-4 w-4":"h-3 w-3",$=l==="inline",S=d,C=p&&S?Io`<${S} className=${u} />`:S?Io` +`;var Io=P.bind(T),$g={primary:"ac-btn-cyan",secondary:"ac-btn-secondary",success:"ac-btn-green",danger:"ac-btn-danger",ghost:"ac-btn-ghost"},Zk=(t,e)=>t==="subtle"||t==="neutral"?e?"border border-border text-fg-muted hover:text-body hover:border-fg-muted":"border border-border text-fg-muted":t==="warning"?e?"border border-yellow-500/35 text-status-warning-muted bg-yellow-500/10 hover:border-yellow-400/60 hover:text-status-warning hover:bg-yellow-500/15":"border border-yellow-500/35 text-status-warning-muted bg-yellow-500/10":$g[t]||$g.primary,wg={sm:"h-7 text-xs leading-none px-2.5 py-1 rounded-lg",md:"h-9 text-sm font-medium leading-none px-4 rounded-xl",lg:"h-10 text-sm font-medium leading-none px-5 rounded-lg"},kg={sm:"h-7 w-7 p-0 rounded-lg",md:"h-9 w-9 p-0 rounded-xl",lg:"h-10 w-10 p-0 rounded-lg"},Y=({onClick:t,type:e="button",disabled:n=!1,loading:s=!1,tone:o="primary",size:r="sm",idleLabel:i="Action",loadingLabel:a="Working...",loadingMode:l="replace",className:c="",idleIcon:d=null,idleIconClassName:u="h-3 w-3",iconOnly:p=!1,title:f="",ariaLabel:g=""})=>{let m=n||s,b=Zk(o,!m),x=p?kg[r]||kg.sm:wg[r]||wg.sm,v=s?`cursor-not-allowed ${o==="warning"?"opacity-90 animate-pulse shadow-[0_0_0_1px_rgba(234,179,8,0.22),0_0_18px_rgba(234,179,8,0.12)]":"opacity-80"}`:"",w=r==="md"||r==="lg"?"h-4 w-4":"h-3 w-3",$=l==="inline",S=d,C=p&&S?Io`<${S} className=${u} />`:S?Io` <${S} className=${u} /> ${i} @@ -194,7 +194,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa `:_} - `};var ka=(t=[])=>(Array.isArray(t)?t:[]).filter(e=>e?.confidence==="high").map(e=>({...e,suggestedEnvVar:e?.suggestedEnvVar||""})),kg=(t=[])=>(Array.isArray(t)?t:[]).reduce((e,n)=>{let s=String(n?.suggestedEnvVar||"").trim(),o=String(n?.value||"");return!s||!o||(e[s]=o),e},{});var qt=P.bind(T),qk=[{key:"gatewayConfig",label:"Gateway Config",icon:"\u2699\uFE0F",description:"openclaw.json configuration",showFiles:!0},{key:"envFiles",label:"Environment Files",icon:"\u{1F510}",description:".env files with variables",showFiles:!0},{key:"workspaceFiles",label:"Workspace Files",icon:"\u{1F4C4}",description:"Prompt files (AGENTS.md, SOUL.md, etc.)",showFiles:!0},{key:"skills",label:"Skills",icon:"\u{1F6E0}",description:"Custom skill definitions",showFiles:!0},{key:"cronJobs",label:"Cron Jobs",icon:"\u23F0",description:"Scheduled tasks",showFiles:!0},{key:"webhooks",label:"Hooks",icon:"\u{1F517}",description:"Webhook mappings and internal hooks",showDirs:!0},{key:"memory",label:"Memory",icon:"\u{1F9E0}",description:"Agent memory and embeddings",showDirs:!0}],Jk=({category:t,data:e})=>{let[n,s]=y(!1);if(!e?.found)return null;let o=t.key==="webhooks",r=Array.isArray(e.transformWarnings)?e.transformWarnings:[],i=new Set(r.map(d=>String(d.actualPath||"").trim()).filter(Boolean).map(d=>d.split("/").slice(0,-2).join("/"))),a=[...e.jobNames||[],...e.hookNames||[],...e.files||[],...(e.dirs||[]).filter(d=>!i.has(d)),...e.extraMarkdown||[]],l=typeof e.jobCount=="number"&&e.jobCount>0?e.jobCount:typeof e.hookCount=="number"&&e.hookCount>0?e.hookCount:a.length,c=typeof e.warningCount=="number"?e.warningCount:r.length;return qt` + `};var ka=(t=[])=>(Array.isArray(t)?t:[]).filter(e=>e?.confidence==="high").map(e=>({...e,suggestedEnvVar:e?.suggestedEnvVar||""})),Sg=(t=[])=>(Array.isArray(t)?t:[]).reduce((e,n)=>{let s=String(n?.suggestedEnvVar||"").trim(),o=String(n?.value||"");return!s||!o||(e[s]=o),e},{});var qt=P.bind(T),Yk=[{key:"gatewayConfig",label:"Gateway Config",icon:"\u2699\uFE0F",description:"openclaw.json configuration",showFiles:!0},{key:"envFiles",label:"Environment Files",icon:"\u{1F510}",description:".env files with variables",showFiles:!0},{key:"workspaceFiles",label:"Workspace Files",icon:"\u{1F4C4}",description:"Prompt files (AGENTS.md, SOUL.md, etc.)",showFiles:!0},{key:"skills",label:"Skills",icon:"\u{1F6E0}",description:"Custom skill definitions",showFiles:!0},{key:"cronJobs",label:"Cron Jobs",icon:"\u23F0",description:"Scheduled tasks",showFiles:!0},{key:"webhooks",label:"Hooks",icon:"\u{1F517}",description:"Webhook mappings and internal hooks",showDirs:!0},{key:"memory",label:"Memory",icon:"\u{1F9E0}",description:"Agent memory and embeddings",showDirs:!0}],Xk=({category:t,data:e})=>{let[n,s]=y(!1);if(!e?.found)return null;let o=t.key==="webhooks",r=Array.isArray(e.transformWarnings)?e.transformWarnings:[],i=new Set(r.map(d=>String(d.actualPath||"").trim()).filter(Boolean).map(d=>d.split("/").slice(0,-2).join("/"))),a=[...e.jobNames||[],...e.hookNames||[],...e.files||[],...(e.dirs||[]).filter(d=>!i.has(d)),...e.extraMarkdown||[]],l=typeof e.jobCount=="number"&&e.jobCount>0?e.jobCount:typeof e.hookCount=="number"&&e.hookCount>0?e.hookCount:a.length,c=typeof e.warningCount=="number"?e.warningCount:r.length;return qt`
- `},Sg=({scanResult:t,scanning:e,error:n,onApprove:s,onShowSecretReview:o,onBack:r})=>{if(e)return qt` + `},Cg=({scanResult:t,scanning:e,error:n,onApprove:s,onShowSecretReview:o,onBack:r})=>{if(e)return qt`
<${Ce} />

Scanning repository...

@@ -270,8 +270,8 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa
- ${qk.map(l=>qt` - <${Jk} + ${Yk.map(l=>qt` + <${Xk} key=${l.key} category=${l} data=${t[l.key]} @@ -332,7 +332,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa Review and extract to environment variables

- <${Z} + <${Y} onClick=${o} tone="primary" size="sm" @@ -343,14 +343,14 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa `}
- <${Z} + <${Y} onClick=${r} tone="secondary" size="md" idleLabel="Back" className="w-full" /> - <${Z} + <${Y} onClick=${()=>s(ka(t.secrets))} loading=${e} tone="primary" @@ -383,7 +383,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa ${l?"Hide":"Show"} `:null}
- `};var md=P.bind(T),Zk=t=>{let e=String(t||"").trim();return!!e&&e!=="placeholder"},Yk=({item:t,value:e,onInput:n})=>md` + `};var md=P.bind(T),Qk=t=>{let e=String(t||"").trim();return!!e&&e!=="placeholder"},eS=({item:t,value:e,onInput:n})=>md`
@@ -402,7 +402,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa inputClass="w-full bg-field border border-border rounded-lg px-3 py-2 text-xs text-body outline-none focus:border-fg-muted font-mono" />
- `,Cg=({placeholderReview:t,vals:e,setValue:n,onContinue:s})=>{let o=Array.isArray(t?.vars)?t.vars:[],i=F(()=>o.filter(a=>!Zk(e[a.key])).map(a=>a.key),[o,e]).length;return o.length===0?null:md` + `,_g=({placeholderReview:t,vals:e,setValue:n,onContinue:s})=>{let o=Array.isArray(t?.vars)?t.vars:[],i=F(()=>o.filter(a=>!Qk(e[a.key])).map(a=>a.key),[o,e]).length;return o.length===0?null:md`

Add Missing Env Vars

@@ -410,7 +410,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa
${o.map(a=>md` - <${Yk} + <${eS} key=${a.key} item=${a} value=${String(e[a.key]||"")==="placeholder"?"":e[a.key]||""} @@ -426,7 +426,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa
- <${Z} + <${Y} onClick=${s} tone="primary" size="md" @@ -435,7 +435,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa />
- `};var Pn=P.bind(T),Xk=({secret:t,selected:e,onToggle:n,envVarName:s,onEnvVarChange:o})=>Pn` + `};var Pn=P.bind(T),tS=({secret:t,selected:e,onToggle:n,envVarName:s,onEnvVarChange:o})=>Pn`
@@ -485,7 +485,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa
`}
- `,_g=({secrets:t=[],onApprove:e,onBack:n,loading:s,error:o})=>{let[r,i]=y(()=>{let u={};for(let p of t)u[p.configPath]={selected:p.confidence==="high",envVarName:p.suggestedEnvVar||""};return u}),a=q(u=>{i(p=>({...p,[u]:{...p[u],selected:!p[u]?.selected}}))},[]),l=q((u,p)=>{i(f=>({...f,[u]:{...f[u],envVarName:p}}))},[]),c=Object.values(r).filter(u=>u.selected).length,d=()=>{let u=ka(t.map(p=>({...p,confidence:r[p.configPath]?.selected?"high":"medium",suggestedEnvVar:r[p.configPath]?.envVarName||p.suggestedEnvVar})));e(u)};return s?Pn` + `,Ag=({secrets:t=[],onApprove:e,onBack:n,loading:s,error:o})=>{let[r,i]=y(()=>{let u={};for(let p of t)u[p.configPath]={selected:p.confidence==="high",envVarName:p.suggestedEnvVar||""};return u}),a=q(u=>{i(p=>({...p,[u]:{...p[u],selected:!p[u]?.selected}}))},[]),l=q((u,p)=>{i(f=>({...f,[u]:{...f[u],envVarName:p}}))},[]),c=Object.values(r).filter(u=>u.selected).length,d=()=>{let u=ka(t.map(p=>({...p,confidence:r[p.configPath]?.selected?"high":"medium",suggestedEnvVar:r[p.configPath]?.envVarName||p.suggestedEnvVar})));e(u)};return s?Pn`
<${Ce} />

Applying import...

@@ -510,7 +510,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa
${t.map(u=>Pn` - <${Xk} + <${tS} key=${u.configPath} secret=${u} selected=${r[u.configPath]?.selected||!1} @@ -522,14 +522,14 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa
- <${Z} + <${Y} onClick=${n} tone="secondary" size="md" idleLabel="Back" className="w-full" /> - <${Z} + <${Y} onClick=${d} tone="primary" size="md" @@ -538,7 +538,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa />
- `};var Mg=P.bind(T),Ag=({groups:t,step:e,isPreStep:n,isSetupStep:s,isPairingStep:o,stepNumber:r,activeStepLabel:i})=>{let a=[...t,{id:"setup",title:"Initializing"},{id:"pairing",title:"Pairing"}];return Mg` + `};var Mg=P.bind(T),Tg=({groups:t,step:e,isPreStep:n,isSetupStep:s,isPairingStep:o,stepNumber:r,activeStepLabel:i})=>{let a=[...t,{id:"setup",title:"Initializing"},{id:"pairing",title:"Pairing"}];return Mg`
`})}
- `};var Tg=P.bind(T),Pg=[{label:"\u{1F6E1}\uFE0F Safety tip",text:"Be careful what you give access to. Read access is always safer than write access."},{label:"\u{1F9E0} Best practice",text:"Trust but verify. Your agent may not always know what it's doing, so check the results."},{label:"\u{1F4A1} Idea",text:"Ask your agent to create a morning briefing for you."},{label:"\u{1F9E0} Best practice",text:"Ask your agent to review its own code and make sure it's doing what you want it to do."},{label:"\u{1F4A1} Idea",text:"Tell your agent to review the latest news and provide a summary."},{label:"\u{1F6E1}\uFE0F Safety tip",text:"Be incredibly careful installing skills from the internet - they may contain malicious code."}],Rg=({error:t,loading:e,onRetry:n,onBack:s})=>{let[o,r]=y(0);if(L(()=>{if(t||!e)return;let a=setInterval(()=>{r(l=>(l+1)%Pg.length)},5200);return()=>clearInterval(a)},[t,e]),t)return Tg` + `};var Pg=P.bind(T),Rg=[{label:"\u{1F6E1}\uFE0F Safety tip",text:"Be careful what you give access to. Read access is always safer than write access."},{label:"\u{1F9E0} Best practice",text:"Trust but verify. Your agent may not always know what it's doing, so check the results."},{label:"\u{1F4A1} Idea",text:"Ask your agent to create a morning briefing for you."},{label:"\u{1F9E0} Best practice",text:"Ask your agent to review its own code and make sure it's doing what you want it to do."},{label:"\u{1F4A1} Idea",text:"Tell your agent to review the latest news and provide a summary."},{label:"\u{1F6E1}\uFE0F Safety tip",text:"Be incredibly careful installing skills from the internet - they may contain malicious code."}],Lg=({error:t,loading:e,onRetry:n,onBack:s})=>{let[o,r]=y(0);if(L(()=>{if(t||!e)return;let a=setInterval(()=>{r(l=>(l+1)%Rg.length)},5200);return()=>clearInterval(a)},[t,e]),t)return Pg`

Setup failed

Fix the values and try again.

@@ -596,7 +596,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa ${e?"Retrying...":"Retry"}
- `;let i=Pg[o];return Tg` + `;let i=Rg[o];return Pg`
- `};var Qk=P.bind(T),Lg={success:"bg-green-500/10 text-status-success-muted",warning:"bg-yellow-500/10 text-status-warning-muted",danger:"bg-red-500/10 text-status-error-muted",neutral:"bg-gray-500/10 text-fg-muted",info:"bg-blue-500/10 text-blue-400",accent:"bg-purple-500/10 text-purple-400",cyan:"bg-cyan-500/10 text-cyan-400",secondary:"bg-indigo-500/10 text-indigo-300"},ae=({tone:t="neutral",children:e})=>Qk` - + `};var nS=P.bind(T),Eg={success:"bg-green-500/10 text-status-success-muted",warning:"bg-yellow-500/10 text-status-warning-muted",danger:"bg-red-500/10 text-status-error-muted",neutral:"bg-gray-500/10 text-fg-muted",info:"bg-blue-500/10 text-blue-400",accent:"bg-purple-500/10 text-purple-400",cyan:"bg-cyan-500/10 text-cyan-400",secondary:"bg-indigo-500/10 text-indigo-300"},le=({tone:t="neutral",children:e})=>nS` + ${e} -`;function tS(t,e){for(var n in e)t[n]=e[n];return t}function Eg(t,e){for(var n in t)if(n!=="__source"&&!(n in e))return!0;for(var s in e)if(s!=="__source"&&t[s]!==e[s])return!0;return!1}function Ig(t,e){this.props=t,this.context=e}(Ig.prototype=new hn).isPureReactComponent=!0,Ig.prototype.shouldComponentUpdate=function(t,e){return Eg(this.props,t)||Eg(this.state,e)};var Dg=Se.__b;Se.__b=function(t){t.type&&t.type.__f&&t.ref&&(t.props.ref=t.ref,t.ref=null),Dg&&Dg(t)};var xL=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911;var nS=Se.__e;Se.__e=function(t,e,n,s){if(t.then){for(var o,r=e;r=r.__;)if((o=r.__c)&&o.__c)return e.__e==null&&(e.__e=n.__e,e.__k=n.__k),o.__c(t,e)}nS(t,e,n,s)};var Ng=Se.unmount;function Vg(t,e,n){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach(function(s){typeof s.__c=="function"&&s.__c()}),t.__c.__H=null),(t=tS({},t)).__c!=null&&(t.__c.__P===n&&(t.__c.__P=e),t.__c.__e=!0,t.__c=null),t.__k=t.__k&&t.__k.map(function(s){return Vg(s,e,n)})),t}function jg(t,e,n){return t&&n&&(t.__v=null,t.__k=t.__k&&t.__k.map(function(s){return jg(s,e,n)}),t.__c&&t.__c.__P===e&&(t.__e&&n.appendChild(t.__e),t.__c.__e=!0,t.__c.__P=n)),t}function gd(){this.__u=0,this.o=null,this.__b=null}function zg(t){var e=t.__&&t.__.__c;return e&&e.__a&&e.__a(t)}function Sa(){this.i=null,this.l=null}Se.unmount=function(t){var e=t.__c;e&&(e.__z=!0),e&&e.__R&&e.__R(),e&&32&t.__u&&(t.type=null),Ng&&Ng(t)},(gd.prototype=new hn).__c=function(t,e){var n=e.__c,s=this;s.o==null&&(s.o=[]),s.o.push(n);var o=zg(s.__v),r=!1,i=function(){r||s.__z||(r=!0,n.__R=null,o?o(l):l())};n.__R=i;var a=n.__P;n.__P=null;var l=function(){if(!--s.__u){if(s.state.__a){var c=s.state.__a;s.__v.__k[0]=jg(c,c.__c.__P,c.__c.__O)}var d;for(s.setState({__a:s.__b=null});d=s.o.pop();)d.__P=a,d.forceUpdate()}};s.__u++||32&e.__u||s.setState({__a:s.__b=s.__v.__k[0]}),t.then(i,i)},gd.prototype.componentWillUnmount=function(){this.o=[]},gd.prototype.render=function(t,e){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),s=this.__v.__k[0].__c;this.__v.__k[0]=Vg(this.__b,n,s.__O=s.__P)}this.__b=null}var o=e.__a&&T(ln,null,t.fallback);return o&&(o.__u&=-33),[T(ln,null,e.__a?null:t.children),o]};var Og=function(t,e,n){if(++n[1]===n[0]&&t.l.delete(e),t.props.revealOrder&&(t.props.revealOrder[0]!=="t"||!t.l.size))for(n=t.i;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),e.h.removeChild(o)}}}wo(T(sS,{context:e.context},t.__v),e.v)}function Do(t,e){var n=T(oS,{__v:t,h:e});return n.containerInfo=e,n}(Sa.prototype=new hn).__a=function(t){var e=this,n=zg(e.__v),s=e.l.get(t);return s[0]++,function(o){var r=function(){e.props.revealOrder?(s.push(o),Og(e,t,s)):o()};n?n(r):r()}},Sa.prototype.render=function(t){this.i=null,this.l=new Map;var e=Lr(t.children);t.revealOrder&&t.revealOrder[0]==="b"&&e.reverse();for(var n=e.length;n--;)this.l.set(e[n],this.i=[1,0,this.i]);return t.children},Sa.prototype.componentDidUpdate=Sa.prototype.componentDidMount=function(){var t=this;this.l.forEach(function(e,n){Og(t,n,e)})};var rS=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,iS=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,aS=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,lS=/[A-Z0-9]/g,cS=typeof document<"u",dS=function(t){return(typeof Symbol<"u"&&typeof Symbol()=="symbol"?/fil|che|rad/:/fil|che|ra/).test(t)};hn.prototype.isReactComponent=!0,["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(hn.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})});var Bg=Se.event;Se.event=function(t){return Bg&&(t=Bg(t)),t.persist=function(){},t.isPropagationStopped=function(){return this.cancelBubble},t.isDefaultPrevented=function(){return this.defaultPrevented},t.nativeEvent=t};var Ug,uS={configurable:!0,get:function(){return this.class}},Fg=Se.vnode;Se.vnode=function(t){typeof t.type=="string"&&(function(e){var n=e.props,s=e.type,o={},r=s.indexOf("-")==-1;for(var i in n){var a=n[i];if(!(i==="value"&&"defaultValue"in n&&a==null||cS&&i==="children"&&s==="noscript"||i==="class"||i==="className")){var l=i.toLowerCase();i==="defaultValue"&&"value"in n&&n.value==null?i="value":i==="download"&&a===!0?a="":l==="translate"&&a==="no"?a=!1:l[0]==="o"&&l[1]==="n"?l==="ondoubleclick"?i="ondblclick":l!=="onchange"||s!=="input"&&s!=="textarea"||dS(n.type)?l==="onfocus"?i="onfocusin":l==="onblur"?i="onfocusout":aS.test(i)&&(i=l):l=i="oninput":r&&iS.test(i)?i=i.replace(lS,"-$&").toLowerCase():a===null&&(a=void 0),l==="oninput"&&o[i=l]&&(i="oninputCapture"),o[i]=a}}s=="select"&&(o.multiple&&Array.isArray(o.value)&&(o.value=Lr(n.children).forEach(function(c){c.props.selected=o.value.indexOf(c.props.value)!=-1})),o.defaultValue!=null&&(o.value=Lr(n.children).forEach(function(c){c.props.selected=o.multiple?o.defaultValue.indexOf(c.props.value)!=-1:o.defaultValue==c.props.value}))),n.class&&!n.className?(o.class=n.class,Object.defineProperty(o,"className",uS)):n.className&&(o.class=o.className=n.className),e.props=o})(t),t.$$typeof=rS,Fg&&Fg(t)};var Hg=Se.__r;Se.__r=function(t){Hg&&Hg(t),Ug=t.__c};var Wg=Se.diffed;Se.diffed=function(t){Wg&&Wg(t);var e=t.props,n=t.__e;n!=null&&t.type==="textarea"&&"value"in e&&e.value!==n.value&&(n.value=e.value==null?"":e.value),Ug=null};var Kg=P.bind(T),Ur=8,bd=8,pS=400,Gg=0,qg=t=>{if(!t||typeof document>"u")return!1;let e=document.activeElement;return!e||!t.contains(e)?!1:typeof e.matches=="function"&&e.matches(":focus-visible")},fS=(t,e)=>{if(!t)return null;let n=t.getBoundingClientRect(),s=e?.getBoundingClientRect?.()||{width:0,height:0},o=Ur+s.width/2,r=window.innerWidth-Ur-s.width/2,i=n.left+n.width/2,a=s.width?Math.min(Math.max(i,o),r):i,l=n.bottom+bd,c=n.top-bd-s.height>=Ur;return l+s.height+Ur>window.innerHeight&&c&&(l=n.top-bd-s.height),{left:`${a}px`,top:`${Math.max(Ur,l)}px`}},Bt=({text:t="",widthClass:e="w-64",tooltipClassName:n="",triggerClassName:s="",children:o=null,disabled:r=!1,delay:i=0})=>{let a=ee(null),l=ee(null),c=ee(null),d=ee(!1),[u,p]=y(!1),[f,g]=y(null);L(()=>{if(!u||r||!t)return;let b=()=>{let x=fS(a.current,l.current);x&&g(x)};return b(),window.addEventListener("resize",b),window.addEventListener("scroll",b,!0),()=>{window.removeEventListener("resize",b),window.removeEventListener("scroll",b,!0)}},[u,r,t]);let m=()=>{if(r||!t)return;let b=Date.now()-Gga.current?.matches?.(":hover")||qg(a.current);if(i>0&&!b)clearTimeout(c.current),c.current=setTimeout(()=>{x()&&p(!0)},i);else{if(!x())return;p(!0)}},h=()=>{clearTimeout(c.current),u&&(Gg=Date.now()),p(!1)};return Kg` +`;function oS(t,e){for(var n in e)t[n]=e[n];return t}function Ig(t,e){for(var n in t)if(n!=="__source"&&!(n in e))return!0;for(var s in e)if(s!=="__source"&&t[s]!==e[s])return!0;return!1}function Dg(t,e){this.props=t,this.context=e}(Dg.prototype=new hn).isPureReactComponent=!0,Dg.prototype.shouldComponentUpdate=function(t,e){return Ig(this.props,t)||Ig(this.state,e)};var Ng=Se.__b;Se.__b=function(t){t.type&&t.type.__f&&t.ref&&(t.props.ref=t.ref,t.ref=null),Ng&&Ng(t)};var kL=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911;var rS=Se.__e;Se.__e=function(t,e,n,s){if(t.then){for(var o,r=e;r=r.__;)if((o=r.__c)&&o.__c)return e.__e==null&&(e.__e=n.__e,e.__k=n.__k),o.__c(t,e)}rS(t,e,n,s)};var Og=Se.unmount;function jg(t,e,n){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach(function(s){typeof s.__c=="function"&&s.__c()}),t.__c.__H=null),(t=oS({},t)).__c!=null&&(t.__c.__P===n&&(t.__c.__P=e),t.__c.__e=!0,t.__c=null),t.__k=t.__k&&t.__k.map(function(s){return jg(s,e,n)})),t}function zg(t,e,n){return t&&n&&(t.__v=null,t.__k=t.__k&&t.__k.map(function(s){return zg(s,e,n)}),t.__c&&t.__c.__P===e&&(t.__e&&n.appendChild(t.__e),t.__c.__e=!0,t.__c.__P=n)),t}function gd(){this.__u=0,this.o=null,this.__b=null}function Ug(t){var e=t.__&&t.__.__c;return e&&e.__a&&e.__a(t)}function Sa(){this.i=null,this.l=null}Se.unmount=function(t){var e=t.__c;e&&(e.__z=!0),e&&e.__R&&e.__R(),e&&32&t.__u&&(t.type=null),Og&&Og(t)},(gd.prototype=new hn).__c=function(t,e){var n=e.__c,s=this;s.o==null&&(s.o=[]),s.o.push(n);var o=Ug(s.__v),r=!1,i=function(){r||s.__z||(r=!0,n.__R=null,o?o(l):l())};n.__R=i;var a=n.__P;n.__P=null;var l=function(){if(!--s.__u){if(s.state.__a){var c=s.state.__a;s.__v.__k[0]=zg(c,c.__c.__P,c.__c.__O)}var d;for(s.setState({__a:s.__b=null});d=s.o.pop();)d.__P=a,d.forceUpdate()}};s.__u++||32&e.__u||s.setState({__a:s.__b=s.__v.__k[0]}),t.then(i,i)},gd.prototype.componentWillUnmount=function(){this.o=[]},gd.prototype.render=function(t,e){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),s=this.__v.__k[0].__c;this.__v.__k[0]=jg(this.__b,n,s.__O=s.__P)}this.__b=null}var o=e.__a&&T(ln,null,t.fallback);return o&&(o.__u&=-33),[T(ln,null,e.__a?null:t.children),o]};var Bg=function(t,e,n){if(++n[1]===n[0]&&t.l.delete(e),t.props.revealOrder&&(t.props.revealOrder[0]!=="t"||!t.l.size))for(n=t.i;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),e.h.removeChild(o)}}}wo(T(iS,{context:e.context},t.__v),e.v)}function Do(t,e){var n=T(aS,{__v:t,h:e});return n.containerInfo=e,n}(Sa.prototype=new hn).__a=function(t){var e=this,n=Ug(e.__v),s=e.l.get(t);return s[0]++,function(o){var r=function(){e.props.revealOrder?(s.push(o),Bg(e,t,s)):o()};n?n(r):r()}},Sa.prototype.render=function(t){this.i=null,this.l=new Map;var e=Lr(t.children);t.revealOrder&&t.revealOrder[0]==="b"&&e.reverse();for(var n=e.length;n--;)this.l.set(e[n],this.i=[1,0,this.i]);return t.children},Sa.prototype.componentDidUpdate=Sa.prototype.componentDidMount=function(){var t=this;this.l.forEach(function(e,n){Bg(t,n,e)})};var lS=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,cS=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,dS=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,uS=/[A-Z0-9]/g,pS=typeof document<"u",fS=function(t){return(typeof Symbol<"u"&&typeof Symbol()=="symbol"?/fil|che|rad/:/fil|che|ra/).test(t)};hn.prototype.isReactComponent=!0,["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(hn.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})});var Fg=Se.event;Se.event=function(t){return Fg&&(t=Fg(t)),t.persist=function(){},t.isPropagationStopped=function(){return this.cancelBubble},t.isDefaultPrevented=function(){return this.defaultPrevented},t.nativeEvent=t};var Kg,hS={configurable:!0,get:function(){return this.class}},Hg=Se.vnode;Se.vnode=function(t){typeof t.type=="string"&&(function(e){var n=e.props,s=e.type,o={},r=s.indexOf("-")==-1;for(var i in n){var a=n[i];if(!(i==="value"&&"defaultValue"in n&&a==null||pS&&i==="children"&&s==="noscript"||i==="class"||i==="className")){var l=i.toLowerCase();i==="defaultValue"&&"value"in n&&n.value==null?i="value":i==="download"&&a===!0?a="":l==="translate"&&a==="no"?a=!1:l[0]==="o"&&l[1]==="n"?l==="ondoubleclick"?i="ondblclick":l!=="onchange"||s!=="input"&&s!=="textarea"||fS(n.type)?l==="onfocus"?i="onfocusin":l==="onblur"?i="onfocusout":dS.test(i)&&(i=l):l=i="oninput":r&&cS.test(i)?i=i.replace(uS,"-$&").toLowerCase():a===null&&(a=void 0),l==="oninput"&&o[i=l]&&(i="oninputCapture"),o[i]=a}}s=="select"&&(o.multiple&&Array.isArray(o.value)&&(o.value=Lr(n.children).forEach(function(c){c.props.selected=o.value.indexOf(c.props.value)!=-1})),o.defaultValue!=null&&(o.value=Lr(n.children).forEach(function(c){c.props.selected=o.multiple?o.defaultValue.indexOf(c.props.value)!=-1:o.defaultValue==c.props.value}))),n.class&&!n.className?(o.class=n.class,Object.defineProperty(o,"className",hS)):n.className&&(o.class=o.className=n.className),e.props=o})(t),t.$$typeof=lS,Hg&&Hg(t)};var Wg=Se.__r;Se.__r=function(t){Wg&&Wg(t),Kg=t.__c};var Vg=Se.diffed;Se.diffed=function(t){Vg&&Vg(t);var e=t.props,n=t.__e;n!=null&&t.type==="textarea"&&"value"in e&&e.value!==n.value&&(n.value=e.value==null?"":e.value),Kg=null};var Gg=P.bind(T),Ur=8,bd=8,mS=400,qg=0,Jg=t=>{if(!t||typeof document>"u")return!1;let e=document.activeElement;return!e||!t.contains(e)?!1:typeof e.matches=="function"&&e.matches(":focus-visible")},gS=(t,e)=>{if(!t)return null;let n=t.getBoundingClientRect(),s=e?.getBoundingClientRect?.()||{width:0,height:0},o=Ur+s.width/2,r=window.innerWidth-Ur-s.width/2,i=n.left+n.width/2,a=s.width?Math.min(Math.max(i,o),r):i,l=n.bottom+bd,c=n.top-bd-s.height>=Ur;return l+s.height+Ur>window.innerHeight&&c&&(l=n.top-bd-s.height),{left:`${a}px`,top:`${Math.max(Ur,l)}px`}},Bt=({text:t="",widthClass:e="w-64",tooltipClassName:n="",triggerClassName:s="",children:o=null,disabled:r=!1,delay:i=0})=>{let a=ee(null),l=ee(null),c=ee(null),d=ee(!1),[u,p]=y(!1),[f,g]=y(null);L(()=>{if(!u||r||!t)return;let b=()=>{let x=gS(a.current,l.current);x&&g(x)};return b(),window.addEventListener("resize",b),window.addEventListener("scroll",b,!0),()=>{window.removeEventListener("resize",b),window.removeEventListener("scroll",b,!0)}},[u,r,t]);let m=()=>{if(r||!t)return;let b=Date.now()-qga.current?.matches?.(":hover")||Jg(a.current);if(i>0&&!b)clearTimeout(c.current),c.current=setTimeout(()=>{x()&&p(!0)},i);else{if(!x())return;p(!0)}},h=()=>{clearTimeout(c.current),u&&(qg=Date.now()),p(!1)};return Gg` {d.current=!1}} onMouseEnter=${m} onMouseLeave=${h} - onFocusIn=${()=>{d.current||qg(a.current)&&m()}} + onFocusIn=${()=>{d.current||Jg(a.current)&&m()}} onFocusOut=${b=>{d.current=!1,!b.currentTarget.contains(b.relatedTarget)&&h()}} > ${o} - ${u&&!r&&t&&typeof document<"u"?Do(Kg` + ${u&&!r&&t&&typeof document<"u"?Do(Gg` `,document.body):null} - `};var xd=P.bind(T),Xe=({options:t=[],value:e,onChange:n=()=>{},className:s="",size:o="sm",fullWidth:r=!1})=>xd` + `};var xd=P.bind(T),Qe=({options:t=[],value:e,onChange:n=()=>{},className:s="",size:o="sm",fullWidth:r=!1})=>xd`
@@ -655,7 +655,7 @@ import"./chunks/chunk-72ZECFVW.js";var Tr,Se,qf,Pr,hs,Uf,Jf,Zf,Yf,Gc,jc,zc,Xf,oa `;return i.title?xd`<${Bt} text=${i.title} delay=${1e3} widthClass="w-auto max-w-64 whitespace-normal">${a}`:a})}
-`;var Me=P.bind(T),Ca=({className:t=""})=>Me` +`;var Ae=P.bind(T),Ca=({className:t=""})=>Ae` -`,nt=({className:t=""})=>Me` +`,Ze=({className:t=""})=>Ae` -`,No=({className:t=""})=>Me` +`,No=({className:t=""})=>Ae` -`;var Jg=({className:t=""})=>Me` +`;var Zg=({className:t=""})=>Ae` -`,Zg=({className:t=""})=>Me` +`,Yg=({className:t=""})=>Ae` -`,Yg=({className:t=""})=>Me` +`,Xg=({className:t=""})=>Ae` -`,Xg=({className:t=""})=>Me` +`,Qg=({className:t=""})=>Ae` -`,Qg=({className:t=""})=>Me` +`,eb=({className:t=""})=>Ae` -`,eb=({className:t=""})=>Me` +`,tb=({className:t=""})=>Ae` -`,tb=({className:t=""})=>Me` +`,nb=({className:t=""})=>Ae` -`,nb=({className:t=""})=>Me` +`,sb=({className:t=""})=>Ae` -`,_a=({className:t=""})=>Me` +`,_a=({className:t=""})=>Ae` -`,sb=({className:t=""})=>Me` +`,ob=({className:t=""})=>Ae` -`,ob=({className:t=""})=>Me` +`,rb=({className:t=""})=>Ae` -`,rb=({className:t=""})=>Me` +`,ib=({className:t=""})=>Ae` -`,ib=({className:t=""})=>Me` +`,ab=({className:t=""})=>Ae` -`,Ma=({className:t=""})=>Me` +`,Aa=({className:t=""})=>Ae` -`,ab=({className:t=""})=>Me` +`,lb=({className:t=""})=>Ae` -`,lb=({className:t=""})=>Me` +`,cb=({className:t=""})=>Ae` -`,cb=({className:t=""})=>Me` +`,db=({className:t=""})=>Ae` -`,db=({className:t=""})=>Me` +`,ub=({className:t=""})=>Ae` -`,ub=({className:t=""})=>Me` +`,pb=({className:t=""})=>Ae` -`,pb=({className:t=""})=>Me` +`,fb=({className:t=""})=>Ae` -`,yd=({className:t=""})=>Me` +`,yd=({className:t=""})=>Ae` -`,fb=({className:t=""})=>Me` +`,hb=({className:t=""})=>Ae` -`,Oo=({className:t=""})=>Me` +`,Oo=({className:t=""})=>Ae` -`,Aa=({className:t=""})=>Me` +`,Ma=({className:t=""})=>Ae` -`,Kr=({className:t=""})=>Me` +`,Kr=({className:t=""})=>Ae` -`,Gr=({className:t=""})=>Me` +`,Gr=({className:t=""})=>Ae` -`,hb=({className:t=""})=>Me` +`,mb=({className:t=""})=>Ae` -`,Us=({className:t=""})=>Me` +`,Ks=({className:t=""})=>Ae` -`,mb=({className:t=""})=>Me` +`,gb=({className:t=""})=>Ae` -`,gb=({className:t=""})=>Me` +`,bb=({className:t=""})=>Ae` -`,Ta=({className:t=""})=>Me` +`,Ta=({className:t=""})=>Ae` -`;var bb=({className:t=""})=>Me` +`;var xb=({className:t=""})=>Ae` -`,xb=({className:t=""})=>Me` +`,yb=({className:t=""})=>Ae` -`;var Pa=({className:t=""})=>Me` +`;var Pa=({className:t=""})=>Ae` -`;var Bo=P.bind(T),hS=({className:t=""})=>Bo` +`;var Bo=P.bind(T),bS=({className:t=""})=>Bo`
`:null}
-`},We=({children:t=null,onClick:e=()=>{},className:n="",iconSrc:s="",disabled:o=!1})=>Bo` +`},Oe=({children:t=null,onClick:e=()=>{},className:n="",iconSrc:s="",disabled:o=!1})=>Bo` + `} + /> +
+

+ Click "Generate QR" to run channel login and capture terminal output. +

+
- <${Z} + <${Y} onClick=${c} disabled=${w} tone="secondary" size="md" idleLabel=${l} /> - <${Z} + <${Y} onClick=${S} disabled=${!m||h||!!b||!String(x||"").trim()} loading=${w} @@ -5645,8 +5721,8 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s loadingLabel=${a} />
- - `};var a3=P.bind(T),gw=({visible:t=!1,card:e=null,onClose:n=()=>{},onComplete:s=()=>{}})=>{let o=async({selectedSession:r,message:i})=>{if(!e?.id)return!1;try{await nm({cardId:e.id,sessionId:r?.sessionId||"",replyChannel:r?.replyChannel||"",replyTo:r?.replyTo||"",prompt:i});try{await pa({cardId:e.id,status:"fixed"}),N("Doctor fix request sent and finding marked fixed","success")}catch(a){N(a.message||"Doctor fix request sent, but could not mark the finding fixed","warning")}return await s(),!0}catch(a){return N(a.message||"Could not send Doctor fix request","error"),!1}};return a3` + + `};var p3=P.bind(T),yw=({visible:t=!1,card:e=null,onClose:n=()=>{},onComplete:s=()=>{}})=>{let o=async({selectedSession:r,message:i})=>{if(!e?.id)return!1;try{await nm({cardId:e.id,sessionId:r?.sessionId||"",replyChannel:r?.replyChannel||"",replyTo:r?.replyTo||"",prompt:i});try{await pa({cardId:e.id,status:"fixed"}),I("Doctor fix request sent and finding marked fixed","success")}catch(a){I(a.message||"Doctor fix request sent, but could not mark the finding fixed","warning")}return await s(),!0}catch(a){return I(a.message||"Could not send Doctor fix request","error"),!1}};return p3` <${mc} visible=${t} title="Ask agent to fix" @@ -5658,7 +5734,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s onClose=${n} onSubmit=${o} /> - `};var $t=P.bind(T),lf=15e3,bw=2e3,l3=()=>$t` + `};var $t=P.bind(T),lf=15e3,vw=2e3,f3=()=>$t` {r.current&&(r.current.destroy(),r.current=null)}},[f,i,s d="M8 20V14H16V20H19V4H5V20H8ZM10 20H14V16H10V20ZM21 20H23V22H1V20H3V3C3 2.44772 3.44772 2 4 2H20C20.5523 2 21 2.44772 21 3V20ZM11 8V6H13V8H15V10H13V12H11V10H9V8H11Z" > -`,xw=({isActive:t=!1,onOpenFile:e=()=>{}})=>{let n=Re(ua,lf,{enabled:t}),s=n.data?.status||null,o=s?.runInProgress?bw:lf,r=Re(()=>em(10),o,{enabled:t}),[i,a]=y("all"),[l,c]=y("open"),[d,u]=y(0),[p,f]=y(null),[g,m]=y(""),h=r.data?.runs||[],b=String(s?.activeRunId||""),x=String(i||""),w=x!==""&&x!=="all"&&!h.some(J=>String(J.id||"")===x)&&(g===x||s?.runInProgress&&b===x)?{id:Number(x||0),status:"running",summary:"",priorityCounts:{P0:0,P1:0,P2:0},statusCounts:{open:0,dismissed:0,fixed:0}}:null,$=w?[w,...h]:h,S=i!=="all"&&!!b&&String(i||"")===b,C=i==="all"?null:$.find(J=>String(J.id||"")===String(i||""))||null,_=Re(()=>tm({runId:i||"all"}),s?.runInProgress||C?.status==="running"?bw:lf,{enabled:t}),k=_.data?.cards||[];L(()=>{t&&(n.refresh(),r.refresh())},[t]),L(()=>{if(!h.length){if(g&&x===g||S&&s?.runInProgress)return;i!=="all"&&a("all");return}i==="all"||h.some(oe=>String(oe.id||"")===String(i||""))||S&&s?.runInProgress||a("all")},[h,x,i,S,g,s?.runInProgress]),L(()=>{if(!g)return;if(i!==g){a(g);return}let J=h.some(ce=>String(ce.id||"")===String(g||"")),oe=!!b&&b===g&&!!s?.runInProgress;!J&&!oe||m("")},[b,s?.runInProgress,g,h,i]),L(()=>{_.refresh()},[i]);let A=C?.status==="running"||S&&s?.runInProgress,O=F(()=>A?"":C?.summary||"",[C,A]),D=F(()=>uw(),[]),z=F(()=>lw(s?.changeSummary||null),[s]),E=F(()=>s?.runInProgress||s?.needsInitialRun?!0:Number(s?.changeSummary?.changedFilesCount||0)>0,[s]),M=E?"":"No workspace changes since the last completed Drift Doctor run.",R=F(()=>fc(s,0),[s]),B=F(()=>iw(s),[s]),I=F(()=>aw(s),[s]),U=F(()=>hc(s),[s]),W=!!s?.lastRunAt,G=h.length>0,se=r.data!==null||r.error!==null,K=_.data!==null||_.error!==null,j=!se||G&&!K,X=F(()=>l==="all"?k:k.filter(J=>String(J?.status||"open").trim().toLowerCase()===l),[k,l]),de=F(()=>k.filter(J=>String(J?.status||"open").trim().toLowerCase()==="open"),[k]),le=F(()=>$.slice(0,2),[$]),ie=F(()=>$.slice(2),[$]),ne=F(()=>i==="all"?"":ie.some(J=>String(J.id||"")===String(i||""))?String(i||""):"",[ie,i]),xe=(J=!1)=>["inline-flex items-center gap-2 rounded-full border px-3 py-1.5 text-xs transition-colors",J?"border-cyan-500/40 bg-cyan-500/10 text-status-info shadow-[0_0_0_1px_rgba(34,211,238,0.08)]":"border-border bg-field text-body hover:border-fg-muted hover:text-bright"].join(" "),he=(J="neutral")=>J==="success"?"bg-green-400":J==="warning"?"bg-yellow-400":J==="danger"?"bg-red-400":J==="cyan"?"ac-status-dot ac-status-dot--info":"bg-gray-500",ue=!j&&(h.length>0||!!g||!!b||!!s?.runInProgress),me=async()=>{try{let J=await Qh();if(N(J?.reusedPreviousRun?"No workspace changes since the last scan; reused previous findings":"Doctor run started","success"),J?.runId){let oe=String(J.runId);m(oe),a(oe)}n.refresh(),r.refresh(),_.refresh(),setTimeout(n.refresh,1200),setTimeout(r.refresh,1200),setTimeout(_.refresh,1200)}catch(J){N(J.message||"Could not start Doctor run","error")}},V=async(J,oe)=>{if(!(!J?.id||d))try{u(J.id),await pa({cardId:J.id,status:oe}),N("Doctor card updated","success"),await _.refresh(),await r.refresh(),await n.refresh()}catch(ce){N(ce.message||"Could not update Doctor card","error")}finally{u(0)}};return $t` +`,$w=({isActive:t=!1,onOpenFile:e=()=>{}})=>{let n=Ee(ua,lf,{enabled:t}),s=n.data?.status||null,o=s?.runInProgress?vw:lf,r=Ee(()=>em(10),o,{enabled:t}),[i,a]=y("all"),[l,c]=y("open"),[d,u]=y(0),[p,f]=y(null),[g,m]=y(""),h=r.data?.runs||[],b=String(s?.activeRunId||""),x=String(i||""),w=x!==""&&x!=="all"&&!h.some(J=>String(J.id||"")===x)&&(g===x||s?.runInProgress&&b===x)?{id:Number(x||0),status:"running",summary:"",priorityCounts:{P0:0,P1:0,P2:0},statusCounts:{open:0,dismissed:0,fixed:0}}:null,$=w?[w,...h]:h,S=i!=="all"&&!!b&&String(i||"")===b,C=i==="all"?null:$.find(J=>String(J.id||"")===String(i||""))||null,_=Ee(()=>tm({runId:i||"all"}),s?.runInProgress||C?.status==="running"?vw:lf,{enabled:t}),k=_.data?.cards||[];L(()=>{t&&(n.refresh(),r.refresh())},[t]),L(()=>{if(!h.length){if(g&&x===g||S&&s?.runInProgress)return;i!=="all"&&a("all");return}i==="all"||h.some(ie=>String(ie.id||"")===String(i||""))||S&&s?.runInProgress||a("all")},[h,x,i,S,g,s?.runInProgress]),L(()=>{if(!g)return;if(i!==g){a(g);return}let J=h.some(de=>String(de.id||"")===String(g||"")),ie=!!b&&b===g&&!!s?.runInProgress;!J&&!ie||m("")},[b,s?.runInProgress,g,h,i]),L(()=>{_.refresh()},[i]);let A=C?.status==="running"||S&&s?.runInProgress,D=F(()=>A?"":C?.summary||"",[C,A]),N=F(()=>hw(),[]),U=F(()=>uw(s?.changeSummary||null),[s]),O=F(()=>s?.runInProgress||s?.needsInitialRun?!0:Number(s?.changeSummary?.changedFilesCount||0)>0,[s]),M=O?"":"No workspace changes since the last completed Drift Doctor run.",R=F(()=>fc(s,0),[s]),B=F(()=>cw(s),[s]),E=F(()=>dw(s),[s]),G=F(()=>hc(s),[s]),H=!!s?.lastRunAt,z=h.length>0,te=r.data!==null||r.error!==null,K=_.data!==null||_.error!==null,V=!te||z&&!K,Z=F(()=>l==="all"?k:k.filter(J=>String(J?.status||"open").trim().toLowerCase()===l),[k,l]),ue=F(()=>k.filter(J=>String(J?.status||"open").trim().toLowerCase()==="open"),[k]),re=F(()=>$.slice(0,2),[$]),oe=F(()=>$.slice(2),[$]),ne=F(()=>i==="all"?"":oe.some(J=>String(J.id||"")===String(i||""))?String(i||""):"",[oe,i]),me=(J=!1)=>["inline-flex items-center gap-2 rounded-full border px-3 py-1.5 text-xs transition-colors",J?"border-cyan-500/40 bg-cyan-500/10 text-status-info shadow-[0_0_0_1px_rgba(34,211,238,0.08)]":"border-border bg-field text-body hover:border-fg-muted hover:text-bright"].join(" "),pe=(J="neutral")=>J==="success"?"bg-green-400":J==="warning"?"bg-yellow-400":J==="danger"?"bg-red-400":J==="cyan"?"ac-status-dot ac-status-dot--info":"bg-gray-500",ce=!V&&(h.length>0||!!g||!!b||!!s?.runInProgress),ge=async()=>{try{let J=await Qh();if(I(J?.reusedPreviousRun?"No workspace changes since the last scan; reused previous findings":"Doctor run started","success"),J?.runId){let ie=String(J.runId);m(ie),a(ie)}n.refresh(),r.refresh(),_.refresh(),setTimeout(n.refresh,1200),setTimeout(r.refresh,1200),setTimeout(_.refresh,1200)}catch(J){I(J.message||"Could not start Doctor run","error")}},j=async(J,ie)=>{if(!(!J?.id||d))try{u(J.id),await pa({cardId:J.id,status:ie}),I("Doctor card updated","success"),await _.refresh(),await r.refresh(),await n.refresh()}catch(de){I(de.message||"Could not update Doctor card","error")}finally{u(0)}};return $t`
- ${ue?$t` - <${Ne} + ${ce?$t` + <${Pe} title="Drift Doctor" actions=${$t` - <${Z} - onClick=${me} - disabled=${!E} + <${Y} + onClick=${ge} + disabled=${!O} loading=${!!s?.runInProgress} idleLabel="Run Drift Doctor" loadingLabel="Running..." @@ -5686,7 +5762,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s `} /> `:null} - ${j?$t` + ${V?$t`
<${Ce} className="h-4 w-4" /> @@ -5694,11 +5770,11 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s
`:null} - ${!j&&G?$t` + ${!V&&z?$t`
- <${pw} cards=${de} /> + <${mw} cards=${ue} />
- ${W?$t` + ${H?$t`
@@ -5709,7 +5785,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s - ${z} + ${U}
${B?$t` @@ -5717,10 +5793,10 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s class="bg-surface border border-border rounded-xl p-4 space-y-3" >
- ⚠️ ${I} + ⚠️ ${E}
- ${U.map(J=>$t` + ${G.map(J=>$t`
@@ -5766,7 +5842,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s
`:null} - ${ue?$t` + ${ce?$t`

Findings

@@ -5774,46 +5850,46 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s
- ${le.map(J=>{let oe=String(i||"")===String(J.id||""),ce=dw(J);return $t` + ${re.map(J=>{let ie=String(i||"")===String(J.id||""),de=fw(J);return $t` `})} - ${ie.length?$t` + ${oe.length?$t`
- ${O?$t` + ${D?$t`
{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s ${C?.id?`Run #${C.id} summary`:"Run summary"}

- ${O} + ${D}

`:null} @@ -5855,11 +5931,11 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s
`:null}
- <${hw} - cards=${X} + <${bw} + cards=${Z} busyCardId=${d} onAskAgentFix=${f} - onUpdateStatus=${V} + onUpdateStatus=${j} onOpenFile=${e} changedPaths=${s?.changeSummary?.changedPaths||[]} showRunMeta=${i==="all"} @@ -5868,12 +5944,12 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s
`:null} - ${!j&&!ue?$t` + ${!V&&!ce?$t`
- <${l3} /> + <${f3} />

Workspace health review @@ -5885,9 +5961,9 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s

- <${Z} - onClick=${me} - disabled=${!E} + <${Y} + onClick=${ge} + disabled=${!O} loading=${!!s?.runInProgress} size="lg" idleLabel="Run Drift Doctor" @@ -5902,21 +5978,21 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s
`:null} - <${gw} + <${yw} visible=${!!p} card=${p} onClose=${()=>f(null)} onComplete=${async()=>{await n.refresh(),await r.refresh(),await _.refresh()}} />
- `};var c3=P.bind(T),cf=({onNavigateToBrowseFile:t=()=>{}})=>c3` + `};var h3=P.bind(T),cf=({onNavigateToBrowseFile:t=()=>{}})=>h3`
- <${xw} + <${$w} isActive=${!0} onOpenFile=${(e,n={})=>{let s=`workspace/${String(e||"").trim().replace(/^workspace\//,"")}`;t(s,{view:"edit",...n.line?{line:n.line}:{},...n.lineEnd?{lineEnd:n.lineEnd}:{}})}} />
-`;var d3=P.bind(T),zn=({header:t,children:e})=>d3` +`;var m3=P.bind(T),Un=({header:t,children:e})=>m3`
@@ -5929,7 +6005,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s
-`;var Ue=P.bind(T),yw={ai:"AI Provider Keys",github:"GitHub",channels:"Channels",tools:"Tools",custom:"Custom"},u3=["ai","github","channels","tools","custom"],p3=new Set(["OPENAI_API_KEY","GEMINI_API_KEY"]),ww={Embeddings:{Icon:_a,label:"Memory embeddings"},Image:{Icon:nb,label:"Image generation"},TTS:{Icon:sb,label:"Text to speech"},STT:{Icon:ob,label:"Speech to text"}},vw=t=>t.trim().toUpperCase().replace(/[^A-Z0-9_]/g,"_"),f3=/^(?:TELEGRAM_BOT_TOKEN|DISCORD_BOT_TOKEN|SLACK_BOT_TOKEN|SLACK_APP_TOKEN)(?:_[A-Z0-9_]+)?$/,h3=t=>{let e=String(t||"").trim();if(e.length<2)return e;let n=e.startsWith('"'),s=e.endsWith('"');if(n&&s)return e.slice(1,-1);let o=e.startsWith("'"),r=e.endsWith("'");return o&&r?e.slice(1,-1):e},gc=(t="")=>f3.test(String(t||"").trim().toUpperCase()),$w=t=>JSON.stringify((t||[]).map(e=>({key:String(e?.key||""),value:String(e?.value||"")})).sort((e,n)=>e.key.localeCompare(n.key))),m3=t=>{let e=Array.isArray(t)?[...t]:[],n=e.filter(o=>(o?.group||"custom")==="custom").sort((o,r)=>String(o?.key||"").localeCompare(String(r?.key||""))),s=0;return e.map(o=>{if((o?.group||"custom")!=="custom")return o;let r=n[s];return s+=1,r})},g3={ANTHROPIC_API_KEY:Ue`from${" "} +`;var Ue=P.bind(T),ww={ai:"AI Provider Keys",github:"GitHub",channels:"Channels",tools:"Tools",custom:"Custom"},g3=["ai","github","channels","tools","custom"],b3=new Set(["OPENAI_API_KEY","GEMINI_API_KEY"]),Cw={Embeddings:{Icon:_a,label:"Memory embeddings"},Image:{Icon:sb,label:"Image generation"},TTS:{Icon:ob,label:"Text to speech"},STT:{Icon:rb,label:"Speech to text"}},kw=t=>t.trim().toUpperCase().replace(/[^A-Z0-9_]/g,"_"),x3=/^(?:TELEGRAM_BOT_TOKEN|DISCORD_BOT_TOKEN|SLACK_BOT_TOKEN|SLACK_APP_TOKEN)(?:_[A-Z0-9_]+)?$/,y3=t=>{let e=String(t||"").trim();if(e.length<2)return e;let n=e.startsWith('"'),s=e.endsWith('"');if(n&&s)return e.slice(1,-1);let o=e.startsWith("'"),r=e.endsWith("'");return o&&r?e.slice(1,-1):e},gc=(t="")=>x3.test(String(t||"").trim().toUpperCase()),Sw=t=>JSON.stringify((t||[]).map(e=>({key:String(e?.key||""),value:String(e?.value||"")})).sort((e,n)=>e.key.localeCompare(n.key))),v3=t=>{let e=Array.isArray(t)?[...t]:[],n=e.filter(o=>(o?.group||"custom")==="custom").sort((o,r)=>String(o?.key||"").localeCompare(String(r?.key||""))),s=0;return e.map(o=>{if((o?.group||"custom")!=="custom")return o;let r=n[s];return s+=1,r})},$3={ANTHROPIC_API_KEY:Ue`from${" "} {r.current&&(r.current.destroy(),r.current=null)}},[f,i,s class="hover:underline" style="color: var(--accent-link)" >brave.com/search/api${" "} — free tier available`},b3=t=>g3[t.key]||t.hint||"",x3=t=>(Array.isArray(t?.features)?t.features:[]).filter(e=>!!ww[e]),y3=t=>{let e=[],n=[];return(t||[]).forEach(s=>{let o=!!String(s?.value||"").trim();if(p3.has(s?.key)||o){e.push(s);return}n.push(s)}),{visible:e,hidden:n}},v3=({feature:t})=>{let e=ww[t];if(!e)return null;let{Icon:n,label:s}=e;return Ue` + >${" "} — free tier available`},w3=t=>$3[t.key]||t.hint||"",k3=t=>(Array.isArray(t?.features)?t.features:[]).filter(e=>!!Cw[e]),S3=t=>{let e=[],n=[];return(t||[]).forEach(s=>{let o=!!String(s?.value||"").trim();if(b3.has(s?.key)||o){e.push(s);return}n.push(s)}),{visible:e,hidden:n}},C3=({feature:t})=>{let e=Cw[t];if(!e)return null;let{Icon:n,label:s}=e;return Ue` <${Bt} text=${s} widthClass="w-auto" tooltipClassName="whitespace-nowrap"> {r.current&&(r.current.destroy(),r.current=null)}},[f,i,s <${n} className="w-3.5 h-3.5" /> - `},$3=({envVar:t,onChange:e,onDelete:n,disabled:s})=>{let o=b3(t),r=x3(t);return Ue` + `},_3=({envVar:t,onChange:e,onDelete:n,disabled:s})=>{let o=w3(t),r=k3(t);return Ue`
@@ -6050,7 +6126,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s
${r.length>0?Ue`
- ${r.map(i=>Ue`<${v3} key=${i} feature=${i} />`)} + ${r.map(i=>Ue`<${C3} key=${i} feature=${i} />`)}
`:null}
@@ -6075,20 +6151,20 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s ${o?Ue`

${o}

`:null}
- `},kw=({onRestartRequired:t=()=>{}})=>{let[e,n]=y([]),[s,o]=y(()=>new Set),[r,i]=y([]),[a,l]=y(0),[c,d]=y(!1),[u,p]=y(!1),[f,g]=y(!1),[m,h]=y(""),b=ee("[]"),{data:x,error:v,loading:w,refresh:$}=ct("/api/env",Vr,{maxAgeMs:3e4}),S=q(j=>{if(!j)return;let X=m3(j.vars||[]);b.current=$w(X),n(X),i([]),o(new Set(j.reservedKeys||[])),j.restartRequired&&t(!0)},[t]),C=q(async()=>{try{let j=await $({force:!0});S(j)}catch(j){console.error("Failed to load env vars:",j)}},[S,$]);L(()=>{x&&(c||u||S(x))},[S,c,x,u]),L(()=>{v&&console.error("Failed to load env vars:",v)},[v]),L(()=>{d($w(e)!==b.current)},[e]);let _=(j,X)=>{n(de=>de.map(le=>le.key===j?{...le,value:X}:le))},k=j=>{n(X=>X.filter(de=>de.key!==j)),i(X=>X.filter(de=>de!==j))},A=async()=>{if(!u){p(!0);try{let j=e.filter(ie=>ie.editable&&!gc(ie?.key)).map(ie=>({key:ie.key,value:ie.value})),de=!!(await cd(j))?.restartRequired;de&&t(!0),N(de?"Environment variables saved. Restart gateway to apply.":"Environment variables saved","success");let le=await $({force:!0});S(le),l(ie=>ie+1),d(!1)}catch(j){N("Failed to save: "+j.message,"error")}finally{p(!1)}}},[O,D]=y(""),z=j=>{let X=j.split(` -`).map(le=>le.trim()).filter(Boolean).filter(le=>!le.startsWith("#")),de=[];for(let le of X){let ie=le.indexOf("=");ie>0&&de.push({key:le.slice(0,ie).trim(),value:h3(le.slice(ie+1))})}return de},E=j=>{let X=0,de=[],le=[],ie=[];return n(ne=>{let xe=[...ne];for(let{key:he,value:ue}of j){let me=vw(he);if(!me)continue;if(gc(me)){le.push(me);continue}if(s.has(me)){de.push(me);continue}let V=xe.find(J=>J.key===me);V?V.value=ue:(xe.push({key:me,value:ue,label:me,group:"custom",hint:"",source:"env_file",editable:!0}),ie.push(me)),X++}return xe}),ie.length&&i(ne=>[...ne,...ie]),{added:X,blocked:de,managedChannelKeys:le}},M=(j,X)=>{let de=(j.clipboardData||window.clipboardData).getData("text"),le=z(de);if(le.length>1){j.preventDefault();let{added:ie,blocked:ne,managedChannelKeys:xe}=E(le);if(h(""),D(""),ne.length){let he=Array.from(new Set(ne));N(`Reserved vars can't be added: ${he.join(", ")}`,"error")}if(xe.length){let he=Array.from(new Set(xe));N(`Channel tokens are managed from Channels: ${he.join(", ")}`,"error")}ie&&N(`Added ${ie} variable${ie!==1?"s":""}`,"success");return}if(le.length===1){j.preventDefault(),h(le[0].key),D(le[0].value);return}},R=j=>{let X=z(j);if(X.length===1){h(X[0].key),D(X[0].value);return}h(j)},B=j=>{let X=z(j);if(X.length===1){h(X[0].key),D(X[0].value);return}D(j)},I=()=>{let j=vw(m);if(j){if(gc(j)){N(`Channel tokens are managed from Channels: ${j}`,"error");return}if(s.has(j)){N(`Reserved var can't be added: ${j}`,"error");return}E([{key:j,value:O}]),h(""),D("")}},U=e.filter(j=>!gc(j?.key)),W={};for(let j of U){let X=j.group||"custom";W[X]||(W[X]=[]),W[X].push(j)}if(W.custom?.length){let j=new Set(r),X=W.custom.filter(le=>!j.has(le.key)).sort((le,ie)=>String(le?.key||"").localeCompare(String(ie?.key||""))),de=W.custom.filter(le=>j.has(le.key));W.custom=[...X,...de]}let G=y3(W.ai||[]),se=j=>j.map(X=>Ue`<${$3} - key=${`${a}:${X.key}`} - envVar=${X} + `},_w=({onRestartRequired:t=()=>{}})=>{let[e,n]=y([]),[s,o]=y(()=>new Set),[r,i]=y([]),[a,l]=y(0),[c,d]=y(!1),[u,p]=y(!1),[f,g]=y(!1),[m,h]=y(""),b=ee("[]"),{data:x,error:v,loading:w,refresh:$}=ct("/api/env",Vr,{maxAgeMs:3e4}),S=q(V=>{if(!V)return;let Z=v3(V.vars||[]);b.current=Sw(Z),n(Z),i([]),o(new Set(V.reservedKeys||[])),V.restartRequired&&t(!0)},[t]),C=q(async()=>{try{let V=await $({force:!0});S(V)}catch(V){console.error("Failed to load env vars:",V)}},[S,$]);L(()=>{x&&(c||u||S(x))},[S,c,x,u]),L(()=>{v&&console.error("Failed to load env vars:",v)},[v]),L(()=>{d(Sw(e)!==b.current)},[e]);let _=(V,Z)=>{n(ue=>ue.map(re=>re.key===V?{...re,value:Z}:re))},k=V=>{n(Z=>Z.filter(ue=>ue.key!==V)),i(Z=>Z.filter(ue=>ue!==V))},A=async()=>{if(!u){p(!0);try{let V=e.filter(oe=>oe.editable&&!gc(oe?.key)).map(oe=>({key:oe.key,value:oe.value})),ue=!!(await cd(V))?.restartRequired;ue&&t(!0),I(ue?"Environment variables saved. Restart gateway to apply.":"Environment variables saved","success");let re=await $({force:!0});S(re),l(oe=>oe+1),d(!1)}catch(V){I("Failed to save: "+V.message,"error")}finally{p(!1)}}},[D,N]=y(""),U=V=>{let Z=V.split(` +`).map(re=>re.trim()).filter(Boolean).filter(re=>!re.startsWith("#")),ue=[];for(let re of Z){let oe=re.indexOf("=");oe>0&&ue.push({key:re.slice(0,oe).trim(),value:y3(re.slice(oe+1))})}return ue},O=V=>{let Z=0,ue=[],re=[],oe=[];return n(ne=>{let me=[...ne];for(let{key:pe,value:ce}of V){let ge=kw(pe);if(!ge)continue;if(gc(ge)){re.push(ge);continue}if(s.has(ge)){ue.push(ge);continue}let j=me.find(J=>J.key===ge);j?j.value=ce:(me.push({key:ge,value:ce,label:ge,group:"custom",hint:"",source:"env_file",editable:!0}),oe.push(ge)),Z++}return me}),oe.length&&i(ne=>[...ne,...oe]),{added:Z,blocked:ue,managedChannelKeys:re}},M=(V,Z)=>{let ue=(V.clipboardData||window.clipboardData).getData("text"),re=U(ue);if(re.length>1){V.preventDefault();let{added:oe,blocked:ne,managedChannelKeys:me}=O(re);if(h(""),N(""),ne.length){let pe=Array.from(new Set(ne));I(`Reserved vars can't be added: ${pe.join(", ")}`,"error")}if(me.length){let pe=Array.from(new Set(me));I(`Channel tokens are managed from Channels: ${pe.join(", ")}`,"error")}oe&&I(`Added ${oe} variable${oe!==1?"s":""}`,"success");return}if(re.length===1){V.preventDefault(),h(re[0].key),N(re[0].value);return}},R=V=>{let Z=U(V);if(Z.length===1){h(Z[0].key),N(Z[0].value);return}h(V)},B=V=>{let Z=U(V);if(Z.length===1){h(Z[0].key),N(Z[0].value);return}N(V)},E=()=>{let V=kw(m);if(V){if(gc(V)){I(`Channel tokens are managed from Channels: ${V}`,"error");return}if(s.has(V)){I(`Reserved var can't be added: ${V}`,"error");return}O([{key:V,value:D}]),h(""),N("")}},G=e.filter(V=>!gc(V?.key)),H={};for(let V of G){let Z=V.group||"custom";H[Z]||(H[Z]=[]),H[Z].push(V)}if(H.custom?.length){let V=new Set(r),Z=H.custom.filter(re=>!V.has(re.key)).sort((re,oe)=>String(re?.key||"").localeCompare(String(oe?.key||""))),ue=H.custom.filter(re=>V.has(re.key));H.custom=[...Z,...ue]}let z=S3(H.ai||[]),te=V=>V.map(Z=>Ue`<${_3} + key=${`${a}:${Z.key}`} + envVar=${Z} onChange=${_} onDelete=${k} disabled=${u} - />`),K=j=>{let X=W[j]||[];if(!X.length)return null;if(j==="ai"){let{visible:de,hidden:le}=G,ie=f&&le.length>0;return Ue` + />`),K=V=>{let Z=H[V]||[];if(!Z.length)return null;if(V==="ai"){let{visible:ue,hidden:re}=z,oe=f&&re.length>0;return Ue`

- ${yw[j]||j} + ${ww[V]||V}

-
${se(de)}
- ${le.length>0?Ue` +
${te(ue)}
+ ${re.length>0?Ue`
`:null} - ${ie?Ue`
- ${se(le)} + ${oe?Ue`
+ ${te(re)}
`:null}
`}return Ue`

- ${yw[j]||j} + ${ww[V]||V}

-
${se(X)}
+
${te(Z)}
`};return w&&!e.length?Ue` - <${zn} - header=${Ue`<${Ne} title="Envars" />`} + <${Un} + header=${Ue`<${Pe} title="Envars" />`} >
Loading environment variables...
- + `:Ue` - <${zn} + <${Un} header=${Ue` - <${Ne} + <${Pe} title="Envars" actions=${Ue` - <${Qn} visible=${c}> - <${Z} + <${es} visible=${c}> + <${Y} onClick=${C} disabled=${u} tone="secondary" @@ -6136,7 +6212,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s idleLabel="Cancel" className="text-xs" /> - <${Z} + <${Y} onClick=${A} disabled=${u} loading=${u} @@ -6147,12 +6223,12 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s loadingLabel="Saving…" className="text-xs" /> - + `} /> `} > - ${u3.filter(j=>W[j]?.length).map(j=>K(j))} + ${g3.filter(V=>H[V]?.length).map(V=>K(V))}
{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s type="text" value=${m} placeholder="KEY" - onInput=${j=>R(j.target.value)} - onPaste=${j=>M(j,"key")} - onKeyDown=${j=>j.key==="Enter"&&I()} + onInput=${V=>R(V.target.value)} + onPaste=${V=>M(V,"key")} + onKeyDown=${V=>V.key==="Enter"&&E()} class="w-full bg-field border border-border rounded-lg px-3 py-1.5 text-sm text-body outline-none focus:border-fg-muted font-mono uppercase" />
B(j.target.value)} - onPaste=${j=>M(j,"val")} - onKeyDown=${j=>j.key==="Enter"&&I()} + onInput=${V=>B(V.target.value)} + onPaste=${V=>M(V,"val")} + onKeyDown=${V=>V.key==="Enter"&&E()} class="flex-1 bg-field border border-border rounded-lg px-3 py-1.5 text-sm text-body outline-none focus:border-fg-muted font-mono" />
- - `};var w3=P.bind(T),df=({onRestartRequired:t=()=>{}})=>w3` - <${kw} onRestartRequired=${t} /> -`;var Qt=P.bind(T),k3=t=>{let e=Number(t||0);if(!Number.isFinite(e)||e<=0)return"0s";let n=Math.floor(e/1e3),s=Math.floor(n/86400),o=Math.floor(n/3600),r=Math.floor(n%3600/60),i=n%60;return s>0?`${s}d ${o%24}h ${r}m ${i}s`:o>0?`${o}h ${r}m ${i}s`:r>0?`${r}m ${i}s`:`${i}s`},S3=({label:t,currentVersion:e,fetchVersion:n,applyUpdate:s,updateInProgress:o=!1,onActionComplete:r=()=>{}})=>{let[i,a]=y(!1),[l,c]=y(e||null),[d,u]=y(null),[p,f]=y(!1),[g,m]=y(""),[h,b]=y(!1),[x,v]=y(!1),w=(()=>{try{return new URLSearchParams(window.location.search).get("simulateUpdate")==="1"}catch{return!1}})(),$=(()=>{if(!w)return null;try{return new URLSearchParams(window.location.search).get("simulateVersion")||"v0.0.0-preview"}catch{return"v0.0.0-preview"}})(),S=w||p,C=$||d,_=o||S,k=C?`Update to ${C}`:"Update",A="https://github.com/openclaw/openclaw/tags",O=S&&C;L(()=>{c(e||null)},[e]),L(()=>{let R=!0;return(async(I=!1)=>{try{let U=await n(I);if(!R)return;c(U.currentVersion||e||null),u(U.latestVersion||null),f(!!U.hasUpdate),m(U.ok?"":U.error||"")}catch(U){if(!R)return;m(U.message||"Could not check updates")}})(!1),()=>{R=!1}},[e,n]),L(()=>{if(o)return()=>{};let R=!0,B=setTimeout(async()=>{try{let I=await n(!0);if(!R)return;c(I.currentVersion||e||null),u(I.latestVersion||null),f(!!I.hasUpdate),m(I.ok?"":I.error||"")}catch{}},1200);return()=>{R=!1,clearTimeout(B)}},[o,e,n]),L(()=>{if(!S||!C){b(!1);return}b(!1)},[S,C]);let D=async()=>{let R=!!S;if(!(_?i||o:i)){a(!0),m("");try{let I=R?await s():await n(!0);c(I.currentVersion||l),u(I.latestVersion||null),f(!!I.hasUpdate),m(I.ok?"":I.error||""),R?I.ok?I.updated||I.restarting?N(I.restarting?`${t} updated \u2014 restarting...`:`Updated ${t} to ${I.currentVersion}`,"success"):N(`Already at latest ${t} version`,"success"):N(I.error||`${t} update failed`,"error"):I.hasUpdate&&I.latestVersion?N(`${t} update available: ${I.latestVersion}`,"warning"):N(`${t} is up to date`,"success"),await r({type:R?"update":"check",ok:!!I?.ok,result:I})}catch(I){m(I.message||(R?`Could not update ${t}`:"Could not check updates")),N(R?`Could not update ${t}`:"Could not check updates","error"),await r({type:R?"update":"check",ok:!1,error:I})}finally{a(!1)}}},z=()=>{if(!(_?i||o:i)){if(S&&C&&!h){v(!0);return}D()}},E=()=>{v(!1),D()},M=_?i||o:i;return Qt` + + `};var A3=P.bind(T),df=({onRestartRequired:t=()=>{}})=>A3` + <${_w} onRestartRequired=${t} /> +`;var en=P.bind(T),M3=t=>{let e=Number(t||0);if(!Number.isFinite(e)||e<=0)return"0s";let n=Math.floor(e/1e3),s=Math.floor(n/86400),o=Math.floor(n/3600),r=Math.floor(n%3600/60),i=n%60;return s>0?`${s}d ${o%24}h ${r}m ${i}s`:o>0?`${o}h ${r}m ${i}s`:r>0?`${r}m ${i}s`:`${i}s`},T3=({label:t,currentVersion:e,fetchVersion:n,applyUpdate:s,updateInProgress:o=!1,onActionComplete:r=()=>{}})=>{let[i,a]=y(!1),[l,c]=y(e||null),[d,u]=y(null),[p,f]=y(!1),[g,m]=y(""),[h,b]=y(!1),[x,v]=y(!1),w=(()=>{try{return new URLSearchParams(window.location.search).get("simulateUpdate")==="1"}catch{return!1}})(),$=(()=>{if(!w)return null;try{return new URLSearchParams(window.location.search).get("simulateVersion")||"v0.0.0-preview"}catch{return"v0.0.0-preview"}})(),S=w||p,C=$||d,_=o||S,k=C?`Update to ${C}`:"Update",A="https://github.com/openclaw/openclaw/tags",D=S&&C;L(()=>{c(e||null)},[e]),L(()=>{let R=!0;return(async(E=!1)=>{try{let G=await n(E);if(!R)return;c(G.currentVersion||e||null),u(G.latestVersion||null),f(!!G.hasUpdate),m(G.ok?"":G.error||"")}catch(G){if(!R)return;m(G.message||"Could not check updates")}})(!1),()=>{R=!1}},[e,n]),L(()=>{if(o)return()=>{};let R=!0,B=setTimeout(async()=>{try{let E=await n(!0);if(!R)return;c(E.currentVersion||e||null),u(E.latestVersion||null),f(!!E.hasUpdate),m(E.ok?"":E.error||"")}catch{}},1200);return()=>{R=!1,clearTimeout(B)}},[o,e,n]),L(()=>{if(!S||!C){b(!1);return}b(!1)},[S,C]);let N=async()=>{let R=!!S;if(!(_?i||o:i)){a(!0),m("");try{let E=R?await s():await n(!0);c(E.currentVersion||l),u(E.latestVersion||null),f(!!E.hasUpdate),m(E.ok?"":E.error||""),R?E.ok?E.updated||E.restarting?I(E.restarting?`${t} updated \u2014 restarting...`:`Updated ${t} to ${E.currentVersion}`,"success"):I(`Already at latest ${t} version`,"success"):I(E.error||`${t} update failed`,"error"):E.hasUpdate&&E.latestVersion?I(`${t} update available: ${E.latestVersion}`,"warning"):I(`${t} is up to date`,"success"),await r({type:R?"update":"check",ok:!!E?.ok,result:E})}catch(E){m(E.message||(R?`Could not update ${t}`:"Could not check updates")),I(R?`Could not update ${t}`:"Could not check updates","error"),await r({type:R?"update":"check",ok:!1,error:E})}finally{a(!1)}}},U=()=>{if(!(_?i||o:i)){if(S&&C&&!h){v(!0);return}N()}},O=()=>{v(!1),N()},M=_?i||o:i;return en`

${t}${" "}${l?`${l}`:"..."}

- ${g&&S&&Qt`
${g}
`}
- ${S&&C&&Qt` + ${S&&C&&en` {r.current&&(r.current.destroy(),r.current=null)}},[f,i,s >View changelog `} - ${O?Qt` + ${D?en` <${tn} - onClick=${z} + onClick=${U} loading=${M} warning=${_} idleLabel=${_?k:"Check updates"} loadingLabel=${_?"Updating...":"Checking..."} className="hidden md:inline-flex" /> - `:Qt` + `:en` <${tn} - onClick=${z} + onClick=${U} loading=${M} warning=${_} idleLabel=${_?k:"Check updates"} @@ -6242,7 +6318,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s `}
- ${O&&Qt` + ${D&&en`
{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s >View changelog <${tn} - onClick=${z} + onClick=${U} loading=${M} warning=${_} idleLabel=${k} @@ -6270,9 +6346,9 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s cancelLabel="Cancel" confirmTone="warning" onCancel=${()=>v(!1)} - onConfirm=${E} + onConfirm=${O} /> - `},bc=({status:t,openclawVersion:e,restarting:n=!1,onRestart:s,watchdogStatus:o=null,onOpenWatchdog:r,onRepair:i,repairing:a=!1,openclawUpdateInProgress:l=!1,onOpenclawVersionActionComplete:c=()=>{},onOpenclawUpdate:d=ma})=>{let[u,p]=y(()=>Date.now()),f=t==="running"&&!n,g=f?"ac-status-dot ac-status-dot--healthy":"w-2 h-2 rounded-full bg-yellow-500 animate-pulse",m=o?.lifecycle==="crash_loop"?"crash_loop":o?.health,h=m==="healthy"?"ac-status-dot ac-status-dot--healthy ac-status-dot--healthy-offset":m==="degraded"?"bg-yellow-500":m==="unhealthy"||m==="crash_loop"?"bg-red-500":"bg-gray-500",b=m==="unknown"?"initializing":m||"unknown",x=a||!!o?.operationInProgress,v=m==="degraded"&&!!r,w=x||o?.health==="degraded"&&!r||o?.lifecycle==="crash_loop"||o?.health==="unhealthy"||o?.health==="crashed",$=F(()=>{let S=o?.uptimeStartedAt?Date.parse(o.uptimeStartedAt):null;return Number.isFinite(S)?Math.max(0,u-S):o?.uptimeMs||0},[o?.uptimeStartedAt,o?.uptimeMs,u]);return L(()=>{let S=setInterval(()=>{p(Date.now())},1e3);return()=>clearInterval(S)},[]),Qt`
+ `},bc=({status:t,openclawVersion:e,restarting:n=!1,onRestart:s,watchdogStatus:o=null,onOpenWatchdog:r,onRepair:i,repairing:a=!1,openclawUpdateInProgress:l=!1,onOpenclawVersionActionComplete:c=()=>{},onOpenclawUpdate:d=ma})=>{let[u,p]=y(()=>Date.now()),f=t==="running"&&!n,g=f?"ac-status-dot ac-status-dot--healthy":"w-2 h-2 rounded-full bg-yellow-500 animate-pulse",m=o?.lifecycle==="crash_loop"?"crash_loop":o?.health,h=m==="healthy"?"ac-status-dot ac-status-dot--healthy ac-status-dot--healthy-offset":m==="degraded"?"bg-yellow-500":m==="unhealthy"||m==="crash_loop"?"bg-red-500":"bg-gray-500",b=m==="unknown"?"initializing":m||"unknown",x=a||!!o?.operationInProgress,v=m==="degraded"&&!!r,w=x||o?.health==="degraded"&&!r||o?.lifecycle==="crash_loop"||o?.health==="unhealthy"||o?.health==="crashed",$=F(()=>{let S=o?.uptimeStartedAt?Date.parse(o.uptimeStartedAt):null;return Number.isFinite(S)?Math.max(0,u-S):o?.uptimeMs||0},[o?.uptimeStartedAt,o?.uptimeMs,u]);return L(()=>{let S=setInterval(()=>{p(Date.now())},1e3);return()=>clearInterval(S)},[]),en`
@@ -6283,9 +6359,9 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s >
- ${!n&&f?Qt` + ${!n&&f?en` Uptime: ${k3($)}Uptime: ${M3($)} `:null} <${tn} @@ -6299,7 +6375,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s
- ${r?Qt` + ${r?en` - `:Qt` + `:en`
{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s ${b}
`} - ${i?Qt` + ${i?en`
- ${v?Qt` + ${v?en` <${tn} onClick=${r} warning=${!1} @@ -6330,7 +6406,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s loadingLabel="Inspect" className="w-full justify-center" /> - `:w?Qt` + `:w?en` <${tn} onClick=${i} loading=${x} @@ -6339,7 +6415,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s loadingLabel="Repairing..." className="w-full justify-center" /> - `:Qt``} @@ -6348,7 +6424,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s
- <${S3} + <${T3} label="OpenClaw" currentVersion=${e} fetchVersion=${mm} @@ -6357,7 +6433,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s onActionComplete=${c} />
-
`};var $r=P.bind(T),C3={webchat:"Browser",cli:"CLI"},_3=t=>C3[t.clientMode]||t.clientId||"Device",M3=t=>{let e=[];return t.platform&&e.push(t.platform),t.role&&e.push(t.role),e.join(" \xB7 ")},A3=({d:t,onApprove:e,onReject:n})=>{let[s,o]=y(null),r=async l=>{o(l);try{l==="approve"?await e(t.id):await n(t.id)}catch{o(null)}},i=_3(t),a=M3(t);return s==="approve"?$r` +
`};var $r=P.bind(T),P3={webchat:"Browser",cli:"CLI"},R3=t=>P3[t.clientMode]||t.clientId||"Device",L3=t=>{let e=[];return t.platform&&e.push(t.platform),t.role&&e.push(t.role),e.join(" \xB7 ")},E3=({d:t,onApprove:e,onReject:n})=>{let[s,o]=y(null),r=async l=>{o(l);try{l==="approve"?await e(t.id):await n(t.id)}catch{o(null)}},i=R3(t),a=L3(t);return s==="approve"?$r`
Approved ${i} @@ -6372,14 +6448,14 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s ${a&&$r`${a}`}
- <${Z} + <${Y} onClick=${()=>r("approve")} tone="success" size="sm" idleLabel="Approve" className="font-medium px-3 py-1.5" /> - <${Z} + <${Y} onClick=${()=>r("reject")} tone="secondary" size="sm" @@ -6390,9 +6466,9 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s
`},xc=({pending:t,onApprove:e,onReject:n})=>!t||t.length===0?null:$r`

Pending device pairings

- ${t.map(s=>$r`<${A3} key=${s.id} d=${s} onApprove=${e} onReject=${n} />`)} -
`;var fo=P.bind(T),Vi=[{key:"gmail",icon:"\u{1F4E7}",label:"Gmail",defaultRead:!0,defaultWrite:!1},{key:"calendar",icon:"\u{1F4C5}",label:"Calendar",defaultRead:!0,defaultWrite:!0},{key:"drive",icon:"\u{1F4C1}",label:"Drive",defaultRead:!0,defaultWrite:!1},{key:"sheets",icon:"\u{1F4CA}",label:"Sheets",defaultRead:!0,defaultWrite:!1},{key:"docs",icon:"\u{1F4DD}",label:"Docs",defaultRead:!0,defaultWrite:!1},{key:"tasks",icon:"\u2705",label:"Tasks",defaultRead:!1,defaultWrite:!1},{key:"contacts",icon:"\u{1F464}",label:"Contacts",defaultRead:!1,defaultWrite:!1},{key:"meet",icon:"\u{1F3A5}",label:"Meet",defaultRead:!1,defaultWrite:!1}],T3={gmail:"gmail.googleapis.com",calendar:"calendar-json.googleapis.com",tasks:"tasks.googleapis.com",drive:"drive.googleapis.com",contacts:"people.googleapis.com",sheets:"sheets.googleapis.com",docs:"docs.googleapis.com",meet:"meet.googleapis.com"};function Sw(t){return`https://console.developers.google.com/apis/api/${T3[t]||""}/overview`}function Cw({scopes:t,onToggle:e,apiStatus:n,loading:s}){let[o,r]=y(!1),i=n||{},a=5,l=Vi.length>a,c=o?Vi:Vi.slice(0,a);return fo`
- ${c.map(d=>{let u=t.includes(`${d.key}:read`),p=t.includes(`${d.key}:write`),f=i[d.key],g=null;return s&&!f&&(u||p)?g=fo``:f&&(f.status==="ok"?g=fo`API ✓`:f.status==="not_enabled"?g=fo`Enable API`:f.status==="error"&&(g=fo`Enable API`)),fo` + ${t.map(s=>$r`<${E3} key=${s.id} d=${s} onApprove=${e} onReject=${n} />`)} +
`;var fo=P.bind(T),Vi=[{key:"gmail",icon:"\u{1F4E7}",label:"Gmail",defaultRead:!0,defaultWrite:!1},{key:"calendar",icon:"\u{1F4C5}",label:"Calendar",defaultRead:!0,defaultWrite:!0},{key:"drive",icon:"\u{1F4C1}",label:"Drive",defaultRead:!0,defaultWrite:!1},{key:"sheets",icon:"\u{1F4CA}",label:"Sheets",defaultRead:!0,defaultWrite:!1},{key:"docs",icon:"\u{1F4DD}",label:"Docs",defaultRead:!0,defaultWrite:!1},{key:"tasks",icon:"\u2705",label:"Tasks",defaultRead:!1,defaultWrite:!1},{key:"contacts",icon:"\u{1F464}",label:"Contacts",defaultRead:!1,defaultWrite:!1},{key:"meet",icon:"\u{1F3A5}",label:"Meet",defaultRead:!1,defaultWrite:!1}],I3={gmail:"gmail.googleapis.com",calendar:"calendar-json.googleapis.com",tasks:"tasks.googleapis.com",drive:"drive.googleapis.com",contacts:"people.googleapis.com",sheets:"sheets.googleapis.com",docs:"docs.googleapis.com",meet:"meet.googleapis.com"};function Aw(t){return`https://console.developers.google.com/apis/api/${I3[t]||""}/overview`}function Mw({scopes:t,onToggle:e,apiStatus:n,loading:s}){let[o,r]=y(!1),i=n||{},a=5,l=Vi.length>a,c=o?Vi:Vi.slice(0,a);return fo`
+ ${c.map(d=>{let u=t.includes(`${d.key}:read`),p=t.includes(`${d.key}:write`),f=i[d.key],g=null;return s&&!f&&(u||p)?g=fo``:f&&(f.status==="ok"?g=fo`API ✓`:f.status==="not_enabled"?g=fo`Enable API`:f.status==="error"&&(g=fo`Enable API`)),fo`
${d.icon} ${d.label}
@@ -6410,7 +6486,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s ${o?"Show fewer services":`Show more services (${Vi.length-a})`} `:null} -
`}function _w(t,e){let n=t.includes(e),s=n?t.filter(o=>o!==e):[...t,e];if(e.endsWith(":write")&&!n){let o=e.replace(":write",":read");s.includes(o)||s.push(o)}if(e.endsWith(":read")&&n){let o=e.replace(":read",":write");s=s.filter(r=>r!==o)}return s}function wr(){let t=[];for(let e of Vi)e.defaultRead&&t.push(`${e.key}:read`),e.defaultWrite&&t.push(`${e.key}:write`);return t}var kr=P.bind(T),Mw=({visible:t,onClose:e,onSaved:n,title:s="Connect Google Workspace",submitLabel:o="Connect Google",defaultInstrType:r="workspace",client:i="default",personal:a=!1,accountId:l="",initialValues:c={}})=>{let[d,u]=y(""),[p,f]=y(""),[g,m]=y(""),[h,b]=y(""),[x,v]=y(!1),[w,$]=y(r),[S,C]=y(!1),_=ee(null);if(L(()=>{t&&(u(String(c.clientId||"")),f(String(c.clientSecret||"")),m(String(c.email||"")),$(r),b(""),C(!1))},[t,c,r]),!t)return null;let k=`${window.location.origin}/auth/google/callback`,A=async()=>{try{await navigator.clipboard.writeText(k),C(!0),window.setTimeout(()=>C(!1),1500)}catch{b("Unable to copy redirect URI")}},O=async R=>{let B=R.target.files[0];if(B)try{let I=await B.text(),U=JSON.parse(I),W=U.installed||U.web||U;W.client_id&&u(W.client_id),W.client_secret&&f(W.client_secret)}catch{b("Invalid JSON file")}},D=async()=>{if(b(""),!d||!p||!g){b("Client ID, Client Secret, and Email are required");return}v(!0);try{let R=await zh({clientId:d,clientSecret:p,email:g,client:i,personal:a,accountId:l});R.ok?(e(),n?.(R.account)):b(R.error||"Failed to save credentials")}catch{b("Request failed")}finally{v(!1)}},z=R=>`flex-1 text-center border-0 cursor-pointer transition-colors ${w===R?"":"hover:text-white"}`,E=R=>"font-family: inherit; font-size: 11px; letter-spacing: 0.03em; padding: 5px 10px;"+(w===R?" color: var(--accent); background: var(--bg-active);":" color: var(--text-muted); background: transparent;"),M=()=>kr` +
`}function Tw(t,e){let n=t.includes(e),s=n?t.filter(o=>o!==e):[...t,e];if(e.endsWith(":write")&&!n){let o=e.replace(":write",":read");s.includes(o)||s.push(o)}if(e.endsWith(":read")&&n){let o=e.replace(":read",":write");s=s.filter(r=>r!==o)}return s}function wr(){let t=[];for(let e of Vi)e.defaultRead&&t.push(`${e.key}:read`),e.defaultWrite&&t.push(`${e.key}:write`);return t}var kr=P.bind(T),Pw=({visible:t,onClose:e,onSaved:n,title:s="Connect Google Workspace",submitLabel:o="Connect Google",defaultInstrType:r="workspace",client:i="default",personal:a=!1,accountId:l="",initialValues:c={}})=>{let[d,u]=y(""),[p,f]=y(""),[g,m]=y(""),[h,b]=y(""),[x,v]=y(!1),[w,$]=y(r),[S,C]=y(!1),_=ee(null);if(L(()=>{t&&(u(String(c.clientId||"")),f(String(c.clientSecret||"")),m(String(c.email||"")),$(r),b(""),C(!1))},[t,c,r]),!t)return null;let k=`${window.location.origin}/auth/google/callback`,A=async()=>{try{await navigator.clipboard.writeText(k),C(!0),window.setTimeout(()=>C(!1),1500)}catch{b("Unable to copy redirect URI")}},D=async R=>{let B=R.target.files[0];if(B)try{let E=await B.text(),G=JSON.parse(E),H=G.installed||G.web||G;H.client_id&&u(H.client_id),H.client_secret&&f(H.client_secret)}catch{b("Invalid JSON file")}},N=async()=>{if(b(""),!d||!p||!g){b("Client ID, Client Secret, and Email are required");return}v(!0);try{let R=await zh({clientId:d,clientSecret:p,email:g,client:i,personal:a,accountId:l});R.ok?(e(),n?.(R.account)):b(R.error||"Failed to save credentials")}catch{b("Request failed")}finally{v(!1)}},U=R=>`flex-1 text-center border-0 cursor-pointer transition-colors ${w===R?"":"hover:text-white"}`,O=R=>"font-family: inherit; font-size: 11px; letter-spacing: 0.03em; padding: 5px 10px;"+(w===R?" color: var(--accent); background: var(--bg-active);":" color: var(--text-muted); background: transparent;"),M=()=>kr`
{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s ${S?"Copied":"Copy"}
- `;return kr` <${De} + `;return kr` <${Te} visible=${t} onClose=${e} closeOnOverlayClick=${!1} panelClassName="bg-modal border border-border rounded-xl p-6 max-w-lg w-full space-y-4" > - <${Ne} + <${Pe} title=${s} actions=${kr` `} /> @@ -6471,15 +6547,15 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s > @@ -6610,7 +6686,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s type="file" ref=${_} accept=".json" - onchange=${O} + onchange=${D} class="hidden" />
- <${Z} - onClick=${D} + <${Y} + onClick=${N} disabled=${x} loading=${x} tone="primary" @@ -6673,14 +6749,14 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s />
${h?kr`
${h}
`:null} - `};var Aw=P.bind(T),P3=({watchStatus:t,busy:e=!1})=>e?{label:t?.enabled?"Stopping":"Starting",tone:"warning"}:t?.enabled?t.enabled&&!t.running?{label:"Error",tone:"danger"}:{label:"Watching",tone:"success"}:{label:"Stopped",tone:"neutral"},Tw=({account:t,watchStatus:e=null,busy:n=!1,onEnable:s=()=>{},onDisable:o=()=>{},onOpenWebhook:r=()=>{}})=>{if(!(Array.isArray(t?.activeScopes)?t.activeScopes.includes("gmail:read"):Array.isArray(t?.services)?t.services.includes("gmail:read"):!1))return Aw` + `};var Rw=P.bind(T),D3=({watchStatus:t,busy:e=!1})=>e?{label:t?.enabled?"Stopping":"Starting",tone:"warning"}:t?.enabled?t.enabled&&!t.running?{label:"Error",tone:"danger"}:{label:"Watching",tone:"success"}:{label:"Stopped",tone:"neutral"},Lw=({account:t,watchStatus:e=null,busy:n=!1,onEnable:s=()=>{},onDisable:o=()=>{},onOpenWebhook:r=()=>{}})=>{if(!(Array.isArray(t?.activeScopes)?t.activeScopes.includes("gmail:read"):Array.isArray(t?.services)?t.services.includes("gmail:read"):!1))return Rw`
Gmail watch requires gmail:read. Add it in permissions above, then update permissions.
- `;let a=P3({watchStatus:e,busy:n}),l=!!e?.enabled;return Aw` + `;let a=D3({watchStatus:e,busy:n}),l=!!e?.enabled;return Rw`
{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s onClick=${c=>c.stopPropagation()} onKeyDown=${c=>c.stopPropagation()} > - <${ae} tone=${a.tone}>${a.label} + <${le} tone=${a.tone}>${a.label} <${vn} checked=${l} disabled=${n} @@ -6709,7 +6785,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s />
- `};var ji=P.bind(T),R3=(t=[],e=[])=>t.length===e.length&&t.every(n=>e.includes(n)),Pw=({account:t,personal:e=!1,expanded:n,onToggleExpanded:s,scopes:o=[],savedScopes:r=[],apiStatus:i={},checkingApis:a=!1,onToggleScope:l,onCheckApis:c,onUpdatePermissions:d,onEditCredentials:u,onDisconnect:p,gmailWatchStatus:f=null,gmailWatchBusy:g=!1,onEnableGmailWatch:m,onDisableGmailWatch:h,onOpenGmailSetup:b,onOpenGmailWebhook:x})=>{let v=!R3(o,r);return ji` + `};var ji=P.bind(T),N3=(t=[],e=[])=>t.length===e.length&&t.every(n=>e.includes(n)),Ew=({account:t,personal:e=!1,expanded:n,onToggleExpanded:s,scopes:o=[],savedScopes:r=[],apiStatus:i={},checkingApis:a=!1,onToggleScope:l,onCheckApis:c,onUpdatePermissions:d,onEditCredentials:u,onDisconnect:p,gmailWatchStatus:f=null,gmailWatchBusy:g=!1,onEnableGmailWatch:m,onDisableGmailWatch:h,onOpenGmailSetup:b,onOpenGmailWebhook:x})=>{let v=!N3(o,r);return ji`
- ${e?ji`<${ae} tone="neutral">Personal`:null} - <${ae} tone=${t.authenticated?"success":"warning"}> + ${e?ji`<${le} tone="neutral">Personal`:null} + <${le} tone=${t.authenticated?"success":"warning"}> ${t.authenticated?"Connected":"Awaiting sign-in"} - + ${n?"\u25BE":"\u25B8"}
@@ -6740,7 +6816,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s ${a?"Checking APIs...":"\u21BB Check APIs"} `:null}
- <${Cw} + <${Mw} scopes=${o} onToggle=${w=>l?.(t.id,w)} apiStatus=${t.authenticated?i:{}} @@ -6759,7 +6835,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s Configure - <${Tw} + <${Lw} account=${t} watchStatus=${f} busy=${g} @@ -6799,13 +6875,13 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s `:null} - `};var uf=P.bind(T),Rw=({visible:t,onClose:e,onSubmit:n,loading:s=!1,defaultEmail:o="",title:r="Add Company Account"})=>{let[i,a]=y(""),[l,c]=y("");if(L(()=>{t&&(a(String(o||"")),c(""))},[t,o]),!t)return null;let d=async()=>{c("");let u=String(i||"").trim();if(!u){c("Email is required");return}await n?.({email:u,setError:c})};return uf`<${De} + `};var uf=P.bind(T),Iw=({visible:t,onClose:e,onSubmit:n,loading:s=!1,defaultEmail:o="",title:r="Add Company Account"})=>{let[i,a]=y(""),[l,c]=y("");if(L(()=>{t&&(a(String(o||"")),c(""))},[t,o]),!t)return null;let d=async()=>{c("");let u=String(i||"").trim();if(!u){c("Email is required");return}await n?.({email:u,setError:c})};return uf`<${Te} visible=${t} onClose=${e} closeOnOverlayClick=${!1} panelClassName="bg-modal border border-border rounded-xl p-6 max-w-md w-full space-y-4" > - <${Ne} + <${Pe} title=${r} actions=${uf` `} /> @@ -6837,7 +6913,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s ${l?uf`
${l}
`:null}
- <${Z} + <${Y} onClick=${d} disabled=${s} loading=${s} @@ -6848,7 +6924,7 @@ cost: ${v}`}}}}}}),()=>{r.current&&(r.current.destroy(),r.current=null)}},[f,i,s className="w-full px-4 py-2 rounded-lg text-sm" />
- `};var Lw=({gatewayStatus:t})=>{let e=ee(!1),{data:n,loading:s,refresh:o}=ct("/api/google/accounts",Wh,{maxAgeMs:3e4}),r=F(()=>Array.isArray(n?.accounts)?n.accounts:[],[n?.accounts]),i=!!n?.hasCompanyCredentials,a=!!n?.hasPersonalCredentials,l=q(async()=>o({force:!0}),[o]);return L(()=>{if(t!=="running"){e.current=!1;return}e.current||(e.current=!0,l().catch(()=>{}))},[t,l]),{accounts:r,loading:s,hasCompanyCredentials:i,hasPersonalCredentials:a,refreshAccounts:l}};var Ew=({gatewayStatus:t,accounts:e=[]})=>{let[n,s]=y({}),[o,r]=y(!1),i=F(()=>e.map(x=>String(x?.id||"").trim()).filter(Boolean).sort().join("|"),[e]),{data:a,loading:l,refresh:c}=ct("/api/gmail/config",Gh,{enabled:t==="running",maxAgeMs:3e4}),d=q(async()=>c({force:!0}),[c]);L(()=>{t==="running"&&e.length&&d().catch(()=>{})},[i,e.length,t,d]);let u=F(()=>{let x=new Map;for(let v of a?.accounts||[])x.set(String(v.accountId||""),v);return x},[a]),p=F(()=>{let x=new Map;for(let v of a?.clients||[])x.set(String(v.client||"default"),v);return x},[a]),f=(x,v)=>{s(w=>{let $=String(x||"");if(!$)return w;if(v)return{...w,[$]:!0};if(!w[$])return w;let S={...w};return delete S[$],S})},g=q(async(x,{destination:v=null}={})=>{let w=String(x||"");f(w,!0);try{let $=await Jh(w,{destination:v});return await d(),$}finally{f(w,!1)}},[d]),m=q(async x=>{let v=String(x||"");f(v,!0);try{await Zh(v),await d()}finally{f(v,!1)}},[d]),h=q(async(x="")=>{let v=String(x||"");v&&f(v,!0);try{await Yh({accountId:v,force:!0}),await d()}finally{v&&f(v,!1)}},[d]),b=q(async({client:x="default",projectId:v="",regeneratePushToken:w=!1}={})=>{r(!0);try{let $=await qh({client:x,projectId:v,regeneratePushToken:w});return await d(),$}catch($){throw String($?.message||"").toLowerCase().includes("not found")?new Error("Gmail watch API route not found. Restart AlphaClaw so /api/gmail routes are loaded."):$}finally{r(!1)}},[d]);return{loading:l,config:a,watchByAccountId:u,clientConfigByClient:p,busyByAccountId:n,savingClient:o,refresh:d,saveClientSetup:b,startWatchForAccount:g,stopWatchForAccount:m,renewForAccount:h}};var mt=P.bind(T),L3=async t=>{let e=String(t||"");if(!e)return!1;try{if(navigator?.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}try{let n=document.createElement("textarea");return n.value=e,n.setAttribute("readonly",""),n.style.position="fixed",n.style.opacity="0",document.body.appendChild(n),n.select(),document.execCommand("copy"),document.body.removeChild(n),!0}catch{return!1}},Iw=["Install + Authenticate gcloud","Enable APIs","Create Topic + IAM","Create Push Subscription","Build with your Agent"],E3=Iw.slice(0,3),yc=Is,vc=(t="",e=()=>{})=>mt` + `};var Dw=({gatewayStatus:t})=>{let e=ee(!1),{data:n,loading:s,refresh:o}=ct("/api/google/accounts",Wh,{maxAgeMs:3e4}),r=F(()=>Array.isArray(n?.accounts)?n.accounts:[],[n?.accounts]),i=!!n?.hasCompanyCredentials,a=!!n?.hasPersonalCredentials,l=q(async()=>o({force:!0}),[o]);return L(()=>{if(t!=="running"){e.current=!1;return}e.current||(e.current=!0,l().catch(()=>{}))},[t,l]),{accounts:r,loading:s,hasCompanyCredentials:i,hasPersonalCredentials:a,refreshAccounts:l}};var Nw=({gatewayStatus:t,accounts:e=[]})=>{let[n,s]=y({}),[o,r]=y(!1),i=F(()=>e.map(x=>String(x?.id||"").trim()).filter(Boolean).sort().join("|"),[e]),{data:a,loading:l,refresh:c}=ct("/api/gmail/config",Gh,{enabled:t==="running",maxAgeMs:3e4}),d=q(async()=>c({force:!0}),[c]);L(()=>{t==="running"&&e.length&&d().catch(()=>{})},[i,e.length,t,d]);let u=F(()=>{let x=new Map;for(let v of a?.accounts||[])x.set(String(v.accountId||""),v);return x},[a]),p=F(()=>{let x=new Map;for(let v of a?.clients||[])x.set(String(v.client||"default"),v);return x},[a]),f=(x,v)=>{s(w=>{let $=String(x||"");if(!$)return w;if(v)return{...w,[$]:!0};if(!w[$])return w;let S={...w};return delete S[$],S})},g=q(async(x,{destination:v=null}={})=>{let w=String(x||"");f(w,!0);try{let $=await Jh(w,{destination:v});return await d(),$}finally{f(w,!1)}},[d]),m=q(async x=>{let v=String(x||"");f(v,!0);try{await Zh(v),await d()}finally{f(v,!1)}},[d]),h=q(async(x="")=>{let v=String(x||"");v&&f(v,!0);try{await Yh({accountId:v,force:!0}),await d()}finally{v&&f(v,!1)}},[d]),b=q(async({client:x="default",projectId:v="",regeneratePushToken:w=!1}={})=>{r(!0);try{let $=await qh({client:x,projectId:v,regeneratePushToken:w});return await d(),$}catch($){throw String($?.message||"").toLowerCase().includes("not found")?new Error("Gmail watch API route not found. Restart AlphaClaw so /api/gmail routes are loaded."):$}finally{r(!1)}},[d]);return{loading:l,config:a,watchByAccountId:u,clientConfigByClient:p,busyByAccountId:n,savingClient:o,refresh:d,saveClientSetup:b,startWatchForAccount:g,stopWatchForAccount:m,renewForAccount:h}};var mt=P.bind(T),O3=async t=>{let e=String(t||"");if(!e)return!1;try{if(navigator?.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}try{let n=document.createElement("textarea");return n.value=e,n.setAttribute("readonly",""),n.style.position="fixed",n.style.opacity="0",document.body.appendChild(n),n.select(),document.execCommand("copy"),document.body.removeChild(n),!0}catch{return!1}},Ow=["Install + Authenticate gcloud","Enable APIs","Create Topic + IAM","Create Push Subscription","Build with your Agent"],B3=Ow.slice(0,3),yc=Ds,vc=(t="",e=()=>{})=>mt`
     
-`,Dw=({visible:t=!1,account:e=null,clientConfig:n=null,saving:s=!1,onClose:o=()=>{},onSaveSetup:r=async()=>{},onFinish:i=async()=>{}})=>{let[a,l]=y(0),[c,d]=y(""),[u,p]=y(!1),[f,g]=y(""),[m,h]=y(!1),[b,x]=y(!1),[v,w]=y(!1),[$,S]=y(!1),[C,_]=y(!1),{selectedSessionKey:k,setSelectedSessionKey:A,loading:O,error:D}=yr({enabled:t,filter:pc}),{sessions:z,destinationSessionKey:E,setDestinationSessionKey:M,selectedDestination:R}=Ds({enabled:t,resetKey:String(e?.id||"")});L(()=>{t&&(l(0),g(""),d(""),p(!1),h(!1),x(!1),w(!1),S(!1),_(!!n?.webhookExists))},[t,e?.id]);let B=n?.commands||null,I=!!(String(n?.projectId||"").trim()||B),U=u||!I&&!m,W=String(c||"").trim()||String(n?.projectId||"").trim()||"",G=C,se=G?E3:Iw,K=se.length,j=String(e?.client||n?.client||"default").trim()||"default",X=F(()=>U?String(c||"").trim().length>0:!0,[U,c]),de=q(async he=>{if(await L3(he)){N("Copied to clipboard","success");return}N("Could not copy text","error")},[]),le=q(()=>{g(""),d(String(n?.projectId||"").trim()),h(!1),p(!0)},[n?.projectId]),ie=async()=>{try{g(""),await i({client:j,projectId:String(c||"").trim(),destination:R}),x(!0),l(he=>Math.min(he+1,K-1))}catch(he){g(he.message||"Could not finish setup")}},ne=async()=>{if(!s){if(U){if(!X)return;g("");try{await r({client:j,projectId:String(c||"").trim()}),p(!1),h(!0)}catch(he){g(he.message||"Could not save project id");return}return}l(he=>Math.min(he+1,K-1))}},xe=async()=>{if(!(v||$))try{w(!0);let ue=`I just enabled Gmail watch for "${String(e?.email||"this account").trim()||"this account"}", set up the webhook, and created the transform file. Help me set up what I want to do with incoming email.`;await fa({message:ue,sessionKey:k}),S(!0),N("Message sent to your agent","success")}catch(he){N(he.message||"Could not send message to agent","error")}finally{w(!1)}};return mt` - <${De} +`,Bw=({visible:t=!1,account:e=null,clientConfig:n=null,saving:s=!1,onClose:o=()=>{},onSaveSetup:r=async()=>{},onFinish:i=async()=>{}})=>{let[a,l]=y(0),[c,d]=y(""),[u,p]=y(!1),[f,g]=y(""),[m,h]=y(!1),[b,x]=y(!1),[v,w]=y(!1),[$,S]=y(!1),[C,_]=y(!1),{selectedSessionKey:k,setSelectedSessionKey:A,loading:D,error:N}=yr({enabled:t,filter:pc}),{sessions:U,destinationSessionKey:O,setDestinationSessionKey:M,selectedDestination:R}=Ns({enabled:t,resetKey:String(e?.id||"")});L(()=>{t&&(l(0),g(""),d(""),p(!1),h(!1),x(!1),w(!1),S(!1),_(!!n?.webhookExists))},[t,e?.id]);let B=n?.commands||null,E=!!(String(n?.projectId||"").trim()||B),G=u||!E&&!m,H=String(c||"").trim()||String(n?.projectId||"").trim()||"",z=C,te=z?B3:Ow,K=te.length,V=String(e?.client||n?.client||"default").trim()||"default",Z=F(()=>G?String(c||"").trim().length>0:!0,[G,c]),ue=q(async pe=>{if(await O3(pe)){I("Copied to clipboard","success");return}I("Could not copy text","error")},[]),re=q(()=>{g(""),d(String(n?.projectId||"").trim()),h(!1),p(!0)},[n?.projectId]),oe=async()=>{try{g(""),await i({client:V,projectId:String(c||"").trim(),destination:R}),x(!0),l(pe=>Math.min(pe+1,K-1))}catch(pe){g(pe.message||"Could not finish setup")}},ne=async()=>{if(!s){if(G){if(!Z)return;g("");try{await r({client:V,projectId:String(c||"").trim()}),p(!1),h(!0)}catch(pe){g(pe.message||"Could not save project id");return}return}l(pe=>Math.min(pe+1,K-1))}},me=async()=>{if(!(v||$))try{w(!0);let ce=`I just enabled Gmail watch for "${String(e?.email||"this account").trim()||"this account"}", set up the webhook, and created the transform file. Help me set up what I want to do with incoming email.`;await fa({message:ce,sessionKey:k}),S(!0),I("Message sent to your agent","success")}catch(pe){I(pe.message||"Could not send message to agent","error")}finally{w(!1)}};return mt` + <${Te} visible=${t} onClose=${o} closeOnOverlayClick=${!1} @@ -6879,24 +6955,24 @@ ${t} - <${nt} className="w-3.5 h-3.5 text-body" /> + <${Ze} className="w-3.5 h-3.5 text-body" />
Gmail Pub / Sub Setup
- ${se.map((he,ue)=>mt` + ${te.map((pe,ce)=>mt`
`)}
- <${Ne} - title=${`Step ${a+1} of ${K}: ${se[a]}`} + <${Pe} + title=${`Step ${a+1} of ${K}: ${te[a]}`} actions=${null} /> ${f?mt`
${f}
`:null} - ${U?mt` + ${G?mt`
@@ -6917,16 +6993,16 @@ ${t}d(he.target.value)} + oninput=${pe=>d(pe.target.value)} class="w-full bg-field border border-border rounded-lg px-2.5 py-2 text-xs font-mono focus:border-fg-muted focus:outline-none" placeholder="my-gcp-project" />
`:null} - ${!U&&a===0?mt` + ${!G&&a===0?mt`
- Using project ${W}. + Using project ${H}.
If gcloud is not installed on your computer, @@ -6942,35 +7018,35 @@ ${t}
${vc(`gcloud auth login -gcloud config set project ${W}`,()=>de(`gcloud auth login -gcloud config set project ${W}`))} +gcloud config set project ${H}`,()=>ue(`gcloud auth login +gcloud config set project ${H}`))} `:null} - ${!U&&a===1?vc(B?.enableApis||"",()=>de(B?.enableApis||"")):null} - ${!U&&a===2?mt` + ${!G&&a===1?vc(B?.enableApis||"",()=>ue(B?.enableApis||"")):null} + ${!G&&a===2?mt` ${vc(`${B?.createTopic||""} -${B?.grantPublisher||""}`.trim(),()=>de(`${B?.createTopic||""} +${B?.grantPublisher||""}`.trim(),()=>ue(`${B?.createTopic||""} ${B?.grantPublisher||""}`.trim()))} `:null} - ${!G&&!U&&a===3?mt` - ${vc(B?.createSubscription||"",()=>de(B?.createSubscription||""))} + ${!z&&!G&&a===3?mt` + ${vc(B?.createSubscription||"",()=>ue(B?.createSubscription||""))}
<${vr} label="Deliver to" - sessions=${z} - selectedSessionKey=${E} + sessions=${U} + selectedSessionKey=${O} onChangeSessionKey=${M} - disabled=${G||O||s} - loading=${O} - error=${D} + disabled=${z||D||s} + loading=${D} + error=${N} allowNone=${!0} noneValue=${yc} noneLabel="Default" loadingLabel="Loading sessions..." - helperText=${G?"This Gmail webhook has already been created. To edit delivery routing, ask your agent.":null} + helperText=${z?"This Gmail webhook has already been created. To edit delivery routing, ask your agent.":null} selectClassName="w-full bg-field border border-border rounded-lg px-2.5 py-2 text-xs font-mono focus:border-fg-muted focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed" helperClassName="text-xs text-fg-muted" statusClassName="text-[11px] text-fg-muted" @@ -6978,7 +7054,7 @@ ${B?.grantPublisher||""}`.trim()))} />
`:null} - ${!G&&a===4?mt` + ${!z&&a===4?mt`
@@ -6995,21 +7071,21 @@ ${B?.grantPublisher||""}`.trim()))}
- <${Z} - onClick=${xe} + <${Y} + onClick=${me} disabled=${!k||$} loading=${v} idleLabel=${$?"Sent":"Send to Agent"} @@ -7019,33 +7095,33 @@ ${B?.grantPublisher||""}`.trim()))} className="h-[34px] px-3" />
- ${O?mt`
+ ${D?mt`
Loading sessions...
`:null} - ${D?mt`
- ${D} + ${N?mt`
+ ${N}
`:null}
`:null}
- ${a===0?mt`${U?mt`
`:mt`
`:mt``}`:mt`<${Z} - onClick=${()=>l(he=>Math.max(he-1,0))} + `}`:mt`<${Y} + onClick=${()=>l(pe=>Math.max(pe-1,0))} disabled=${s} idleLabel="Back" tone="secondary" size="md" className="w-full justify-center" />`} - ${!G&&a===K-2?mt`<${Z} - onClick=${ie} + ${!z&&a===K-2?mt`<${Y} + onClick=${oe} disabled=${!1} loading=${s} idleLabel="Enable watch" @@ -7053,14 +7129,14 @@ ${B?.grantPublisher||""}`.trim()))} tone="primary" size="md" className="w-full justify-center" - />`:a`:a`:mt`<${Z} + />`:mt`<${Y} onClick=${o} disabled=${s||v} idleLabel="Done" @@ -7069,13 +7145,13 @@ ${B?.grantPublisher||""}`.trim()))} className="w-full justify-center" />`}
- - `};var Ns=P.bind(T),I3=(t=[],e=[])=>t.length!==e.length||t.some(n=>!e.includes(n)),$c=(t={})=>!!t.personal,D3="/assets/icons/google_icon.svg",Nw=({gatewayStatus:t,onRestartRequired:e=()=>{},onOpenGmailWebhook:n=()=>{}})=>{let{accounts:s,loading:o,hasCompanyCredentials:r,refreshAccounts:i}=Lw({gatewayStatus:t}),[a,l]=y(""),[c,d]=y({}),[u,p]=y({}),[f,g]=y({}),[m,h]=y({}),[b,x]=y(!1),[v,w]=y({visible:!1,accountId:"",client:"default",personal:!1,title:"Connect Google Workspace",submitLabel:"Connect Google",defaultInstrType:"workspace",initialValues:{}}),[$,S]=y(!1),[C,_]=y(!1),[k,A]=y(""),[O,D]=y({visible:!1,accountId:""}),{loading:z,watchByAccountId:E,clientConfigByClient:M,busyByAccountId:R,savingClient:B,refresh:I,saveClientSetup:U,startWatchForAccount:W,stopWatchForAccount:G}=Ew({gatewayStatus:t,accounts:s}),se=F(()=>s.some(Q=>$c(Q)),[s]),K=F(()=>s.some(Q=>!$c(Q)),[s]),j=q(Q=>s.find(pe=>pe.id===Q)||null,[s]),X=q(Q=>{let pe=Array.isArray(Q.activeScopes)&&Q.activeScopes.length?Q.activeScopes:Array.isArray(Q.services)&&Q.services.length?Q.services:wr();p(te=>({...te,[Q.id]:[...pe]})),d(te=>{let Ee=te[Q.id];return!Ee||!I3(Ee,pe)?{...te,[Q.id]:[...pe]}:te})},[]);L(()=>{if(!s.length){l("");return}let Q=s.find(pe=>!pe.authenticated)?.id||"";l(pe=>pe&&s.some(te=>te.id===pe)?pe:Q),s.forEach(pe=>X(pe))},[s,X]);let de=q(Q=>{let pe=j(Q);if(!pe)return;let te=c[Q]||pe.activeScopes||wr();if(!te.length){window.alert("Select at least one service");return}let Ee=`/auth/google/start?accountId=${encodeURIComponent(Q)}&services=${encodeURIComponent(te.join(","))}&_ts=${Date.now()}`,ke=window.open(Ee,`google-auth-${Q}`,"popup=yes,width=500,height=700");(!ke||ke.closed)&&(window.location.href=Ee)},[j,c]),le=(Q,pe)=>{d(te=>({...te,[Q]:_w(te[Q]||[],pe)}))},ie=q(async Q=>{g(pe=>{let te={...pe};return delete te[Q],te}),h({[Q]:!0});try{let pe=await jh(Q);pe.results&&g(te=>({...te,[Q]:pe.results}))}finally{h(pe=>{if(!pe[Q])return pe;let te={...pe};return delete te[Q],te})}},[]);L(()=>{let Q=async pe=>{if(pe.data?.google==="success"){N("\u2713 Google account connected","success");let te=String(pe.data?.accountId||"").trim();g({}),await i(),await I(),te&&await ie(te)}else pe.data?.google==="error"&&N(`\u2717 Google auth failed: ${pe.data.message||"unknown"}`,"error")};return window.addEventListener("message",Q),()=>window.removeEventListener("message",Q)},[ie,i,I]),L(()=>{!a||!j(a)?.authenticated||m[a]||f[a]||ie(a)},[s,f,m,a,j,ie]);let ne=async Q=>{let pe=await Kh(Q);if(!pe.ok){N(`Failed to disconnect: ${pe.error||"unknown"}`,"error");return}N("Google account disconnected","success"),g(te=>{let Ee={...te};return delete Ee[Q],Ee}),await i(),await I()},xe=({accountId:Q="",client:pe="default",personal:te=!1,title:Ee="Connect Google Workspace",submitLabel:ke="Connect Google",defaultInstrType:H=te?"personal":"workspace",initialValues:re={}})=>{w({visible:!0,accountId:Q,client:pe,personal:te,title:Ee,submitLabel:ke,defaultInstrType:H,initialValues:re})},he=()=>{w(Q=>({...Q,visible:!1}))},ue=async Q=>{Q?.id&&l(Q.id),await i(),Q?.id&&de(Q.id)},me=async({email:Q,setError:pe})=>{_(!0);try{let te=await Uh({email:Q,client:"default",personal:!1,services:wr()});if(!te.ok){pe?.(te.error||"Could not add account");return}S(!1),te.accountId&&l(te.accountId),await i(),te.accountId&&de(te.accountId)}finally{_(!1)}},V=()=>{if(x(!1),K&&r){S(!0);return}xe({client:"default",personal:!1,title:"Add Company Account",submitLabel:"Save Credentials",defaultInstrType:"workspace"})},J=()=>{x(!1),xe({client:"personal",personal:!0,title:"Add Personal Account",submitLabel:"Save Credentials",defaultInstrType:"personal"})},oe=async Q=>{let pe=j(Q);if(!pe)return;let te=$c(pe),Ee=te?"personal":pe.client||"default",ke={};try{let H=await Vh({accountId:pe.id,client:Ee});H?.ok&&(ke={clientId:String(H.clientId||""),clientSecret:String(H.clientSecret||"")})}catch{N("Could not load saved client credentials","warning")}xe({accountId:pe.id,client:Ee,personal:te,title:`Edit Credentials (${pe.email})`,submitLabel:"Save Credentials",defaultInstrType:te?"personal":"workspace",initialValues:{email:pe.email,...ke}})},ce=Q=>{D({visible:!0,accountId:String(Q||"")})},be=()=>{D({visible:!1,accountId:""})},Ve=async Q=>{let pe=j(Q);if(!pe)return;let te=String(pe.client||"default").trim()||"default",Ee=M.get(te);if(!Ee?.configured||!Ee?.webhookExists){ce(Q);return}try{(await W(Q))?.restartRequired&&e(!0),N("Gmail watch enabled","success")}catch(ke){N(ke.message||"Could not enable Gmail watch","error")}},et=async Q=>{try{await G(Q),N("Gmail watch disabled","info")}catch(pe){N(pe.message||"Could not disable Gmail watch","error")}},wt=async({client:Q,projectId:pe,destination:te=null})=>{let Ee=String(O.accountId||"").trim();Ee&&(await U({client:Q,projectId:pe,regeneratePushToken:!1}),await W(Ee,{destination:te}),N("Gmail setup complete and watch enabled","success"))},Nt=()=>Ns` + + `};var Os=P.bind(T),F3=(t=[],e=[])=>t.length!==e.length||t.some(n=>!e.includes(n)),$c=(t={})=>!!t.personal,H3="/assets/icons/google_icon.svg",Fw=({gatewayStatus:t,onRestartRequired:e=()=>{},onOpenGmailWebhook:n=()=>{}})=>{let{accounts:s,loading:o,hasCompanyCredentials:r,refreshAccounts:i}=Dw({gatewayStatus:t}),[a,l]=y(""),[c,d]=y({}),[u,p]=y({}),[f,g]=y({}),[m,h]=y({}),[b,x]=y(!1),[v,w]=y({visible:!1,accountId:"",client:"default",personal:!1,title:"Connect Google Workspace",submitLabel:"Connect Google",defaultInstrType:"workspace",initialValues:{}}),[$,S]=y(!1),[C,_]=y(!1),[k,A]=y(""),[D,N]=y({visible:!1,accountId:""}),{loading:U,watchByAccountId:O,clientConfigByClient:M,busyByAccountId:R,savingClient:B,refresh:E,saveClientSetup:G,startWatchForAccount:H,stopWatchForAccount:z}=Nw({gatewayStatus:t,accounts:s}),te=F(()=>s.some(Q=>$c(Q)),[s]),K=F(()=>s.some(Q=>!$c(Q)),[s]),V=q(Q=>s.find(fe=>fe.id===Q)||null,[s]),Z=q(Q=>{let fe=Array.isArray(Q.activeScopes)&&Q.activeScopes.length?Q.activeScopes:Array.isArray(Q.services)&&Q.services.length?Q.services:wr();p(se=>({...se,[Q.id]:[...fe]})),d(se=>{let De=se[Q.id];return!De||!F3(De,fe)?{...se,[Q.id]:[...fe]}:se})},[]);L(()=>{if(!s.length){l("");return}let Q=s.find(fe=>!fe.authenticated)?.id||"";l(fe=>fe&&s.some(se=>se.id===fe)?fe:Q),s.forEach(fe=>Z(fe))},[s,Z]);let ue=q(Q=>{let fe=V(Q);if(!fe)return;let se=c[Q]||fe.activeScopes||wr();if(!se.length){window.alert("Select at least one service");return}let De=`/auth/google/start?accountId=${encodeURIComponent(Q)}&services=${encodeURIComponent(se.join(","))}&_ts=${Date.now()}`,ke=window.open(De,`google-auth-${Q}`,"popup=yes,width=500,height=700");(!ke||ke.closed)&&(window.location.href=De)},[V,c]),re=(Q,fe)=>{d(se=>({...se,[Q]:Tw(se[Q]||[],fe)}))},oe=q(async Q=>{g(fe=>{let se={...fe};return delete se[Q],se}),h({[Q]:!0});try{let fe=await jh(Q);fe.results&&g(se=>({...se,[Q]:fe.results}))}finally{h(fe=>{if(!fe[Q])return fe;let se={...fe};return delete se[Q],se})}},[]);L(()=>{let Q=async fe=>{if(fe.data?.google==="success"){I("\u2713 Google account connected","success");let se=String(fe.data?.accountId||"").trim();g({}),await i(),await E(),se&&await oe(se)}else fe.data?.google==="error"&&I(`\u2717 Google auth failed: ${fe.data.message||"unknown"}`,"error")};return window.addEventListener("message",Q),()=>window.removeEventListener("message",Q)},[oe,i,E]),L(()=>{!a||!V(a)?.authenticated||m[a]||f[a]||oe(a)},[s,f,m,a,V,oe]);let ne=async Q=>{let fe=await Kh(Q);if(!fe.ok){I(`Failed to disconnect: ${fe.error||"unknown"}`,"error");return}I("Google account disconnected","success"),g(se=>{let De={...se};return delete De[Q],De}),await i(),await E()},me=({accountId:Q="",client:fe="default",personal:se=!1,title:De="Connect Google Workspace",submitLabel:ke="Connect Google",defaultInstrType:W=se?"personal":"workspace",initialValues:ae={}})=>{w({visible:!0,accountId:Q,client:fe,personal:se,title:De,submitLabel:ke,defaultInstrType:W,initialValues:ae})},pe=()=>{w(Q=>({...Q,visible:!1}))},ce=async Q=>{Q?.id&&l(Q.id),await i(),Q?.id&&ue(Q.id)},ge=async({email:Q,setError:fe})=>{_(!0);try{let se=await Uh({email:Q,client:"default",personal:!1,services:wr()});if(!se.ok){fe?.(se.error||"Could not add account");return}S(!1),se.accountId&&l(se.accountId),await i(),se.accountId&&ue(se.accountId)}finally{_(!1)}},j=()=>{if(x(!1),K&&r){S(!0);return}me({client:"default",personal:!1,title:"Add Company Account",submitLabel:"Save Credentials",defaultInstrType:"workspace"})},J=()=>{x(!1),me({client:"personal",personal:!0,title:"Add Personal Account",submitLabel:"Save Credentials",defaultInstrType:"personal"})},ie=async Q=>{let fe=V(Q);if(!fe)return;let se=$c(fe),De=se?"personal":fe.client||"default",ke={};try{let W=await Vh({accountId:fe.id,client:De});W?.ok&&(ke={clientId:String(W.clientId||""),clientSecret:String(W.clientSecret||"")})}catch{I("Could not load saved client credentials","warning")}me({accountId:fe.id,client:De,personal:se,title:`Edit Credentials (${fe.email})`,submitLabel:"Save Credentials",defaultInstrType:se?"personal":"workspace",initialValues:{email:fe.email,...ke}})},de=Q=>{N({visible:!0,accountId:String(Q||"")})},be=()=>{N({visible:!1,accountId:""})},Ve=async Q=>{let fe=V(Q);if(!fe)return;let se=String(fe.client||"default").trim()||"default",De=M.get(se);if(!De?.configured||!De?.webhookExists){de(Q);return}try{(await H(Q))?.restartRequired&&e(!0),I("Gmail watch enabled","success")}catch(ke){I(ke.message||"Could not enable Gmail watch","error")}},tt=async Q=>{try{await z(Q),I("Gmail watch disabled","info")}catch(fe){I(fe.message||"Could not disable Gmail watch","error")}},wt=async({client:Q,projectId:fe,destination:se=null})=>{let De=String(D.accountId||"").trim();De&&(await G({client:Q,projectId:fe,regeneratePushToken:!1}),await H(De,{destination:se}),I("Gmail setup complete and watch enabled","success"))},Nt=()=>Os`
Google logo
- <${Z} - onClick=${V} + <${Y} + onClick=${j} tone="primary" size="sm" idleLabel="Add Company Account" className="w-full font-medium" /> - <${Z} + <${Y} onClick=${J} tone="secondary" size="sm" @@ -7104,11 +7180,11 @@ ${B?.grantPublisher||""}`.trim()))} />
- `;return Ns` + `;return Os`

Google Accounts

- ${s.length?Ns` + ${s.length?Os`
<${pt} open=${b} @@ -7116,63 +7192,63 @@ ${B?.grantPublisher||""}`.trim()))} title="Add Google account" onClose=${()=>x(!1)} onToggle=${()=>x(Q=>!Q)} - renderTrigger=${({onToggle:Q,ariaLabel:pe,title:te})=>Ns` - <${Z} + renderTrigger=${({onToggle:Q,ariaLabel:fe,title:se})=>Os` + <${Y} onClick=${Q} tone="subtle" size="sm" idleLabel="+ Add Account" - ariaLabel=${pe} - title=${te} + ariaLabel=${fe} + title=${se} /> `} > - <${We} onClick=${V}> + <${Oe} onClick=${j}> Company account - - ${se?null:Ns` - <${We} onClick=${J}> + + ${te?null:Os` + <${Oe} onClick=${J}> Personal account - + `}
`:null}
- ${o?Ns`
+ ${o?Os`
Loading... -
`:s.length?Ns` +
`:s.length?Os`
- ${s.map(Q=>Ns`<${Pw} + ${s.map(Q=>Os`<${Ew} key=${Q.id} account=${Q} personal=${$c(Q)} expanded=${a===Q.id} - onToggleExpanded=${pe=>l(te=>te===pe?"":pe)} + onToggleExpanded=${fe=>l(se=>se===fe?"":fe)} scopes=${c[Q.id]||Q.activeScopes||wr()} savedScopes=${u[Q.id]||Q.activeScopes||wr()} apiStatus=${f[Q.id]||{}} checkingApis=${a===Q.id&&!!m[Q.id]} - onToggleScope=${le} - onCheckApis=${ie} - onUpdatePermissions=${pe=>de(pe)} - onEditCredentials=${oe} - onDisconnect=${pe=>A(pe)} - gmailWatchStatus=${E.get(Q.id)||null} + onToggleScope=${re} + onCheckApis=${oe} + onUpdatePermissions=${fe=>ue(fe)} + onEditCredentials=${ie} + onDisconnect=${fe=>A(fe)} + gmailWatchStatus=${O.get(Q.id)||null} gmailWatchBusy=${!!R[Q.id]} onEnableGmailWatch=${Ve} - onDisableGmailWatch=${et} - onOpenGmailSetup=${ce} + onDisableGmailWatch=${tt} + onOpenGmailSetup=${de} onOpenGmailWebhook=${n} />`)}
`:Nt()}
- <${Mw} + <${Pw} visible=${v.visible} - onClose=${he} - onSaved=${ue} + onClose=${pe} + onSaved=${ce} title=${v.title} submitLabel=${v.submitLabel} defaultInstrType=${v.defaultInstrType} @@ -7182,21 +7258,21 @@ ${B?.grantPublisher||""}`.trim()))} initialValues=${v.initialValues} /> - <${Rw} + <${Iw} visible=${$} onClose=${()=>S(!1)} - onSubmit=${me} + onSubmit=${ge} loading=${C} title="Add Company Account" /> - <${Dw} - visible=${O.visible} - account=${j(O.accountId)} - clientConfig=${M.get(String(j(O.accountId)?.client||"default").trim()||"default")||null} - saving=${B||z} + <${Bw} + visible=${D.visible} + account=${V(D.accountId)} + clientConfig=${M.get(String(V(D.accountId)?.client||"default").trim()||"default")||null} + saving=${B||U} onClose=${be} - onSaveSetup=${U} + onSaveSetup=${G} onFinish=${wt} /> @@ -7209,19 +7285,19 @@ ${B?.grantPublisher||""}`.trim()))} onCancel=${()=>A("")} onConfirm=${async()=>{let Q=k;A(""),await ne(Q)}} /> - `};var wc=P.bind(T),N3=(t,e)=>t.find(n=>n.key===e)?.value||"",O3=(t,e)=>{for(let n of t.providers)if((Mn[n]||[]).some(r=>!!N3(e,r.key)))return{active:!0,provider:n};return{active:!1,provider:null}},Ow=({onSwitchTab:t})=>{let{data:e,loading:n}=ct("/api/env",Vr,{maxAgeMs:3e4}),s=Array.isArray(e?.vars)?e.vars:[];return n?null:wc` + `};var wc=P.bind(T),W3=(t,e)=>t.find(n=>n.key===e)?.value||"",V3=(t,e)=>{for(let n of t.providers)if((An[n]||[]).some(r=>!!W3(e,r.key)))return{active:!0,provider:n};return{active:!1,provider:null}},Hw=({onSwitchTab:t})=>{let{data:e,loading:n}=ct("/api/env",Vr,{maxAgeMs:3e4}),s=Array.isArray(e?.vars)?e.vars:[];return n?null:wc`

Features

- ${gg.map(r=>{let i=O3(r,s);return wc` + ${bg.map(r=>{let i=V3(r,s);return wc`
${r.label} ${i.active?wc` - ${zs[i.provider]||i.provider} + ${Us[i.provider]||i.provider} - <${ae} tone="success">Enabled + <${le} tone="success">Enabled `:wc` @@ -7230,27 +7306,27 @@ ${B?.grantPublisher||""}`.trim()))} onclick=${a=>{a.preventDefault(),t?.("envars")}} class="text-xs px-2 py-1 rounded-lg ac-btn-ghost" >Add provider - <${ae} tone=${r.hasDefault?"neutral":"danger"}>Disabled + <${le} tone=${r.hasDefault?"neutral":"danger"}>Disabled `}
`})}
- `};var B3=P.bind(T),Bw=({doctorStatus:t=null,dismissedUntilMs:e=0,onOpenDoctor:n=()=>{},onDismiss:s=()=>{}})=>fc(t,e)?B3` + `};var j3=P.bind(T),Ww=({doctorStatus:t=null,dismissedUntilMs:e=0,onOpenDoctor:n=()=>{},onDismiss:s=()=>{}})=>fc(t,e)?j3`

Drift Doctor

-

${rw(t)}

+

${lw(t)}

- <${Z} + <${Y} onClick=${s} tone="secondary" idleLabel="Dismiss for 1 week" /> - <${Z} + <${Y} onClick=${n} tone="warning" idleLabel="Open Drift Doctor" @@ -7258,7 +7334,7 @@ ${B?.grantPublisher||""}`.trim()))}
- `:null;var kc="0 * * * *",Fw=({statusData:t=null,watchdogData:e=null,doctorStatusData:n=null,onRefreshStatuses:s=()=>{},isActive:o=!1,restartSignal:r=0}={})=>{let[i,a]=y(!1),[l,c]=y(!1),[d,u]=y(!0),[p,f]=y(kc),[g,m]=y(!1),[h,b]=y(kc),[x,v]=y(!1),[w,$]=y(!1),[S,C]=y(!1),_=ee(null),k=t,A=e,O=n,D=k?.gateway??null,z=k?.channels??null,E=k?.repo||null,M=k?.syncCron||null,R=k?.openclawVersion||null,B=bs.some(ue=>{let me=z?.[ue];if(!me)return!1;let V=me.accounts&&typeof me.accounts=="object"?me.accounts:{};return Object.keys(V).length>0?Object.values(V).some(J=>J&&J.status!=="paired"):me.status!=="paired"}),I=Re(async()=>(await Co()).pending||[],3e3,{enabled:B&&D==="running",cacheKey:"/api/pairings"}),U=I.data||[],W=D==="running"&&(w||!S),G=Re(async()=>{let ue=await ga();return C(ue?.cliAutoApproveComplete===!0),ue.pending||[]},5e3,{enabled:W,cacheKey:"/api/devices"}),se=G.data||[];L(()=>{o&&(I.refresh(),W&&G.refresh())},[G.refresh,o,s,I.refresh,w,W]),L(()=>{if(!r||!o)return;s(),I.refresh(),W&&G.refresh();let ue=setTimeout(()=>{s(),I.refresh(),W&&G.refresh()},1200),me=setTimeout(()=>{s(),I.refresh(),W&&G.refresh()},3500);return()=>{clearTimeout(ue),clearTimeout(me)}},[G.refresh,o,s,I.refresh,r,w,W]),L(()=>{M&&(u(M.enabled!==!1),f(M.schedule||kc),b(M.enabled===!1?"disabled":M.schedule||kc))},[M?.enabled,M?.schedule]),L(()=>()=>{_.current&&clearTimeout(_.current)},[]);let K=()=>{v(!0),_.current&&clearTimeout(_.current),_.current=setTimeout(()=>{v(!1),_.current=null},2800),s(),I.refresh(),setTimeout(()=>{s(),I.refresh()},700),setTimeout(()=>{s(),I.refresh()},1800)},j=async({enabled:ue=d,schedule:me=p}={})=>{if(!g){m(!0);try{let V=await ym({enabled:ue,schedule:me});if(!V.ok)throw new Error(V.error||"Could not save sync settings");N("Sync schedule updated","success"),s()}catch(V){N(V.message||"Could not save sync settings","error")}finally{m(!1)}}};return{state:{channels:z,dashboardLoading:i,devicePending:se,doctorStatus:O,gatewayStatus:D,hasUnpaired:B,openclawVersion:R,pending:U,pairingStatusRefreshing:x,repairingWatchdog:l,repo:E,savingSyncCron:g,syncCron:M,syncCronChoice:h,syncCronEnabled:d,syncCronSchedule:p,syncCronStatusText:d?"Enabled":"Disabled",watchdogStatus:A},actions:{handleApprove:async(ue,me,V="")=>{await _o(ue,me,V),K()},handleDeviceApprove:async ue=>{await ba(ue),setTimeout(G.refresh,500),setTimeout(G.refresh,2e3)},handleDeviceReject:async ue=>{await xa(ue),setTimeout(G.refresh,500),setTimeout(G.refresh,2e3)},handleOpenDashboard:async()=>{if(!i){$(!0),a(!0);try{let ue=await hm();console.log("[dashboard] response:",JSON.stringify(ue)),window.open(ue.url||"/openclaw","_blank")}catch(ue){console.error("[dashboard] error:",ue),window.open("/openclaw","_blank")}finally{a(!1)}}},handleReject:async(ue,me,V="")=>{try{await Mo(ue,me,V),K()}catch(J){N(J.message||"Could not reject pairing","error")}},handleSyncCronChoiceChange:async ue=>{b(ue);let me=ue!=="disabled",V=me?ue:p;u(me),f(V),await j({enabled:me,schedule:V})},handleWatchdogRepair:async()=>{if(!l){c(!0);try{let ue=await ha();if(!ue.ok)throw new Error(ue.error||"Repair failed");N("Repair triggered","success"),setTimeout(()=>{s()},800)}catch(ue){N(ue.message||"Could not run repair","error")}finally{c(!1)}}}}}};var Sc=P.bind(T),Hw=({statusData:t=null,watchdogData:e=null,doctorStatusData:n=null,agents:s=[],doctorWarningDismissedUntilMs:o=0,onRefreshStatuses:r=()=>{},onSwitchTab:i=()=>{},onNavigate:a=()=>{},onOpenGmailWebhook:l=()=>{},isActive:c=!1,restartingGateway:d=!1,onRestartGateway:u=()=>{},restartSignal:p=0,openclawUpdateInProgress:f=!1,onOpenclawVersionActionComplete:g=()=>{},onOpenclawUpdate:m=()=>{},onRestartRequired:h=()=>{},onDismissDoctorWarning:b=()=>{}})=>{let{state:x,actions:v}=Fw({statusData:t,watchdogData:e,doctorStatusData:n,onRefreshStatuses:r,isActive:c,restartSignal:p});return Sc` + `:null;var kc="0 * * * *",Vw=({statusData:t=null,watchdogData:e=null,doctorStatusData:n=null,onRefreshStatuses:s=()=>{},isActive:o=!1,restartSignal:r=0}={})=>{let[i,a]=y(!1),[l,c]=y(!1),[d,u]=y(!0),[p,f]=y(kc),[g,m]=y(!1),[h,b]=y(kc),[x,v]=y(!1),[w,$]=y(!1),[S,C]=y(!1),_=ee(null),k=t,A=e,D=n,N=k?.gateway??null,U=k?.channels??null,O=k?.repo||null,M=k?.syncCron||null,R=k?.openclawVersion||null,B=xs.some(ce=>{let ge=U?.[ce];if(!ge)return!1;let j=ge.accounts&&typeof ge.accounts=="object"?ge.accounts:{};return Object.keys(j).length>0?Object.values(j).some(J=>J&&J.status!=="paired"):ge.status!=="paired"}),E=Ee(async()=>(await Co()).pending||[],3e3,{enabled:B&&N==="running",cacheKey:"/api/pairings"}),G=E.data||[],H=N==="running"&&(w||!S),z=Ee(async()=>{let ce=await ga();return C(ce?.cliAutoApproveComplete===!0),ce.pending||[]},5e3,{enabled:H,cacheKey:"/api/devices"}),te=z.data||[];L(()=>{o&&(E.refresh(),H&&z.refresh())},[z.refresh,o,s,E.refresh,w,H]),L(()=>{if(!r||!o)return;s(),E.refresh(),H&&z.refresh();let ce=setTimeout(()=>{s(),E.refresh(),H&&z.refresh()},1200),ge=setTimeout(()=>{s(),E.refresh(),H&&z.refresh()},3500);return()=>{clearTimeout(ce),clearTimeout(ge)}},[z.refresh,o,s,E.refresh,r,w,H]),L(()=>{M&&(u(M.enabled!==!1),f(M.schedule||kc),b(M.enabled===!1?"disabled":M.schedule||kc))},[M?.enabled,M?.schedule]),L(()=>()=>{_.current&&clearTimeout(_.current)},[]);let K=()=>{v(!0),_.current&&clearTimeout(_.current),_.current=setTimeout(()=>{v(!1),_.current=null},2800),s(),E.refresh(),setTimeout(()=>{s(),E.refresh()},700),setTimeout(()=>{s(),E.refresh()},1800)},V=async({enabled:ce=d,schedule:ge=p}={})=>{if(!g){m(!0);try{let j=await ym({enabled:ce,schedule:ge});if(!j.ok)throw new Error(j.error||"Could not save sync settings");I("Sync schedule updated","success"),s()}catch(j){I(j.message||"Could not save sync settings","error")}finally{m(!1)}}};return{state:{channels:U,dashboardLoading:i,devicePending:te,doctorStatus:D,gatewayStatus:N,hasUnpaired:B,openclawVersion:R,pending:G,pairingStatusRefreshing:x,repairingWatchdog:l,repo:O,savingSyncCron:g,syncCron:M,syncCronChoice:h,syncCronEnabled:d,syncCronSchedule:p,syncCronStatusText:d?"Enabled":"Disabled",watchdogStatus:A},actions:{handleApprove:async(ce,ge,j="")=>{await _o(ce,ge,j),K()},handleDeviceApprove:async ce=>{await ba(ce),setTimeout(z.refresh,500),setTimeout(z.refresh,2e3)},handleDeviceReject:async ce=>{await xa(ce),setTimeout(z.refresh,500),setTimeout(z.refresh,2e3)},handleOpenDashboard:async()=>{if(!i){$(!0),a(!0);try{let ce=await hm();console.log("[dashboard] response:",JSON.stringify(ce)),window.open(ce.url||"/openclaw","_blank")}catch(ce){console.error("[dashboard] error:",ce),window.open("/openclaw","_blank")}finally{a(!1)}}},handleReject:async(ce,ge,j="")=>{try{await Ao(ce,ge,j),K()}catch(J){I(J.message||"Could not reject pairing","error")}},handleSyncCronChoiceChange:async ce=>{b(ce);let ge=ce!=="disabled",j=ge?ce:p;u(ge),f(j),await V({enabled:ge,schedule:j})},handleWatchdogRepair:async()=>{if(!l){c(!0);try{let ce=await ha();if(!ce.ok)throw new Error(ce.error||"Repair failed");I("Repair triggered","success"),setTimeout(()=>{s()},800)}catch(ce){I(ce.message||"Could not run repair","error")}finally{c(!1)}}}}}};var Sc=P.bind(T),jw=({statusData:t=null,watchdogData:e=null,doctorStatusData:n=null,agents:s=[],doctorWarningDismissedUntilMs:o=0,onRefreshStatuses:r=()=>{},onSwitchTab:i=()=>{},onNavigate:a=()=>{},onOpenGmailWebhook:l=()=>{},isActive:c=!1,restartingGateway:d=!1,onRestartGateway:u=()=>{},restartSignal:p=0,openclawUpdateInProgress:f=!1,onOpenclawVersionActionComplete:g=()=>{},onOpenclawUpdate:m=()=>{},onRestartRequired:h=()=>{},onDismissDoctorWarning:b=()=>{}})=>{let{state:x,actions:v}=Vw({statusData:t,watchdogData:e,doctorStatusData:n,onRefreshStatuses:r,isActive:c,restartSignal:p});return Sc`
<${bc} status=${x.gatewayStatus} @@ -7273,7 +7349,7 @@ ${B?.grantPublisher||""}`.trim()))} onOpenclawVersionActionComplete=${g} onOpenclawUpdate=${m} /> - <${Bw} + <${Ww} doctorStatus=${x.doctorStatus} dismissedUntilMs=${o} onOpenDoctor=${()=>i("doctor")} @@ -7281,7 +7357,7 @@ ${B?.grantPublisher||""}`.trim()))} /> <${nl} channelsSection=${Sc` - <${Cb} + <${Mb} channels=${x.channels} agents=${s} onNavigate=${a} @@ -7299,8 +7375,8 @@ ${B?.grantPublisher||""}`.trim()))} /> `} /> - <${Ow} onSwitchTab=${i} /> - <${Nw} + <${Hw} onSwitchTab=${i} /> + <${Fw} gatewayStatus=${x.gatewayStatus} onRestartRequired=${h} onOpenGmailWebhook=${l} @@ -7370,9 +7446,9 @@ ${B?.grantPublisher||""}`.trim()))} />
- `};var F3=P.bind(T),pf=({statusData:t=null,watchdogData:e=null,doctorStatusData:n=null,agents:s=[],doctorWarningDismissedUntilMs:o=0,onRefreshStatuses:r=()=>{},onSetLocation:i=()=>{},onNavigate:a=()=>{},restartingGateway:l=!1,onRestartGateway:c=()=>{},restartSignal:d=0,openclawUpdateInProgress:u=!1,onOpenclawVersionActionComplete:p=()=>{},onOpenclawUpdate:f=()=>{},onRestartRequired:g=()=>{},onDismissDoctorWarning:m=()=>{}})=>F3` + `};var z3=P.bind(T),pf=({statusData:t=null,watchdogData:e=null,doctorStatusData:n=null,agents:s=[],doctorWarningDismissedUntilMs:o=0,onRefreshStatuses:r=()=>{},onSetLocation:i=()=>{},onNavigate:a=()=>{},restartingGateway:l=!1,onRestartGateway:c=()=>{},restartSignal:d=0,openclawUpdateInProgress:u=!1,onOpenclawVersionActionComplete:p=()=>{},onOpenclawUpdate:f=()=>{},onRestartRequired:g=()=>{},onDismissDoctorWarning:m=()=>{}})=>z3`
- <${Hw} + <${jw} statusData=${t} watchdogData=${e} doctorStatusData=${n} @@ -7393,11 +7469,11 @@ ${B?.grantPublisher||""}`.trim()))} onDismissDoctorWarning=${m} />
-`;var Dt=P.bind(T),H3={anthropic:{label:"Anthropic",modes:[{id:"api_key",label:"API Key",profileSuffix:"default",placeholder:"sk-ant-api03-...",url:"https://console.anthropic.com",field:"key"},{id:"token",label:"Setup Token",profileSuffix:"manual",placeholder:"sk-ant-oat01-...",hint:"From claude setup-token (uses your Claude subscription)",field:"token"}]},openai:{label:"OpenAI",modes:[{id:"api_key",label:"API Key",profileSuffix:"default",placeholder:"sk-...",url:"https://platform.openai.com",field:"key"}]},"openai-codex":{label:"OpenAI Codex",modes:[{id:"oauth",label:"Codex OAuth",isCodexOauth:!0}]},google:{label:"Gemini",modes:[{id:"api_key",label:"API Key",profileSuffix:"default",placeholder:"AI...",url:"https://aistudio.google.com",field:"key"}]}},W3={id:"api_key",label:"API Key",profileSuffix:"default",placeholder:"...",field:"key"},V3=t=>{let e=Mn[t]||[];return e.length===0?[W3]:e.map(n=>({id:"api_key",label:n.label||"API Key",profileSuffix:"default",placeholder:n.placeholder||"...",hint:n.hint,url:n.url,field:"key"}))},j3=t=>H3[t]||{label:zs[t]||t,modes:V3(t)},zi=(t,e)=>`${t.provider||e}:${t.profileSuffix||"default"}`,Cc=t=>String(t?.key||t?.token||t?.access||"").trim(),z3=({codexStatus:t,onRefreshCodex:e})=>{let[n,s]=y(!1),[o,r]=y(!1),[i,a]=y(""),[l,c]=y(!1),d=ee(null);L(()=>()=>{d.current&&clearInterval(d.current)},[]),L(()=>{let g=async m=>{m.data?.codex==="success"?(N("Codex connected","success"),s(!1),r(!1),await e()):m.data?.codex==="error"&&N(`Codex auth failed: ${m.data.message||"unknown error"}`,"error")};return window.addEventListener("message",g),()=>window.removeEventListener("message",g)},[e]);let u=()=>{s(!0),r(!0);let g=window.open("/auth/codex/start","codex-auth","popup=yes,width=640,height=780");if(!g||g.closed){r(!1),window.location.href="/auth/codex/start";return}d.current&&clearInterval(d.current),d.current=setInterval(()=>{g.closed&&(clearInterval(d.current),d.current=null,r(!1))},500)},p=async()=>{if(!(!i.trim()||l)){c(!0);try{let g=await Wr(i.trim());if(!g.ok)throw new Error(g.error||"Codex OAuth exchange failed");a(""),N("Codex connected","success"),s(!1),r(!1),await e()}catch(g){N(g.message||"Codex OAuth exchange failed","error")}finally{c(!1)}}},f=async()=>{let g=await Hr();if(!g.ok){N(g.error||"Failed to disconnect Codex","error");return}N("Codex disconnected","success"),s(!1),r(!1),a(""),await e()};return Dt` +`;var Dt=P.bind(T),U3={anthropic:{label:"Anthropic",modes:[{id:"api_key",label:"API Key",profileSuffix:"default",placeholder:"sk-ant-api03-...",url:"https://console.anthropic.com",field:"key"},{id:"token",label:"Setup Token",profileSuffix:"manual",placeholder:"sk-ant-oat01-...",hint:"From claude setup-token (uses your Claude subscription)",field:"token"}]},openai:{label:"OpenAI",modes:[{id:"api_key",label:"API Key",profileSuffix:"default",placeholder:"sk-...",url:"https://platform.openai.com",field:"key"}]},"openai-codex":{label:"OpenAI Codex",modes:[{id:"oauth",label:"Codex OAuth",isCodexOauth:!0}]},google:{label:"Gemini",modes:[{id:"api_key",label:"API Key",profileSuffix:"default",placeholder:"AI...",url:"https://aistudio.google.com",field:"key"}]}},K3={id:"api_key",label:"API Key",profileSuffix:"default",placeholder:"...",field:"key"},G3=t=>{let e=An[t]||[];return e.length===0?[K3]:e.map(n=>({id:"api_key",label:n.label||"API Key",profileSuffix:"default",placeholder:n.placeholder||"...",hint:n.hint,url:n.url,field:"key"}))},q3=t=>U3[t]||{label:Us[t]||t,modes:G3(t)},zi=(t,e)=>`${t.provider||e}:${t.profileSuffix||"default"}`,Cc=t=>String(t?.key||t?.token||t?.access||"").trim(),J3=({codexStatus:t,onRefreshCodex:e})=>{let[n,s]=y(!1),[o,r]=y(!1),[i,a]=y(""),[l,c]=y(!1),d=ee(null);L(()=>()=>{d.current&&clearInterval(d.current)},[]),L(()=>{let g=async m=>{m.data?.codex==="success"?(I("Codex connected","success"),s(!1),r(!1),await e()):m.data?.codex==="error"&&I(`Codex auth failed: ${m.data.message||"unknown error"}`,"error")};return window.addEventListener("message",g),()=>window.removeEventListener("message",g)},[e]);let u=()=>{s(!0),r(!0);let g=window.open("/auth/codex/start","codex-auth","popup=yes,width=640,height=780");if(!g||g.closed){r(!1),window.location.href="/auth/codex/start";return}d.current&&clearInterval(d.current),d.current=setInterval(()=>{g.closed&&(clearInterval(d.current),d.current=null,r(!1))},500)},p=async()=>{if(!(!i.trim()||l)){c(!0);try{let g=await Wr(i.trim());if(!g.ok)throw new Error(g.error||"Codex OAuth exchange failed");a(""),I("Codex connected","success"),s(!1),r(!1),await e()}catch(g){I(g.message||"Codex OAuth exchange failed","error")}finally{c(!1)}}},f=async()=>{let g=await Hr();if(!g.ok){I(g.error||"Failed to disconnect Codex","error");return}I("Codex disconnected","success"),s(!1),r(!1),a(""),await e()};return Dt`
Codex OAuth - ${t.connected?Dt`<${ae} tone="success">Connected`:Dt`<${ae} tone="warning">Not connected`} + ${t.connected?Dt`<${le} tone="success">Connected`:Dt`<${le} tone="warning">Not connected`}
${t.connected?Dt`
@@ -7448,7 +7524,7 @@ ${B?.grantPublisher||""}`.trim()))} placeholder="http://localhost:1455/auth/callback?code=...&state=..." class="w-full bg-field border border-border rounded-lg px-3 py-2 text-xs text-body outline-none focus:border-fg-muted" /> - <${Z} + <${Y} onClick=${p} disabled=${!i.trim()||l} loading=${l} @@ -7460,11 +7536,11 @@ ${B?.grantPublisher||""}`.trim()))} /> `:null}
- `},Ww=({provider:t,authProfiles:e,authOrder:n,codexStatus:s,onEditProfile:o,onEditAuthOrder:r,getProfileValue:i,getEffectiveOrder:a,onRefreshCodex:l})=>{let c=j3(t),d=c.modes.filter($=>!$.isCodexOauth),u=d.length>1,p=c.modes.some($=>$.isCodexOauth),f=a(t),g=f?.[0]||null,m=n[t]||null,h=d.some($=>{let S=zi($,t),C=e.find(k=>k.id===S)||null,_=i(S);return Cc(_)!==Cc(C)}),b=JSON.stringify(f||null)!==JSON.stringify(m),x=h||b,v=d.some($=>{let S=zi($,t),C=i(S);return!!(C?.key||C?.token||C?.access)})||t==="openai-codex"&&!!s?.connected,w=$=>{let S=zi($,t),C=d.map(k=>zi(k,t)),_=[S,...C.filter(k=>k!==S)];r(t,_)};return Dt` + `},zw=({provider:t,authProfiles:e,authOrder:n,codexStatus:s,onEditProfile:o,onEditAuthOrder:r,getProfileValue:i,getEffectiveOrder:a,onRefreshCodex:l})=>{let c=q3(t),d=c.modes.filter($=>!$.isCodexOauth),u=d.length>1,p=c.modes.some($=>$.isCodexOauth),f=a(t),g=f?.[0]||null,m=n[t]||null,h=d.some($=>{let S=zi($,t),C=e.find(k=>k.id===S)||null,_=i(S);return Cc(_)!==Cc(C)}),b=JSON.stringify(f||null)!==JSON.stringify(m),x=h||b,v=d.some($=>{let S=zi($,t),C=i(S);return!!(C?.key||C?.token||C?.access)})||t==="openai-codex"&&!!s?.connected,w=$=>{let S=zi($,t),C=d.map(k=>zi(k,t)),_=[S,...C.filter(k=>k!==S)];r(t,_)};return Dt`

${c.label}

- ${p&&d.length===0?null:x?Dt`<${ae} tone="warning">Unsaved`:v?Dt`<${ae} tone="success">Connected`:Dt`<${ae} tone="warning">Not configured`} + ${p&&d.length===0?null:x?Dt`<${le} tone="warning">Unsaved`:v?Dt`<${le} tone="success">Connected`:Dt`<${le} tone="warning">Not configured`}
${d.map($=>{let S=zi($,t),C=$.provider||t,_=i(S),k=_?.[$.field]||"",A=!u||g===S||!g&&$===d[0];return Dt`
@@ -7472,7 +7548,7 @@ ${B?.grantPublisher||""}`.trim()))} - ${u&&A?Dt`<${ae} tone="cyan">Primary`:null} + ${u&&A?Dt`<${le} tone="cyan">Primary`:null} ${u&&!A&&k?Dt`
<${Pt} value=${k} - onInput=${O=>{let D=O.target.value,z={type:$.id,provider:C,[$.field]:D};_?.expires&&(z.expires=_.expires),o(S,z);let E=e.find(R=>R.id===S)||null;Cc(z)===Cc(E)&&u?r(t,m):u&&D&&!A&&w($)}} + onInput=${D=>{let N=D.target.value,U={type:$.id,provider:C,[$.field]:N};_?.expires&&(U.expires=_.expires),o(S,U);let O=e.find(R=>R.id===S)||null;Cc(U)===Cc(O)&&u?r(t,m):u&&N&&!A&&w($)}} placeholder=${$.placeholder||""} isSecret=${!0} inputClass="flex-1 w-full bg-field border border-border rounded-lg px-3 py-2 text-sm text-body outline-none focus:border-fg-muted font-mono" @@ -7499,16 +7575,16 @@ ${B?.grantPublisher||""}`.trim()))} `})} ${c.modes.some($=>$.isCodexOauth)?Dt`
- <${z3} + <${J3} codexStatus=${s} onRefreshCodex=${l} />
`:null}
- `};var _t=P.bind(T),U3=t=>{let e=new Set;for(let n of Object.keys(t)){let s=ri(n);s&&e.add(s)}return[...e]},K3=["anthropic","openai","openai-codex",...jr.filter(t=>!["anthropic","openai"].includes(t))],Vw=({onRestartRequired:t=()=>{},agentId:e,embedded:n=!1})=>{let{catalog:s,primary:o,configuredModels:r,authProfiles:i,authOrder:a,codexStatus:l,loading:c,saving:d,ready:u,error:p,isDirty:f,addModel:g,removeModel:m,setPrimaryModel:h,editProfile:b,editAuthOrder:x,getProfileValue:v,getEffectiveOrder:w,cancelChanges:$,saveAll:S,refreshCodexStatus:C}=rl(e),_=F(()=>new Set(Object.keys(r)),[r]),k=F(()=>Lo(s),[s]),A=F(()=>k.filter(I=>!_.has(I.key)),[k,_]),O=F(()=>[...s].filter(I=>!_.has(I.key)).sort((I,U)=>{let W=jo(vs(I))-jo(vs(U));return W!==0?W:String(I.label||I.key).localeCompare(String(U.label||U.key))}),[s,_]),D=F(()=>U3(r),[r]),z=F(()=>{let I=[];for(let U of K3)D.includes(U)&&I.push(U);for(let U of D)I.includes(U)||I.push(U);return I},[D]),E=F(()=>sl({authProfiles:i,codexStatus:l}),[i,l]),M=F(()=>Object.keys(r).map(I=>{let U=s.find(se=>se.key===I),W=ri(I),G=!!E[W];return{key:I,label:U?.label||I,isPrimary:I===o,hasAuth:G}}),[r,s,o,E]),R=_t` - <${Qn} visible=${f}> - <${Z} + `};var _t=P.bind(T),Z3=t=>{let e=new Set;for(let n of Object.keys(t)){let s=ri(n);s&&e.add(s)}return[...e]},Y3=["anthropic","openai","openai-codex",...jr.filter(t=>!["anthropic","openai"].includes(t))],Uw=({onRestartRequired:t=()=>{},agentId:e,embedded:n=!1})=>{let{catalog:s,primary:o,configuredModels:r,authProfiles:i,authOrder:a,codexStatus:l,loading:c,saving:d,ready:u,error:p,isDirty:f,addModel:g,removeModel:m,setPrimaryModel:h,editProfile:b,editAuthOrder:x,getProfileValue:v,getEffectiveOrder:w,cancelChanges:$,saveAll:S,refreshCodexStatus:C}=rl(e),_=F(()=>new Set(Object.keys(r)),[r]),k=F(()=>Lo(s),[s]),A=F(()=>k.filter(E=>!_.has(E.key)),[k,_]),D=F(()=>[...s].filter(E=>!_.has(E.key)).sort((E,G)=>{let H=jo($s(E))-jo($s(G));return H!==0?H:String(E.label||E.key).localeCompare(String(G.label||G.key))}),[s,_]),N=F(()=>Z3(r),[r]),U=F(()=>{let E=[];for(let G of Y3)N.includes(G)&&E.push(G);for(let G of N)E.includes(G)||E.push(G);return E},[N]),O=F(()=>sl({authProfiles:i,codexStatus:l}),[i,l]),M=F(()=>Object.keys(r).map(E=>{let G=s.find(te=>te.key===E),H=ri(E),z=!!O[H];return{key:E,label:G?.label||E,isPrimary:E===o,hasAuth:z}}),[r,s,o,O]),R=_t` + <${es} visible=${f}> + <${Y} onClick=${$} disabled=${d} tone="secondary" @@ -7516,7 +7592,7 @@ ${B?.grantPublisher||""}`.trim()))} idleLabel="Cancel" className="text-xs" /> - <${Z} + <${Y} onClick=${S} disabled=${d} loading=${d} @@ -7527,20 +7603,20 @@ ${B?.grantPublisher||""}`.trim()))} loadingLabel="Saving…" className="text-xs" /> - - `;if(!u){let I=_t` + + `;if(!u){let E=_t`
<${Ce} className="h-4 w-4" /> Loading model settings...
- `;return n?I:_t` - <${zn} - header=${_t`<${Ne} title="Models" />`} + `;return n?E:_t` + <${Un} + header=${_t`<${Pe} title="Models" />`} > - ${I} - + ${E} + `}let B=_t`
@@ -7550,25 +7626,25 @@ ${B?.grantPublisher||""}`.trim()))} No models configured. Add a model below.

`:_t`
- ${M.map(I=>_t` + ${M.map(E=>_t`
${I.label}${E.label} - ${I.isPrimary?_t`<${ae} tone="cyan">Primary`:I.hasAuth?_t` + ${E.isPrimary?_t`<${le} tone="cyan">Primary`:E.hasAuth?_t` - `:_t`<${ae} tone="warning">Needs auth`} + `:_t`<${le} tone="warning">Needs auth`}
- ${z.length>0?_t` + ${U.length>0?_t`

Provider Authentication

- ${z.map(I=>_t` - <${Ww} - provider=${I} + ${U.map(E=>_t` + <${zw} + provider=${E} authProfiles=${i} authOrder=${a} codexStatus=${l} @@ -7621,14 +7697,14 @@ ${B?.grantPublisher||""}`.trim()))} ${B}
`:_t` - <${zn} - header=${_t`<${Ne} title="Models" actions=${R} />`} + <${Un} + header=${_t`<${Pe} title="Models" actions=${R} />`} > ${B} - - `};var G3=P.bind(T),ff=({onRestartRequired:t=()=>{}})=>G3` - <${Vw} onRestartRequired=${t} /> -`;var q3=1e4,jw=({enabled:t=!0}={})=>{let e=Re(async()=>{let n=await Pm(),s=Array.isArray(n?.nodes)?n.nodes:[],o=Array.isArray(n?.pending)?n.pending:[];return{nodes:s,pending:o}},q3,{enabled:t,cacheKey:"/api/nodes"});return{nodes:Array.isArray(e.data?.nodes)?e.data.nodes:[],pending:Array.isArray(e.data?.pending)?e.data.pending:[],loading:e.data===null&&!e.error,error:e.error?String(e.error.message||"Could not load nodes"):"",refresh:e.refresh}};var zw=()=>{let t=jw({enabled:!0}),[e,n]=y(!1),[s,o]=y(!1),{data:r,error:i}=ct("/api/nodes/connect-info",ya,{maxAgeMs:6e4}),a=Array.isArray(t.nodes)?t.nodes.filter(c=>c?.paired!==!1):[];L(()=>{i&&N(i.message||"Could not load node connect command","error")},[i]);let l=q(async()=>{if(!s){o(!0);try{await t.refresh()}finally{o(!1)}}},[t.refresh,s]);return{state:{wizardVisible:e,nodes:a,pending:t.pending,loadingNodes:t.loading,refreshingNodes:s,nodesError:t.error,connectInfo:r},actions:{openWizard:()=>n(!0),closeWizard:()=>n(!1),refreshNodes:l}}};var J3=35e3,Z3=1e4,Kw="nodesBrowserAttachStateByNode",Y3=/selected page has been closed/i,X3=async(t,e=J3)=>{let n=null;try{return await Promise.race([t,new Promise((s,o)=>{n=setTimeout(()=>{o(new Error("Browser check timed out"))},e)})])}finally{n&&clearTimeout(n)}},Uw=t=>{let e=Array.isArray(t?.caps)?t.caps:[],n=Array.isArray(t?.commands)?t.commands:[];return e.includes("browser")||n.includes("browser.proxy")},Q3=t=>{let e=String(t?.message||"Could not check node browser status").trim();return Y3.test(e)?"Selected Chrome page was closed. Click Attach to reconnect.":e},eR=()=>{let e=Fe()?.[Kw];return!e||typeof e!="object"||Array.isArray(e)?{}:e},tR=(t={})=>{vx(e=>({...e&&typeof e=="object"?e:{},[Kw]:t&&typeof t=="object"?t:{}}))},Gw=({nodes:t=[],onRefreshNodes:e=async()=>{}}={})=>{let[n,s]=y({}),[o,r]=y({}),[i,a]=y(""),[l,c]=y(()=>eR()),[d,u]=y(""),[p,f]=y(null),[g,m]=y(""),h=ee(0),b=ee(""),x=async(k,{successMessage:A="Connection command copied",errorMessage:O="Could not copy connection command"}={})=>{if(await Ho(k)){N(A,"success");return}N(O,"error")},v=q(async(k,{silent:A=!1}={})=>{let O=String(k||"").trim();if(!(!O||b.current)){b.current=O,A||a(O),r(D=>({...D,[O]:""}));try{let D=await X3(Em(O,"user")),z=D?.status&&typeof D.status=="object"?D.status:null;s(E=>({...E,[O]:z}))}catch(D){let z=Q3(D);s(E=>({...E,[O]:null})),r(E=>({...E,[O]:z})),A||N(z,"error")}finally{b.current="",A||a("")}}},[]),w=q((k,A)=>{let O=String(k||"").trim();O&&c(D=>{let z={...D&&typeof D=="object"?D:{},[O]:A===!0};return tR(z),z})},[]),$=q(async k=>{let A=String(k||"").trim();A&&(w(A,!0),await v(A))},[v,w]),S=q(k=>{let A=String(k||"").trim();A&&(w(A,!1),s(O=>{let D={...O||{}};return delete D[A],D}),r(O=>{let D={...O||{}};return delete D[A],D}))},[w]),C=q(k=>{let A=String(k||"").trim();A&&u(O=>O===A?"":A)},[]),_=q(async()=>{let k=String(p?.nodeId||"").trim();if(!(!k||g)){m(k);try{await Rm(k),S(k),N("Device removed","success"),f(null),u(""),await e()}catch(A){N(A.message||"Could not remove node","error")}finally{m("")}}},[S,e,p,g]);return L(()=>{if(i)return;let k=t.map(A=>({nodeId:String(A?.nodeId||"").trim(),connected:A?.connected===!0,browserCapable:Uw(A)})).find(A=>!(!A.nodeId||!A.connected||!A.browserCapable||l?.[A.nodeId]!==!0||n?.[A.nodeId]||o?.[A.nodeId]))?.nodeId;k&&v(k,{silent:!0})},[l,o,n,i,v,t]),L(()=>{if(i)return;let k=t.map(z=>({nodeId:String(z?.nodeId||"").trim(),connected:z?.connected===!0,browserCapable:Uw(z),browserRunning:n?.[String(z?.nodeId||"").trim()]?.running===!0})).filter(z=>z.nodeId&&z.connected&&z.browserCapable&&l?.[z.nodeId]===!0&&z.browserRunning).map(z=>z.nodeId);if(!k.length)return;let A=!0,D=setInterval(async()=>{if(!A||b.current)return;let z=h.current%k.length;h.current+=1;let E=k[z];await v(E,{silent:!0})},Z3);return()=>{A=!1,clearInterval(D)}},[l,n,i,v,t]),{browserStatusByNodeId:n,browserErrorByNodeId:o,checkingBrowserNodeId:i,browserAttachStateByNodeId:l,menuOpenNodeId:d,removeDialogNode:p,removingNodeId:g,handleCopyText:x,handleCheckNodeBrowser:v,handleAttachNodeBrowser:$,handleDetachNodeBrowser:S,handleOpenNodeMenu:C,handleRemoveNode:_,setMenuOpenNodeId:u,setRemoveDialogNode:f}};var ot=P.bind(T),nR=t=>String(t||"").replace(/"/g,'\\"'),qw=({node:t,connectInfo:e,maskToken:n=!1})=>{let s=String(e?.gatewayHost||"").trim()||"localhost",o=Number(e?.gatewayPort)||3e3,r=String(e?.gatewayToken||"").trim(),i=e?.tls===!0?"--tls":"",a=String(t?.displayName||t?.nodeId||"My Node").trim(),l=n?"****":r;return[l?`OPENCLAW_GATEWAY_TOKEN=${l}`:"","openclaw node run",`--host ${s}`,`--port ${o}`,i,`--display-name "${nR(a)}"`].filter(Boolean).join(" ")},sR=t=>t?.connected?ot`<${ae} tone="success">Connected`:t?.paired?ot`<${ae} tone="warning">Disconnected`:ot`<${ae} tone="danger">Pending approval`,oR=t=>{let e=Array.isArray(t?.caps)?t.caps:[],n=Array.isArray(t?.commands)?t.commands:[];return e.includes("browser")||n.includes("browser.proxy")},rR=t=>t.running?"success":"warning",iR=t=>t.running?"Attached":"Not connected",Jw=({nodes:t=[],pending:e=[],loading:n=!1,error:s="",connectInfo:o=null,onRefreshNodes:r=async()=>{}})=>{let i=Gw({nodes:t,onRefreshNodes:r}),{browserStatusByNodeId:a,browserErrorByNodeId:l,checkingBrowserNodeId:c,browserAttachStateByNodeId:d,menuOpenNodeId:u,removeDialogNode:p,removingNodeId:f,handleCopyText:g,handleCheckNodeBrowser:m,handleAttachNodeBrowser:h,handleDetachNodeBrowser:b,handleOpenNodeMenu:x,handleRemoveNode:v,setMenuOpenNodeId:w,setRemoveDialogNode:$}=i;return ot` + + `};var X3=P.bind(T),ff=({onRestartRequired:t=()=>{}})=>X3` + <${Uw} onRestartRequired=${t} /> +`;var Q3=1e4,Kw=({enabled:t=!0}={})=>{let e=Ee(async()=>{let n=await Pm(),s=Array.isArray(n?.nodes)?n.nodes:[],o=Array.isArray(n?.pending)?n.pending:[];return{nodes:s,pending:o}},Q3,{enabled:t,cacheKey:"/api/nodes"});return{nodes:Array.isArray(e.data?.nodes)?e.data.nodes:[],pending:Array.isArray(e.data?.pending)?e.data.pending:[],loading:e.data===null&&!e.error,error:e.error?String(e.error.message||"Could not load nodes"):"",refresh:e.refresh}};var Gw=()=>{let t=Kw({enabled:!0}),[e,n]=y(!1),[s,o]=y(!1),{data:r,error:i}=ct("/api/nodes/connect-info",ya,{maxAgeMs:6e4}),a=Array.isArray(t.nodes)?t.nodes.filter(c=>c?.paired!==!1):[];L(()=>{i&&I(i.message||"Could not load node connect command","error")},[i]);let l=q(async()=>{if(!s){o(!0);try{await t.refresh()}finally{o(!1)}}},[t.refresh,s]);return{state:{wizardVisible:e,nodes:a,pending:t.pending,loadingNodes:t.loading,refreshingNodes:s,nodesError:t.error,connectInfo:r},actions:{openWizard:()=>n(!0),closeWizard:()=>n(!1),refreshNodes:l}}};var eR=35e3,tR=1e4,Jw="nodesBrowserAttachStateByNode",nR=/selected page has been closed/i,sR=async(t,e=eR)=>{let n=null;try{return await Promise.race([t,new Promise((s,o)=>{n=setTimeout(()=>{o(new Error("Browser check timed out"))},e)})])}finally{n&&clearTimeout(n)}},qw=t=>{let e=Array.isArray(t?.caps)?t.caps:[],n=Array.isArray(t?.commands)?t.commands:[];return e.includes("browser")||n.includes("browser.proxy")},oR=t=>{let e=String(t?.message||"Could not check node browser status").trim();return nR.test(e)?"Selected Chrome page was closed. Click Attach to reconnect.":e},rR=()=>{let e=He()?.[Jw];return!e||typeof e!="object"||Array.isArray(e)?{}:e},iR=(t={})=>{kx(e=>({...e&&typeof e=="object"?e:{},[Jw]:t&&typeof t=="object"?t:{}}))},Zw=({nodes:t=[],onRefreshNodes:e=async()=>{}}={})=>{let[n,s]=y({}),[o,r]=y({}),[i,a]=y(""),[l,c]=y(()=>rR()),[d,u]=y(""),[p,f]=y(null),[g,m]=y(""),h=ee(0),b=ee(""),x=async(k,{successMessage:A="Connection command copied",errorMessage:D="Could not copy connection command"}={})=>{if(await Ho(k)){I(A,"success");return}I(D,"error")},v=q(async(k,{silent:A=!1}={})=>{let D=String(k||"").trim();if(!(!D||b.current)){b.current=D,A||a(D),r(N=>({...N,[D]:""}));try{let N=await sR(Em(D,"user")),U=N?.status&&typeof N.status=="object"?N.status:null;s(O=>({...O,[D]:U}))}catch(N){let U=oR(N);s(O=>({...O,[D]:null})),r(O=>({...O,[D]:U})),A||I(U,"error")}finally{b.current="",A||a("")}}},[]),w=q((k,A)=>{let D=String(k||"").trim();D&&c(N=>{let U={...N&&typeof N=="object"?N:{},[D]:A===!0};return iR(U),U})},[]),$=q(async k=>{let A=String(k||"").trim();A&&(w(A,!0),await v(A))},[v,w]),S=q(k=>{let A=String(k||"").trim();A&&(w(A,!1),s(D=>{let N={...D||{}};return delete N[A],N}),r(D=>{let N={...D||{}};return delete N[A],N}))},[w]),C=q(k=>{let A=String(k||"").trim();A&&u(D=>D===A?"":A)},[]),_=q(async()=>{let k=String(p?.nodeId||"").trim();if(!(!k||g)){m(k);try{await Rm(k),S(k),I("Device removed","success"),f(null),u(""),await e()}catch(A){I(A.message||"Could not remove node","error")}finally{m("")}}},[S,e,p,g]);return L(()=>{if(i)return;let k=t.map(A=>({nodeId:String(A?.nodeId||"").trim(),connected:A?.connected===!0,browserCapable:qw(A)})).find(A=>!(!A.nodeId||!A.connected||!A.browserCapable||l?.[A.nodeId]!==!0||n?.[A.nodeId]||o?.[A.nodeId]))?.nodeId;k&&v(k,{silent:!0})},[l,o,n,i,v,t]),L(()=>{if(i)return;let k=t.map(U=>({nodeId:String(U?.nodeId||"").trim(),connected:U?.connected===!0,browserCapable:qw(U),browserRunning:n?.[String(U?.nodeId||"").trim()]?.running===!0})).filter(U=>U.nodeId&&U.connected&&U.browserCapable&&l?.[U.nodeId]===!0&&U.browserRunning).map(U=>U.nodeId);if(!k.length)return;let A=!0,N=setInterval(async()=>{if(!A||b.current)return;let U=h.current%k.length;h.current+=1;let O=k[U];await v(O,{silent:!0})},tR);return()=>{A=!1,clearInterval(N)}},[l,n,i,v,t]),{browserStatusByNodeId:n,browserErrorByNodeId:o,checkingBrowserNodeId:i,browserAttachStateByNodeId:l,menuOpenNodeId:d,removeDialogNode:p,removingNodeId:g,handleCopyText:x,handleCheckNodeBrowser:v,handleAttachNodeBrowser:$,handleDetachNodeBrowser:S,handleOpenNodeMenu:C,handleRemoveNode:_,setMenuOpenNodeId:u,setRemoveDialogNode:f}};var ot=P.bind(T),aR=t=>String(t||"").replace(/"/g,'\\"'),Yw=({node:t,connectInfo:e,maskToken:n=!1})=>{let s=String(e?.gatewayHost||"").trim()||"localhost",o=Number(e?.gatewayPort)||3e3,r=String(e?.gatewayToken||"").trim(),i=e?.tls===!0?"--tls":"",a=String(t?.displayName||t?.nodeId||"My Node").trim(),l=n?"****":r;return[l?`OPENCLAW_GATEWAY_TOKEN=${l}`:"","openclaw node run",`--host ${s}`,`--port ${o}`,i,`--display-name "${aR(a)}"`].filter(Boolean).join(" ")},lR=t=>t?.connected?ot`<${le} tone="success">Connected`:t?.paired?ot`<${le} tone="warning">Disconnected`:ot`<${le} tone="danger">Pending approval`,cR=t=>{let e=Array.isArray(t?.caps)?t.caps:[],n=Array.isArray(t?.commands)?t.commands:[];return e.includes("browser")||n.includes("browser.proxy")},dR=t=>t.running?"success":"warning",uR=t=>t.running?"Attached":"Not connected",Xw=({nodes:t=[],pending:e=[],loading:n=!1,error:s="",connectInfo:o=null,onRefreshNodes:r=async()=>{}})=>{let i=Zw({nodes:t,onRefreshNodes:r}),{browserStatusByNodeId:a,browserErrorByNodeId:l,checkingBrowserNodeId:c,browserAttachStateByNodeId:d,menuOpenNodeId:u,removeDialogNode:p,removingNodeId:f,handleCopyText:g,handleCheckNodeBrowser:m,handleAttachNodeBrowser:h,handleDetachNodeBrowser:b,handleOpenNodeMenu:x,handleRemoveNode:v,setMenuOpenNodeId:w,setRemoveDialogNode:$}=i;return ot`
${e.length?ot`
`:t.length?ot`
- ${t.map(S=>{let C=String(S?.nodeId||"").trim(),_=a[C]||null,k=l[C]||"",A=c===C,O=S?.connected&&oR(S)&&C,D=d?.[C]===!0,z=!!_||!!k,E=_?.running===!0,M=D&&!z&&!A,R=O&&D&&!A&&z&&!E;return ot` + ${t.map(S=>{let C=String(S?.nodeId||"").trim(),_=a[C]||null,k=l[C]||"",A=c===C,D=S?.connected&&cR(S)&&C,N=d?.[C]===!0,U=!!_||!!k,O=_?.running===!0,M=N&&!U&&!A,R=D&&N&&!A&&U&&!O;return ot`
@@ -7669,7 +7745,7 @@ ${B?.grantPublisher||""}`.trim()))} class="shrink-0 inline-flex items-center gap-1 text-[11px] text-fg-muted hover:text-body" onclick=${()=>g(C,{successMessage:"Device ID copied",errorMessage:"Could not copy device ID"})} > - <${Us} + <${Ks} className="w-3.5 h-3.5" /> Copy device id @@ -7678,7 +7754,7 @@ ${B?.grantPublisher||""}`.trim()))}
- ${sR(S)} + ${lR(S)} ${S?.paired?ot` <${pt} open=${u===C} @@ -7687,12 +7763,12 @@ ${B?.grantPublisher||""}`.trim()))} onClose=${()=>w("")} onToggle=${()=>x(C)} > - <${We} + <${Oe} className="text-status-error hover:text-status-error" onClick=${()=>{w(""),$(S)}} > Remove device - + `:null}
@@ -7713,7 +7789,7 @@ ${B?.grantPublisher||""}`.trim()))} >
- ${O?ot` + ${D?ot`
Browser
- ${D?ot` + ${N?ot`
@@ -7746,8 +7822,8 @@ ${B?.grantPublisher||""}`.trim()))}
${_?ot` - <${ae} tone=${rR(_)} - >${iR(_)}${uR(_)} `:null} @@ -7761,8 +7837,8 @@ ${B?.grantPublisher||""}`.trim()))} className="h-3.5 w-3.5" /> `:null} - ${O&&!D?ot` - <${Z} + ${D&&!N?ot` + <${Y} onClick=${()=>h(C)} idleLabel="Attach" tone="primary" @@ -7770,14 +7846,14 @@ ${B?.grantPublisher||""}`.trim()))} /> `:null} ${R?ot` - <${Z} + <${Y} onClick=${()=>m(C)} idleLabel="Check" tone="secondary" size="sm" /> `:null} - ${O&&D&&!A?ot` + ${D&&N&&!A?ot`
- `};var Yw=3e3,Xw=({visible:t=!1,nodes:e=[],refreshNodes:n=async()=>{},onRestartRequired:s=()=>{},onClose:o=()=>{}}={})=>{let[r,i]=y(0),[a,l]=y(null),[c,d]=y(!1),[u,p]=y("My Mac Node"),[f,g]=y(""),[m,h]=y(!1),[b,x]=y([]),[v,w]=y(!1),$=ee(!1);L(()=>{t&&(i(0),g(""),h(!1),w(!1))},[t]),L(()=>{t&&(d(!0),ya().then(E=>{l(E||null)}).catch(E=>{N(E.message||"Could not load node connect command","error")}).finally(()=>{d(!1)}))},[t]);let S=F(()=>{let E=new Set,M=[];for(let R of e){let B=String(R?.nodeId||"").trim();!B||E.has(B)||R?.paired!==!1&&(E.add(B),M.push({nodeId:B,displayName:String(R?.displayName||R?.name||B),connected:R?.connected===!0}))}return M},[e]),C=F(()=>S.find(E=>E.nodeId===String(f||"").trim())||null,[S,f]),_=F(()=>{if(!a)return"";let E=String(a.gatewayHost||"").trim()||"localhost",M=Number(a.gatewayPort)||3e3,R=String(a.gatewayToken||"").trim(),B=a.tls===!0?" --tls":"",I=String(u||"").trim().replace(/"/g,'\\"');return[R?`OPENCLAW_GATEWAY_TOKEN=${R}`:"","openclaw node run",`--host ${E}`,`--port ${M}`,B.trim(),I?`--display-name "${I}"`:""].filter(Boolean).join(" ")},[a,u]),k=q(async()=>{if(!$.current){$.current=!0;try{await n();let E=await ga(),M=Array.isArray(E?.pending)?E.pending:[];x(M)}finally{$.current=!1}}},[n]);L(()=>{if(!t||r!==1)return;let E=!0,M=async()=>{if(E)try{await k()}catch{}};M();let R=setInterval(M,Yw);return()=>{E=!1,clearInterval(R)}},[k,r,t]),L(()=>{if(!t||r!==1)return;let E=S.some(B=>B.nodeId===String(f||"").trim()),M=String(u||"").trim().toLowerCase(),R=S.find(B=>String(B?.displayName||"").trim().toLowerCase()===M)||S[0];R&&(E&&String(f||"").trim()===R.nodeId||g(R.nodeId))},[u,S,f,r,t]);let A=q(async E=>{try{await ba(E),N("Pairing approved","success"),w(!0),await k()}catch(M){N(M.message||"Could not approve pairing","error")}},[k]),O=q(async E=>{try{await xa(E),N("Pairing rejected","info"),await k()}catch(M){N(M.message||"Could not reject pairing","error")}},[k]),D=q(async()=>{let E=String(f||"").trim();if(!E||m)return!1;h(!0);try{return await Lm(E),s(!0),N("Gateway routing now points to the selected node","success"),!0}catch(M){return N(M.message||"Could not configure gateway node routing","error"),!1}finally{h(!1)}},[m,s,f]),z=q(()=>{o()},[o]);return{step:r,setStep:i,connectInfo:a,loadingConnectInfo:c,displayName:u,setDisplayName:p,selectedNodeId:f,setSelectedNodeId:g,pairedNodes:S,selectedPairedNode:C,devicePending:b,approvedInSession:v,configuring:m,canFinish:v&&!!C?.connected,connectCommand:_,refreshNodeList:k,nodeDiscoveryPollIntervalMs:Yw,handleDeviceApprove:A,handleDeviceReject:O,applyGatewayNodeRouting:D,completeWizard:z}};var an=P.bind(T),Ui=["Install OpenClaw CLI","Connect Node"],Qw=({command:t="",onCopy:e=()=>{}})=>an` + `};var e1=3e3,t1=({visible:t=!1,nodes:e=[],refreshNodes:n=async()=>{},onRestartRequired:s=()=>{},onClose:o=()=>{}}={})=>{let[r,i]=y(0),[a,l]=y(null),[c,d]=y(!1),[u,p]=y("My Mac Node"),[f,g]=y(""),[m,h]=y(!1),[b,x]=y([]),[v,w]=y(!1),$=ee(!1);L(()=>{t&&(i(0),g(""),h(!1),w(!1))},[t]),L(()=>{t&&(d(!0),ya().then(O=>{l(O||null)}).catch(O=>{I(O.message||"Could not load node connect command","error")}).finally(()=>{d(!1)}))},[t]);let S=F(()=>{let O=new Set,M=[];for(let R of e){let B=String(R?.nodeId||"").trim();!B||O.has(B)||R?.paired!==!1&&(O.add(B),M.push({nodeId:B,displayName:String(R?.displayName||R?.name||B),connected:R?.connected===!0}))}return M},[e]),C=F(()=>S.find(O=>O.nodeId===String(f||"").trim())||null,[S,f]),_=F(()=>{if(!a)return"";let O=String(a.gatewayHost||"").trim()||"localhost",M=Number(a.gatewayPort)||3e3,R=String(a.gatewayToken||"").trim(),B=a.tls===!0?" --tls":"",E=String(u||"").trim().replace(/"/g,'\\"');return[R?`OPENCLAW_GATEWAY_TOKEN=${R}`:"","openclaw node run",`--host ${O}`,`--port ${M}`,B.trim(),E?`--display-name "${E}"`:""].filter(Boolean).join(" ")},[a,u]),k=q(async()=>{if(!$.current){$.current=!0;try{await n();let O=await ga(),M=Array.isArray(O?.pending)?O.pending:[];x(M)}finally{$.current=!1}}},[n]);L(()=>{if(!t||r!==1)return;let O=!0,M=async()=>{if(O)try{await k()}catch{}};M();let R=setInterval(M,e1);return()=>{O=!1,clearInterval(R)}},[k,r,t]),L(()=>{if(!t||r!==1)return;let O=S.some(B=>B.nodeId===String(f||"").trim()),M=String(u||"").trim().toLowerCase(),R=S.find(B=>String(B?.displayName||"").trim().toLowerCase()===M)||S[0];R&&(O&&String(f||"").trim()===R.nodeId||g(R.nodeId))},[u,S,f,r,t]);let A=q(async O=>{try{await ba(O),I("Pairing approved","success"),w(!0),await k()}catch(M){I(M.message||"Could not approve pairing","error")}},[k]),D=q(async O=>{try{await xa(O),I("Pairing rejected","info"),await k()}catch(M){I(M.message||"Could not reject pairing","error")}},[k]),N=q(async()=>{let O=String(f||"").trim();if(!O||m)return!1;h(!0);try{return await Lm(O),s(!0),I("Gateway routing now points to the selected node","success"),!0}catch(M){return I(M.message||"Could not configure gateway node routing","error"),!1}finally{h(!1)}},[m,s,f]),U=q(()=>{o()},[o]);return{step:r,setStep:i,connectInfo:a,loadingConnectInfo:c,displayName:u,setDisplayName:p,selectedNodeId:f,setSelectedNodeId:g,pairedNodes:S,selectedPairedNode:C,devicePending:b,approvedInSession:v,configuring:m,canFinish:v&&!!C?.connected,connectCommand:_,refreshNodeList:k,nodeDiscoveryPollIntervalMs:e1,handleDeviceApprove:A,handleDeviceReject:D,applyGatewayNodeRouting:N,completeWizard:U}};var an=P.bind(T),Ui=["Install OpenClaw CLI","Connect Node"],n1=({command:t="",onCopy:e=()=>{}})=>an`
-        <${Us} className="w-3.5 h-3.5" />
+        <${Ks} className="w-3.5 h-3.5" />
         Copy
       
     
-`,e1=async(t,e="text")=>{if(await Ho(t)){N("Copied to clipboard","success");return}N(`Could not copy ${e}`,"error")},t1=({visible:t=!1,nodes:e=[],refreshNodes:n=async()=>{},onRestartRequired:s=()=>{},onClose:o=()=>{}})=>{let r=Xw({visible:t,nodes:e,refreshNodes:n,onRestartRequired:s,onClose:o}),i=r.step===Ui.length-1;return an` - <${De} +`,s1=async(t,e="text")=>{if(await Ho(t)){I("Copied to clipboard","success");return}I(`Could not copy ${e}`,"error")},o1=({visible:t=!1,nodes:e=[],refreshNodes:n=async()=>{},onRestartRequired:s=()=>{},onClose:o=()=>{}})=>{let r=t1({visible:t,nodes:e,refreshNodes:n,onRestartRequired:s,onClose:o}),i=r.step===Ui.length-1;return an` + <${Te} visible=${t} onClose=${o} closeOnOverlayClick=${!1} @@ -7963,7 +8039,7 @@ ${t} - <${nt} className="w-3.5 h-3.5 text-body" /> + <${Ze} className="w-3.5 h-3.5 text-body" />
Node Setup Wizard
@@ -7983,7 +8059,7 @@ ${t} Install OpenClaw on the machine you want to connect as a node.
- ${Qw({command:"npm install -g openclaw",onCopy:()=>e1("npm install -g openclaw","command")})} + ${n1({command:"npm install -g openclaw",onCopy:()=>s1("npm install -g openclaw","command")})}
Requires Node.js 22+.
`:null} @@ -8005,7 +8081,7 @@ ${t} ${r.loadingConnectInfo?an`
Loading command... -
`:Qw({command:r.connectCommand||"Could not build connect command.",onCopy:()=>e1(r.connectCommand||"","command")})} +
`:n1({command:r.connectCommand||"Could not build connect command.",onCopy:()=>s1(r.connectCommand||"","command")})}
${r.devicePending.length?an` <${xc} @@ -8033,7 +8109,7 @@ ${t} ${r.step===0?an`
`:an` - <${Z} + <${Y} onClick=${()=>r.setStep(Math.max(0,r.step-1))} idleLabel="Back" tone="secondary" @@ -8042,7 +8118,7 @@ ${t} `} ${i?an` - <${Z} + <${Y} onClick=${async()=>{await r.applyGatewayNodeRouting()&&(r.completeWizard(),Promise.resolve(n()).catch(()=>{}))}} loading=${r.configuring} idleLabel=${r.canFinish?"Finish":"Awaiting pairing"} @@ -8053,7 +8129,7 @@ ${t} `:an` - <${Z} + <${Y} onClick=${()=>r.setStep(Math.min(Ui.length-1,r.step+1))} idleLabel="Next" tone="primary" @@ -8062,13 +8138,13 @@ ${t} `}
- - `};var n1=P.bind(T),s1=({onRestartRequired:t=()=>{}})=>{let{state:e,actions:n}=zw();return n1` + + `};var r1=P.bind(T),i1=({onRestartRequired:t=()=>{}})=>{let{state:e,actions:n}=Gw();return r1`
- <${Ne} + <${Pe} title="Nodes" - actions=${n1` - <${Z} + actions=${r1` + <${Y} onClick=${n.refreshNodes} loading=${e.refreshingNodes} loadingMode="inline" @@ -8076,7 +8152,7 @@ ${t} - <${Z} + <${Y} onClick=${n.openWizard} idleLabel="Connect Node" tone="primary" @@ -8085,7 +8161,7 @@ ${t} - <${Jw} + <${Xw} nodes=${e.nodes} pending=${e.pending} loading=${e.loadingNodes} @@ -8094,9 +8170,9 @@ ${t} - <${Zw} /> + <${Qw} /> - <${t1} + <${o1} visible=${e.wizardVisible} nodes=${e.nodes} refreshNodes=${n.refreshNodes} @@ -8104,38 +8180,38 @@ ${t}
- `};var dR=P.bind(T),hf=({onRestartRequired:t=()=>{}})=>dR` + `};var mR=P.bind(T),hf=({onRestartRequired:t=()=>{}})=>mR`
- <${s1} onRestartRequired=${t} /> + <${i1} onRestartRequired=${t} />
-`;var NU=P.bind(T);var OU=Object.values(Mn).flat().map(t=>t.key).filter((t,e,n)=>n.indexOf(t)===e);var jU=P.bind(T);var Ki=({to:t})=>{let[,e]=ca();return L(()=>{e(t)},[t,e]),null};var Gi=(t,e)=>{let n=String(e||"").trim();n&&t.set("accountId",n)},o1=async({accountId:t=""}={})=>{let e=new URLSearchParams;Gi(e,t);let n=e.toString()?`?${e.toString()}`:"";return(await Y(`/api/telegram/bot${n}`)).json()},r1=async({accountId:t=""}={})=>{let e=new URLSearchParams;Gi(e,t);let n=e.toString()?`?${e.toString()}`:"";return(await Y(`/api/telegram/workspace${n}`)).json()},i1=async({accountId:t=""}={})=>{let e=new URLSearchParams;Gi(e,t);let n=e.toString()?`?${e.toString()}`:"";return(await Y(`/api/telegram/workspace/reset${n}`,{method:"POST"})).json()},a1=async(t,{accountId:e=""}={})=>(await Y("/api/telegram/groups/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({groupId:t,accountId:e})})).json(),_c=async(t,{accountId:e=""}={})=>{let n=new URLSearchParams;Gi(n,e);let s=n.toString()?`?${n.toString()}`:"";return(await Y(`/api/telegram/groups/${encodeURIComponent(t)}/topics${s}`)).json()},Mc=async(t,e,{accountId:n=""}={})=>(await Y(`/api/telegram/groups/${encodeURIComponent(t)}/topics/bulk`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({topics:e,accountId:n})})).json(),Ac=async(t,e,{accountId:n=""}={})=>{let s=new URLSearchParams;Gi(s,n);let o=s.toString()?`?${s.toString()}`:"";return(await Y(`/api/telegram/groups/${encodeURIComponent(t)}/topics/${e}${o}`,{method:"DELETE"})).json()},l1=async(t,e,n,{accountId:s=""}={})=>(await Y(`/api/telegram/groups/${encodeURIComponent(t)}/topics/${encodeURIComponent(e)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({...n,accountId:s})})).json(),c1=async(t,e,{accountId:n=""}={})=>(await Y(`/api/telegram/groups/${encodeURIComponent(t)}/configure`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,accountId:n})})).json();var Mt=P.bind(T),d1=({currentStep:t,steps:e})=>Mt` +`;var JU=P.bind(T);var ZU=Object.values(An).flat().map(t=>t.key).filter((t,e,n)=>n.indexOf(t)===e);var nK=P.bind(T);var Ki=({to:t})=>{let[,e]=ca();return L(()=>{e(t)},[t,e]),null};var Gi=(t,e)=>{let n=String(e||"").trim();n&&t.set("accountId",n)},a1=async({accountId:t=""}={})=>{let e=new URLSearchParams;Gi(e,t);let n=e.toString()?`?${e.toString()}`:"";return(await X(`/api/telegram/bot${n}`)).json()},l1=async({accountId:t=""}={})=>{let e=new URLSearchParams;Gi(e,t);let n=e.toString()?`?${e.toString()}`:"";return(await X(`/api/telegram/workspace${n}`)).json()},c1=async({accountId:t=""}={})=>{let e=new URLSearchParams;Gi(e,t);let n=e.toString()?`?${e.toString()}`:"";return(await X(`/api/telegram/workspace/reset${n}`,{method:"POST"})).json()},d1=async(t,{accountId:e=""}={})=>(await X("/api/telegram/groups/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({groupId:t,accountId:e})})).json(),_c=async(t,{accountId:e=""}={})=>{let n=new URLSearchParams;Gi(n,e);let s=n.toString()?`?${n.toString()}`:"";return(await X(`/api/telegram/groups/${encodeURIComponent(t)}/topics${s}`)).json()},Ac=async(t,e,{accountId:n=""}={})=>(await X(`/api/telegram/groups/${encodeURIComponent(t)}/topics/bulk`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({topics:e,accountId:n})})).json(),Mc=async(t,e,{accountId:n=""}={})=>{let s=new URLSearchParams;Gi(s,n);let o=s.toString()?`?${s.toString()}`:"";return(await X(`/api/telegram/groups/${encodeURIComponent(t)}/topics/${e}${o}`,{method:"DELETE"})).json()},u1=async(t,e,n,{accountId:s=""}={})=>(await X(`/api/telegram/groups/${encodeURIComponent(t)}/topics/${encodeURIComponent(e)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({...n,accountId:s})})).json(),p1=async(t,e,{accountId:n=""}={})=>(await X(`/api/telegram/groups/${encodeURIComponent(t)}/configure`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,accountId:n})})).json();var At=P.bind(T),f1=({currentStep:t,steps:e})=>At`
- ${e.map((n,s)=>Mt` + ${e.map((n,s)=>At`
`)}
-`,u1=({accountId:t,botInfo:e,setBotInfo:n,onNext:s})=>{let[o,r]=y(!1),[i,a]=y(null),l=async()=>{r(!0),a(null);try{let c=await o1({accountId:t});if(!c.ok)throw new Error(c.error);n(c.bot)}catch(c){a(c.message)}r(!1)};return L(()=>{e||l()},[]),Mt` +`,h1=({accountId:t,botInfo:e,setBotInfo:n,onNext:s})=>{let[o,r]=y(!1),[i,a]=y(null),l=async()=>{r(!0),a(null);try{let c=await a1({accountId:t});if(!c.ok)throw new Error(c.error);n(c.bot)}catch(c){a(c.message)}r(!1)};return L(()=>{e||l()},[]),At`

Verify Bot Setup

- ${e&&Mt` + ${e&&At`
@${e.username} - <${ae} tone="success">Connected + <${le} tone="success">Connected

${e.first_name}

`} - ${i&&Mt` + ${i&&At`

${i}

`} - ${!e&&!o&&!i&&Mt`

Checking bot token...

`} + ${!e&&!o&&!i&&At`

Checking bot token...

`}

@@ -8168,7 +8244,7 @@ ${t}

- `},p1=({onNext:t,onBack:e})=>Mt` + `},m1=({onNext:t,onBack:e})=>At`

Create a Telegram Group

@@ -8236,7 +8312,7 @@ ${t}
-`,f1=({accountId:t,groupId:e,setGroupId:n,groupInfo:s,setGroupInfo:o,userId:r,setUserId:i,verifyGroupError:a,setVerifyGroupError:l,onNext:c,onBack:d})=>{let[u,p]=y(e||""),[f,g]=y(!1),[m,h]=y(!1),b=s?[...s.chat?.isForum?[]:["Topics are OFF. Enable Topics in Telegram group settings."],...s.bot?.isAdmin?[]:["Bot is not an admin. Promote it to admin in group members."],...s.bot?.canManageTopics?[]:["Bot is missing Manage Topics permission. Enable it in admin permissions."]]:[],x=async()=>{let $=u.trim();if($){g(!0),l(null);try{let S=await a1($,{accountId:t});if(!S.ok)throw new Error(S.error);n($),o(S),!String(r||"").trim()&&S.suggestedUserId&&i(String(S.suggestedUserId))}catch(S){l(S.message),o(null)}g(!1)}},v=!!(s&&s.chat?.isForum&&s.bot?.isAdmin&&s.bot?.canManageTopics),w=async()=>{if(!(!v||m)){l(null),h(!0);try{let $=String(r||"").trim(),S=await c1(e,{...$?{userId:$}:{},groupName:s?.chat?.title||e,requireMention:!1},{accountId:t});if(!S?.ok)throw new Error(S?.error||"Failed to configure Telegram group");S.userId&&i(String(S.userId)),c()}catch($){l($.message)}h(!1)}};return Mt` +`,g1=({accountId:t,groupId:e,setGroupId:n,groupInfo:s,setGroupInfo:o,userId:r,setUserId:i,verifyGroupError:a,setVerifyGroupError:l,onNext:c,onBack:d})=>{let[u,p]=y(e||""),[f,g]=y(!1),[m,h]=y(!1),b=s?[...s.chat?.isForum?[]:["Topics are OFF. Enable Topics in Telegram group settings."],...s.bot?.isAdmin?[]:["Bot is not an admin. Promote it to admin in group members."],...s.bot?.canManageTopics?[]:["Bot is missing Manage Topics permission. Enable it in admin permissions."]]:[],x=async()=>{let $=u.trim();if($){g(!0),l(null);try{let S=await d1($,{accountId:t});if(!S.ok)throw new Error(S.error);n($),o(S),!String(r||"").trim()&&S.suggestedUserId&&i(String(S.suggestedUserId))}catch(S){l(S.message),o(null)}g(!1)}},v=!!(s&&s.chat?.isForum&&s.bot?.isAdmin&&s.bot?.canManageTopics),w=async()=>{if(!(!v||m)){l(null),h(!0);try{let $=String(r||"").trim(),S=await p1(e,{...$?{userId:$}:{},groupName:s?.chat?.title||e,requireMention:!1},{accountId:t});if(!S?.ok)throw new Error(S?.error||"Failed to configure Telegram group");S.userId&&i(String(S.userId)),c()}catch($){l($.message)}h(!1)}};return At`

Verify Group

@@ -8264,7 +8340,7 @@ ${t} - <${Z} + <${Y} onClick=${x} disabled=${!u.trim()||f} loading=${f} @@ -8276,16 +8352,16 @@ ${t}
- ${a&&Mt` + ${a&&At`

${a}

`} - ${s&&Mt` + ${s&&At`
${s.chat.title} - <${ae} tone="success">Verified + <${le} tone="success">Verified
Topics: ${s.chat.isForum?"ON":"OFF"} @@ -8293,7 +8369,7 @@ ${t}
`} - ${s&&b.length===0&&Mt` + ${s&&b.length===0&&At`

Your Telegram User ID

`} - ${b.length>0&&Mt` + ${b.length>0&&At`
@@ -8316,7 +8392,7 @@ ${t}
    - ${b.map($=>Mt`
  • ${$}
  • `)} + ${b.map($=>At`
  • ${$}
  • `)}

Once fixed, hit Verify again.

@@ -8338,11 +8414,11 @@ ${t}
- `},h1=({accountId:t,groupId:e,topics:n,setTopics:s,onNext:o,onBack:r})=>{let[i,a]=y(""),[l,c]=y(""),[d,u]=y(!1),[p,f]=y(null),[g,m]=y(null),[h,b]=y(null),x=async()=>{let S=await _c(e,{accountId:t});S.ok&&s(S.topics)};L(()=>{x()},[e]);let v=async()=>{let S=i.trim(),C=l.trim();if(S){u(!0),f(null);try{let _=await Mc(e,[{name:S,...C?{systemInstructions:C}:{}}],{accountId:t});if(!_.ok)throw new Error(_.results?.[0]?.error||"Failed to create topic");let k=_.results.filter(A=>!A.ok);if(k.length>0)throw new Error(k[0].error);a(""),c(""),await x(),N(`Created topic: ${S}`,"success")}catch(_){f(_.message)}u(!1)}},w=async(S,C)=>{m(S);try{let _=await Ac(e,S,{accountId:t});if(!_.ok)throw new Error(_.error);await x(),_.removedFromRegistryOnly?N(`Removed stale topic from registry: ${C}`,"success"):N(`Deleted topic: ${C}`,"success")}catch(_){N(`Failed to delete: ${_.message}`,"error")}m(null)},$=Object.entries(n||{});return Mt` + `},b1=({accountId:t,groupId:e,topics:n,setTopics:s,onNext:o,onBack:r})=>{let[i,a]=y(""),[l,c]=y(""),[d,u]=y(!1),[p,f]=y(null),[g,m]=y(null),[h,b]=y(null),x=async()=>{let S=await _c(e,{accountId:t});S.ok&&s(S.topics)};L(()=>{x()},[e]);let v=async()=>{let S=i.trim(),C=l.trim();if(S){u(!0),f(null);try{let _=await Ac(e,[{name:S,...C?{systemInstructions:C}:{}}],{accountId:t});if(!_.ok)throw new Error(_.results?.[0]?.error||"Failed to create topic");let k=_.results.filter(A=>!A.ok);if(k.length>0)throw new Error(k[0].error);a(""),c(""),await x(),I(`Created topic: ${S}`,"success")}catch(_){f(_.message)}u(!1)}},w=async(S,C)=>{m(S);try{let _=await Mc(e,S,{accountId:t});if(!_.ok)throw new Error(_.error);await x(),_.removedFromRegistryOnly?I(`Removed stale topic from registry: ${C}`,"success"):I(`Deleted topic: ${C}`,"success")}catch(_){I(`Failed to delete: ${_.message}`,"error")}m(null)},$=Object.entries(n||{});return At`

Create Topics

- ${$.length>0&&Mt` + ${$.length>0&&At`
@@ -8359,7 +8435,7 @@ ${t} - ${$.map(([S,C])=>Mt` + ${$.map(([S,C])=>At` ${C.name} ${S} @@ -8410,7 +8486,7 @@ ${t}
- <${Z} + <${Y} onClick=${v} disabled=${d||!i.trim()} loading=${d} @@ -8425,7 +8501,7 @@ ${t}
- ${p&&Mt` + ${p&&At`

${p}

@@ -8459,7 +8535,7 @@ ${t}{if(!h)return;let S=h;b(null),await w(S.id,S.name)}} />
- `},m1=({groupId:t,groupInfo:e,topics:n,onBack:s,onDone:o})=>Mt` + `},x1=({groupId:t,groupInfo:e,topics:n,onBack:s,onDone:o})=>At`

🎉 Setup complete

@@ -8492,18 +8568,18 @@ ${t}
- `;var At=P.bind(T),g1=({value:t,agents:e,onChange:n,className:s=""})=>At` + `;var Mt=P.bind(T),y1=({value:t,agents:e,onChange:n,className:s=""})=>Mt` -`,gf=({accountId:t,groupId:e,groupName:n,initialTopics:s,configAgentMaxConcurrent:o,configSubagentMaxConcurrent:r,debugEnabled:i,onResetOnboarding:a})=>{let[l,c]=y(s||{}),[d,u]=y(""),[p,f]=y(""),[g,m]=y(""),[h,b]=y(!1),[x,v]=y(!1),[w,$]=y(null),[S,C]=y(""),[_,k]=y(""),[A,O]=y(""),[D,z]=y(""),[E,M]=y(""),[R,B]=y(null),[I,U]=y(null),[W,G]=y([]),se=async()=>{let V=await _c(e,{accountId:t});V.ok&&c(V.topics||{})};L(()=>{se()},[e]),L(()=>{s&&Object.keys(s).length>0&&c(s)},[s]),L(()=>{Ao().then(V=>G(Array.isArray(V?.agents)?V.agents:[])).catch(()=>{})},[]);let K=async()=>{let V=d.trim(),J=p.trim(),oe=g.trim();if(V){v(!0),B(null);try{let ce=await Mc(e,[{name:V,...J?{systemInstructions:J}:{},...oe?{agentId:oe}:{}}],{accountId:t});if(!ce.ok)throw new Error(ce.results?.[0]?.error||"Failed to create topic");let be=ce.results.filter(Ve=>!Ve.ok);if(be.length>0)throw new Error(be[0].error);u(""),f(""),m(""),b(!1),await se(),N(`Created topic: ${V}`,"success")}catch(ce){B(ce.message)}v(!1)}},j=async(V,J)=>{$(V);try{let oe=await Ac(e,V,{accountId:t});if(!oe.ok)throw new Error(oe.error);await se(),oe.removedFromRegistryOnly?N(`Removed stale topic from registry: ${J}`,"success"):N(`Deleted topic: ${J}`,"success")}catch(oe){N(`Failed to delete: ${oe.message}`,"error")}$(null)},X=(V,J,oe="",ce="")=>{C(String(V)),k(String(J||"")),O(String(oe||"")),z(String(ce||""))},de=()=>{C(""),k(""),O(""),z("")},le=async V=>{let J=_.trim(),oe=A.trim(),ce=D.trim();if(!J){B("Topic name is required");return}M(String(V)),B(null);try{let be=await l1(e,V,{name:J,systemInstructions:oe,agentId:ce},{accountId:t});if(!be.ok)throw new Error(be.error||"Failed to update topic");await se(),N(`Updated topic: ${J}`,"success"),de()}catch(be){B(be.message)}M("")},ie=Object.entries(l||{}),ne=ie.length,xe=Math.max(ne*3,8),he=Math.max(xe-2,4),ue=Number.isFinite(o)?o:xe,me=Number.isFinite(r)?r:he;return At` +`,gf=({accountId:t,groupId:e,groupName:n,initialTopics:s,configAgentMaxConcurrent:o,configSubagentMaxConcurrent:r,debugEnabled:i,onResetOnboarding:a})=>{let[l,c]=y(s||{}),[d,u]=y(""),[p,f]=y(""),[g,m]=y(""),[h,b]=y(!1),[x,v]=y(!1),[w,$]=y(null),[S,C]=y(""),[_,k]=y(""),[A,D]=y(""),[N,U]=y(""),[O,M]=y(""),[R,B]=y(null),[E,G]=y(null),[H,z]=y([]),te=async()=>{let j=await _c(e,{accountId:t});j.ok&&c(j.topics||{})};L(()=>{te()},[e]),L(()=>{s&&Object.keys(s).length>0&&c(s)},[s]),L(()=>{Mo().then(j=>z(Array.isArray(j?.agents)?j.agents:[])).catch(()=>{})},[]);let K=async()=>{let j=d.trim(),J=p.trim(),ie=g.trim();if(j){v(!0),B(null);try{let de=await Ac(e,[{name:j,...J?{systemInstructions:J}:{},...ie?{agentId:ie}:{}}],{accountId:t});if(!de.ok)throw new Error(de.results?.[0]?.error||"Failed to create topic");let be=de.results.filter(Ve=>!Ve.ok);if(be.length>0)throw new Error(be[0].error);u(""),f(""),m(""),b(!1),await te(),I(`Created topic: ${j}`,"success")}catch(de){B(de.message)}v(!1)}},V=async(j,J)=>{$(j);try{let ie=await Mc(e,j,{accountId:t});if(!ie.ok)throw new Error(ie.error);await te(),ie.removedFromRegistryOnly?I(`Removed stale topic from registry: ${J}`,"success"):I(`Deleted topic: ${J}`,"success")}catch(ie){I(`Failed to delete: ${ie.message}`,"error")}$(null)},Z=(j,J,ie="",de="")=>{C(String(j)),k(String(J||"")),D(String(ie||"")),U(String(de||""))},ue=()=>{C(""),k(""),D(""),U("")},re=async j=>{let J=_.trim(),ie=A.trim(),de=N.trim();if(!J){B("Topic name is required");return}M(String(j)),B(null);try{let be=await u1(e,j,{name:J,systemInstructions:ie,agentId:de},{accountId:t});if(!be.ok)throw new Error(be.error||"Failed to update topic");await te(),I(`Updated topic: ${J}`,"success"),ue()}catch(be){B(be.message)}M("")},oe=Object.entries(l||{}),ne=oe.length,me=Math.max(ne*3,8),pe=Math.max(me-2,4),ce=Number.isFinite(o)?o:me,ge=Number.isFinite(r)?r:pe;return Mt`
- ${i&&At` + ${i&&Mt`