openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
64 lines • 6.73 kB
JavaScript
import{n as e}from"./rolldown-runtime-8BhlS34s.js";import{Pu as t,xu as n,yu as r,zu as i}from"./control-ui-core-CBJ5efDh.js";import{Ct as a,Tt as o,ft as s,ht as c,qr as l}from"./control-ui-core-DtLivg_r.js";import{G as u,J as d,K as f,W as p}from"./lit-runtime-IOnANfcZ.js";import{f as m,p as h}from"./ui-CmSP4d14.js";import{oa as g,sa as _}from"./control-ui-boot-shared-XreXSF7h.js";import{n as v,t as y}from"./en-update-actions-CGzQJvZs.js";import{t as b}from"./update-run-view-DsxSV0HV.js";function x(e,t){let n=e?.currentVersion?.trim(),r=n?i(`updates.target.version`,{version:n}):null,a=s(t,e);if(r&&a){let n=t?.install?.git,o=n?.status===`behind`||n?.status===`diverged`||t?.target?.kind===`git`||e?.commitsBehind!==void 0;return i(o?`updates.confirm.versionsBehind`:`updates.confirm.versions`,{available:a,installed:r})}return r??a??void 0}function S(e){return i(e?`updates.dialog.installing`:`updates.dialog.disconnected`)}async function C(e){if(E)return;let t=document.createElement(`div`);document.body.append(t),document.body.classList.add(T);let n=e.viaNativeApp?{confirmLabel:i(`updates.confirm.macAction`),message:i(`updates.confirm.macMessage`),title:i(`chat.sidebar.updateMacAndGateway`)}:{confirmLabel:i(`updates.confirm.action`),message:i(`updates.confirm.message`),title:i(`chat.sidebar.updateGateway`)},a=x(e.updateAvailable,e.updateSchedule);await new Promise(s=>{let c=e.existingRun?{kind:`run`,run:e.existingRun}:{kind:`confirm`},l=!1,p,m,g=!1,v,y=`idle`,b=()=>{l||(l=!0,p?.(),m!==void 0&&globalThis.clearTimeout(m),f(u,t),t.remove(),document.body.classList.remove(T),E=!1,s())},x=()=>{!l&&c.kind===`run`&&c.run.status!==`running`&&e.onAcknowledge?.(),b()},C=(e,t)=>{let n=e(e=>{if(!l){if(v=e,c.kind===`run`&&!e.run){b();return}t(e)}});l?n():p=n};E=!0;let D=()=>{if(l)return;let r=c,o=r.kind===`run`?r.run:null,s=r.kind===`run`?v?.readError:null,m=r.kind===`working`||o?.status===`running`,g=o!==null&&o.status!==`running`,b=r.kind===`failed`||o!==null&&h(o),C=y===`pending`,w=typeof y==`object`?y.error:null,T=b||!!s||y!==`idle`,E=v?.connected===!1,A=r.kind===`run`?s??``:r.kind===`failed`?r.message:r.kind===`working`?S(!E):`${n.message} ${i(`updates.confirm.impact`)}`;f(d`
<openclaw-modal-dialog label=${n.title} description=${A} @modal-cancel=${x}>
<div class="exec-approval-card update-run-dialog">
<div class="exec-approval-header">
<div>
<div class="exec-approval-title">${n.title}</div>
<div class="exec-approval-sub" style="white-space: pre-line">${A}</div>
</div>
</div>
<div role="status" aria-live="polite" class="exec-approval-sub">
${E&&T?i(`updates.dialog.checkStatusDisconnected`):y===`success`&&!s?i(`updates.dialog.statusRefreshed`):u}
</div>
${w?d`<div role="alert" class="exec-approval-sub">${w}</div>`:u}
${a&&r.kind===`confirm`?d`<div class="exec-approval-command mono update-confirmation-details">
<div>${a}</div>
${_(e.updateSchedule,e.updateAvailable)}
</div>`:u}
${r.kind===`run`?d`<openclaw-update-run-view
.run=${r.run}
.connected=${!E}
></openclaw-update-run-view>`:u}
<div class="exec-approval-actions">
${g||T?d` ${T&&e.onCheckStatus?d`<button
type="button"
class="btn ${C?`btn--busy`:``}"
?disabled=${C||E}
@click=${O}
>
${C?d`<span class="btn__spinner" aria-hidden="true"></span>${i(`updates.dialog.checkingStatus`)}`:i(`updates.dialog.checkStatus`)}
</button>`:u}
${b?d`<button
type="button"
class="btn primary"
?disabled=${C||E}
@click=${()=>{c={kind:`confirm`},y=`idle`,p?.(),D()}}
>
${i(`updates.dialog.retryUpdate`)}
</button>`:u}
${b&&e.onReviewUpdate?d`<button
type="button"
class="btn"
@click=${()=>{x(),e.onReviewUpdate?.()}}
>
${i(`updates.reviewUpdate`)}
</button>`:u}
<button type="button" class="btn" autofocus @click=${x}>
${i(`common.close`)}
</button>`:d`
<button
type="button"
class="btn danger ${m?`btn--busy`:``}"
?disabled=${m}
@click=${k}
>
${m?d`<span class="btn__spinner" aria-hidden="true"></span>${i(`chat.updating`)}`:n.confirmLabel}
</button>
<button type="button" class="btn" autofocus @click=${x}>
${i(m?`common.close`:`common.cancel`)}
</button>
`}
</div>
</div>
</openclaw-modal-dialog>
`,t)};async function O(){if(y!==`pending`&&v?.connected!==!1&&e.onCheckStatus){y=`pending`,D();try{y=await e.onCheckStatus()?`success`:v?.readError?`idle`:{error:i(`updates.dialog.statusNotRefreshed`)}}catch(e){y={error:r(e)}}finally{D()}}}function k(){if(c.kind!==`confirm`)return;if(e.viaNativeApp&&o()){x();return}let t=e.watchUpdateProgress;if(!t){e.startGatewayUpdate(),x();return}g=!1,m!==void 0&&globalThis.clearTimeout(m),c={kind:`working`},D(),e.startGatewayUpdate();let n=!0;C(t,e=>{let t=n;if(n=!1,c.kind===`confirm`)return;if(e.run&&(!t||e.run.status===`running`)){g=!0,c={kind:`run`,run:e.run},D();return}let r=e.failure&&e.readError?`${e.failure}\n${e.readError}`:e.failure??e.readError;if(r&&!t){c={kind:`failed`,message:r},D();return}g||=e.busy,c={kind:`working`},D()}),!l&&(m=globalThis.setTimeout(()=>{l||g||c.kind!==`working`||(c={kind:`failed`,message:i(`updates.dialog.notStarted`)},D())},w))}e.existingRun&&e.watchUpdateProgress&&C(e.watchUpdateProgress,e=>{e.run&&(c={kind:`run`,run:e.run},D())}),D()})}var w,T,E;function D(){return(D=e((()=>{p(),m(),g(),t(),y(),l(),b(),n(),a(),c(),v(),w=4e3,T=`update-dialog-open`,E=!1})))()}D();export{C as confirmAndStartUpdateRuntime};