UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

399 lines • 87.1 kB
import{i as e,n as t,t as n}from"./rolldown-runtime-8BhlS34s.js";import{Br as r,Ji as i,qr as a,ro as o,zr as s}from"./control-ui-foundation-ZY_Flbbd.js";import{Gl as c,Jc as l,N as u,R as d,Ul as f,Wl as p,Yc as m,cc as h,hu as g,lu as _,ou as v,ql as y,sc as b,su as x,uu as S}from"./control-ui-core-3P365fbR.js";import{i as ee,it as C,r as w,rt as T}from"./control-ui-boot-shared-JlZTSJEC.js";import{$n as te,Ma as ne,er as re,nr as ie,va as ae,vi as E,yi as D}from"./control-ui-core-CFW9Qtjn.js";import{$ as O,X as k,Y as A,ct as j,nt as M,ut as oe}from"./lit-runtime-P5vbNq6b.js";import{c as N,d as se,l as P}from"./gateway-runtime-5YzSCmfV.js";import{Ki as ce,Xi as le,Yi as ue,no as F,qi as de,ro as I}from"./control-ui-boot-shared-DoKu-5Ju.js";import{L as fe,R as pe,V as me,z as he}from"./control-ui-boot-shared-DBJri5ri.js";import{At as L,Dt as ge,Et as R,Ft as _e,It as ve,Mt as z,Nt as ye,Ot as B,To as be,_t as V,jt as xe,vt as Se,wo as Ce,xt as H,yt as we}from"./control-ui-boot-shared-CG9HtEG-.js";import{n as U,t as W}from"./en-settings-CTjRjKt9.js";import{n as Te,t as Ee}from"./settings-workspace-whxhPRxQ.js";var G;function K(){return(K=t((()=>{S(),y(),G=class{constructor(e){this.host=e,this.state={busy:!1,error:null,notice:null}}update(e){Object.assign(this.state,e),this.host.requestUpdate()}async save(e,t,n){this.update({busy:!0,error:null,notice:null});try{let r=await e.patchFromSnapshot(e=>{let t=n.build(e);return`error`in t?{error:g(`cloudWorkersPage.errors.${t.error}`)}:{options:{raw:t.patch,...t.replacePaths?{replacePaths:t.replacePaths}:{},note:n.note,canDispatch:n.canDispatch}}});return t()?r?(this.update({notice:n.success()??null}),!0):(this.update({error:e.state.lastError??n.failed()}),!1):!1}catch(e){return t()&&this.update({error:c(e)}),!1}finally{t()&&this.update({busy:!1})}}}})))()}function De(e){let t=i(e.cloudWorkers)?e.cloudWorkers:null;return i(t?.profiles)?t.profiles:{}}function Oe(e){return i(e.settings)?e.settings:{}}function q(e,t){return o(e[t])??``}function ke(e){return e?Object.entries(De(e)).flatMap(([e,t])=>{if(!i(t))return[];let n=Oe(t);return[{id:e,providerId:o(t.provider)??``,install:t.install===`npm`?`npm`:`bundle`,backend:q(n,`provider`),target:q(n,`target`),machineClass:q(n,`class`),ttl:q(n,`ttl`),idleTimeout:q(n,`idleTimeout`),setup:q(n,`setup`),setupEnv:Array.isArray(n.setupEnv)?n.setupEnv.join(`, `):``,warmImage:n.warmImage===!0?`on`:n.warmImage===!1?`off`:`auto`,readyWorkers:typeof t.readyWorkers==`number`?String(t.readyWorkers):``,suspendAfter:q(t,`suspendAfter`),desktop:n.desktop===!0,binary:q(n,`binary`)}]}).toSorted((e,t)=>e.id.localeCompare(t.id)):[]}function Ae(e){return{id:e?.id??``,backend:e?.backend??``,target:e?.target??``,machineClass:e?.machineClass??``,ttl:e?.ttl||`8h`,idleTimeout:e?.idleTimeout||`45m`,setup:e?.setup??``,setupEnv:e?.setupEnv??``,warmImage:e?.warmImage??`auto`,readyWorkers:e?.readyWorkers??``,suspendAfter:e?.suspendAfter??``,desktop:e?.desktop??!1,binary:e?.binary??``}}function je(e){return e.split(/[,\s]+/u).filter(Boolean)}function Me(e,t,n){let r=e.id.trim();if(!Fe.test(r)||r!==e.id)return`profileId`;if(!n&&Object.hasOwn(t,r))return`profileExists`;if(n&&!Object.hasOwn(t,n))return`profileMissing`;if(!e.backend.trim())return`backend`;if(e.target!==e.target.trim()||e.target.length>64)return`target`;if(e.warmImage===`on`&&e.target&&e.target!==`linux`)return`warmImage`;let i=e.machineClass.trim();if(!i||i.length>128)return`machineClass`;if(!Ie.test(e.ttl.trim()))return`ttl`;if(!Ie.test(e.idleTimeout.trim()))return`idleTimeout`;let a=je(e.setupEnv);if(a.length>16||new Set(a).size!==a.length||a.some(e=>!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(e)||e===`CRABBOX_ENV_ALLOW`))return`setupEnv`;if(a.length&&!e.setup.trim())return`setupEnvRequiresSetup`;let o=e.readyWorkers.trim();if(o&&(!/^\d+$/u.test(o)||!Number.isSafeInteger(Number(o))))return`readyWorkers`;let s=e.suspendAfter.trim();if(s)try{if(!/(?:ms|s|m|h|d)$/i.test(s)||C(s)<6e4)return`suspendAfter`}catch{return`suspendAfter`}let c=e.binary.trim();return c&&!c.startsWith(`/`)&&!Le.test(c)?`binary`:null}function Ne(e,t,n){let r=De(e),a=Me(t,r,n);if(a)return{error:a};let s=n??t.id,c=i(r[s])?r[s]:{},l=Oe(c);if(n&&(o(c.provider)!==`crabbox`||!q(l,`class`)))return{error:`profileMissing`};let u=t.setup.trim(),d=je(t.setupEnv),f={provider:t.backend.trim(),target:t.target||null,class:t.machineClass.trim(),ttl:t.ttl.trim(),idleTimeout:t.idleTimeout.trim(),setup:u||null,setupEnv:d.length?d:null,warmImage:t.warmImage===`auto`?null:t.warmImage===`on`,desktop:t.desktop?!0:null,binary:t.binary.trim()||null},p={provider:o(c.provider)??`crabbox`,install:c.install===`npm`?`npm`:`bundle`,readyWorkers:t.readyWorkers.trim()?Number(t.readyWorkers):null,suspendAfter:t.suspendAfter.trim()||null,settings:f};return{patch:{cloudWorkers:{profiles:{[s]:p}}},replacePaths:w(l.setupEnv,`cloudWorkers.profiles.${s}.settings.setupEnv`)}}function Pe(e,t){let n=De(e);if(!Object.hasOwn(n,t))return{error:`profileMissing`};let r=i(e.cloudWorkers)?e.cloudWorkers:null,a=i(r?.projectProfiles)?r.projectProfiles:{},o=Object.fromEntries(Object.entries(a).filter(([,e])=>e===t).map(([e])=>[e,null]));return{patch:{cloudWorkers:{profiles:{[t]:null},...Object.keys(o).length>0?{projectProfiles:o}:{}}},replacePaths:w(n[t],`cloudWorkers.profiles.${t}`)}}var Fe,Ie,Le;function Re(){return(Re=t((()=>{T(),ee(),Fe=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/u,Ie=/^(?=.*[1-9])\+?(?:(?:\d+(?:\.\d*)?|\.\d+)(?:ns|us|µs|μs|ms|s|m|h))+$/u,Le=/^[A-Za-z]:[\\/]/u})))()}var ze=n((e=>{var t=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),n=t(e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.tracing=e.metrics=void 0;var t={hasSubscribers:!1};e.metrics=t,e.tracing=t}),r=t(e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.defaultPerf=void 0,e.defaultPerf=typeof performance==`object`&&performance&&typeof performance.now==`function`?performance:Date});Object.defineProperty(e,"__esModule",{value:!0}),e.LRUCache=void 0;var i=n(),a=r(),o=()=>i.metrics.hasSubscribers||i.tracing.hasSubscribers,s=new Set,c=typeof process==`object`&&process?process:{},l=(e,t,n,r)=>{typeof c.emitWarning==`function`?c.emitWarning(e,t,n,r):console.error(`[${n}] ${t}: ${e}`)},u=e=>!s.has(e),d=e=>!!e&&e===Math.floor(e)&&e>0&&isFinite(e),f=e=>d(e)?e<=256?Uint8Array:e<=2**16?Uint16Array:e<=2**32?Uint32Array:e<=2**53-1?p:null:null,p=class extends Array{constructor(e){super(e),this.fill(0)}},m=class e{heap;length;static#e=!1;static create(t){let n=f(t);if(!n)return[];e.#e=!0;let r=new e(t,n);return e.#e=!1,r}constructor(t,n){if(!e.#e)throw TypeError(`instantiate Stack using Stack.create(n)`);this.heap=new n(t),this.length=0}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}};e.LRUCache=class e{#e;#t;#n;#r;#i;#a;#o;#s;get perf(){return this.#s}ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;backgroundFetchSize;#c;#l;#u;#d;#f;#p;#m;#h;#g;#_;#v;#y;#b;#x;#S;#C;#w;#T;#E;static unsafeExposeInternals(e){return{starts:e.#b,ttls:e.#x,autopurgeTimers:e.#S,sizes:e.#y,keyMap:e.#u,keyList:e.#d,valList:e.#f,next:e.#p,prev:e.#m,get head(){return e.#h},get tail(){return e.#g},free:e.#_,isBackgroundFetch:t=>e.#W(t),backgroundFetch:(t,n,r,i)=>e.#U(t,n,r,i),moveToTail:t=>e.#X(t),indexes:t=>e.#I(t),rindexes:t=>e.#L(t),isStale:t=>e.#j(t)}}get max(){return this.#e}get maxSize(){return this.#t}get calculatedSize(){return this.#l}get size(){return this.#c}get fetchMethod(){return this.#a}get memoMethod(){return this.#o}get dispose(){return this.#n}get onInsert(){return this.#r}get disposeAfter(){return this.#i}constructor(t){let{max:n=0,ttl:r,ttlResolution:i=1,ttlAutopurge:o,updateAgeOnGet:c,updateAgeOnHas:p,allowStale:h,dispose:g,onInsert:_,disposeAfter:v,noDisposeOnSet:y,noUpdateTTL:b,maxSize:x=0,maxEntrySize:S=0,sizeCalculation:ee,fetchMethod:C,memoMethod:w,noDeleteOnFetchRejection:T,noDeleteOnStaleGet:te,allowStaleOnFetchRejection:ne,allowStaleOnFetchAbort:re,ignoreFetchAbort:ie,backgroundFetchSize:ae=1,perf:E}=t;if(this.backgroundFetchSize=ae,E!==void 0&&typeof E?.now!=`function`)throw TypeError(`perf option must have a now() method if specified`);if(this.#s=E??a.defaultPerf,n!==0&&!d(n))throw TypeError(`max option must be a nonnegative integer`);let D=n?f(n):Array;if(!D)throw Error(`invalid max value: `+n);if(this.#e=n,this.#t=x,this.maxEntrySize=S||this.#t,this.sizeCalculation=ee,this.sizeCalculation){if(!this.#t&&!this.maxEntrySize)throw TypeError(`cannot set sizeCalculation without setting maxSize or maxEntrySize`);if(typeof this.sizeCalculation!=`function`)throw TypeError(`sizeCalculation set to non-function`)}if(w!==void 0&&typeof w!=`function`)throw TypeError(`memoMethod must be a function if defined`);if(this.#o=w,C!==void 0&&typeof C!=`function`)throw TypeError(`fetchMethod must be a function if specified`);if(this.#a=C,this.#w=!!C,this.#u=new Map,this.#d=Array.from({length:n}).fill(void 0),this.#f=Array.from({length:n}).fill(void 0),this.#p=new D(n),this.#m=new D(n),this.#h=0,this.#g=0,this.#_=m.create(n),this.#c=0,this.#l=0,typeof g==`function`&&(this.#n=g),typeof _==`function`&&(this.#r=_),typeof v==`function`?(this.#i=v,this.#v=[]):(this.#i=void 0,this.#v=void 0),this.#C=!!this.#n,this.#E=!!this.#r,this.#T=!!this.#i,this.noDisposeOnSet=!!y,this.noUpdateTTL=!!b,this.noDeleteOnFetchRejection=!!T,this.allowStaleOnFetchRejection=!!ne,this.allowStaleOnFetchAbort=!!re,this.ignoreFetchAbort=!!ie,this.maxEntrySize!==0){if(this.#t!==0&&!d(this.#t))throw TypeError(`maxSize must be a positive integer if specified`);if(!d(this.maxEntrySize))throw TypeError(`maxEntrySize must be a positive integer if specified`);this.#M()}if(this.allowStale=!!h,this.noDeleteOnStaleGet=!!te,this.updateAgeOnGet=!!c,this.updateAgeOnHas=!!p,this.ttlResolution=d(i)||i===0?i:1,this.ttlAutopurge=!!o,this.ttl=r||0,this.ttl){if(!d(this.ttl))throw TypeError(`ttl must be a positive integer if specified`);this.#D()}if(this.#e===0&&this.ttl===0&&this.#t===0)throw TypeError(`At least one of max, maxSize, or ttl is required`);if(!this.ttlAutopurge&&!this.#e&&!this.#t){let t=`LRU_CACHE_UNBOUNDED`;u(t)&&(s.add(t),l(`TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.`,`UnboundedCacheWarning`,t,e))}}getRemainingTTL(e){return this.#u.has(e)?1/0:0}#D(){let e=new p(this.#e),t=new p(this.#e);this.#x=e,this.#b=t;let n=this.ttlAutopurge?Array.from({length:this.#e}):void 0;this.#S=n,this.#A=(n,i,a=this.#s.now())=>{t[n]=i===0?0:a,e[n]=i,r(n,i)},this.#O=n=>{t[n]=e[n]===0?0:this.#s.now(),r(n,e[n])};let r=this.ttlAutopurge?(e,t)=>{if(n?.[e]&&(clearTimeout(n[e]),n[e]=void 0),t&&t!==0&&n){let i=setTimeout(()=>{this.#j(e)?(this.#Z(this.#d[e],`expire`),n[e]=void 0):r(e,o(e))},t+1);i.unref&&i.unref(),n[e]=i}}:()=>{};this.#k=(n,r)=>{if(e[r]){let o=e[r],s=t[r];if(!o||!s)return;n.ttl=o,n.start=s,n.now=i||a(),n.remainingTTL=o-(n.now-s)}};let i=0,a=()=>{let e=this.#s.now();if(this.ttlResolution>0){i=e;let t=setTimeout(()=>i=0,this.ttlResolution);t.unref&&t.unref()}return e};this.getRemainingTTL=e=>{let t=this.#u.get(e);return t===void 0?0:o(t)};let o=n=>{let r=e[n],o=t[n];return!r||!o?1/0:r-((i||a())-o)};this.#j=n=>{let r=t[n],o=e[n];return!!o&&!!r&&(i||a())-r>o}}#O=()=>{};#k=()=>{};#A=()=>{};#j=()=>!1;#M(){let e=new p(this.#e);this.#l=0,this.#y=e,this.#N=t=>{this.#l-=e[t],e[t]=0},this.#F=(e,t,n,r)=>{if(!d(n)){if(this.#W(t))return this.backgroundFetchSize;if(r){if(typeof r!=`function`)throw TypeError(`sizeCalculation must be a function`);if(n=r(t,e),!d(n))throw TypeError(`sizeCalculation return invalid (expect positive integer)`)}else throw TypeError(`invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.`)}return n},this.#P=(t,n,r)=>{if(e[t]=n,this.#t){let n=this.#t-e[t];for(;this.#l>n;)this.#B(!0)}this.#l+=e[t],r&&(r.entrySize=n,r.totalCalculatedSize=this.#l)}}#N=e=>{};#P=(e,t,n)=>{};#F=(e,t,n,r)=>{if(n||r)throw TypeError(`cannot set size without setting maxSize or maxEntrySize on cache`);return 0};*#I({allowStale:e=this.allowStale}={}){if(this.#c)for(let t=this.#g;this.#R(t)&&((e||!this.#j(t))&&(yield t),t!==this.#h);)t=this.#m[t]}*#L({allowStale:e=this.allowStale}={}){if(this.#c)for(let t=this.#h;this.#R(t)&&((e||!this.#j(t))&&(yield t),t!==this.#g);)t=this.#p[t]}#R(e){return e!==void 0&&this.#u.get(this.#d[e])===e}*entries(){for(let e of this.#I())this.#f[e]!==void 0&&this.#d[e]!==void 0&&!this.#W(this.#f[e])&&(yield[this.#d[e],this.#f[e]])}*rentries(){for(let e of this.#L())this.#f[e]!==void 0&&this.#d[e]!==void 0&&!this.#W(this.#f[e])&&(yield[this.#d[e],this.#f[e]])}*keys(){for(let e of this.#I()){let t=this.#d[e];t!==void 0&&!this.#W(this.#f[e])&&(yield t)}}*rkeys(){for(let e of this.#L()){let t=this.#d[e];t!==void 0&&!this.#W(this.#f[e])&&(yield t)}}*values(){for(let e of this.#I())this.#f[e]!==void 0&&!this.#W(this.#f[e])&&(yield this.#f[e])}*rvalues(){for(let e of this.#L())this.#f[e]!==void 0&&!this.#W(this.#f[e])&&(yield this.#f[e])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]=`LRUCache`;find(e,t={}){for(let n of this.#I()){let r=this.#f[n],i=this.#W(r)?r.__staleWhileFetching:r;if(i!==void 0&&e(i,this.#d[n],this))return this.#J(this.#d[n],t)}}forEach(e,t=this){for(let n of this.#I()){let r=this.#f[n],i=this.#W(r)?r.__staleWhileFetching:r;i!==void 0&&e.call(t,i,this.#d[n],this)}}rforEach(e,t=this){for(let n of this.#L()){let r=this.#f[n],i=this.#W(r)?r.__staleWhileFetching:r;i!==void 0&&e.call(t,i,this.#d[n],this)}}purgeStale(){let e=!1;for(let t of this.#L({allowStale:!0}))this.#j(t)&&(this.#Z(this.#d[t],`expire`),e=!0);return e}info(e){let t=this.#u.get(e);if(t===void 0)return;let n=this.#f[t],r=this.#W(n)?n.__staleWhileFetching:n;if(r===void 0)return;let i={value:r};if(this.#x&&this.#b){let e=this.#x[t],n=this.#b[t];e&&n&&(i.ttl=e-(this.#s.now()-n),i.start=Date.now())}return this.#y&&(i.size=this.#y[t]),i}dump(){let e=[];for(let t of this.#I({allowStale:!0})){let n=this.#d[t],r=this.#f[t],i=this.#W(r)?r.__staleWhileFetching:r;if(i===void 0||n===void 0)continue;let a={value:i};if(this.#x&&this.#b){a.ttl=this.#x[t];let e=this.#s.now()-this.#b[t];a.start=Math.floor(Date.now()-e)}this.#y&&(a.size=this.#y[t]),e.unshift([n,a])}return e}load(e){this.clear();for(let[t,n]of e){if(n.start){let e=Date.now()-n.start;n.start=this.#s.now()-e}this.#z(t,n.value,n)}}set(e,t,n={}){let{status:r=i.metrics.hasSubscribers?{}:void 0}=n;n.status=r,r&&(r.op=`set`,r.key=e,t!==void 0&&(r.value=t),r.cache=this);let a=this.#z(e,t,n);return r&&i.metrics.hasSubscribers&&i.metrics.publish(r),a}#z(e,t,n,r){let{ttl:i=this.ttl,start:a,noDisposeOnSet:o=this.noDisposeOnSet,sizeCalculation:s=this.sizeCalculation,status:c}=n,l=this.#W(t);if(t===void 0)return c&&(c.set=`deleted`),this.delete(e),this;let{noUpdateTTL:u=this.noUpdateTTL}=n;c&&!l&&(c.value=t);let d=this.#F(e,t,n.size||0,s,c);if(this.maxEntrySize&&d>this.maxEntrySize)return this.#Z(e,`set`),c&&(c.set=`miss`,c.maxEntrySizeExceeded=!0),this;let f=this.#c===0?void 0:this.#u.get(e);if(f===void 0)f=this.#c===0?this.#g:this.#_.length===0?this.#c===this.#e?this.#B(!1):this.#c:this.#_.pop(),this.#d[f]=e,this.#f[f]=t,this.#u.set(e,f),this.#p[this.#g]=f,this.#m[f]=this.#g,this.#g=f,this.#c++,this.#P(f,d,c),c&&(c.set=`add`),u=!1,this.#E&&!l&&this.#r?.(t,e,`add`);else{this.#X(f);let n=this.#f[f];if(t!==n){if(!o){if(this.#W(n)){n!==r&&n.__abortController.abort(Error(`replaced`));let{__staleWhileFetching:i}=n;i!==void 0&&i!==t&&(this.#C&&this.#n?.(i,e,`set`),this.#T&&this.#v?.push([i,e,`set`]))}else this.#C&&this.#n?.(n,e,`set`),this.#T&&this.#v?.push([n,e,`set`])}if(this.#N(f),this.#P(f,d,c),this.#f[f]=t,!l){let r=n&&this.#W(n)?n.__staleWhileFetching:n,i=r===void 0?`add`:t===r?`update`:`replace`;c&&(c.set=i,r!==void 0&&(c.oldValue=r)),this.#E&&this.onInsert?.(t,e,i)}}else l||(c&&(c.set=`update`),this.#E&&this.onInsert?.(t,e,`update`))}if(i!==0&&!this.#x&&this.#D(),this.#x&&(u||this.#A(f,i,a),c&&this.#k(c,f)),!o&&this.#T&&this.#v){let e=this.#v,t;for(;t=e?.shift();)this.#i?.(...t)}return this}pop(){try{for(;this.#c;){let e=this.#f[this.#h];if(this.#B(!0),this.#W(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#T&&this.#v){let e=this.#v,t;for(;t=e?.shift();)this.#i?.(...t)}}}#B(e){let t=this.#h,n=this.#d[t],r=this.#f[t],i=this.#W(r);i&&r.__abortController.abort(Error(`evicted`));let a=i?r.__staleWhileFetching:r;return(this.#C||this.#T)&&a!==void 0&&(this.#C&&this.#n?.(a,n,`evict`),this.#T&&this.#v?.push([a,n,`evict`])),this.#N(t),this.#S?.[t]&&(clearTimeout(this.#S[t]),this.#S[t]=void 0),e&&(this.#d[t]=void 0,this.#f[t]=void 0,this.#_.push(t)),this.#c===1?(this.#h=this.#g=0,this.#_.length=0):this.#h=this.#p[t],this.#u.delete(n),this.#c--,t}has(e,t={}){let{status:n=i.metrics.hasSubscribers?{}:void 0}=t;t.status=n,n&&(n.op=`has`,n.key=e,n.cache=this);let r=this.#V(e,t);return i.metrics.hasSubscribers&&i.metrics.publish(n),r}#V(e,t={}){let{updateAgeOnHas:n=this.updateAgeOnHas,status:r}=t,i=this.#u.get(e);if(i!==void 0){let e=this.#f[i];if(this.#W(e)&&e.__staleWhileFetching===void 0)return!1;if(this.#j(i))r&&(r.has=`stale`,this.#k(r,i));else return n&&this.#O(i),r&&(r.has=`hit`,this.#k(r,i)),!0}else r&&(r.has=`miss`);return!1}peek(e,t={}){let{status:n=o()?{}:void 0}=t;n&&(n.op=`peek`,n.key=e,n.cache=this),t.status=n;let r=this.#H(e,t);return i.metrics.hasSubscribers&&i.metrics.publish(n),r}#H(e,t){let{status:n,allowStale:r=this.allowStale}=t,i=this.#u.get(e);if(i===void 0||!r&&this.#j(i)){n&&(n.peek=i===void 0?`miss`:`stale`);return}let a=this.#f[i],o=this.#W(a)?a.__staleWhileFetching:a;return n&&(o===void 0?n.peek=`miss`:(n.peek=`hit`,n.value=o)),o}#U(e,t,n,r){let i=t===void 0?void 0:this.#f[t];if(this.#W(i))return i;let a=new AbortController,{signal:o}=n;o?.addEventListener(`abort`,()=>a.abort(o.reason),{signal:a.signal});let s={signal:a.signal,options:n,context:r},c=(r,i=!1)=>{let{aborted:o}=a.signal,c=n.ignoreFetchAbort&&r!==void 0,l=n.ignoreFetchAbort||!!(n.allowStaleOnFetchAbort&&r!==void 0);if(n.status&&(o&&!i?(n.status.fetchAborted=!0,n.status.fetchError=a.signal.reason,c&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),o&&!c&&!i)return u(a.signal.reason,l);let d=f,p=this.#f[t];return(p===f||p===void 0&&c&&i)&&(r===void 0?d.__staleWhileFetching===void 0?this.#Z(e,`fetch`):this.#f[t]=d.__staleWhileFetching:(n.status&&(n.status.fetchUpdated=!0),this.#z(e,r,s.options,d))),r},l=e=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=e),u(e,!1)),u=(r,i)=>{let{aborted:o}=a.signal,s=o&&n.allowStaleOnFetchAbort,c=s||n.allowStaleOnFetchRejection,l=c||n.noDeleteOnFetchRejection,u=f;if(this.#f[t]===f&&(!l||!i&&u.__staleWhileFetching===void 0?this.#Z(e,`fetch`):s||(this.#f[t]=u.__staleWhileFetching)),c)return n.status&&u.__staleWhileFetching!==void 0&&(n.status.returnedStale=!0),u.__staleWhileFetching;if(u.__returned===u)throw r},d=(t,r)=>{let o=this.#a?.(e,i,s);a.signal.addEventListener(`abort`,()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(t(void 0),n.allowStaleOnFetchAbort&&(t=e=>c(e,!0)))}),o&&o instanceof Promise?o.then(e=>t(e===void 0?void 0:e),r):o!==void 0&&t(o)};n.status&&(n.status.fetchDispatched=!0);let f=new Promise(d).then(c,l),p=Object.assign(f,{__abortController:a,__staleWhileFetching:i,__returned:void 0});return t===void 0?(this.#z(e,p,{...s.options,status:void 0}),t=this.#u.get(e)):this.#f[t]=p,p}#W(e){if(!this.#w)return!1;let t=e;return!!t&&t instanceof Promise&&t.hasOwnProperty(`__staleWhileFetching`)&&t.__abortController instanceof AbortController}fetch(e,t={}){let n=i.tracing.hasSubscribers,{status:r=o()?{}:void 0}=t;t.status=r,r&&t.context&&(r.context=t.context);let a=this.#G(e,t);return r&&n&&(r.trace=!0,i.tracing.tracePromise(()=>a,r).catch(()=>{})),a}async#G(e,t={}){let{allowStale:n=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:i=this.noDeleteOnStaleGet,ttl:a=this.ttl,noDisposeOnSet:o=this.noDisposeOnSet,size:s=0,sizeCalculation:c=this.sizeCalculation,noUpdateTTL:l=this.noUpdateTTL,noDeleteOnFetchRejection:u=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:d=this.allowStaleOnFetchRejection,ignoreFetchAbort:f=this.ignoreFetchAbort,allowStaleOnFetchAbort:p=this.allowStaleOnFetchAbort,context:m,forceRefresh:h=!1,status:g,signal:_}=t;if(g&&(g.op=`fetch`,g.key=e,h&&(g.forceRefresh=!0),g.cache=this),!this.#w)return g&&(g.fetch=`get`),this.#J(e,{allowStale:n,updateAgeOnGet:r,noDeleteOnStaleGet:i,status:g});let v={allowStale:n,updateAgeOnGet:r,noDeleteOnStaleGet:i,ttl:a,noDisposeOnSet:o,size:s,sizeCalculation:c,noUpdateTTL:l,noDeleteOnFetchRejection:u,allowStaleOnFetchRejection:d,allowStaleOnFetchAbort:p,ignoreFetchAbort:f,status:g,signal:_},y=this.#u.get(e);if(y===void 0){g&&(g.fetch=`miss`);let t=this.#U(e,y,v,m);return t.__returned=t}{let t=this.#f[y];if(this.#W(t)){let e=n&&t.__staleWhileFetching!==void 0;return g&&(g.fetch=`inflight`,e&&(g.returnedStale=!0)),e?t.__staleWhileFetching:t.__returned=t}let i=this.#j(y);if(!h&&!i)return g&&(g.fetch=`hit`),this.#X(y),r&&this.#O(y),g&&this.#k(g,y),t;let a=this.#U(e,y,v,m),o=a.__staleWhileFetching!==void 0&&n;return g&&(g.fetch=i?`stale`:`refresh`,o&&i&&(g.returnedStale=!0)),o?a.__staleWhileFetching:a.__returned=a}}forceFetch(e,t={}){let n=i.tracing.hasSubscribers,{status:r=o()?{}:void 0}=t;t.status=r,r&&t.context&&(r.context=t.context);let a=this.#K(e,t);return r&&n&&(r.trace=!0,i.tracing.tracePromise(()=>a,r).catch(()=>{})),a}async#K(e,t={}){let n=await this.#G(e,t);if(n===void 0)throw Error(`fetch() returned undefined`);return n}memo(e,t={}){let{status:n=i.metrics.hasSubscribers?{}:void 0}=t;t.status=n,n&&(n.op=`memo`,n.key=e,t.context&&(n.context=t.context),n.cache=this);let r=this.#q(e,t);return n&&(n.value=r),i.metrics.hasSubscribers&&i.metrics.publish(n),r}#q(e,t={}){let n=this.#o;if(!n)throw Error(`no memoMethod provided to constructor`);let{context:r,status:i,forceRefresh:a,...o}=t;i&&a&&(i.forceRefresh=!0);let s=this.#J(e,o),c=a||s===void 0;if(i&&(i.memo=c?`miss`:`hit`,c||(i.value=s)),!c)return s;let l=n(e,s,{options:o,context:r});return i&&(i.value=l),this.#z(e,l,o),l}get(e,t={}){let{status:n=i.metrics.hasSubscribers?{}:void 0}=t;t.status=n,n&&(n.op=`get`,n.key=e,n.cache=this);let r=this.#J(e,t);return n&&(r!==void 0&&(n.value=r),i.metrics.hasSubscribers&&i.metrics.publish(n)),r}#J(e,t={}){let{allowStale:n=this.allowStale,updateAgeOnGet:r=this.updateAgeOnGet,noDeleteOnStaleGet:i=this.noDeleteOnStaleGet,status:a}=t,o=this.#u.get(e);if(o===void 0){a&&(a.get=`miss`);return}let s=this.#f[o],c=this.#W(s);return a&&this.#k(a,o),this.#j(o)?c?(a&&(a.get=`stale-fetching`),n&&s.__staleWhileFetching!==void 0?(a&&(a.returnedStale=!0),s.__staleWhileFetching):void 0):(i||this.#Z(e,`expire`),a&&(a.get=`stale`),n?(a&&(a.returnedStale=!0),s):void 0):(a&&(a.get=c?`fetching`:`hit`),this.#X(o),r&&this.#O(o),c?s.__staleWhileFetching:s)}#Y(e,t){this.#m[t]=e,this.#p[e]=t}#X(e){e!==this.#g&&(e===this.#h?this.#h=this.#p[e]:this.#Y(this.#m[e],this.#p[e]),this.#Y(this.#g,e),this.#g=e)}delete(e){return this.#Z(e,`delete`)}#Z(e,t){i.metrics.hasSubscribers&&i.metrics.publish({op:`delete`,delete:t,key:e,cache:this});let n=!1;if(this.#c!==0){let r=this.#u.get(e);if(r!==void 0){if(this.#S?.[r]&&(clearTimeout(this.#S[r]),this.#S[r]=void 0),n=!0,this.#c===1)this.#Q(t);else{this.#N(r);let n=this.#f[r];if(this.#W(n)?n.__abortController.abort(Error(`deleted`)):(this.#C||this.#T)&&(this.#C&&this.#n?.(n,e,t),this.#T&&this.#v?.push([n,e,t])),this.#u.delete(e),this.#d[r]=void 0,this.#f[r]=void 0,r===this.#g)this.#g=this.#m[r];else if(r===this.#h)this.#h=this.#p[r];else{let e=this.#m[r];this.#p[e]=this.#p[r];let t=this.#p[r];this.#m[t]=this.#m[r]}this.#c--,this.#_.push(r)}}}if(this.#T&&this.#v?.length){let e=this.#v,t;for(;t=e?.shift();)this.#i?.(...t)}return n}clear(){return this.#Q(`delete`)}#Q(e){for(let t of this.#L({allowStale:!0})){let n=this.#f[t];if(this.#W(n))n.__abortController.abort(Error(`deleted`));else{let r=this.#d[t];this.#C&&this.#n?.(n,r,e),this.#T&&this.#v?.push([n,r,e])}}if(this.#u.clear(),this.#f.fill(void 0),this.#d.fill(void 0),this.#x&&this.#b){this.#x.fill(0),this.#b.fill(0);for(let e of this.#S??[])e!==void 0&&clearTimeout(e);this.#S?.fill(void 0)}if(this.#y&&this.#y.fill(0),this.#h=0,this.#g=0,this.#_.length=0,this.#l=0,this.#c=0,this.#T&&this.#v){let e=this.#v,t;for(;t=e?.shift();)this.#i?.(...t)}}}})),Be=n(((e,t)=>{var n=(...e)=>e.every(e=>e)?e.join(``):``,r=e=>e?encodeURIComponent(e):``,i=e=>e.toLowerCase().replace(/^\W+/g,``).replace(/(?<!\W)\W+$/,``).replace(/\//g,``).replace(/\W+/g,`-`),a={sshtemplate:({domain:e,user:t,project:r,committish:i})=>`git@${e}:${t}/${r}.git${n(`#`,i)}`,sshurltemplate:({domain:e,user:t,project:r,committish:i})=>`git+ssh://git@${e}/${t}/${r}.git${n(`#`,i)}`,edittemplate:({domain:e,user:t,project:i,committish:a,editpath:o,path:s})=>`https://${e}/${t}/${i}${n(`/`,o,`/`,r(a||`HEAD`),`/`,s)}`,browsetemplate:({domain:e,user:t,project:i,committish:a,treepath:o})=>`https://${e}/${t}/${i}${n(`/`,o,`/`,r(a))}`,browsetreetemplate:({domain:e,user:t,project:i,committish:a,treepath:o,path:s,fragment:c,hashformat:l})=>`https://${e}/${t}/${i}/${o}/${r(a||`HEAD`)}/${s}${n(`#`,l(c||``))}`,browseblobtemplate:({domain:e,user:t,project:i,committish:a,blobpath:o,path:s,fragment:c,hashformat:l})=>`https://${e}/${t}/${i}/${o}/${r(a||`HEAD`)}/${s}${n(`#`,l(c||``))}`,docstemplate:({domain:e,user:t,project:i,treepath:a,committish:o})=>`https://${e}/${t}/${i}${n(`/`,a,`/`,r(o))}#readme`,httpstemplate:({auth:e,domain:t,user:r,project:i,committish:a})=>`git+https://${n(e,`@`)}${t}/${r}/${i}.git${n(`#`,a)}`,filetemplate:({domain:e,user:t,project:n,committish:i,path:a})=>`https://${e}/${t}/${n}/raw/${r(i||`HEAD`)}/${a}`,shortcuttemplate:({type:e,user:t,project:r,committish:i})=>`${e}:${t}/${r}${n(`#`,i)}`,pathtemplate:({user:e,project:t,committish:r})=>`${e}/${t}${n(`#`,r)}`,bugstemplate:({domain:e,user:t,project:n})=>`https://${e}/${t}/${n}/issues`,hashformat:i},o={};o.github={protocols:[`git:`,`http:`,`git+ssh:`,`git+https:`,`ssh:`,`https:`],domain:`github.com`,treepath:`tree`,blobpath:`blob`,editpath:`edit`,filetemplate:({auth:e,user:t,project:i,committish:a,path:o})=>`https://${n(e,`@`)}raw.githubusercontent.com/${t}/${i}/${r(a||`HEAD`)}/${o}`,gittemplate:({auth:e,domain:t,user:r,project:i,committish:a})=>`git://${n(e,`@`)}${t}/${r}/${i}.git${n(`#`,a)}`,tarballtemplate:({domain:e,user:t,project:n,committish:i})=>`https://codeload.${e}/${t}/${n}/tar.gz/${r(i||`HEAD`)}`,extract:e=>{let[,t,n,r,i]=e.pathname.split(`/`,5);if(!(r&&r!==`tree`)&&(r||(i=e.hash.slice(1)),n&&n.endsWith(`.git`)&&(n=n.slice(0,-4)),t&&n))return{user:t,project:n,committish:i}}},o.bitbucket={protocols:[`git+ssh:`,`git+https:`,`ssh:`,`https:`],domain:`bitbucket.org`,treepath:`src`,blobpath:`src`,editpath:`?mode=edit`,edittemplate:({domain:e,user:t,project:i,committish:a,treepath:o,path:s,editpath:c})=>`https://${e}/${t}/${i}${n(`/`,o,`/`,r(a||`HEAD`),`/`,s,c)}`,tarballtemplate:({domain:e,user:t,project:n,committish:i})=>`https://${e}/${t}/${n}/get/${r(i||`HEAD`)}.tar.gz`,extract:e=>{let[,t,n,r]=e.pathname.split(`/`,4);if(![`get`].includes(r)&&(n&&n.endsWith(`.git`)&&(n=n.slice(0,-4)),t&&n))return{user:t,project:n,committish:e.hash.slice(1)}}},o.gitlab={protocols:[`git+ssh:`,`git+https:`,`ssh:`,`https:`],domain:`gitlab.com`,treepath:`tree`,blobpath:`tree`,editpath:`-/edit`,tarballtemplate:({domain:e,user:t,project:n,committish:i})=>`https://${e}/api/v4/projects/${r(t+`/`+n)}/repository/archive.tar.gz?sha=${r(i||`HEAD`)}`,extract:e=>{let t=e.pathname.slice(1);if(t.includes(`/-/`)||t.includes(`/archive.tar.gz`))return;let n=t.split(`/`),r=n.pop();r.endsWith(`.git`)&&(r=r.slice(0,-4));let i=n.join(`/`);if(i&&r)return{user:i,project:r,committish:e.hash.slice(1)}}},o.gist={protocols:[`git:`,`git+ssh:`,`git+https:`,`ssh:`,`https:`],domain:`gist.github.com`,editpath:`edit`,sshtemplate:({domain:e,project:t,committish:r})=>`git@${e}:${t}.git${n(`#`,r)}`,sshurltemplate:({domain:e,project:t,committish:r})=>`git+ssh://git@${e}/${t}.git${n(`#`,r)}`,edittemplate:({domain:e,user:t,project:i,committish:a,editpath:o})=>`https://${e}/${t}/${i}${n(`/`,r(a))}/${o}`,browsetemplate:({domain:e,project:t,committish:i})=>`https://${e}/${t}${n(`/`,r(i))}`,browsetreetemplate:({domain:e,project:t,committish:i,path:a,hashformat:o})=>`https://${e}/${t}${n(`/`,r(i))}${n(`#`,o(a))}`,browseblobtemplate:({domain:e,project:t,committish:i,path:a,hashformat:o})=>`https://${e}/${t}${n(`/`,r(i))}${n(`#`,o(a))}`,docstemplate:({domain:e,project:t,committish:i})=>`https://${e}/${t}${n(`/`,r(i))}`,httpstemplate:({domain:e,project:t,committish:r})=>`git+https://${e}/${t}.git${n(`#`,r)}`,filetemplate:({user:e,project:t,committish:i,path:a})=>`https://gist.githubusercontent.com/${e}/${t}/raw${n(`/`,r(i))}/${a}`,shortcuttemplate:({type:e,project:t,committish:r})=>`${e}:${t}${n(`#`,r)}`,pathtemplate:({project:e,committish:t})=>`${e}${n(`#`,t)}`,bugstemplate:({domain:e,project:t})=>`https://${e}/${t}`,gittemplate:({domain:e,project:t,committish:r})=>`git://${e}/${t}.git${n(`#`,r)}`,tarballtemplate:({project:e,committish:t})=>`https://codeload.github.com/gist/${e}/tar.gz/${r(t||`HEAD`)}`,extract:e=>{let[,t,n,r]=e.pathname.split(`/`,4);if(r!==`raw`){if(!n){if(!t)return;n=t,t=null}return n.endsWith(`.git`)&&(n=n.slice(0,-4)),{user:t,project:n,committish:e.hash.slice(1)}}},hashformat:function(e){return e&&`file-`+i(e)}},o.sourcehut={protocols:[`git+ssh:`,`https:`],domain:`git.sr.ht`,treepath:`tree`,blobpath:`tree`,filetemplate:({domain:e,user:t,project:n,committish:i,path:a})=>`https://${e}/${t}/${n}/blob/${r(i)||`HEAD`}/${a}`,httpstemplate:({domain:e,user:t,project:r,committish:i})=>`https://${e}/${t}/${r}${n(`#`,i)}`,tarballtemplate:({domain:e,user:t,project:n,committish:i})=>`https://${e}/${t}/${n}/archive/${r(i)||`HEAD`}.tar.gz`,bugstemplate:()=>null,extract:e=>{let[,t,n,r]=e.pathname.split(`/`,4);if(![`archive`].includes(r)&&(n&&n.endsWith(`.git`)&&(n=n.slice(0,-4)),t&&n))return{user:t,project:n,committish:e.hash.slice(1)}}};for(let[e,t]of Object.entries(o))o[e]=Object.assign({},a,t);t.exports=o})),Ve=n(((e,t)=>{var n=(e,t,n)=>{let r=e.indexOf(n);return e.lastIndexOf(t,r>-1?r:1/0)},r=e=>{try{return new URL(e)}catch{}},i=(e,t)=>{let n=e.indexOf(`:`),r=e.slice(0,n+1);if(Object.prototype.hasOwnProperty.call(t,r)||e.substr(n,3)===`://`)return e;let i=e.indexOf(`@`);return i>-1?i>n?`git+ssh://${e}`:e:`${e.slice(0,n+1)}//${e.slice(n+1)}`},a=e=>{let t=n(e,`@`,`#`),r=n(e,`:`,`#`);return r>t&&(e=e.slice(0,r)+`/`+e.slice(r+1)),n(e,`:`,`#`)===-1&&e.indexOf(`//`)===-1&&(e=`git+ssh://${e}`),e};t.exports=(e,t)=>{let n=t?i(e,t):e;return r(n)||r(a(n))}})),He=n(((e,t)=>{var n=Ve(),r=e=>{let t=e.indexOf(`#`),n=e.indexOf(`/`),r=e.indexOf(`/`,n+1),i=e.indexOf(`:`),a=/\s/.exec(e),o=e.indexOf(`@`),s=!a||t>-1&&a.index>t,c=o===-1||t>-1&&o>t,l=i===-1||t>-1&&i>t,u=r===-1||t>-1&&r>t,d=n>0,f=t>-1?e[t-1]!==`/`:!e.endsWith(`/`),p=!e.startsWith(`.`);return s&&d&&f&&p&&c&&l&&u};t.exports=(e,t,{gitHosts:i,protocols:a})=>{if(!e)return;let o=n(r(e)?`github:${e}`:e,a);if(!o)return;let s=i.byShortcut[o.protocol],c=i.byDomain[o.hostname.startsWith(`www.`)?o.hostname.slice(4):o.hostname],l=s||c;if(!l)return;let u=i[s||c],d=null;a[o.protocol]?.auth&&(o.username||o.password)&&(d=`${o.username}${o.password?`:`+o.password:``}`);let f=null,p=null,m=null,h=null;try{if(s){let e=o.pathname.startsWith(`/`)?o.pathname.slice(1):o.pathname,t=e.indexOf(`@`);t>-1&&(e=e.slice(t+1));let n=e.lastIndexOf(`/`);n>-1?(p=decodeURIComponent(e.slice(0,n)),p||=null,m=decodeURIComponent(e.slice(n+1))):m=decodeURIComponent(e),m.endsWith(`.git`)&&(m=m.slice(0,-4)),o.hash&&(f=decodeURIComponent(o.hash.slice(1))),h=`shortcut`}else{if(!u.protocols.includes(o.protocol))return;let e=u.extract(o);if(!e)return;p=e.user&&decodeURIComponent(e.user),m=decodeURIComponent(e.project),f=decodeURIComponent(e.committish),h=a[o.protocol]?.name||o.protocol.slice(0,-1)}}catch(e){if(e instanceof URIError)return;throw e}return[l,p,d,m,f,h,t]}})),Ue=n(((e,t)=>{var{LRUCache:n}=ze(),r=Be(),i=He(),a=Ve(),o=new n({max:1e3});function s(e){try{let{protocol:t,hostname:n,pathname:r}=new URL(e);return n?`${/(?:git\+)http:$/.test(t)?`http:`:`https:`}//${n}${r.replace(/\.git$/,``)}`:null}catch{return null}}var c=class e{constructor(t,n,r,i,a,o,s={}){Object.assign(this,e.#e[t],{type:t,user:n,auth:r,project:i,committish:a,default:o,opts:s})}static#e={byShortcut:{},byDomain:{}};static#t={"git+ssh:":{name:`sshurl`},"ssh:":{name:`sshurl`},"git+https:":{name:`https`,auth:!0},"git:":{auth:!0},"http:":{auth:!0},"https:":{auth:!0},"git+http:":{auth:!0}};static addHost(t,n){e.#e[t]=n,e.#e.byDomain[n.domain]=t,e.#e.byShortcut[`${t}:`]=t,e.#t[`${t}:`]={name:t}}static fromUrl(t,n){if(typeof t!=`string`)return;let r=t+JSON.stringify(n||{});if(!o.has(r)){let a=i(t,n,{gitHosts:e.#e,protocols:e.#t});o.set(r,a?new e(...a):void 0)}return o.get(r)}static fromManifest(t,n={}){if(!t||typeof t!=`object`)return;let r=t.repository,i=r&&(typeof r==`string`?r:typeof r==`object`&&typeof r.url==`string`?r.url:null);if(!i)throw Error(`no repository`);let a=i&&e.fromUrl(i.replace(/^git\+/,``),n)||null;if(a)return a;let o=s(i);return e.fromUrl(o,n)||o}static parseUrl(e){return a(e)}#n(e,t){if(typeof e!=`function`)return null;let n={...this,...this.opts,...t};n.path||=``,n.path.startsWith(`/`)&&(n.path=n.path.slice(1)),n.noCommittish&&(n.committish=null);let r=e(n);return n.noGitPlus&&r.startsWith(`git+`)?r.slice(4):r}hash(){return this.committish?`#${this.committish}`:``}ssh(e){return this.#n(this.sshtemplate,e)}sshurl(e){return this.#n(this.sshurltemplate,e)}browse(e,...t){return typeof e==`string`?typeof t[0]==`string`?this.#n(this.browsetreetemplate,{...t[1],fragment:t[0],path:e}):this.#n(this.browsetreetemplate,{...t[0],path:e}):this.#n(this.browsetemplate,e)}browseFile(e,...t){return typeof t[0]==`string`?this.#n(this.browseblobtemplate,{...t[1],fragment:t[0],path:e}):this.#n(this.browseblobtemplate,{...t[0],path:e})}docs(e){return this.#n(this.docstemplate,e)}bugs(e){return this.#n(this.bugstemplate,e)}https(e){return this.#n(this.httpstemplate,e)}git(e){return this.#n(this.gittemplate,e)}shortcut(e){return this.#n(this.shortcuttemplate,e)}path(e){return this.#n(this.pathtemplate,e)}tarball(e){return this.#n(this.tarballtemplate,{...e,noCommittish:!1})}file(e,t){return this.#n(this.filetemplate,{...t,path:e})}edit(e,t){return this.#n(this.edittemplate,{...t,path:e})}getDefaultRepresentation(){return this.default}toString(e){return this.default&&typeof this[this.default]==`function`?this[this.default](e):this.sshurl(e)}};for(let[e,t]of Object.entries(r))c.addHost(e,t);t.exports=c}));function We(e){let t=e.indexOf(`://`),n=e.startsWith(`git@`)?e.indexOf(`:`)+1:e.indexOf(`/`,t<0?0:t+3)+1;if(n<=0)return e;let r=e.slice(n).search(/[?#]/),i=r<0?e.length:n+r,a=e.indexOf(`@`,n);return a===n&&(a=e.indexOf(`@`,n+1)),a<=n||a===i-1||a>=i?e:t<0?e.slice(0,a):e.slice(0,a)+e.slice(i)}function Ge(e){let t=e.split(/[?#]/,1)[0]??``;return t.includes(`\\`)||/(?:^|\/)(?:\.|%2e){1,2}(?:\/|$)/i.test(t)}function Ke(e){let t,n,r=e.match(/^git@([^:]+):(.+)$/);if(r)t=r[1]??``,n=r[2]??``;else if(/^(?:https?|ssh|git):\/\//.test(e))try{let r=new URL(e);t=r.hostname,n=r.pathname.replace(/^\/+/,``)}catch{return null}else{let r=e.indexOf(`/`);if(r<0||(t=e.slice(0,r),n=e.slice(r+1),!t.includes(`.`)&&t!==`localhost`))return null}let i=Je(n);return!qe(t)||!i?null:{type:`git`,host:t,path:i}}function qe(e){return!!e&&!e.includes(`/`)&&!e.includes(`\\`)&&e!==`.`&&e!==`..`}function Je(e){let t=e.replace(/\.git$/,``).replace(/^\/+/,``).split(`/`);return t.length<2||t.some(e=>!e||e===`.`||e===`..`||e.includes(`\\`))?null:t.join(`/`)}function Ye(e){let t=[e];!e.includes(`://`)&&!e.startsWith(`git@`)&&t.push(`https://${e}`);for(let e of t){let t=Ze.default.fromUrl(e);if(!t)continue;let n=t.domain||``,r=Je(`${t.user}/${t.project}`);if(qe(n)&&r)return{type:`git`,host:n,path:r}}return null}function Xe(e){let t=e.trim(),n=t.startsWith(`git:`),r=n?t.slice(4).trim():t;if(!n&&!/^(https?|ssh|git):\/\//i.test(r))return null;let i=We(r);return Ge(i)?null:Ye(i)??Ke(i)}var Ze;function Qe(){return(Qe=t((()=>{Ze=e(Ue(),1)})))()}function $e(e){let t=e.trim();if(!t)return;let n=Xe(`git:${t}`);if(!n)return;let r=n.path.split(`/`).filter(Boolean);if(!(!n.host||r.length<2))return`${n.host}/${r.join(`/`)}`.toLowerCase()}function et(){return(et=t((()=>{Qe()})))()}function tt(e){return i(e?.cloudWorkers)?e.cloudWorkers:{}}function nt(e){let t=tt(e);return i(t.projectProfiles)?t.projectProfiles:{}}function rt(e){return Object.entries(nt(e??{})).flatMap(([e,t])=>typeof t==`string`?[{repository:e,profileId:t}]:[]).toSorted((e,t)=>e.repository.localeCompare(t.repository))}function it(e){let t=tt(e),n=i(t.preparedPool)?t.preparedPool:{};return typeof n.maxTotal==`number`?String(n.maxTotal):``}function at(e){let t=e.trim();return t&&(!/^\d+$/u.test(t)||!Number.isSafeInteger(Number(t)))?{error:`preparedPool`}:{patch:{cloudWorkers:{preparedPool:{maxTotal:t?Number(t):null}}},replacePaths:[]}}function ot(e,t,n){let r=$e(t.repository);if(!r||$e(`https://${r}`)!==r)return{error:`repository`};let a=nt(e);if(n&&a[n.repository]!==n.profileId)return{error:`repositoryMissing`};if(r!==n?.repository&&Object.hasOwn(a,r))return{error:`repositoryExists`};let o=tt(e).profiles;return!i(o)||!Object.hasOwn(o,t.profileId)||!i(o[t.profileId])?{error:`repositoryProfile`}:{patch:{cloudWorkers:{projectProfiles:{...n&&n.repository!==r?{[n.repository]:null}:{},[r]:t.profileId}}},replacePaths:[]}}function st(e,t){return nt(e)[t.repository]===t.profileId?{patch:{cloudWorkers:{projectProfiles:{[t.repository]:null}}},replacePaths:[]}:{error:`repositoryMissing`}}function ct(){return(ct=t((()=>{et()})))()}function lt(e){return O`<openclaw-cloud-worker-repositories
    .canManage=${e}
  ></openclaw-cloud-worker-repositories>`}var J;function ut(){return(ut=t((()=>{r(),A(),M(),D(),V(),S(),W(),l(),P(),I(),_(),h(),K(),Re(),ct(),U(),J=class extends v{constructor(...e){super(...e),this.canManage=!1,this.editor=null,this.poolDraft=null,this.configSave=new G(this),this.gateway=new F(this,{getGateway:()=>this.context?.gateway,invalidateRequests:()=>{this.editor=null,this.poolDraft=null,this.configSave.update({busy:!1,error:null,notice:null})}}),this.subscriptions=new b(this).effect(()=>this.context?.runtimeConfig,e=>e.subscribe(()=>this.requestUpdate()))}disconnectedCallback(){this.subscriptions.clear(),super.disconnectedCallback()}config(){return m(this.context?.runtimeConfig.state.configSnapshot)}editable(){return this.canManage&&!this.configSave.state.busy}async save(e){let t=this.gateway.capture(),n=this.context.runtimeConfig;if(!t||!this.editable())return!1;let r=()=>this.gateway.isCurrent(t)&&this.context.runtimeConfig===n;return this.configSave.save(n,r,{build:e,note:`cloud workers: update repository defaults or prepared pool`,canDispatch:()=>r()&&N(this.gateway.snapshot,`config.patch`,`operator.admin`),failed:()=>g(`cloudWorkersPage.errors.settingsSaveFailed`),success:()=>g(`cloudWorkersPage.settingsSaved`)})}openEditor(e){this.editable()&&(this.editor={original:e??null,draft:e??{repository:``,profileId:ke(this.config())[0]?.id??``}},this.configSave.update({error:null,notice:null}))}changeDraft(e){this.editor&&(this.editor={...this.editor,draft:{...this.editor.draft,...e}},this.configSave.update({error:null}))}async saveRepository(){let e=this.editor;e&&await this.save(t=>ot(t,e.draft,e.original))&&(this.editor=null)}async savePool(){let e=this.poolDraft??it(this.config());await this.save(()=>at(e))&&(this.poolDraft=null)}renderEditor(){if(!this.editor)return k;let e=this.editor.draft,t=ke(this.config()),n=!t.some(t=>t.id===e.profileId);return L({title:g(this.editor.original===null?`cloudWorkersPage.addRepository`:`cloudWorkersPage.editRepository`)},[B({title:g(`cloudWorkersPage.repositoryIdentity`),description:g(`cloudWorkersPage.repositoryIdentityHelp`),control:O`<input
            class="settings-input mono"
            aria-label=${g(`cloudWorkersPage.repositoryIdentity`)}
            autocomplete="off"
            spellcheck="false"
            .value=${e.repository}
            ?disabled=${!this.editable()}
            @input=${e=>{e.currentTarget instanceof HTMLInputElement&&this.changeDraft({repository:e.currentTarget.value})}}
          />`}),B({title:g(`cloudWorkersPage.repositoryProfile`),control:O`<select
            class="settings-select"
            aria-label=${g(`cloudWorkersPage.repositoryProfile`)}
            .value=${e.profileId}
            ?disabled=${!this.editable()}
            @change=${e=>{e.currentTarget instanceof HTMLSelectElement&&this.changeDraft({profileId:e.currentTarget.value})}}
          >
            ${n?O`<option value=${e.profileId} selected>${e.profileId||g(`cloudWorkersPage.selectProfile`)}</option>`:k}
            ${t.map(t=>O`<option value=${t.id} ?selected=${e.profileId===t.id}>${t.id}</option>`)}
          </select>`}),n?O`<div class="callout warning" role="alert">
              ${g(`cloudWorkersPage.errors.repositoryProfile`)}
            </div>`:k,B({title:g(`cloudWorkersPage.saveRepository`),control:O` <button
              class="btn btn--sm"
              type="button"
              ?disabled=${this.configSave.state.busy}
              @click=${()=>{this.editor=null,this.configSave.update({error:null})}}
            >
              ${g(`common.cancel`)}
            </button>
            <button
              class="btn btn--sm primary"
              type="button"
              ?disabled=${!this.editable()}
              @click=${()=>void this.saveRepository()}
            >
              ${g(`cloudWorkersPage.saveRepository`)}
            </button>`})])}render(){let e=this.config(),t=rt(e),n=this.editable();return O`
      ${L({},B({title:g(`cloudWorkersPage.preparedPool`),description:g(`cloudWorkersPage.preparedPoolHelp`),control:O`<input
              class="settings-input"
              type="number"
              min="0"
              step="1"
              aria-label=${g(`cloudWorkersPage.preparedPool`)}
              .value=${this.poolDraft??it(e)}
              ?disabled=${!n}
              @input=${e=>{e.currentTarget instanceof HTMLInputElement&&(this.poolDraft=e.currentTarget.value,this.configSave.update({error:null}))}}
              @keydown=${e=>{e.key===`Enter`&&(e.preventDefault(),this.savePool())}}
            />
            <button
              class="btn btn--sm"
              type="button"
              ?disabled=${!n}
              @click=${()=>void this.savePool()}
            >
              ${g(`cloudWorkersPage.savePool`)}
            </button>`}))}
      ${L({title:g(`cloudWorkersPage.repositories`),description:g(`cloudWorkersPage.repositoriesHelp`),count:t.length,actions:O`<button
            class="btn btn--sm primary"
            type="button"
            ?disabled=${!n}
            @click=${()=>this.openEditor()}
          >
            ${g(`cloudWorkersPage.addRepository`)}
          </button>`},t.length?t.map(e=>B({title:O`<code>${e.repository}</code>`,description:e.profileId,control:O` <button
                    class="btn btn--sm"
                    type="button"
                    aria-label=${`${g(`cloudWorkersPage.editAction`)}: ${e.repository}`}
                    ?disabled=${!n}
                    @click=${()=>this.openEditor(e)}
                  >
                    ${g(`cloudWorkersPage.editAction`)}
                  </button>
                  <button
                    class="btn btn--sm danger"
                    type="button"
                    aria-label=${`${g(`common.delete`)}: ${e.repository}`}
                    ?disabled=${!n}
                    @click=${()=>void this.save(t=>st(t,e))}
                  >
                    ${g(`common.delete`)}
                  </button>`})):H(g(`cloudWorkersPage.repositoriesEmpty`)))}
      ${this.renderEditor()}
      ${this.configSave.state.error?O`<div class="callout warning" role="alert">${this.configSave.state.error}</div>`:k}
      ${this.configSave.state.notice?O`<div class="callout" role="status">${this.configSave.state.notice}</div>`:k}
    `}},a([s({context:E,subscribe:!0})],J.prototype,`context`,void 0),a([oe({type:Boolean})],J.prototype,`canManage`,void 0),a([j()],J.prototype,`editor`,void 0),a([j()],J.prototype,`poolDraft`,void 0),customElements.get(`openclaw-cloud-worker-repositories`)||customElements.define(`openclaw-cloud-worker-repositories`,J)})))()}function dt(e,t){let n=e.worker;return e.status===`error`?`attention`:n.destroyRequestedAtMs!==void 0||e.status===`stopping`?`releasing`:e.preparation.details.expiresAtMs<=t||e.status===`unavailable`?`attention`:n.state===`ready`?`ready`:e.status===`starting`?`preparing`:`attention`}var Y;function ft(){return(ft=t((()=>{r(),A(),M(),D(),V(),S(),W(),le(),y(),d(),P(),I(),_(),de(),U(),Y=class extends x{constructor(...e){super(...e),this.result=null,this.error=null,this.loading=!1,this.updatedAt=null,this.polling=new ce(this,1e4,()=>void this.load(),!1,`visible`),this.gateway=new F(this,{getGateway:()=>this.context?.gateway,invalidateRequests:()=>{this.request?.abort(),this.request=void 0,this.polling.stop(),this.result=null,this.error=null,this.loading=!1,this.updatedAt=null},ensureInitialData:()=>{this.canRead()&&(this.polling.start(),this.load())},onPageActivation:()=>void this.load()})}canRead(){return N(this.gateway.snapshot,`environments.list`,`operator.admin`)}async load(){let e=this.gateway.capture();if(!e||!this.canRead()||this.loading||document.visibilityState===`hidden`)return;let t=new AbortController;this.request=t,this.loading=!0;try{let n=await e.client.request(`environments.list`,{includePreparedDetails:!0},{signal:t.signal});this.gateway.isCurrent(e)&&(this.result=n,this.error=null,this.updatedAt=Date.now())}catch(t){this.gateway.isCurrent(e)&&(this.error=c(t))}finally{this.gateway.isCurrent(e)&&(this.loading=!1,this.request=void 0)}}renderWorker(e,t){let{worker:n,preparation:r}=e,{details:i}=r,a=dt(e,t),o=i.expiresAtMs<=t,s=a===`releasing`?g(`cloudWorkersPage.pool.releasing`):n.state===`failed`||n.state===`orphaned`?g(`cloudWorkersPage.snapshots.buildStates.${n.state}`):g(o?`cloudWorkersPage.pool.expired`:a===`attention`?`cloudWorkersPage.pool.unavailable`:`cloudWorkersPage.pool.${a}`);return B({title:i.project?.label??g(`cloudWorkersPage.pool.unknownProject`),description:O`
        ${i.project?.baseCommit?O`<code>${i.project.baseCommit.slice(0,8)}</code> · `:k}
        ${g(`cloudWorkersPage.pool.${r.purpose}`)} ·
        ${g(`cloudWorkersPage.pool.age`,{age:ue(n.ageMs)})}
        <br />
        <time datetime=${new Date(i.expiresAtMs).toISOString()}>
          ${g(o?`cloudWorkersPage.pool.expiredAt`:`cloudWorkersPage.pool.expiresAt`,{time:u(i.expiresAtMs)})}
        </time>
        ${n.error?O`<br /><span>${n.error}</span>`:k}
      `,stackedOnNarrow:!0,control:z({kind:a===`ready`?`ok`:a===`attention`?`warn`:`accent`,label:s})})}render(){if(!this.gateway.connected)return R(H(g(`cloudWorkersPage.pool.offline`)));if(!this.canRead())return R(H(g(`cloudWorkersPage.pool.adminRequired`)));let e=Date.now(),t=this.result?.preparedPool,n=new Set(t?.reservedEnvironmentIds),r=(this.result?.environments??[]).filter(e=>e.preparation?.details!==void 0&&e.worker!==void 0&&e.worker.state!==`destroyed`&&(n.has(e.id)||e.preparation.details.consumedAtMs===null&&e.worker.attachedSessionIds.length===0)),i=new Map;for(let e of r){let t=e.worker.profileId??``,n=i.get(t)??[];n.push(e),i.set(t,n)}return R(O`
      ${L({title:g(`cloudWorkersPage.pool.title`),description:g(`cloudWorkersPage.pool.description`),actions:O`<button
            class="btn btn--sm"
            type="button"
            ?disabled=${this.loading}
            @click=${()=>void this.load()}
          >
            ${g(`common.refresh`)}
          </button>`,notice:this.error?O`<div class="callout warning" role="alert">
                ${g(`cloudWorkersPage.pool.refreshFailed`,{error:this.error})}
                ${this.updatedAt===null?k:g(`cloudWorkersPage.pool.lastUpdated`,{time:u(this.updatedAt)})}
              </div>`:k},B({title:t?t.maxTotal===0?g(`cloudWorkersPage.pool.disabledCapacity`,{count:String(n.size)}):g(`cloudWorkersPage.pool.capacity`,{used:String(n.size),limit:String(t.maxTotal)}):g(this.loading?`common.loading`:`cloudWorkersPage.pool.inventoryUnavailable`),description:t?.maxTotal===0?g(`cloudWorkersPage.pool.disabled`):g(`cloudWorkersPage.pool.capacityHelp`)}))}
      ${t?ye([`ready`,`preparing`,`releasing`,`attention`].map(t=>({label:g(`cloudWorkersPage.pool.${t}`),value:r.filter(n=>dt(n,e)===t).length}))):k}
      ${[...i].toSorted(([e],[t])=>e.localeCompare(t)).map(([t,n])=>{let r=this.result?.profiles?.find(e=>e.id===t);return L({title:t||g(`cloudWorkersPage.snapshots.unlabeledProfile`),description:r?.readyWorkers===void 0?void 0:g(`cloudWorkersPage.pool.target`,{count:String(r.readyWorkers)}),count:n.length},n.map(t=>this.renderWorker(t,e)))})}
      ${t&&r.length===0?H(g(`cloudWorkersPage.pool.empty`)):k}
    `)}},a([s({context:E,subscribe:!0})],Y.prototype,`context`,void 0),a([j()],Y.prototype,`result`,void 0),a([j()],Y.prototype,`error`,void 0),a([j()],Y.prototype,`loading`,void 0),a([j()],Y.prototype,`updatedAt`,void 0),customElements.get(`openclaw-cloud-worker-pool`)||customElements.define(`openclaw-cloud-worker-pool`,Y)})))()}function pt(e){return t=>{t.currentTarget instanceof HTMLSelectElement&&e(t.currentTarget.value)}}function mt(e){let t=e.profiles.some(t=>t.id===e.profileId&&t.warmImages===`on`)&&e.repositories.some(t=>t.root===e.projectPath);return O`<openclaw-modal-dialog
    label=${g(`cloudWorkersPage.snapshots.buildSnapshot`)}
    @modal-cancel=${t=>{e.preparing?t.preventDefault():e.onClose()}}
  >
    <div class="exec-approval-card">
      <h2>${g(`cloudWorkersPage.snapshots.buildSnapshot`)}</h2>
      <p>${g(`cloudWorkersPage.snapshots.buildHelp`)}</p>
      <label class="field"
        ><span>${g(`cloudWorkersPage.snapshots.profile`)}</span>
        <select
          class="settings-select"
          .value=${e.profileId}
          ?disabled=${e.preparing}
          @change=${pt(e.onProfileChange)}
        >
          <option value="">${g(`cloudWorkersPage.snapshots.chooseProfile`)}</option>
          ${e.profiles.map(e=>O`<option value=${e.id} ?disabled=${e.warmImages!==`on`}>${e.id}${e.warmImages===`on`?``:` — ${e.reason}`}</option>`)}
        </select>
      </label>
      <label class="field"
        ><span>${g(`cloudWorkersPage.snapshots.repository`)}</span>
        <select
          class="settings-select"
          .value=${e.projectPath}
          ?disabled=${e.preparing||e.repositoriesLoading}
          @change=${pt(e.onProjectChange)}
        >
          <option value="">
            ${g(e.repositoriesLoading?`common.loading`:`cloudWorkersPage.snapshots.chooseRepository`)}
          </option>
          ${e.repositories.map(e=>O`<option value=${e.root}>${e.label===e.root?e.root:`${e.label} · ${e.root}`}</option>`)}
        </select>
      </label>
      ${!e.repositoriesLoading&&!e.repositories.length&&!e.error?O`<p>${g(`cloudWorkersPage.snapshots.noRepositories`)}</p>`:k}
      ${e.error?O`<div class="callout warning" role="alert">${e.error}</div>`:k}
      <div class="exec-approval-actions">
        <button
          class="btn primary"
          type="button"
          ?disabled=${!t||e.preparing||!e.canPrepare}
          @click=${e.onSubmit}
        >
          ${g(`cloudWorkersPage.snapshots.buildSnapshot`)}
        </button>
        <button class="btn" type="button" ?disabled=${e.preparing} @click=${e.onClose}>
          ${g(`common.cancel`)}
        </button>
      </div>
    </div>
  </openclaw-modal-dialog>`}function ht(){return(ht=t((()=>{A(),S()})))()}function gt(e,t,n=!1){let r=n?e.previous:e;if(!r?.checkpointId||!t.onPin)return k;let i=e.capture||e.retirement?g(`cloudWorkersPage.snapshots.captureOrRetirement`):``;return O`<button
    class="btn btn--sm"
    type="button"
    aria-label=${`${g(r.pinned?`cloudWorkersPage.snapshots.unpin`:`cloudWorkersPage.snapshots.pin`)}: ${r.checkpointId}`}
    title=${i}
    ?disabled=${!!i||t.busy}
    @click=${()=>t.onPin?.(n)}
  >
    ${g(r.pinned?`cloudWorkersPage.snapshots.unpin`:`cloudWorkersPage.snapshots.pin`)}
  </button>`}function _t(e,t){let n=e.capture?.phase,r=!!(e.retirement&&e.retirement.checkpointId===e.checkpointId),i=n??(r?`retiring`:e.state===`no-image`?`noImage`:e.state),a=e.runtimeIdentity?.nodeBootstrapSha256.slice(0,12),o=[...t.showMachineFacts?[e.backend,e.machineClass,e.os]:[],...e.baseCommit?[g(`cloudWorkersPage.snapshots.baseCommit`,{commit:e.baseCommit.slice(0,8)})]:[],...e.createdAtMs==null?[]:[g(`cloudWorkersPage.snapshots.created`,{age:u(e.createdAtMs)})],...e.lastDemandAtMs==null?[]:[g(`cloudWorkersPage.snapshots.lastUsed`,{age:u(e.lastDemandAtMs)})],g(`cloudWorkersPage.snapshots.allocations`,{count:String(e.allocationCount)}),...a?[g(`cloudWorkersPage.snapshots.runtime`,{digest:a})]:[]];return B({title:e.projectKey?e.projectLabel??g(`cloudWorkersPage.snapshots.projectImage`):g(`cloudWorkersPage.snapshots.machineImage`),description:O`
      ${o.filter(Boolean).join(` · `)}
      ${e.previous?O`<div>
              ${g(`cloudWorkersPage.snapshots.previous`)}:
              <code>${e.previous.checkpointId}</code>
              ${g(`cloudWorkersPage.snapshots.created`,{age:u(e.previous.createdAtMs)})}
              ${e.previous.baseCommit?g(`cloudWorkersPage.snapshots.baseCommit`,{commit:e.previous.baseCommit.slice(0,8)}):k}
              ${e.previous.pinned?z({kind:`accent`,label:g(`cloudWorkersPage.snapshots.pinned`)}):k}
              ${gt(e,t,!0)}
              ${t.onRollback?O`<button
                      class="btn btn--sm"
                      type="button"
                      aria-label=${`${g(`cloudWorkersPage.snapshots.rollback`)}: ${e.previous.checkpointId}`}
                      title=${e.capture||e.retirement?g(`cloudWorkersPage.snapshots.captureOrRetirement`):``}
                      ?disabled=${!!(e.capture||e.retirement)||t.busy}
                      @click=${t.onRollback}
                    >
                      ${g(`cloudWorkersPage.snapshots.rollback`)}
                    </button>`:k}
            </div>`:k}
      ${e.retirement?O`<br />${g(`cloudWorkersPage.snapshots.retirementHint`,{checkpoint:e.retirement.checkpointId})}`:k}
    `,stackedOnNarrow:!0,control:O`
      ${z({kind:n===`uncertain`||r?`warn`:n?`accent`:e.state===`available`?`ok`:`muted`,label:g(`cloudWorkersPage.snapshots.${i}`)})}
      ${e.pinned?z({kind:`accent`,label:g(`cloudWorkersPage.snapshots.pinned`)}):k}
      ${gt(e,t)}
      ${e.checkpointId&&t.onDelete?O`<button
              class="btn btn--sm danger"
              type="button"
              aria-label=${`${g(`cloudWorkersPage.snapshots.delete`)}: ${e.checkpointId}`}
              title=${t.deleteReason??``}
              ?disabled=${!!t.deleteReason||t.busy}
              @click=${t.onDelete}
            >
              ${g(`cloudWorkersPage.snapshots.delete`)}
            </button>`:k}
      ${e.retirement?z({kind:`warn`,label:g(`cloudWorkersPage.snapshots.retirementPending`)}):k}
      ${t.onRebuild?O`<button
              class="btn btn--sm"
              type="button"
              aria-label=${`${g(`cloudWorkersPage.snapshots.rebuild`)}: ${e.projectLabel??e.projectRoot??e.projectKey??e.profileId??e.profileKey}`}
              ?disabled=${t.buildBusy}
              @click=${t.onRebuild}
            >
              ${g(`cloudWorkersPage.snapshots.rebuild`)}
            </button>`:k}
      ${n===`uncertain`&&t.onRecover?O`
              <button
                class="btn btn--sm"
                type="button"
                aria-label=${`${g(`cloudWorkersPage.snapshots.recover`)}: ${e.capture?.selector}`}
                ?disabled=${t.busy}
                @click=${t.onRecover}
              >
                ${g(`cloudWorkersPage.snapshots.recover`)}
              </button>
            `:k}
    `})}function vt(e,t){let n=e.worker;if(!n)return k;let r=n.state===`failed`||n.state===`orphaned`,i=r?t.onDismiss:t.onCancel,a=g(r?`cloudWorkersPage.snapshots.dismiss`:`common.cancel`);return B({title:g(r?`cloudWorkersPage.snapshots.buildStates.${n.state}`:`cloudWorkersPage.snapshots.building`),description:O`${e.id} ·
    ${g(`cloudWorkersPage.snapshots.buildStates.${n.state}`)} ·
    ${g(`cloudWorkersPage.snapshots.buildAge`,{age:ue(n.ageMs)})}
    ${r&&n.error?O`<div class="callout warning" role="alert">${n.error}</div>`:k}`,control:i?O`<button
          class="btn btn--sm"
          type="button"
          aria-label=${`${a}: ${e.id}`}
          ?disabled=${t.busy}
          @click=${i}
        >
          ${a}
        </button>`:k})}function yt(){return(yt=t((()=>{A(),V(),S(),le(),d()})))()}var X;function bt(){return(bt=t((()=>{r(),A(),M(),T(),D(),V(),S(),W(),l(),P(),I(),_(),h(),K(),U(),X=class extends v{constructor(...e){super(...e),this.draft=null,this.configSave=new G(this),this.gateway=new F(this,{getGateway:()=>this.context?.gateway,invalidateRequests:()=>{this.draft=null,this.configSave.update({busy:!1,error:null,notice:null})}}),this.subscriptions=new b(this).effect(()=>this.context?.runtimeConfig,e=>(e.ensureLoaded(),e.subscribe(()=>this.requestUpdate())))}disconnectedCallback(){this.subscriptions.clear(),super.disconnectedCallback()}policy(){let e=m(this.context?.runtimeConfig.state.configSnapshot);for(let t of[`plugins`,`entries`,`crabbox`,`config`,`warmImages`])e=i(e)?e[t]:void 0;let t=i(e)?e:{};return{refreshAfter:typeof t.refreshAfter==`string`?t.refreshAfter:`24h`,retainUnused:typeof t.retainUnused==`string`?t.retainUnused:`14d`,keepPrevious:t.keepPrevious===1?`1`:`0`}}canSave(){let e=this.context?.runtimeConfig.state;return!(!N(this.gateway.snapshot,`config.patch`,`operator.admin`)||!e?.configSnapshot?.hash||e.configLoading||e.configSaving||this.configSave.state.busy)}edit(e){this.draft={...this.draft??this.policy(),...e},this.configSave.update({error:null,notice:null})}async save(){let e=this.gateway.capture(),t=this.context.runtimeConfig;if(!e||!this.canSave())return;let n=this.draft??this.policy();for(let[e,t]of[[`refreshAfter`,36e5],[`retainUnused`,864e5]])if(!/^[1-9][0-9]{0,7}(m|h|d)(?![\s\S])/.test(n[e])||C(n[e])<t){this.configSave.update({error:g(`cloudWorkersPage.snapshots.${e}Invalid`)});return}let r=()=>this.gateway.isCurrent(e)&&this.context.runtimeConfig===t;await this.configSave.save(t,r,{build:()=>({patch:{plugins:{entries:{crabbox:{config:{warmImages:{refreshAfter:n.refreshAfter,retainUnused:n.retainUnused,keepPrevious:Number(n.keepPrevious)}}}}}}}),note:`cloud workers: update snapshot retention policy`,canDispatch:()=>r()&&N(this.gateway.snapshot,`config.patch`,`operator.admin`),failed:()=>g(`cloudWorkersPage.snapshots.policySaveFailed`),success:()=>(this.draft=null,g(`cloudWorkersPage.snapshots.policySaved`))})}render(){let e=this.draft??this.policy(),t=!this.canSave();return L({title:g(`cloudWorkersPage.snapshots.retentionPolicy`),description:g(`cloudWorkersPage.snapshots.retentionHelp`)},O`
        ${[`refreshAfter`,`retainUnused`].map(n=>B({title:g(`cloudWorkersPage.snapshots.${n}`),description:g(`cloudWorkersPage.snapshots.${n}Help`),control:O`<input
              class="settings-input"
              aria-label=${g(`cloudWorkersPage.snapshots.${n}`)}
              .value=${e[n]}
              ?disabled=${t}
              @input=${e=>{e.currentTarget instanceof HTMLInputElement&&this.edit({[n]:e.currentTarget.value})}}
            />`}))}
        ${B({title:g(`cloudWorkersPage.snapshots.keepPrevious`),control:O`<select
            class="settings-select"
            aria-label=${g(`cloudWorkersPage.snapshots.keepPrevious`)}
            .value=${e.keepPrevious}
            ?disabled=${t}
            @change=${e=>{e.currentTarget instanceof HTMLSelectElement&&this.edit({keepPrevious:e.currentTarget.value===`1`?`1`:`0`})}}
          >
            <option value="0" ?selected=${e.keepPrevious===`0`}>
              ${g(`cloudWorkersPage.snapshots.keepNone`)}
            </option>
            <option value="1" ?selected=${e.keepPrevious===`1`}>
              ${g(`cloudWorkersPage.snapshots.keepOne`)}
            </option>
          </select>`})}
        ${B({title:g(`cloudWorkersPage.snapshots.policyApplies`),control:O`<button
            class="btn btn--sm"
            type="button"
            ?disabled=${t}
            @click=${()=>void this.save()}
          >
            ${g(`cloudWorkersPage.snapshots.savePolicy`)}
          </button>`})}
        ${this.configSave.state.error?O`<div class="callout warning" role="alert">${this.configSave.state.error}</div>`:k}
        ${this.configSave.state.notice?O`<div class="callout" role="status">${this.configSave.state.notice}</div>`:k}
      `)}},a([s({context:E,subscribe:!0})],X.prototype,`context`,void 0),a([j()],X.prototype,`draft`,void 0),customElements.get(`openclaw-cloud-worker-snapshot-policy`)||customElements.define(`openclaw-cloud-worker-snapshot-policy`,X)})))()}var Z;function xt(){return(xt=t((()=>{r(),A(),M(),re(),D(),Ce(),V(),S(),W(),y(),P(),f(),I(),_(),ht(),yt(),bt(),U(),Z=class extends x{constructor(...e){super(...e),this.result=null,this.loading=!1,this.mutating=null,this.recovering=null,this.error=null,this.notice=null,this.builds=[],this.failedBuilds=[],this.buildDialog=!1,this.buildProfile=``,this.buildProject=``,this.repositories=[],this.repositoriesLoading=!1,this.buildError=null,this.preparing=!1,this.destroying=null,this.dismissed=new Set,this.refreshAgain=!1,this.pickerGeneration=0,this.confirmation=null,this.gateway=new F(this,{getGateway:()=>this.context?.gateway,invalidateRequests:()=>{this.refreshAgain=!1,this.stopPolling(),this.closeBuildDialog(),this.builds=[],this.failedBuilds=[],this.preparing=!1,this.destroying=null,this.dismissed.clear(),this.result=null,this.loading=!1,this.recovering=null,this.mutating=null,this.error=null,this.notice=null,this.confirmation?.abort()},ensureInitialData:()=>void this.load()})}canCall(e){return N(this.gateway.snapshot,e,`operator.admin`)}async confirm(e){let t=new AbortController;this.confirmation=t;let n=await be({...e,signal:t.signal});return this.confirmation===t&&(this.confirmation=null),n}async load(){let e=this.gateway.capture();if(this.loading){this.refreshAgain=!0;return}if(e&&this.canCall(`crabbox.images.list`)){this.loading=!0,this.error=null;try{let t=await e.client.request(`environments.list`,{});if(!this.gateway.isCurrent(e))return;let n=t.environments.filter(e=>e.preparation?.purpose===`build`&&e.worker&&e.worker.attachedSessionIds.length===0);this.builds=n.filter(e=>e.worker&&[`requested`,`provisioning`,`bootstrapping`].includes(e.worker.state)),this.failedBuilds=n.filter(e=>e.worker&&[`failed`,`orphaned`].includes(e.worker.state)&&!this.dismissed.has(e.id)),this.failedBuilds.length&&(this.notice=null);let r=await e.client.request(`crabbox.images.list`,{});this.gateway.isCurrent(e)&&(this.result=r)}catch(t){this.gateway.isCurrent(e)&&(this.error=c(t))}finally{this.gateway.isCurrent(e)&&(this.loading=!1,this.stopPolling(),this.refreshAgain?(this.refreshAgain=!1,this.load()):(this.builds.length||this.result?.images.some(e=>e.capture&&e.capture.phase!==`uncertain`))&&(this.pollTimer=setTimeout(()=>void this.load(),1e4)))}}}stopPolling(){clearTimeout(this.pollTimer),this.pollTimer=void 0}closeBuildDialog(){this.pickerGeneration+=1,this.buildDialog=!1,this.repositories=[],this.repositoriesLoading=!1,this.buildError=null}async openBuildDialog(){let e=this.gateway.capture();if(!e||!this.canCall(`environments.prepare`)||this.preparing)return;let t=++this.pickerGeneration;this.buildDialog=!0,this.buildProfile=``,this.buildProject=``,this.buildError=null,this.repositories=[],this.repositoriesLoading=!0;let n=()=>this.gateway.isCurrent(e)&&t===this.pickerGeneration;try{let[t,r]=await Promise.all([e.client.request(`projects.list`,{}),e.client.request(`worktrees.list`,{})]);if(n()){let e=new Map;for(let n of t.projects)n.repoRoot&&e.set(n.repoRoot,n.displayName);for(let t of r.worktrees)!t.removedAt&&!e.has(t.repoRoot)&&e.set(t.repoRoot,t.repoRoot);this.repositories=[...e].map(([e,t])=>({root:e,label:t}))}}catch(e){n()&&(this.buildError=c(e))}finally{n()&&(this.repositoriesLoading=!1)}}async prepare(e,t,n=!1){let r=this.gateway.capture();if(r&&!this.preparing&&this.canCall(`environments.prepare`)){if(!this.result?.profiles.some(t=>t.id===e&&t.warmImages===`on`)||!t||n&&!this.repositories.some(e=>e.root===t)){this.buildError=g(`cloudWorkersPage.snapshots.selectBuildInputs`);return}this.preparing=!0,this.buildError=null,this.error=null,this.notice=null;try{let n=await r.client.request(`environments.prepare`,{profileId:e,projectPath:t});this.gateway.isCurrent(r)&&(this.closeBuildDialog(),this.notice=g(n.reused?`cloudWorkersPage.snapshots.buildReused`:`cloudWorkersPage.snapshots.buildStarted`),await this.load())}catch(e){if(this.gateway.isCurrent(r)){let t=e instanceof te?ie(e):null,r=t===`capacity`?g(`cloudWorkersPage.snapshots.capacity`):t===`invalid_project`?g(`cloudWorkersPage.snapshots.invalidProject`):t===`invalid_profile`||t===`profile_not_found`?g(`cloudWorkersPage.snapshots.invalidProfile`):c(e);n?this.buildError=r:this.error=r}}finally{this.gateway.isCurrent(r)&&(this.preparing=!1)}}}async destroyBuild(e,t){let n=this.gateway.capture();if(n&&!this.destroying&&!this.confirmation&&this.canCall(`environments.destroy`)&&await this.confirm({title:g(`cloudWorkersPage.snapshots.${t?`dismissBuild`:`cancelBuild`}`),message:g(`cloudWorkersPage.snapshots.${t?`dismissBuildMessage`:`cancelBuildMessage`}`),details:e.id,confirmLabel:g(`cloudWorkersPage.snapshots.${t?`dismiss`:`cancelBuild`}`),danger:!t})&&this.gateway.isCurrent(n)&&this.canCall(`environments.destroy`)){this.destroying=e.id,this.error=null,this.notice=null;try{await n.client.request(`environments.destroy`,{environmentId:e.id}),this.gateway.isCurrent(n)&&(t&&(this.dismissed.add(e.id),this.failedBuilds=this.failedBuilds.filter(t=>t.id!==e.id)),this.notice=g(`cloudWorkersPage.snapshots.${t?`buildDismissed`:`buildCancelled`}`),await this.load())}catch(e){this.gateway.isCurrent(n)&&(this.error=c(e))}finally{this.gateway.isCurrent(n)&&(this.destroying=null)}}}renderBuildDialog(){return this.buildDialog?mt({profiles:this.result?.profiles??[],repositories:this.repositories,repositoriesLoading:this.repositoriesLoading,profileId:this.buildProfile,projectPath:this.buildProject,preparing:this.preparing,canPrepare:this.canCall(`environments.prepare`),error:this.buildError,onProfileChange:e=>{this.buildProfile=e},onProjectChange:e=>{this.buildProject=e},onSubmit:()=>void this.prepare(this.buildProfile,this.buildProject,!0),onClose:()=>this.closeBuildDialog()}):k}async recoverCapture(e){let t=this.gateway.capture(),n=e.capture?.selector;if(t&&n&&e.capture?.phase===`uncertain`&&!this.recovering&&!this.mutating&&!this.confirmation&&this.canCall(`crabbox.images.recover`)&&await this.confirm({title:g(`cloudWorkersPage.snapshots.recoverTitle`),message:g(`cloudWorkersPage.snapshots.recoverMessage`),details:n,confirmLabel:g(`cloudWorkersPage.snapshots.recover`),requiredAcknowledgement:g(`cloudWorkersPage.snapshots.acknowledgement`)})){if(!this.gateway.isCurrent(t)||!this.canCall(`crabbox.images.recover`)){this.error=g(`cloudWorkersPage.snapshots.recoveryChanged`);return}this.recovering=n,this.error=null,this.notice=null;try{await t.client.request(`crabbox.images.recover`,{selector:n,acknowledgeProviderCleanup:!0}),this.gateway.isCurrent(t)&&(this.notice=g(`cloudWorkersPage.snapshots.recovered`),await this.load())}catch(e){this.gateway.isCurrent(t)&&(this.error=c(e))}finally{this.gateway.isCurrent(t)&&(this.recovering=null)}}}deleteReason(e){return e.pinned?g(`cloudWorkersPage.snapshots.deletePinned`):e.held?g(`cloudWorkersPage.snapshots.deleteHeld`):e.capture?g(`cloudWorkersPage.snapshots.deleteCapturing`):null}async mutateImage(e,t,n=!1){let r=this.gateway.capture(),i=n?e.previous:e,a=i?.checkpointId,o=`crabbox.images.${t}`;if(r&&i&&a&&!this.mutating&&!this.recovering&&!this.loading&&this.canCall(o)&&!(t===`delete`&&this.deleteReason(e)||t!==`delete`&&(e.capture||e.retirement))){this.mutating=a;try{if(t!==`pin`&&!await this.confirm({title:g(`cloudWorkersPage.snapshots.${t}Title`),message:g(`cloudWorkersPage.snapshots.${t}Message`),details:a,confirmLabel:g(`cloudWorkersPage.snapshots.${t}`),danger:t===`delete`})||!this.gateway.isCurrent(r)||!this.canCall(o))return;let e=null;t===`delete`?(await r.client.request(o,{checkpointId:a})).status===`retiring`&&(e=g(`cloudWorkersPage.snapshots.deletionRetiring`)):await r.client.request(o,{checkpointId:a,...t===`pin`?{pinned:!i.pinned}:{}}),this.gateway.isCurrent(r)&&(this.notice=e,await this.load())}catch(e){this.gateway.isCurrent(r)&&p({message:c(e)})}finally{this.gateway.isCurrent(r)&&(this.mutating=null)}}}renderBuildRow(e){let t=this.canCall(`environments.destroy`)?e.worker?.state===`failed`?{onDismiss:()=>void this.destroyBuild(e,!0)}:{onCancel:()=>void this.destroyBuild(e,!1)}:{};return vt(e,{busy:this.destroying!==null,...t})}renderImage(e,t){let{profileId:n,projectRoot:r}=e;return _t(e,{showMachineFacts:t,busy:this.loading||this.mutating!==null||this.recovering!==null,buildBusy:this.preparing||this.loading,deleteReason:this.deleteReason(e),onPin:this.canCall(`crabbox.images.pin`)?t=>void this.mutateImage(e,`pin`,t):void 0,onRollback:this.canCall(`crabbox.images.rollback`)?()=>void this.mutateImage(e,`rollback`,!0):void 0,onDelete:this.canCall(`crabbox.images.delete`)?()=>void this.mutateImage(e,`delete`):void 0,onRecover:this.canCall(`crabbox.images.recover`)?()=>void this.recoverCapture(e):void 0,onRebuild:r&&n&&this.result?.profiles.some(e=>e.id===n&&e.warmImages===`on`)&&this.canCall(`environments.prepare`)?()=>void this.prepare(n,r):void 0})}renderImages(e){let t=new Map((e?.profiles??[]).map(e=>[e.id,{profile:e,images:[],builds:[]}]));for(let n of e?.images??[]){let e=t.get(n.profileId)??{images:[],builds:[]};e.images.push(n),t.set(n.profileId,e)}for(let e of[...this.builds,...this.failedBuilds]){let n=e.worker?.profileId,r=t.get(n)??{images:[],builds:[]};r.builds.push(e),t.set(n,r)}let n=new Set(this.builds.flatMap(e=>e.worker?.leaseId?[e.worker.leaseId]:[]));return O`
      ${e?ye([{label:g(`cloudWorkersPage.snapshots.images`),value:e.images.filter(e=>e.checkpointId).length},{label:g(`cloudWorkersPage.snapshots.building`),value:this.builds.length+e.images.filter(e=>e.capture&&e.capture.phase!==`uncertain`&&(!e.capture.leaseId||!n.has(e.capture.leaseId))).length},{label:g(`cloudWorkersPage.snapshots.held`),value:e.images.filter(e=>e.held).length},{label:g(`cloudWorkersPage.snapshots.attention`),value:this.failedBuilds.length+e.images.filter(e=>e.retirement||e.capture?.phase===`uncertain`||e.capture?.stale).length}]):k}
      ${t.size?[...t].map(([e,t])=>{let n=[`backend`,`machineClass`,`os`].map(e=>{let n=Array.from(new Set(t.images.map(t=>t[e]).filter(Boolean))),r=t.profile?.[e];return n.length?n:r?[r]:[]}),r=n.map(e=>e.join(`, `)).filter(Boolean),i=n.some(e=>e.length>1);return t.profile&&r.push(g(t.profile.warmImages===`on`?`cloudWorkersPage.snapshots.warmOn`:`cloudWorkersPage.snapshots.warmOff`),t.profile.reason),L({title:e??g(`cloudWorkersPage.snapshots.unlabeledProfile`),description:r.join(` · `),count:t.images.length+t.builds.length},t.images.length||t.builds.length?O`${t.builds.map(e=>this.renderBuildRow(e))}${t.images.map(e=>this.renderImage(e,i))}`:H(g(`cloudWorkersPage.snapshots.profileEmpty`)))}):H(g(`cloudWorkersPage.snapshots.empty`))}
      ${e?.legacyLeases.length?L({title:g(`cloudWorkersPage.snapshots.migration`),description:g(`cloudWorkersPage.snapshots.migrationHint`)},e.legacyLeases.map(e=>B({title:e.leaseId,description:e.recoveryHint}))):k}
    `}render(){let e=se(this.gateway.snapshot??{},`crabbox.images.list`)===!0;return!e||!this.canCall(`crabbox.images.list`)?R(H(g(e?`cloudWorkersPage.snapshots.adminRequired`:`cloudWorkersPage.snapshots.unavailable`))):R(O`
      ${L({},B({title:g(`cloudWorkersPage.snapshots.title`),control:O`${this.canCall(`environments.prepare`)?O`<button class="btn primary btn--sm" type="button" ?disabled=${this.loading||this.preparing} @click=${()=>void this.openBuildDialog()}>${g(`cloudWorkersPage.snapshots.buildSnapshot`)}</button>`:k}<button
              class="btn btn--sm"
              type="button"
              ?disabled=${this.loading||this.recovering!==null||this.mutating!==null}
              @click=${()=>void this.load()}
            >
              ${g(`cloudWorkersPage.snapshots.refresh`)}
            </button>`}))}
      ${this.error?O`<div class="callout warning" role="alert">${this.error}</div>`:k}
      ${this.notice?O`<div class="callout" role="status">${this.notice}</div>`:k}
      ${this.result||this.builds.length||this.failedBuilds.length?this.renderImages(this.result):this.loading?H(g(`common.loading`)):k}
      <openclaw-cloud-worker-snapshot-policy></openclaw-cloud-worker-snapshot-policy>
      ${this.renderBuildDialog()}
    `)}},a([s({context:E,subscribe:!0})],Z.prototype,`context`,void 0),a([j()],Z.prototype,`result`,void 0),a([j()],Z.prototype,`loading`,void 0),a([j()],Z.prototype,`mutating`,void 0),a([j()],Z.prototype,`recovering`,void 0),a([j()],Z.prototype,`error`,void 0),a([j()],Z.prototype,`notice`,void 0),a([j()],Z.prototype,`builds`,void 0),a([j()],Z.prototype,`failedBuilds`,void 0),a([j()],Z.prototype,`buildDialog`,void 0),a([j()],Z.prototype,`buildProfile`,void 0),a([j()],Z.prototype,`buildProject`,void 0),a([j()],Z.prototype,`repositories`,void 0),a([j()],Z.prototype,`repositoriesLoading`,void 0),a([j()],Z.prototype,`buildError`,void 0),a([j()],Z.prototype,`preparing`,void 0),a([j()],Z.prototype,`destroying`,void 0),customElements.get(`openclaw-cloud-worker-snapshots`)||customElements.define(`openclaw-cloud-worker-snapshots`,Z)})))()}function Q(e){let t=e.currentTarget;return t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement?t.value:``}var St,$;function Ct(){return(Ct=t((()=>{r(),fe(),A(),M(),ae(),D(),Ce(),V(),Ee(),S(),W(),l(),y(),P(),I(),_(),h(),K(),Re(),ut(),ft(),xt(),U(),St=`https://docs.openclaw.ai/gateway/cloud-workers`,$=class extends x{constructor(...e){super(...e),this.view=`profiles`,this.editor=null,this.draft=Ae(),this.configSave=new G(this),this.gateway=new F(this,{getGateway:()=>this.context?.gateway,invalidateRequests:()=>{this.configSave.update({busy:!1}),this.catalogTask.abort()}}),this.subscriptions=new b(this).effect(()=>this.context?.runtimeConfig,e=>(e.ensureLoaded(),e.subscribe(()=>this.requestUpdate()))),this.catalogTask=new pe(this,{args:()=>[this.context?.gateway,this.gateway.epoch,this.context?.runtimeConfig.state.configSnapshot?.appliedConfigHash],task:async([e,t,n],{signal:r})=>{let i=this.gateway.capture();if(!i||!N(this.gateway.snapshot,`environments.list`,`operator.admin`))return he;let a=await i.client.request(`environments.list`,{projection:`profiles`},{signal:r});return this.gateway.isCurrent(i)&&this.context.runtimeConfig.state.configSnapshot?.appliedConfigHash===n?new Map((a.profiles??[]).map(e=>[e.id,e])):he}})}disconnectedCallback(){this.catalogTask.abort(),this.subscriptions.clear(),super.disconnectedCallback()}get advertisedProfiles(){return this.catalogTask.status===me.COMPLETE?this.catalogTask.value:void 0}editableConfig(){return m(this.context?.runtimeConfig.state.configSnapshot)}profiles(){return ke(this.editableConfig())}hasManageAccess(){return N(this.gateway.snapshot,`config.patch`,`operator.admin`)}canManage(){let e=this.context?.runtimeConfig.state;return!(!this.hasManageAccess()||!e?.configSnapshot?.hash||e.configLoading||e.configSaving||this.configSave.state.busy)}openAdd(){this.canManage()&&(this.editor={kind:`add`},this.draft=Ae(),this.configSave.update({error:null,notice:null}))}openEdit(e){if(this.canManage()){if(e.providerId!==`crabbox`||!e.machineClass){this.context.navigate(`advanced`,{search:`?section=cloudWorkers`});return}this.editor={kind:`edit`,profileId:e.id},this.draft=Ae(e),this.configSave.update({error:null,notice:null})}}closeEditor(){this.configSave.state.busy||(this.editor=null,this.configSave.update({error:null}))}patchDraft(e){this.draft={...this.draft,...e},this.configSave.update({error:null})}async saveProfile(e){let t=this.gateway.capture(),n=this.context.runtimeConfig,r=this.editor?.kind===`edit`?this.editor.profileId:null,i=this.editableConfig();if(!t||!this.editor||!i||!this.canManage())return;let a=Me(e,Object.fromEntries(this.profiles().map(e=>[e.id,!0])),r);if(a){this.configSave.update({error:g(`cloudWorkersPage.errors.${a}`)});return}let o=r??e.id,s=()=>this.gateway.isCurrent(t)&&this.context.runtimeConfig===n;await this.configSave.save(n,s,{build:t=>Ne(t,e,r),note:`cloud workers: ${r?`update`:`add`} ${o}`,canDispatch:s,failed:()=>g(`cloudWorkersPage.errors.saveFailed`),success:()=>(this.editor=null,g(`cloudWorkersPage.profileSaved`))})}async deleteProfile(e){let t=this.context.gateway,n=t.snapshot.client,r=t.connection.gatewayUrl,i=this.context.runtimeConfig;if(!this.canManage()||!await be({title:g(`cloudWorkersPage.deleteTitle`),message:g(`cloudWorkersPage.deleteConfirm`,{profile:e.id}),confirmLabel:g(`common.delete`),danger:!0}))return;let a=this.gateway.capture();if(!a||a.client!==n||this.context.gateway!==t||t.connection.gatewayUrl!==r||this.context.runtimeConfig!==i||!this.canManage()){this.configSave.update({error:g(`cloudWorkersPage.errors.deleteFailed`)});return}let o=()=>this.gateway.isCurrent(a)&&this.context.runtimeConfig===i;await this.configSave.save(i,o,{build:t=>Pe(t,e.id),note:`cloud workers: delete ${e.id}`,canDispatch:o,failed:()=>g(`cloudWorkersPage.errors.deleteFailed`),success:()=>(this.editor?.kind===`edit`&&this.editor.profileId===e.id&&(this.editor=null),g(`cloudWorkersPage.settingsSaved`))})}profileDescription(e){return e.providerId===`crabbox`?[g(`cloudWorkersPage.backendFact`,{backend:e.backend||g(`common.unknown`)}),g(`cloudWorkersPage.classFact`,{value:e.machineClass||g(`common.unknown`)}),...e.target&&e.target!==`linux`?[g(`cloudWorkersPage.operatingSystemFact`,{value:this.advertisedProfiles?.get(e.id)?.operatingSystems?.find(t=>t.id===e.target)?.label??e.target})]:[],g(`cloudWorkersPage.ttlFact`,{value:e.ttl||g(`common.unknown`)}),g(`cloudWorkersPage.idleFact`,{value:e.idleTimeout||g(`common.unknown`)}),g(`cloudWorkersPage.desktopFact`,{value:e.desktop?g(`common.enabled`):g(`common.disabled`)})].join(` · `):g(`cloudWorkersPage.providerFact`,{provider:e.providerId||g(`common.unknown`)})}renderProfile(e){let t=this.catalogTask.status===me.PENDING?z({kind:`muted`,label:g(`common.loading`)}):this.advertisedProfiles?.has(e.id)?z({kind:`ok`,label:g(`cloudWorkersPage.advertised`)}):z({kind:`warn`,label:g(`cloudWorkersPage.unavailable`)}),n=this.canManage();return B({title:O`<code>${e.id}</code>`,description:this.profileDescription(e),control:O`
        ${t}
        <button
          class="btn btn--sm"
          type="button"
          aria-label=${`${g(`cloudWorkersPage.editAction`)}: ${e.id}`}
          ?disabled=${!n}
          @click=${()=>this.openEdit(e)}
        >
          ${g(`cloudWorkersPage.editAction`)}
        </button>
        <button
          class="btn btn--sm danger"
          type="button"
          aria-label=${`${g(`common.delete`)}: ${e.id}`}
          ?disabled=${!n}
          @click=${()=>void this.deleteProfile(e)}
        >
          ${g(`common.delete`)}
        </button>
      `})}renderDraftInput(e,t={}){return B({title:g(`cloudWorkersPage.fields.${e}`),description:t.description??g(`cloudWorkersPage.fields.${e}Help`),control:O`<input
        class="settings-input mono"
        aria-label=${g(`cloudWorkersPage.fields.${e}`)}
        placeholder=${t.placeholder??k}
        type=${t.type??k}
        min=${e===`readyWorkers`?`0`:k}
        step=${e===`readyWorkers`?`1`:k}
        autocomplete="off"
        spellcheck="false"
        .value=${this.draft[e]}
        ?disabled=${this.configSave.state.busy}
        @input=${t=>this.patchDraft({[e]:Q(t)})}
      />`})}renderEditor(){if(!this.editor)return k;let e=this.configSave.state.busy,t=this.canManage(),n=this.editor.kind===`edit`,r=n?this.advertisedProfiles?.get(this.draft.id)?.operatingSystems??[]:[],i=this.draft.target&&!r.some(e=>e.id===this.draft.target);return L({title:g(n?`cloudWorkersPage.editProfile`:`cloudWorkersPage.addProfile`)},[B({title:g(`cloudWorkersPage.fields.profileId`),description:g(`cloudWorkersPage.fields.profileIdHelp`),control:n?ve(this.draft.id,{mono:!0}):O`<input
                class="settings-input mono"
                aria-label=${g(`cloudWorkersPage.fields.profileId`)}
                autocomplete="off"
                spellcheck="false"
                .value=${this.draft.id}
                ?disabled=${e}
                @input=${e=>this.patchDraft({id:Q(e)})}
              />`}),this.renderDraftInput(`backend`,{description:O`${g(`cloudWorkersPage.fields.backendHelp`)}
          ${Se(St,g(`cloudWorkersPage.providerList`))}`,placeholder:g(`cloudWorkersPage.fields.backendPlaceholder`)}),...r.length>=2||i?[B({title:g(`cloudWorkersPage.fields.operatingSystem`),description:g(`cloudWorkersPage.fields.operatingSystemHelp`),control:O`<select
                  class="settings-select"
                  aria-label=${g(`cloudWorkersPage.fields.operatingSystem`)}
                  .value=${this.draft.target}
                  ?disabled=${e}
                  @change=${e=>{let t=Q(e);r.find(e=>e.id===t)?.disabledReason||this.patchDraft({target:t})}}
                >
                  <option value="" ?selected=${!this.draft.target}>
                    ${g(`cloudWorkersPage.fields.providerDefault`)}
                  </option>
                  ${r.map(e=>O`
                      <option
                        value=${e.id}
                        ?selected=${this.draft.target===e.id}
                        ?disabled=${!!e.disabledReason}
                      >
                        ${e.label}${e.disabledReason?` — ${e.disabledReason}`:``}
                      </option>
                    `)}
                  ${i?O`
                          <option value=${this.draft.target} selected>${this.draft.target}</option>
                        `:k}
                </select>`})]:[],this.renderDraftInput(`machineClass`),this.renderDraftInput(`ttl`,{placeholder:g(`cloudWorkersPage.fields.ttlPlaceholder`)}),this.renderDraftInput(`idleTimeout`,{placeholder:g(`cloudWorkersPage.fields.idleTimeoutPlaceholder`)}),B({title:g(`cloudWorkersPage.fields.setup`),description:g(`cloudWorkersPage.fields.setupHelp`),stacked:!0,control:O`<textarea
            class="settings-input mono"
            aria-label=${g(`cloudWorkersPage.fields.setup`)}
            placeholder=${g(`cloudWorkersPage.fields.setupPlaceholder`)}
            autocomplete="off"
            spellcheck="false"
            .value=${this.draft.setup}
            ?disabled=${e}
            @input=${e=>this.patchDraft({setup:Q(e)})}
          ></textarea>`}),_e({title:g(`cloudWorkersPage.fields.desktop`),description:g(`cloudWorkersPage.fields.desktopHelp`),checked:this.draft.desktop,disabled:e,onChange:e=>this.patchDraft({desktop:e})}),this.renderDraftInput(`binary`,{placeholder:g(`cloudWorkersPage.fields.binaryPlaceholder`)}),L({title:g(`cloudWorkersPage.advanced`)},[B({title:g(`cloudWorkersPage.fields.warmImage`),description:g(`cloudWorkersPage.fields.warmImageHelp`),control:O`<select
              class="settings-select"
              aria-label=${g(`cloudWorkersPage.fields.warmImage`)}
              .value=${this.draft.warmImage}
              ?disabled=${e}
              @change=${e=>{let t=Q(e);(t===`auto`||t===`on`||t===`off`)&&this.patchDraft({warmImage:t})}}
            >
              ${[`auto`,`on`,`off`].map(e=>O`
                  <option value=${e} ?selected=${this.draft.warmImage===e}>
                    ${g(`cloudWorkersPage.warmImage.${e}`)}
                  </option>
                `)}
            </select>`}),...[`setupEnv`,`readyWorkers`,`suspendAfter`].map(e=>this.renderDraftInput(e,{type:e===`readyWorkers`?`number`:`text`}))]),...this.configSave.state.error?[B({title:g(`cloudWorkersPage.errors.title`),description:O`<span role="alert">${this.configSave.state.error}</span>`})]:[],B({title:g(`cloudWorkersPage.fields.actions`),description:g(`cloudWorkersPage.fields.actionsHelp`),control:O`
            <button
              class="btn primary"
              type="button"
              ?disabled=${!t}
              @click=${()=>void this.saveProfile(this.draft)}
            >
              ${g(e?`common.saving`:`common.save`)}
            </button>
            <button class="btn" type="button" ?disabled=${e} @click=${()=>this.closeEditor()}>
              ${g(`common.cancel`)}
            </button>
          `})])}render(){let e=this.profiles(),t=this.canManage(),n=t?O`<button class="btn btn--sm primary" type="button" @click=${()=>this.openAdd()}>
          ${g(`cloudWorkersPage.addProfile`)}
        </button>`:void 0,r=e.length?e.map(e=>this.renderProfile(e)):H(g(`cloudWorkersPage.empty`)),i=R(O`
      ${this.hasManageAccess()?k:O`<div class="callout warning" role="note">
              ${g(`cloudWorkersPage.adminRequired`)}
            </div>`}
      ${this.catalogTask.status===me.ERROR?O`<div class="callout warning" role="status">
              ${g(`cloudWorkersPage.catalogFailed`,{error:c(this.catalogTask.error)})}
            </div>`:k}
      ${this.configSave.state.error&&!this.editor?O`<div class="callout warning" role="alert">${this.configSave.state.error}</div>`:k}
      ${this.configSave.state.notice?O`<div class="callout" role="status">${this.configSave.state.notice}</div>`:k}
      ${L({title:g(`cloudWorkersPage.sectionTitle`),description:g(`cloudWorkersPage.sectionDescription`),actions:n,count:e.length},r)}
      ${this.renderEditor()} ${lt(t)}
    `);return O`
      ${ge({title:ne(`cloud-workers`),subtitle:O`${g(`cloudWorkersPage.intro`)} ${we(St)}`})}
      ${Te(O`
        ${R(xe({mode:`buttons`,value:this.view,ariaLabel:g(`cloudWorkersPage.snapshots.viewLabel`),options:[{value:`profiles`,label:g(`cloudWorkersPage.sectionTitle`)},{value:`pool`,label:g(`cloudWorkersPage.pool.tab`)},{value:`snapshots`,label:g(`cloudWorkersPage.snapshots.title`)}],onChange:e=>{this.view=e}}))}
        ${this.view===`profiles`?i:this.view===`pool`?O`<openclaw-cloud-worker-pool></openclaw-cloud-worker-pool>`:O`<openclaw-cloud-worker-snapshots></openclaw-cloud-worker-snapshots>`}
      `)}
    `}},a([s({context:E,subscribe:!0})],$.prototype,`context`,void 0),a([j()],$.prototype,`view`,void 0),a([j()],$.prototype,`editor`,void 0),a([j()],$.prototype,`draft`,void 0),customElements.get(`openclaw-cloud-workers-page`)||customElements.define(`openclaw-cloud-workers-page`,$)})))()}Ct();