openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
870 lines โข 137 kB
JavaScript
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./markdown-mermaid-Dg-raW5O.js","./rolldown-runtime-DkW27tQK.js","./control-ui-foundation-Cydpkyqa.js","./control-ui-core-Rwzhj6nO.js","./lit-runtime-CV_MH99K.js","./control-ui-core-YphAl4aM.js","./control-ui-core-vvcQQV2m.js","./gateway-runtime-Bqqcp9-I.js","./control-ui-core-ClxHIvNM.css","./control-ui-boot-shared-DfZ39Yj9.js","./control-ui-boot-shared-BYq7Cchl.js","./control-ui-boot-shared-Deak_Sjt.js","./control-ui-boot-shared-gfE6fZcA.js","./markdown-runtime-Bn6OdBVq.js","./control-ui-boot-shared-CXVvK2AW.js","./control-ui-boot-shared-3juXI2I2.js","./control-ui-boot-shared-BVNXvWX-.js","./control-ui-boot-shared-KspYIvAF.css","./theme-color-BwHgSJo3.js"])))=>i.map(i=>d[i]);
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{Cn as t,En as n,Ii as r,Kn as i,Qi as a,Tn as o,Un as s,Ut as c,Vn as l,Vt as u,ii as d,jn as f,na as p,ra as m,ri as h,ta as g,wr as _}from"./control-ui-foundation-Cydpkyqa.js";import{As as v,Cc as y,Eo as b,Fa as x,Fn as S,Fs as C,Hs as w,In as ee,Is as te,Ki as ne,Ls as re,Oo as ie,Sc as ae,_ as oe,k as se,ks as ce,mc as le,pc as ue,w as de,wc as fe,xc as pe,ya as me,yc as he,za as ge}from"./control-ui-core-Rwzhj6nO.js";import{$ as _e,C as ve,G as ye,J as be,K as T,T as xe,U as Se,X as E,at as Ce,b as we,c as Te,dt as Ee,q as D,r as De,st as O,t as Oe,u as ke,w as Ae}from"./lit-runtime-CV_MH99K.js";import{J as je,cn as Me,et as Ne,nn as Pe,rn as Fe,sn as Ie}from"./control-ui-core-YphAl4aM.js";import{Gt as Le,Ht as Re,Rt as ze,Wt as k,Yt as A,an as Be,en as j,in as Ve}from"./control-ui-core-vvcQQV2m.js";import{Ct as He,It as Ue,St as We,c as Ge,dn as Ke,fn as qe,nn as M}from"./control-ui-boot-shared-BYq7Cchl.js";import{a as Je,r as Ye}from"./gateway-runtime-Bqqcp9-I.js";import{$t as Xe,An as Ze,Cr as Qe,Do as $e,Gt as et,Lt as tt,Rt as nt,Sr as rt,To as it,Xt as at,_o as ot,co as st,dn as ct,do as lt,fo as ut,gn as dt,hn as ft,io as pt,jn as mt,lo as ht,mo as gt,nn as _t,oo as vt,pn as yt,po as bt,ro as xt,so as St,tn as Ct,un as wt,vo as Tt,xr as Et,yo as Dt}from"./control-ui-boot-shared-DfZ39Yj9.js";import{$ as Ot,At as kt,Dt as At,Et as jt,I as Mt,L as Nt,Ot as Pt,Q as Ft,Tt as It,X as Lt,Y as Rt,c as zt,ct as Bt,dt as Vt,et as Ht,ft as Ut,kt as Wt,l as Gt,lt as Kt,mt as qt,ot as Jt,pt as Yt,st as Xt,tt as Zt,ut as Qt}from"./control-ui-boot-chat-Cgwe4GEM.js";import{Xo as $t,Zo as en,as as tn,hs as nn,ms as rn,os as an}from"./control-ui-boot-shared-CXVvK2AW.js";function on(e){let t=e.get(`content-length`);if(!t||!/^\d+$/u.test(t))return null;let n=Number(t);return Number.isSafeInteger(n)?n:1/0}async function sn(e,t){let n=on(e.headers);if(n!==null&&n>t.maxBytes)throw e.body?.cancel().catch(()=>void 0),Error(t.tooLargeMessage);if(!e.body){if(t.missingBodyMessage)throw Error(t.missingBodyMessage);return``}let r=e.body.getReader(),i=new TextDecoder,a=[],o=0;try{for(;;){let{done:e,value:n}=await r.read();if(e){let e=i.decode();e&&a.push(e);break}if(o+=n.byteLength,o>t.maxBytes)throw r.cancel().catch(()=>void 0),Error(t.tooLargeMessage);a.push(i.decode(n,{stream:!0}))}}finally{r.releaseLock()}return a.join(``)}function cn(){return(cn=e((()=>{})))()}function ln(e){let t=dn.get(e);return t||(t=new un,dn.set(e,t)),t}var un,dn;function fn(){return(fn=e((()=>{un=class{constructor(){this.region=`page`,this.listeners=new Set}get current(){return this.region}claim(e){if(this.region!==e){this.region=e;for(let e of this.listeners)e()}}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}},dn=new WeakMap})))()}function pn(e){let t=e.replace(/[\\/]+$/,``);return t.split(/[\\/]/).pop()||t}function mn(e){let t=e.session;if(!t)return{root:null,label:null};let n=t.execNode?t.execCwd?.trim()||null:t.spawnedWorkspaceDir?.trim()||t.spawnedCwd?.trim()||e.worktreePath?.trim()||(t.worktree?``:e.agentWorkspace?.trim())||null;return{root:n,label:t.worktree?.repoRoot?pn(t.worktree.repoRoot):n?pn(n):null}}function hn(){return(hn=e((()=>{})))()}function gn(e){let t=0,n=0;for(let r of e)r.kind===`add`?t+=1:r.kind===`del`&&(n+=1);return{added:t,removed:n}}function _n(e){if(!e.trim())return null;let t=[],n=!1;for(let r of e.split(`
`)){if(!r)continue;if(/^\s*\.\.\.\(truncated\)\.\.\.\s*$/.test(r)){n=!0,t.push({kind:`skip`,text:``});continue}if(/^\s*\.\.\.\s*$/.test(r)){t.push({kind:`skip`,text:``});continue}let e=r.match(/^([+\- ])\s*(\d+) ?(.*)$/s);if(!e)return null;let[,i,a,o]=e;if(!i||!a)return null;if(t.push({kind:i===`+`?`add`:i===`-`?`del`:`ctx`,lineNo:Number.parseInt(a,10),text:o??``}),t.length>400){t.push({kind:`skip`,text:``}),n=!0;break}}return t.some(e=>e.kind===`add`||e.kind===`del`)?n?{kind:`truncated`,lines:t}:{kind:`complete`,lines:t,stat:gn(t)}:null}function vn(e){let t=e.replace(/\r\n/g,`
`).replace(/\r/g,`
`);if(t===``)return[];let n=t.split(`
`);return n.length>1&&n[n.length-1]===``&&n.pop(),n}function yn(e,t,n){if(!n&&e.length<=400&&!t)return e;if(!e.some(e=>e.kind===`add`||e.kind===`del`))return n&&!t?[]:t?[{kind:`skip`,text:``}]:[...e.slice(0,400),{kind:`skip`,text:``}];let r=new Uint8Array(e.length);for(let t=0;t<e.length;t++){let n=e[t];if(!n||n.kind!==`add`&&n.kind!==`del`)continue;let i=Math.max(0,t-3),a=Math.min(e.length,t+4);r.fill(1,i,a)}let i=[],a=!1,o=t;for(let t=0;t<e.length;t++){if(r[t]===0){a=!0,o=!0;continue}if(a&&i.at(-1)?.kind!==`skip`&&i.push({kind:`skip`,text:``}),a=!1,i.length>=400){o=!0;break}let n=e[t];n&&i.push(n)}return o&&i.at(-1)?.kind!==`skip`&&i.push({kind:`skip`,text:``}),i}function bn(e,t,n){let r=vn(e),i=vn(t),a=r.length>N||i.length>N,o=r.length===i.length&&r.every((e,t)=>e===i[t]),s=a&&!o,c=r.slice(0,N),l=i.slice(0,N),u=c.length,d=l.length,f=Array.from({length:u+1},()=>Array.from({length:d+1},()=>0));for(let e=u-1;e>=0;e--){let t=f[e],n=f[e+1];if(!(!t||!n))for(let r=d-1;r>=0;r--)t[r]=c[e]===l[r]?(n[r+1]??0)+1:Math.max(n[r]??0,t[r+1]??0)}let p=[],m=0,h=0;for(;m<u&&h<d;){let e=c[m],t=l[h];if(e===void 0||t===void 0)break;e===t?(p.push({kind:`ctx`,text:e}),m++,h++):(f[m+1]?.[h]??0)>=(f[m]?.[h+1]??0)?(p.push({kind:`del`,text:e}),m++):(p.push({kind:`add`,text:t}),h++)}for(;m<u;){let e=c[m];e!==void 0&&p.push({kind:`del`,text:e}),m++}for(;h<d;){let e=l[h];e!==void 0&&p.push({kind:`add`,text:e}),h++}let g=yn(p,s,n?.compactUnchanged===!0);return s?{kind:`truncated`,lines:g}:{kind:`complete`,lines:g,stat:gn(p)}}function xn(e,t=80){let n=vn(e),r=[];for(let[e,i]of n.slice(0,t).entries())r.push({kind:`add`,lineNo:e+1,text:i});return n.length>t&&r.push({kind:`skip`,text:``}),r}function Sn(e){return vn(e).length}function Cn(e,t){let n=t?.maxLines??400,r=[],i=t?.truncated===!0||e.some(e=>e.kind===`truncated`),a=i;for(let t of e){if(t.lines.length===0)continue;if(r.length>0){if(r.length>=n){a=!0;break}r.push({kind:`skip`,text:``})}let e=n-r.length;if(t.lines.length>e){r.push(...t.lines.slice(0,e)),a=!0;break}r.push(...t.lines)}return a&&r.at(-1)?.kind!==`skip`&&r.push({kind:`skip`,text:``}),i?{kind:`truncated`,lines:r}:{kind:`complete`,lines:r,stat:e.reduce((e,t)=>({added:e.added+(t.kind===`complete`?t.stat.added:0),removed:e.removed+(t.kind===`complete`?t.stat.removed:0)}),{added:0,removed:0})}}var N;function wn(){return(wn=e((()=>{N=600})))()}function Tn(e){if(e===``)return[];let t=e.replace(/\r\n/g,`
`).replace(/\r/g,`
`).split(`
`);return t.length>1&&t.at(-1)===``&&t.pop(),t}function En(e,t,n){let r=n.trim(),i={operation:t,sourcePath:r,path:r,lines:[],stat:{added:0,removed:0}};return e.sections.push(i),i}function Dn(e,t,n){n.kind===`add`?t.stat.added+=1:n.kind===`del`&&(t.stat.removed+=1),e.storedRows<400?(t.lines.push(n),e.storedRows+=1):e.truncated=!0}function On(e,t){t.lines.length!==0&&t.lines.at(-1)?.kind!==`skip`&&Dn(e,t,{kind:`skip`,text:``})}function kn(e){let t=e.match(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);return t?{oldLine:Number.parseInt(t[1]??``,10),oldLeft:t[2]===void 0?1:Number.parseInt(t[2],10),newLine:Number.parseInt(t[3]??``,10),newLeft:t[4]===void 0?1:Number.parseInt(t[4],10)}:{}}function An(e,t,n,r){let i,a;n.startsWith(`+`)?(i=`add`,a=r.newLine,r.newLine!==void 0&&(r.newLine+=1,r.newLeft=Math.max(0,(r.newLeft??0)-1))):n.startsWith(`-`)?(i=`del`,a=r.oldLine,r.oldLine!==void 0&&(r.oldLine+=1,r.oldLeft=Math.max(0,(r.oldLeft??0)-1))):(i=`ctx`,a=r.newLine,r.oldLine!==void 0&&r.newLine!==void 0&&(r.oldLine+=1,r.newLine+=1,r.oldLeft=Math.max(0,(r.oldLeft??0)-1),r.newLeft=Math.max(0,(r.newLeft??0)-1))),Dn(e,t,{kind:i,...a===void 0?{}:{lineNo:a},text:n===``?``:n.slice(1)})}function jn(e){return e.oldLeft!==void 0&&e.oldLeft===0&&e.newLeft===0}function Mn(e){return e.operation===`update`&&e.path!==e.sourcePath?`Move ${e.sourcePath} โ ${e.path}`:`${e.operation===`add`?`Add`:e.operation===`delete`?`Delete`:`Update`} ${e.path}`}function Nn(e){if(e.sections.length===0)return null;let t=[...new Set(e.sections.map(e=>e.path).filter(Boolean))],n=e.sections.map(({operation:e,path:t,sourcePath:n})=>({operation:e,path:t,...e===`update`&&n!==t?{oldPath:n}:{}})),r=e.sections.reduce((e,t)=>({added:e.added+t.stat.added,removed:e.removed+t.stat.removed}),{added:0,removed:0}),i=[],a=e.truncated,o=e=>{i.length<400?i.push(e):a=!0};for(let[t,r]of e.sections.entries()){e.sections.length>1&&(i.length>0&&i.at(-1)?.kind!==`skip`&&o({kind:`skip`,text:``}),o({kind:`file`,path:r.path,...`oldPath`in n[t]?{oldPath:r.sourcePath}:{},text:Mn(r)}));for(let e of r.lines)o(e)}a&&i.at(-1)?.kind!==`skip`&&i.push({kind:`skip`,text:``});let s=e.sections.length===1?e.sections.at(0):void 0,c=s&&s.operation===`update`&&s.sourcePath!==s.path?{from:s.sourcePath,to:s.path}:void 0;return{paths:t,fileOperations:n,lines:i,stat:r,...c?{move:c}:{}}}function Pn(e){let t={sections:[],storedRows:0,truncated:!1},n=null,r=`outside`,i=null;for(let a of Tn(e)){let e=r===`update`?a.trimEnd():a.trim(),o=e.match(/^\*\*\* (Update|Add|Delete) File: (.+)$/);if(o){let e=o[1],a=o[2];if(!e||!a)continue;r=e.toLowerCase(),n=En(t,r,a),i=null;continue}let s=r===`update`?e.match(/^\*\*\* Move to: (.+)$/):null;if(s&&n){n.path=s[1]?.trim()??n.path;continue}if(!(e===`*** Begin Patch`||e===`*** End Patch`||e===`*** End of File`||e.startsWith(`*** Environment ID:`))&&n){if(r===`update`&&a.startsWith(`@@`)){On(t,n),i=kn(a);continue}r===`add`&&a.startsWith(`+`)?Dn(t,n,{kind:`add`,lineNo:n.stat.added+1,text:a.slice(1)}):r===`update`&&(a===``||a.startsWith(`+`)||a.startsWith(`-`)||a.startsWith(` `))&&(An(t,n,a,i??{}),i&&jn(i)&&(i=null))}}return Nn(t)}function Fn(e){return(e.split(` `,1)[0]?.trim()??``).replace(/^[ab]\//,``)}function In(e,t,n,r,i){let a=Fn(n.slice(4)),o=Fn(r.slice(4)),s=a===`/dev/null`?`add`:o===`/dev/null`?`delete`:`update`,c=o===`/dev/null`?a:o,l=i&&t?t:En(e,s,c);return l.operation=s,l.sourcePath=a||l.sourcePath,l.path=c||l.path,l}function Ln(e){let t={sections:[],storedRows:0,truncated:!1},n=Tn(e),r=null,i=null,a=!1;for(let e=0;e<n.length;e++){let o=n[e];if(o===void 0)continue;let s=o.match(/^diff --git a\/(.+) b\/(.+)$/);if(s){let e=s[1],n=s[2];if(!e||!n)continue;r=En(t,`update`,n),r.sourcePath=e,i=null,a=!0;continue}let c=n[e+1];if(!i&&o.startsWith(`--- `)&&c?.startsWith(`+++ `)){r=In(t,r,o,c,a),a=!1,e+=1;continue}if(o.startsWith(`@@`)){r&&On(t,r),i=kn(o),a=!1;continue}/^index |^new file mode |^deleted file mode |^similarity index /.test(o)||r&&i&&(o.startsWith(`+`)||o.startsWith(`-`)||o.startsWith(` `))&&(An(t,r,o,i),jn(i)&&(i=null))}return Nn(t)}function Rn(e){let t=typeof e==`string`?e:l(e)?.type;return t===`add`||t===`delete`?t:`update`}function zn(e){let t=l(e),n=t?.added,r=t?.removed;return typeof n==`number`&&typeof r==`number`&&n>=0&&r>=0?{added:Math.trunc(n),removed:Math.trunc(r)}:null}function Bn(e,t,n){let r=null;for(let i of Tn(n))i.startsWith(`@@`)?(On(e,t),r=kn(i)):r&&(i.startsWith(`+`)||i.startsWith(`-`)||i.startsWith(` `))&&(An(e,t,i,r),jn(r)&&(r=null))}function Vn(e){let t={sections:[],storedRows:0,truncated:!1};for(let n of e){let e=l(n),r=p(e?.path)?.trim();if(!e||!r)continue;let i=Rn(e.kind),a=En(t,i,r),o=p(l(e.kind)?.move_path??l(e.kind)?.movePath);if(o&&(a.path=o.trim()),typeof e.diff==`string`){if(i===`update`)Bn(t,a,e.diff);else{let n=i===`add`?`add`:`del`;for(let[r,i]of Tn(e.diff).entries())Dn(t,a,{kind:n,lineNo:r+1,text:i})}}let s=zn(e.stat);s&&(a.stat=s),t.truncated||=e.diffTruncated===!0}return Nn(t)}function Hn(e){let t=l(e);if(!t)return null;if(Array.isArray(t.changes)){let e=Vn(t.changes);if(e)return e}let n=p(t.patch)??p(t.input)??p(t.diff);return n?/(?:^|\n)\s*\*\*\* (?:Begin Patch|Update File:|Add File:|Delete File:)/.test(n)?Pn(n):Ln(n):null}function Un(){return(Un=e((()=>{wn()})))()}function P(e){if(e)return p(e.path)??p(e.file_path)??p(e.filePath)??p(e.file)??p(e.filepath)??p(e.filename)??p(e.notebook_path)}function F(e){let t=e.replace(/\\/g,`/`).replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?{base:t||e}:{base:t.slice(n+1),dir:t.slice(0,n)}}function Wn(e){let t=[],n=0,r=!1,i=(e,i)=>{if(typeof e==`string`&&typeof i==`string`){let a=e.length+i.length;if(n+a>ur){r=!0;return}n+=a,t.push({oldText:e,newText:i})}};if(Array.isArray(e.edits))for(let t=0;t<e.edits.length;t++){if(t>=lr){r=!0;break}let n=e.edits[t],a=l(n);if(a&&(i(a.oldText??a.old_string??a.oldString??a.old_str,a.newText??a.new_string??a.newString??a.new_str),r))break}else i(e.oldText??e.old_string??e.oldString??e.old_str,e.newText??e.new_string??e.newString??e.new_str);return{pairs:t,truncated:r}}function Gn(e){let t=l(e),n=t?p(t.diff):void 0;if(!n)return null;let r=_n(n);return r?{lines:r.lines,...r.kind===`complete`?{stat:r.stat}:{}}:null}function Kn(e){let t=Gn(e.details);if(t)return t;let n=l(e.args);if(!n)return null;let{pairs:r,truncated:i}=Wn(n);if(r.length===0)return i?{lines:[{kind:`skip`,text:``}]}:null;let a=Cn(r.map(e=>bn(e.oldText,e.newText)),{truncated:i});return a.lines.length===0?null:{lines:a.lines,...a.kind===`complete`?{stat:a.stat}:{}}}function qn(e,t){let n=Gn(e.details);if(n)return n;let r=t?p(t.insert_text):void 0;if(!r)return null;let i=bn(``,r).lines;return i.length>0?{lines:i}:null}function Jn(e){let t=Hn(e);if(!t)return null;if(t.paths.length>1)return{kind:`edit`,target:`${t.paths.length} files`,fileOperations:t.fileOperations,diff:t.lines,stat:t.stat};if(t.move){let e=F(t.move.from),n=F(t.move.to),r=e.dir===n.dir?e.dir:void 0;return{kind:`edit`,target:r?`${e.base} โ ${n.base}`:`${t.move.from} โ ${t.move.to}`,targetDetail:r,fileOperations:t.fileOperations,diff:t.lines,stat:t.stat}}let n=t.paths[0]?F(t.paths[0]):null;return{kind:`edit`,target:n?.base,targetDetail:n?.dir,fileOperations:t.fileOperations,diff:t.lines,stat:t.stat}}function I(e){return e.trim().toLowerCase()}function Yn(e){let t=p(l(e)?.command)?.trim().toLowerCase();switch(t){case`view`:case`str_replace`:case`create`:case`insert`:case`undo_edit`:return t;default:return}}function Xn(e,t){let n=l(t);if(L.has(I(e)))return Hn(n)?.paths??[];let r=P(n);return r?[r]:[]}function Zn(e,t){if(L.has(I(e)))return Hn(l(t))?.fileOperations}function Qn(e,t){let n=I(e);if(ar.has(n))switch(Yn(t)){case`view`:return`read`;case`str_replace`:case`insert`:case`undo_edit`:return`edit`;case`create`:return`write`;default:return`generic`}if(nr.has(n))return`command`;if(rr.has(n))return`read`;if(ir.has(n)||L.has(n))return`edit`;if(or.has(n))return`write`;if(sr.has(n))return`search`;if(cr.has(n))return`fetch`;let r=l(t);return r&&typeof r.command==`string`&&Object.keys(r).length<=3?`command`:`generic`}function $n(e){let t=l(e.args),n=t??l(e.details),r=I(e.name);if(n){let t=dr.get(n);if(t&&t.details===e.details&&t.name===r)return t.view}let i=tr(e,t);return n&&dr.set(n,{details:e.details,name:r,view:i}),i}function er(e){return e.match(/^\s*(?:\/(?:usr\/)?bin\/)?(?:ba|z|da)?sh\s+-l?c\s+(['"])([\s\S]+)\1\s*$/)?.[2]??e}function tr(e,t){let n=Qn(e.name,e.args),r=I(e.name),i=ar.has(r)?Yn(e.args):void 0;if(n===`command`){let e=t?p(t.command):void 0;return{kind:n,title:nr.has(r)?qt(t):void 0,command:e&&er(e),code:t?p(t.code):void 0}}if(n===`read`){let e=P(t);if(!e)return{kind:`generic`};let{base:r,dir:i}=F(e);return{kind:n,target:r,targetDetail:i}}if(n===`edit`){if(L.has(r))return Jn(t)??{kind:`generic`};let a=P(t);if(!a)return{kind:`generic`};let{base:o,dir:s}=F(a),c=i===`insert`?qn(e,t):i===`undo_edit`?Gn(e.details):Kn(e);return{kind:n,target:o,targetDetail:s,...c?{diff:c.lines,...c.stat?{stat:c.stat}:{}}:{}}}if(n===`write`){let r=P(t);if(!r)return{kind:`generic`};let{base:a,dir:o}=F(r),s=Gn(e.details);if(s)return{kind:n,target:a,targetDetail:o,diff:s.lines,...s.stat?{stat:s.stat}:{}};let c=l(e.details);if(c?.changed===!1)return{kind:n,target:a,targetDetail:o};let u=t?p(i===`create`?t.file_text:t.content):void 0;return u?{kind:n,target:a,targetDetail:o,diff:xn(u),...c&&c.created!==!0?{}:{stat:{added:Sn(u),removed:0}}}:{kind:n,target:a,targetDetail:o}}if(n===`search`){let e=t?p(t.pattern)??p(t.query)??p(t.glob):void 0,r=P(t);return!e&&!r?{kind:`generic`}:{kind:n,target:e??r,targetDetail:e?r:void 0}}if(n===`fetch`){let e=t?p(t.url):void 0;return e?{kind:n,target:e}:{kind:`generic`}}return{kind:`generic`}}var nr,rr,ir,ar,or,sr,cr,L,lr,ur,dr;function fr(){return(fr=e((()=>{Yt(),wn(),Un(),nr=new Set([`bash`,`exec`,`shell`,`run_command`,`run_terminal_cmd`]),rr=new Set([`read`,`read_file`,`readfile`,`notebookread`,`notebook_read`]),ir=new Set([`edit`,`edit_file`,`multiedit`,`multi_edit`,`notebookedit`,`notebook_edit`]),ar=new Set([`str_replace_editor`,`str_replace_based_edit_tool`]),or=new Set([`write`,`write_file`,`create_file`]),sr=new Set([`grep`,`find`,`glob`,`ls`,`list`,`codebase_search`]),cr=new Set([`web_fetch`,`webfetch`,`fetch`]),L=new Set([`apply_patch`,`applypatch`,`patch`]),lr=8,ur=12e4,dr=new WeakMap})))()}function pr(e){return e?Dr[e]??`puzzle`:`puzzle`}function mr(e){return{icon:pr(e?.emoji),title:e?.title,label:e?.label,detailKeys:e?.detailKeys,actions:e?.actions}}function hr(e){if(!e)return e;for(let t of[{re:/^\/Users\/[^/]+(\/|$)/,replacement:`~$1`},{re:/^\/home\/[^/]+(\/|$)/,replacement:`~$1`},{re:/^C:\\Users\\[^\\]+(\\|$)/i,replacement:`~$1`}])if(t.re.test(e))return e.replace(t.re,t.replacement);return e}function gr(e){let t=Kt(e.name),n=a(t),r=Ar[n],i=r?.icon??kr.icon??`puzzle`,o=r?.title??Jt(t),s=r?.label??o,c=Qt({toolKey:n,args:e.args,meta:e.meta,spec:r,fallbackDetailKeys:kr.detailKeys,detailMode:`first`,toolDetailMode:e.detailMode,detailCoerce:{includeFalsy:!0}}),{verb:l}=c,{detail:u}=c;return u&&=hr(u),{name:t,icon:i,title:o,label:s,verb:l,detail:u}}function _r(e){return Xt(e.detail,{prefixWithWith:!0})}function vr(e){return e===Tr||e.startsWith(`${Tr}/`)||e===wr||e.startsWith(`${wr}/`)}function yr(e){return e.protocol===`http:`||e.protocol===`https:`}function br(e,t=!1){try{let n=new URL(e,`http://localhost`);return n.origin===`http://localhost`?vr(n.pathname)?`${n.pathname}${n.search}${n.hash}`:void 0:!t||!yr(n)?void 0:n.toString()}catch{return}}function xr(e){let t=e?.trim();return!!(t&&br(t,!1))}function Sr(e,t,n=!1){let r=e?.trim();if(!r)return;let i=br(r,n);if(i){if(!t?.trim())return i;try{let e=new URL(t),n=e.pathname.replace(/\/+$/,``);if(!n.startsWith(Er))return i;let r=new URL(i,e.origin);return vr(r.pathname)?(r.protocol=e.protocol,r.username=e.username,r.password=e.password,r.host=e.host,r.pathname=`${n}${r.pathname}`,r.toString()):i}catch{return i}}}function Cr(e,t){if(t===`strict`||t===`scripts`&&e===`strict`)return``;if(t===`scripts`)return`allow-scripts`;switch(e){case`strict`:return``;case`trusted`:return`allow-scripts allow-same-origin`;default:return`allow-scripts`}}var wr,Tr,Er,Dr,Or,kr,Ar;function jr(){return(jr=e((()=>{Vt(),Bt(),wr=`/__openclaw__/a2ui`,Tr=`/__openclaw__/canvas`,Er=`/__openclaw__/cap`,Dr={"๐งฉ":`puzzle`,"๐ ๏ธ":`wrench`,"๐งฐ":`wrench`,"๐":`fileText`,"โ๏ธ":`edit`,"๐":`penLine`,"๐":`paperclip`,"๐":`globe`,"๐บ":`monitor`,"๐งพ":`fileText`,"๐":`settings`,"๐ป":`monitor`,"๐":`plug`,"๐ฌ":`messageSquare`},Or=Ut,kr=mr(Or.fallback??{emoji:`๐งฉ`}),Ar=Object.fromEntries(Object.entries(Or.tools??{}).map(([e,t])=>[e,mr(t)]))})))()}function Mr(e,t,n){let r=e.files[t];r.calls+=1;for(let e of n)e.trim()&&r.paths.add(e.trim())}function Nr(e,t){let n=Qn(t.name,t.args),r=Zn(t.name,t.args);if(r)for(let{operation:t,path:n}of r)Mr(e,t===`add`?`write`:t===`delete`?`delete`:`edit`,[n]);else{let r=Xn(t.name,t.args);switch(n){case`command`:e.commands+=1;break;case`read`:Mr(e,`read`,r);break;case`edit`:Mr(e,`edit`,r);break;case`write`:Mr(e,`write`,r);break;case`search`:e.searches+=1;break;case`fetch`:e.fetches+=1;break;default:e.others+=1,e.otherNames.add(gr({name:t.name,args:t.args}).label)}}}function R(e,t,n){return j(e===1?t:n,{count:String(e)})}function Pr(e,t){return t.size>0?t.size:e}function Fr(e){let t={commands:0,files:{read:{calls:0,paths:new Set},edit:{calls:0,paths:new Set},write:{calls:0,paths:new Set},delete:{calls:0,paths:new Set}},searches:0,fetches:0,otherNames:new Set,others:0};for(let n of e)Nr(t,n);let n=[];t.commands>0&&n.push(R(t.commands,`chat.toolCards.group.commandsOne`,`chat.toolCards.group.commandsMany`));for(let[e,r,i]of[[`read`,`readsOne`,`readsMany`],[`edit`,`editsOne`,`editsMany`],[`write`,`writesOne`,`writesMany`],[`delete`,`deletesOne`,`deletesMany`]]){let{calls:a,paths:o}=t.files[e];a>0&&n.push(R(Pr(a,o),`chat.toolCards.group.${r}`,`chat.toolCards.group.${i}`))}if(t.searches>0&&n.push(R(t.searches,`chat.toolCards.group.searchesOne`,`chat.toolCards.group.searchesMany`)),t.fetches>0&&n.push(R(t.fetches,`chat.toolCards.group.fetchesOne`,`chat.toolCards.group.fetchesMany`)),t.others>0){let e=[...t.otherNames].slice(0,2).join(`, `);n.push(t.otherNames.size<=2&&e?j(t.others>t.otherNames.size?`chat.toolCards.group.namedToolRepeated`:`chat.toolCards.group.namedTool`,{names:e,count:String(t.others)}):R(t.others,`chat.toolCards.group.otherOne`,`chat.toolCards.group.otherMany`))}if(n.length===0)return R(e.length,`chat.toolCards.group.emptyOne`,`chat.toolCards.group.emptyMany`);let r=n.join(`, `);return r.charAt(0).toUpperCase()+r.slice(1)}function Ir(){return(Ir=e((()=>{A(),fr(),jr()})))()}function Lr(e){let t=JSON.parse(e),n=Object.create(null);if(t.avatars&&typeof t.avatars==`object`&&!Array.isArray(t.avatars))for(let[e,r]of Object.entries(t.avatars)){let t=g(e),i=g(r);t&&i&&(n[t]=i)}let r=g(t.avatar),i=g(t.agentId);return r&&i&&!Object.hasOwn(n,i)&&(n[i]=r),{avatars:n,legacyAvatar:i?null:r??null}}function Rr(e,t){if(Object.keys(t).length===0){e?.removeItem(Vr);return}e?.setItem(Vr,JSON.stringify({avatars:t}))}function zr(e){let t=g(e?.agentId);if(!t)return{avatar:null};let n=y();try{let e=n?.getItem(Vr);if(!e)return{avatar:null};let{avatars:r,legacyAvatar:i}=Lr(e);return!Object.hasOwn(r,t)&&i&&(r[t]=i,Rr(n,r)),{avatar:Object.hasOwn(r,t)?r[t]??null:null,agentId:t}}catch{return{avatar:null}}}async function Br(e,t){let n=await S(e,t);if(!n)return null;let r=le(n),i=zr({agentId:r.agentId}).avatar;return i?{...r,avatar:i,avatarSource:i,avatarStatus:`data`,avatarReason:null}:r}var Vr;function Hr(){return(Hr=e((()=>{ee(),ue(),Vr=`openclaw.control.assistant.v1`})))()}function Ur(e,t,n=()=>!0){return{async request(r,i){if(!n())throw new DOMException(`Browser request scope ended`,`AbortError`);let a=l(i);return await e.request(r,t?{...a,target:t.target,...t.target===`node`?{node:t.node}:{},query:{...l(a?.query),profile:t.profile}}:i)}}}function z(e,t){return e.request(li,t)}function B(e){return m(e)??``}function Wr(e){let t=l(e),n=B(t?.targetId);return n?{id:B(t?.tabId)||n,targetId:n,title:B(t?.title),url:B(t?.url),...t?.urlUnavailableReason===`navigation_blocked`||t?.urlUnavailableReason===`navigation_check_failed`?{urlUnavailableReason:t.urlUnavailableReason}:{}}:null}async function Gr(e){let t=l(await z(e,{method:`GET`,path:`/tabs`})),n=Array.isArray(t?.tabs)?t.tabs.flatMap(e=>Wr(e)??[]):[];return{running:t?.running===!0,tabs:n}}async function Kr(e){await z(e,{method:`POST`,path:`/start`,body:{}})}async function qr(e,t){return Wr(await z(e,{method:`POST`,path:`/tabs/open`,body:{url:t}}))}async function Jr(e,t){await z(e,{method:`POST`,path:`/tabs/focus`,body:{targetId:t}})}async function Yr(e,t){await z(e,{method:`DELETE`,path:`/tabs/${encodeURIComponent(t)}`})}async function Xr(e,t){let n=l(await z(e,{method:`POST`,path:`/navigate`,body:t}));return{targetId:B(n?.targetId)||t.targetId||``,url:B(n?.url)||t.url}}async function Zr(e,t){let n=l(await z(e,{method:`POST`,path:`/screenshot`,body:{targetId:t,type:`png`}})),r=B(n?.path);if(!r)throw Error(j(`browser.errors.screenshotPathMissing`));return{path:r,targetId:B(n?.targetId)||t,url:B(n?.url)}}async function Qr(e,t){await z(e,{method:`POST`,path:`/act`,body:{kind:`clickCoords`,targetId:t.targetId,x:Math.max(0,Math.round(t.x)),y:Math.max(0,Math.round(t.y)),...t.doubleClick?{doubleClick:!0}:{}}})}async function $r(e,t){await z(e,{method:`POST`,path:`/act`,body:{kind:`press`,targetId:t.targetId,key:t.key}})}async function ei(e,t){await z(e,{method:`POST`,path:`/act`,body:{kind:`resize`,targetId:t.targetId,width:Math.round(t.width),height:Math.round(t.height)}})}async function ti(e,t){return l(await z(e,{method:`POST`,path:`/act`,body:{kind:`evaluate`,targetId:t.targetId,fn:t.fn}}))?.result??null}function ni(e){return e instanceof Ie&&l(e.details)?.reason===`navigation_blocked`}function ri(e){if(!(e instanceof Error))return!1;let t=e instanceof Ie?l(e.details):null,n=t?.code;return n===void 0&&t?.unrecognizedCode!==!0?e.message.includes(`evaluateEnabled=false`):n===`ACT_EVALUATE_DISABLED`}async function ii(e,t){let n=Math.round(t.deltaX),r=Math.round(t.deltaY);await ti(e,{targetId:t.targetId,fn:`() => { window.scrollBy(${n}, ${r}); return true; }`})}async function ai(e,t){await ti(e,{targetId:t.targetId,fn:`() => { history.go(${t.delta}); return true; }`})}async function oi(e,t){let r=l(await ti(e,{targetId:t,fn:`() => ({ cssWidth: window.innerWidth, cssHeight: window.innerHeight, title: document.title, url: location.href })`})),i=n(r?.cssWidth),a=n(r?.cssHeight);return!i||!a||i<=0||a<=0?null:{cssWidth:i,cssHeight:a,title:B(r?.title),url:B(r?.url)}}async function si(e,t){let r=Math.max(0,Math.round(t.x)),i=Math.max(0,Math.round(t.y)),a=l(await ti(e,{targetId:t.targetId,fn:`() => {
const el = document.elementFromPoint(${r}, ${i});
if (!el) return null;
const rect = el.getBoundingClientRect();
const label = el.getAttribute("aria-label") || el.getAttribute("alt") || el.getAttribute("title") || "";
const text = (el.textContent || "").replace(/\\s+/g, " ").trim();
const nameSource = label || text;
const nameLimit = 120;
// This serialized page function cannot call imported helpers; back up only when the cap splits a surrogate pair.
const nameEnd = (nameSource.codePointAt(nameLimit - 1) || 0) > 0xffff ? nameLimit - 1 : nameLimit;
return {
tag: el.tagName.toLowerCase(),
id: el.id || "",
classes: Array.from(el.classList).slice(0, 6),
role: el.getAttribute("role") || "",
name: nameSource.slice(0, nameEnd),
rect: { x: rect.x, y: rect.y, width: rect.width, height: rect.height },
focusable: typeof el.tabIndex === "number" && el.tabIndex >= 0,
};
}`}));if(!a)return null;let o=l(a.rect);return{tag:B(a.tag),id:B(a.id),classes:Array.isArray(a.classes)?a.classes.filter(e=>typeof e==`string`):[],role:B(a.role),name:B(a.name),rect:{x:n(o?.x)??0,y:n(o?.y)??0,width:n(o?.width)??0,height:n(o?.height)??0},focusable:a.focusable===!0}}async function ci(e){let t=new Headers({Accept:`image/*`});e.authToken&&t.set(`Authorization`,`Bearer ${e.authToken}`);let n=new AbortController,r=setTimeout(()=>n.abort(new DOMException(j(`browser.errors.screenshotFetchTimedOut`),`TimeoutError`)),ui),i;try{let r=await fetch(tt(e.path,e.resourceBasePath),{method:`GET`,headers:t,credentials:`same-origin`,signal:n.signal});if(!r.ok)throw r.body?.cancel().catch(()=>void 0),Error(j(`browser.errors.screenshotFetchFailed`,{status:String(r.status)}));i=await r.blob()}finally{clearTimeout(r)}return await new Promise((e,t)=>{let n=new FileReader;n.addEventListener(`load`,()=>{typeof n.result==`string`?e(n.result):t(Error(j(`browser.errors.screenshotReadFailed`)))}),n.addEventListener(`error`,()=>t(n.error??Error(j(`browser.errors.screenshotReadFailed`)))),n.readAsDataURL(i)})}var li,ui;function di(){return(di=e((()=>{f(),Me(),nt(),A(),li=`browser.request`,ui=3e4})))()}function fi(e){return e.callId??e.messageId??e.previewRevision}function pi(e,t){let n=new Map;for(let r of[e,t])for(let e of r)if(i(e))for(let t of et(e)){let e=fi(t);if(t.preview?.kind===`browser-tab`&&e&&Xe(t,!1)===`succeeded`){let r=Ct(t.preview);n.delete(r),n.set(r,{tab:t.preview,revision:e})}}return n}function mi(e){let t=Ct(e.tab),n=hi.get(e.client);n||(n={tabs:new Map,images:new Map},hi.set(e.client,n));let{tabs:r,images:i}=n,a=r.get(t);if(a||(a={revisions:new Set},r.set(t,a)),a.revisions.has(e.revision))return a.pending??Promise.resolve(i.get(t));a.revisions.add(e.revision);let o=(a.pending??Promise.resolve()).then(async()=>{try{let n=await Zr(Ur(e.client,e.tab),e.tab.targetId),r=await ci({resourceBasePath:e.resourceBasePath,authToken:e.authToken,path:n.path});if(i.delete(t),i.set(t,r),i.size>gi){let e=i.keys().next().value;e!==void 0&&i.delete(e)}return r}catch{i.delete(t);return}finally{a.pending===o&&(a.pending=void 0)}});return a.pending=o,o}var hi,gi;function _i(){return(_i=e((()=>{di(),_t(),at(),hi=new WeakMap,gi=32})))()}function vi(e,t){e instanceof Zt&&e.updateComplete.then(()=>{let n=e.shadowRoot?.querySelector(`[role="tablist"]`);e.isConnected&&n instanceof HTMLElement&&n.setAttribute(`aria-label`,t)})}function yi(){return(yi=e((()=>{Ht(),Ot(),Ft()})))()}function bi(e,t){let n=new URL(e||t,t);if(n.protocol===`ws:`?n.protocol=`http:`:n.protocol===`wss:`&&(n.protocol=`https:`),n.protocol!==`http:`&&n.protocol!==`https:`)throw Error(`Gateway URL is invalid`);return n.origin}function xi(e,t,n,r,i,a=`Sandbox host URL is invalid`){if(!Number.isInteger(t)||t<1||t>65535)throw Error(a);let o;try{o=bi(r,i)}catch{throw Error(a)}let s=n?new URL(n):new URL(o);if(n){if(s.origin!==n.replace(/\/$/u,``)||s.username!==``||s.password!==``)throw Error(a)}else s.port=String(t);s.pathname=`/`,s.search=``,s.hash=``;let c=new URL(e,s);if(s.protocol!==`http:`&&s.protocol!==`https:`||s.origin===new URL(i).origin||s.origin===o||c.origin!==s.origin||c.pathname!==`/mcp-app-sandbox`)throw Error(a);return c.href}function Si(){return(Si=e((()=>{})))()}function Ci(e){if(typeof e!=`string`)return null;let t=e.trim(),n=t.startsWith(`/`)||t.startsWith(`!`);return!t||t.length>ji||n?null:t}function wi(e,t){let n=t-Mi,r=(V.get(e)??[]).filter(e=>e>n);if(!V.has(e)&&V.size>=Pi){let e=V.keys().next().value;e!==void 0&&V.delete(e)}return r.length>=Ni?(V.set(e,r),!1):(r.push(t),V.set(e,r),!0)}function Ti(e){if(!e.isConnected||!(typeof e.checkVisibility==`function`?e.checkVisibility():e.getClientRects().length>0))return!1;let t=e.ownerDocument.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t===e}function Ei(e,t,n,r){let i=Ci(t);return!i||!Ti(e)||!wi(n,Date.now())||r&&!r(i)?!1:(e.dispatchEvent(new CustomEvent(ki,{bubbles:!0,composed:!0,detail:{text:i}})),!0)}function Di(e,t=!1,n=!1,r=!1){return{openLinks:{},serverTools:{},sandbox:{csp:e??{}},...r?{serverResources:{}}:{},...t?{message:{text:{}}}:{},...n?{updateModelContext:{text:{}}}:{}}}function Oi(e,t,n,r,i){return xi(e,t,n,r,i,j(`mcpApp.errors.invalidSandboxUrl`))}var ki,Ai,ji,Mi,Ni,Pi,V;function Fi(){return(Fi=e((()=>{A(),ki=`openclaw-widget-prompt`,Ai=`openclaw-mcp-app-view-expired`,ji=4e3,Mi=6e4,Ni=10,Pi=100,V=new Map})))()}var Ii;function Li(){return(Li=e((()=>{ie(),Ii=class{constructor(){this.entries=new Map}clear(){this.entries.clear()}prune(e){let t=new Set(e.filter(e=>e.contentKind===`mcp-app`).map(e=>this.key(e)));for(let e of this.entries.keys())t.has(e)||this.entries.delete(e)}async resolve(e,t,n){let r=this.key(e);n&&this.entries.delete(r);let i=this.entries.get(r);if(i)return await i;let a=t().then(e=>({status:`ready`,...e})).catch(e=>({status:`stale`,error:b(e)}));this.entries.set(r,a);let o=await a;return this.entries.get(r)===a&&this.entries.set(r,o),o}key(e){return`${e.name}\0${e.revision}\0${e.instanceId??``}\0${e.grantState}`}}})))()}function Ri(e){return{sessionKey:e,revision:0,tabs:[],widgets:[]}}function zi(e){let t=e?.trim()??``;return t?Array.from(t).slice(0,80).join(``):void 0}var H,Bi;function Vi(){return(Vi=e((()=>{H=class{constructor(e){this.value=e,this.listeners=new Set}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}set(e){this.value=e;for(let e of this.listeners)e()}},Bi=class{constructor(){this.listeners=new Set}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}emit(e){for(let t of this.listeners)t(e)}}})))()}function Hi(e){let t=14695981039346656037n;for(let n of new TextEncoder().encode(e))t^=BigInt(n),t=BigInt.asUintN(64,t*1099511628211n);return t.toString(16).padStart(16,`0`)}function Ui(e){let t=`canvas-${e.toLowerCase().replace(/[^a-z0-9._-]/gu,`-`)}`;return t===`canvas-${e}`&&t.length<=64?t:`${t.slice(0,47).replace(/[._-]+$/gu,``)||`canvas-widget`}-${Hi(e)}`}function Wi(e){return`mcp-app-${Hi(e)}`}function Gi(){return(Gi=e((()=>{})))()}function Ki(e,t=Date.now()){e.viewTicket&&e.viewTicketTtlMs&&U.set(e,t)}function qi(e,t,n=Date.now()){e.viewTicket&&e.viewTicketTtlMs&&U.set(e,U.get(t)??n)}function Ji(e,t=Date.now()){let n=e.viewTicketTtlMs;if(!e.viewTicket||!n)return;let r=U.get(e);return r===void 0?n:Math.max(0,n-(t-r))}var U;function Yi(){return(Yi=e((()=>{U=new WeakMap})))()}function Xi(e,t){return{...e,...t.frameUrl===void 0?{}:{frameUrl:t.frameUrl},...t.viewTicket===void 0?{}:{viewTicket:t.viewTicket},...t.viewTicketTtlMs===void 0?{}:{viewTicketTtlMs:t.viewTicketTtlMs},...t.viewGeneration===void 0?{}:{viewGeneration:t.viewGeneration},...t.sandboxUrl===void 0?{}:{sandboxUrl:t.sandboxUrl},...t.sandboxPort===void 0?{}:{sandboxPort:t.sandboxPort},...t.sandboxOrigin===void 0?{}:{sandboxOrigin:t.sandboxOrigin}}}var Zi;function Qi(){return(Qi=e((()=>{c(),ie(),v(),Li(),Vi(),Yi(),Zi=class{constructor(e,t,n=!0,r=!0,i=!1,a=!0,o=!0){this.session=e,this.canPinWidgets=r,this.canPinMcpApps=i,this.canMutate=a,this.canGrant=o,this.loadErrorSignal=new H(null),this.eventStream=new Bi,this.retiredClients=new WeakSet,this.clientGeneration=0,this.refreshRequested=!1,this.userRefreshRequested=!1,this.changedWidgets=new Set,this.stateGeneration=0,this.connected=!1,this.appViews=new Ii,this.disposed=!1,this.snapshotLoaded=!1,this.snapshotSignal=new H(Ri(this.sessionKey)),this.snapshot$=this.snapshotSignal,this.loadError$=this.loadErrorSignal,this.events=this.eventStream,this.client=t,this.connected=n,this.subscribe(t),n&&this.activate()}get sessionKey(){return this.session.sessionKey}attachClient(e,t=!0){if(this.disposed||e!==this.client&&this.retiredClients.has(e))return;let n=t!==this.connected,r=t&&!this.connected;if(this.connected=t,t||this.wakeRetryDelay?.(),e===this.client){n&&(this.clientGeneration+=1,this.stateGeneration+=1,this.appViews.clear(),this.publishAppViewGeneration()),r&&this.activate();return}this.retiredClients.add(this.client),this.unsubscribe?.(),this.client=e,this.clientGeneration+=1,this.stateGeneration+=1,this.changedWidgets.clear(),this.appViews.clear(),this.snapshotLoaded=!1,this.setLoadError(null),this.snapshotSignal.set(Ri(this.sessionKey)),this.subscribe(e),t&&this.activate()}activate(){return this.requestRefresh()}get hasLoadedSnapshot(){return this.snapshotLoaded}get appViewGeneration(){return this.clientGeneration}dispose(){this.disposed||(this.disposed=!0,this.connected=!1,this.unsubscribe?.(),this.unsubscribe=void 0,this.clientGeneration+=1,this.stateGeneration+=1,this.refreshRequested=!1,this.userRefreshRequested=!1,this.changedWidgets.clear(),this.appViews.clear(),this.wakeRetryDelay?.())}async applyOps(e){await this.mutate(`board.update`,{...this.session,ops:e})}async grant(e,t){let n=this.snapshotSignal.value.widgets.find(t=>t.name===e);if(!n)throw this.requestRefresh(),Error(`Dashboard widget not found: ${e}`);await this.mutate(`board.widget.grant`,{...this.session,name:e,decision:t,revision:n.revision,...n.instanceId?{instanceId:n.instanceId}:{}})}pinWidget(e){return this.pinBoardWidget(e,e.name??Ui(e.docId),{kind:`canvas-doc`,docId:e.docId})}pinMcpApp(e){return this.pinBoardWidget(e,e.name??Wi(e.viewId),{kind:`mcp-app`,viewId:e.viewId})}async pinBoardWidget(e,t,n){let r=zi(e.title);await this.mutate(`board.widget.put`,{...this.session,name:t,...r?{title:r}:{},content:n,...e.tabId||e.size||e.after?{placement:{...e.tabId?{tabId:e.tabId}:{},...e.size?{size:e.size}:{},...e.after?{after:e.after}:{}}}:{}},t)}widgetFrameUrl(e,t){return this.snapshotSignal.value.widgets.find(n=>n.name===e&&n.revision===t)?.frameUrl??``}refreshWidgetFrame(e){return this.requestRefresh(e,!0)}async widgetAppView(e,t){return await this.resolveWidgetAppView(e,t,!1)}async refreshWidgetAppView(e,t){return await this.resolveWidgetAppView(e,t,!0)}async resolveWidgetAppView(e,t,n){if(this.disposed||!this.connected)return{status:`stale`,error:`Dashboard MCP App view unavailable`};let r=this.snapshotSignal.value.widgets.find(n=>n.name===e&&n.revision===t&&n.contentKind===`mcp-app`);if(!r)return{status:`stale`,error:`Dashboard MCP App widget unavailable`};let i=this.client,a=this.clientGeneration,o=await this.appViews.resolve(r,async()=>await i.request(`board.widget.appView`,{...this.session,name:e,revision:t,...r.instanceId?{instanceId:r.instanceId}:{}}),n);return this.disposed||!this.connected||i!==this.client||a!==this.clientGeneration?{status:`stale`,error:`Dashboard MCP App view unavailable`}:o}subscribe(e){this.unsubscribe=e.addEventListener(t=>{if(!(this.disposed||e!==this.client)){if(t.event===`board.changed`){let e=t.payload;e&&this.matchesSession(e.sessionKey)&&(this.stateGeneration+=1,this.requestRefresh(e.widget));return}if(t.event===`board.command`){let e=t.payload;e?.command&&this.matchesSession(e.sessionKey,e.agentId)&&this.eventStream.emit({sessionKey:this.snapshotSignal.value.sessionKey,command:e.command})}}})}matchesSession(e,t){if(typeof e!=`string`)return!1;let n=w({},this.sessionKey,this.session.agentId);if(t){let r=w({},e,t);return n.sessionKey===r.sessionKey&&n.agentId===r.agentId}if(!this.snapshotLoaded){let t=re(e);return!!(t&&t.agentId===n.agentId&&(te(e)===n.sessionKey||te(t.rest)===n.sessionKey))}return te(e)===te(this.snapshotSignal.value.sessionKey)}requestRefresh(e,t=!1){return this.disposed?Promise.resolve():(this.refreshRequested=!0,this.userRefreshRequested||=t,e&&this.changedWidgets.add(e),this.wakeRetryDelay?.(),this.refreshLoop??=this.runRefreshLoop().finally(()=>{this.refreshLoop=void 0,this.refreshRequested&&(this.connected||this.userRefreshRequested)&&this.requestRefresh()}),this.refreshLoop)}async runRefreshLoop(){let e={delayMs:1e3};for(;this.refreshRequested;){if(this.disposed){this.refreshRequested=!1;return}if(!this.connected&&!this.userRefreshRequested)return;this.userRefreshRequested=!1;let t=new Set(this.changedWidgets);this.changedWidgets.clear();let n=this.client,r=this.stateGeneration;try{let i=await n.request(`board.get`,this.session);if(this.disposed)return;if(n!==this.client){this.refreshRequested=!0;continue}if(this.userRefreshRequested=!1,r!==this.stateGeneration){this.refreshRequested=!0;for(let e of t)this.changedWidgets.add(e);continue}for(let e of this.changedWidgets)t.add(e);this.changedWidgets.clear(),this.refreshRequested=!1,this.setSnapshot(i,t),e.delayMs=1e3}catch(i){if(this.disposed)return;if(this.refreshRequested=!0,n!==this.client)continue;this.setLoadError(b(i));for(let e of t)this.changedWidgets.add(e);if(i instanceof u&&i.gatewayCode===`UNAVAILABLE`&&!i.retryable){this.refreshRequested=this.stateGeneration!==r||this.userRefreshRequested;continue}if(!this.connected){if(this.userRefreshRequested)continue;return}let a=e.delayMs;e.delayMs=Math.min(a*2,3e4),await this.waitForRetry(a);continue}}}waitForRetry(e){return new Promise(t=>{let n,r=()=>{n&&(clearTimeout(n),n=void 0,this.wakeRetryDelay===r&&(this.wakeRetryDelay=void 0),t())};n=setTimeout(r,e),this.wakeRetryDelay=r})}async mutate(e,t,n){if(this.disposed)throw Error(`Session dashboard provider is no longer active`);let r=this.client,i=this.clientGeneration,a=++this.stateGeneration;try{let o=await r.request(e,t);!this.disposed&&r===this.client&&i===this.clientGeneration&&a===this.stateGeneration&&(this.stateGeneration+=1,this.setSnapshot(o,n?new Set([n]):new Set,!0))}catch(e){throw!this.disposed&&r===this.client&&i===this.clientGeneration&&a===this.stateGeneration&&this.requestRefresh(),e}}setSnapshot(e,t=new Set,n=!1){let r=Date.now(),i=new Map(this.snapshotSignal.value.widgets.map(e=>[e.name,e])),a=e.widgets.map(e=>{let a=i.get(e.name);if(n&&a&&!t.has(e.name)&&a.revision===e.revision&&a.instanceId===e.instanceId&&e.viewGeneration===void 0){let t=Xi(e,a);return qi(t,a,r),t}if(a&&!t.has(e.name)&&a.revision===e.revision&&a.instanceId===e.instanceId&&a.viewGeneration===e.viewGeneration&&!e.sandboxUrl&&a.frameUrl){let t={...e,frameUrl:a.frameUrl};return Ki(t,r),t}return Ki(e,r),e});this.appViews.prune(a),this.snapshotLoaded=!0,this.snapshotSignal.set({...e,widgets:a}),this.setLoadError(null)}setLoadError(e){this.loadErrorSignal.value!==e&&this.loadErrorSignal.set(e)}publishAppViewGeneration(){let e=this.snapshotSignal.value;e.widgets.some(e=>e.contentKind===`mcp-app`)&&this.snapshotSignal.set({...e,widgets:e.widgets.map(e=>e.contentKind===`mcp-app`?Object.assign({},e):e)})}}})))()}function $i(e){let t=e.tabs.toSorted((e,t)=>e.position-t.position).map((e,t)=>Object.assign({},e,{position:t})),n=new Map(t.map(e=>[e.tabId,e.position])),r=new Map,i=e.widgets.toSorted((e,t)=>(n.get(e.tabId)??2**53-1)-(n.get(t.tabId)??2**53-1)||e.position-t.position).map(e=>{let t=r.get(e.tabId)??0;return r.set(e.tabId,t+1),Object.assign({},e,{position:t})});return{...e,tabs:t,widgets:i}}function ea(e,t){switch(t.kind){case`tab_create`:return e.tabs.some(e=>e.tabId===t.tabId)?e:{...e,tabs:[...e.tabs,{tabId:t.tabId,title:t.title,position:e.tabs.length,chatDock:t.chatDock??`right`}]};case`tab_update`:{let n=e.tabs.toSorted((e,t)=>e.position-t.position),r=n.findIndex(e=>e.tabId===t.tabId);if(r<0)return e;let[i]=n.splice(r,1),a={...i,...t.title===void 0?{}:{title:t.title},...t.chatDock===void 0?{}:{chatDock:t.chatDock}},o=Math.max(0,Math.min(t.position===void 0?r:Math.trunc(t.position),n.length));return n.splice(o,0,a),{...e,tabs:n.map((e,t)=>Object.assign({},e,{position:t}))}}case`tab_delete`:{let n=e.tabs.filter(e=>e.tabId!==t.tabId);if(n.length===0&&e.widgets.length>0)return e;let r=n[0]?.tabId;return{...e,tabs:n,widgets:e.widgets.map(e=>e.tabId===t.tabId&&r?{...e,tabId:r,position:2**53-1}:e)}}case`tabs_reorder`:{let n=new Set(t.tabIds);return t.tabIds.length!==e.tabs.length||n.size!==e.tabs.length||e.tabs.some(e=>!n.has(e.tabId))?e:{...e,tabs:t.tabIds.flatMap((t,n)=>{let r=e.tabs.find(e=>e.tabId===t);return r?[{...r,position:n}]:[]})}}case`widget_move`:{let n=e.widgets.find(e=>e.name===t.name),r=t.after?e.widgets.find(e=>e.name===t.after):void 0;if(!n||t.after&&(!r||r.name===n.name))return e;let i=t.tabId??n.tabId;if(t.position!==void 0&&t.after!==void 0||!e.tabs.some(e=>e.tabId===i)||r&&r.tabId!==i)return e;let a=e.widgets.filter(e=>e.name!==n.name),o=a.filter(e=>e.tabId===i).toSorted((e,t)=>e.position-t.position),s=r?o.findIndex(e=>e.name===r.name):-1,c=r?s+1:Math.max(0,Math.min(t.position??o.length,o.length));return o.splice(c,0,{...n,tabId:i}),{...e,widgets:e.tabs.flatMap(e=>(e.tabId===i?o:a.filter(t=>t.tabId===e.tabId).toSorted((e,t)=>e.position-t.position)).map((e,t)=>Object.assign({},e,{position:t})))}}case`widget_resize`:return{...e,widgets:e.widgets.map(e=>e.name===t.name?{...e,sizeW:Math.min(12,Math.max(1,Math.trunc(t.sizeW))),sizeH:Math.min(20,Math.max(1,Math.trunc(t.sizeH))),heightMode:t.heightMode??`fixed`}:e)};case`widget_remove`:return{...e,widgets:e.widgets.filter(e=>e.name!==t.name)}}return e}function ta(e){return{sessionKey:e,revision:1,tabs:[{tabId:`main`,title:j(`chat.board.mockOverview`),position:0,chatDock:`right`},{tabId:`research`,title:j(`chat.board.mockResearch`),position:1,chatDock:`bottom`}],widgets:[{name:`session-status`,tabId:`main`,title:j(`chat.board.mockSessionStatus`),contentKind:`html`,sizeW:4,sizeH:3,position:0,grantState:`granted`,revision:1},{name:`recent-findings`,tabId:`main`,title:j(`chat.board.mockRecentFindings`),contentKind:`mcp-app`,sizeW:8,sizeH:6,position:1,grantState:`pending`,revision:1},{name:`source-map`,tabId:`research`,title:j(`chat.board.mockSourceMap`),contentKind:`html`,sizeW:12,sizeH:8,position:0,grantState:`none`,revision:1}]}}function na(e){return e.tabs.length>0||e.widgets.length>0}function ra(){let e=globalThis.location;return new URLSearchParams(e?.search??``).get(`mockBoard`)===`1`?e:null}function ia(){return ra()!==null}function aa(e){return/^agent:[^:]+:[^:]+$/u.test(e)}function oa(e){let t=w({},C(e.sessionKey),e.agentId);return JSON.stringify([e.agentId??t.agentId,t.sessionKey])}function sa(e,t=!0){let n=oa(e),r=C(e.sessionKey),i=ra();if(i&&aa(r)){i!==ha&&(ma.clear(),ha=i);let e=ma.get(n);return e||(e=new da(r),ma.set(n,e)),e}let a=t?W.get(n)?.provider:void 0;if(a)return a;let o=pa.get(n);return o||(o=new ua(r),pa.set(n,o)),o}function ca(e,t,n=!0,r=!0,i=!1,a=!0,o=!0){let s=oa(e),c=sa(e);if(c instanceof da)return{provider:c,update:()=>void 0,release:()=>void 0};let l=W.get(s);if(l)l.provider.attachClient(t,n);else{let r={...e,sessionKey:C(e.sessionKey)};l={provider:new Zi(r,t,n),consumers:0},W.set(s,l)}let u=new fa(l.provider,{canPinWidgets:r,canPinMcpApps:i,canMutate:a,canGrant:o});l.consumers+=1;let d=!1;return{provider:u,update:(e,t,n)=>{d||W.get(s)?.provider!==l.provider||(u.updateCapabilities(n),l.provider.attachClient(e,t))},release:()=>{if(d)return;d=!0,u.deactivate();let e=W.get(s);!e||e.provider!==l.provider||(--e.consumers,!(e.consumers>0)&&(W.delete(s),e.provider.dispose()))}}}function la(e){return e instanceof Zi||e instanceof fa?e.hasLoadedSnapshot:!0}var ua,da,fa,pa,ma,W,ha;function ga(){return(ga=e((()=>{A(),v(),Qi(),Vi(),ua=class{constructor(e=``){this.sessionKey=e,this.appViewGeneration=0,this.canMutate=!1,this.canGrant=!1,this.canPinWidgets=!1,this.canPinMcpApps=!1,this.hasLoadedSnapshot=!0,this.loadError$=new H(null),this.events=new Bi,this.snapshot$=new H(Ri(e))}async applyOps(e){}async grant(e,t){}async pinWidget(e){throw Error(`Session dashboard unavailable`)}async pinMcpApp(e){throw Error(`Session dashboard unavailable`)}widgetFrameUrl(e,t){return``}async refreshWidgetFrame(e){}async widgetAppView(e,t){return{status:`stale`,error:`Session dashboard unavailable`}}async refreshWidgetAppView(e,t){return{status:`stale`,error:`Session dashboard unavailable`}}},da=class{constructor(e){this.sessionKey=e,this.appViewGeneration=0,this.canMutate=!0,this.canGrant=!0,this.canPinWidgets=!0,this.canPinMcpApps=!0,this.hasLoadedSnapshot=!0,this.loadError$=new H(null),this.eventStream=new Bi,this.snapshotSignal=new H(ta(e)),this.snapshot$=this.snapshotSignal,this.events=this.eventStream}async applyOps(e){let t=this.snapshotSignal.value;for(let n of e)t=$i(ea(t,n));this.snapshotSignal.set({...t,revision:t.revision+1})}async grant(e,t){let n=this.snapshotSignal.value,r=n.widgets.slice(),i=r.findIndex(t=>t.name===e),a=r[i];a&&(r[i]={...a,grantState:t}),this.snapshotSignal.set({...n,revision:n.revision+1,widgets:r})}async pinWidget(e){let t=e.name??Ui(e.docId);this.pinMockBoardWidget(e,t,`html`)}async pinMcpApp(e){let t=e.name??Wi(e.viewId);this.pinMockBoardWidget(e,t,`mcp-app`)}pinMockBoardWidget(e,t,n){let r=this.snapshotSignal.value,i=zi(e.title),a=e.tabId??r.tabs[0]?.tabId??`main`,o=r.tabs.length?r.tabs:[{tabId:`main`,title:j(`chat.board.defaultTab`),position:0,chatDock:`right`}],s=r.widgets.find(e=>e.name===t),c=r.widgets.filter(e=>e.name!==t);c.push({name:t,tabId:a,...i?{title:i}:{},contentKind:n,sizeW:s?.sizeW??6,sizeH:s?.sizeH??4,position:s?.position??c.filter(e=>e.tabId===a).length,grantState:`none`,revision:(s?.revision??0)+1,...n===`html`?{frameUrl:`about:blank#board-widget=${encodeURIComponent(t)}`}:{}}),this.snapshotSignal.set($i({...r,revision:r.revision+1,tabs:o,widgets:c}))}widgetFrameUrl(e,t){return this.snapshotSignal.value.widgets.find(n=>n.name===e&&n.revision===t)?.frameUrl??`about:blank#board-widget=${encodeURIComponent(e)}&revision=${t}`}async refreshWidgetFrame(e){}async widgetAppView(e,t){return{status:`stale`,error:`MCP App mock view unavailable`}}async refreshWidgetAppView(e,t){return await this.widgetAppView(e,t)}emitCommand(e){this.eventStream.emit({sessionKey:this.sessionKey,command:e})}},fa=class{constructor(e,t){this.transport=e,this.capabilities=t,this.active=!0,this.loadError$=e.loadError$,this.snapshot$=e.snapshot$,this.events=e.events}get sessionKey(){return this.transport.sessionKey}get appViewGeneration(){return this.transport.appViewGeneration}get canPinWidgets(){return this.active&&this.capabilities.canPinWidgets}get canPinMcpApps(){return this.active&&this.capabilities.canPinMcpApps}get canMutate(){return this.active&&this.capabilities.canMutate}get canGrant(){return this.active&&this.capabilities.canGrant}get hasLoadedSnapshot(){return this.transport.hasLoadedSnapshot}updateCapabilities(e){this.active&&(this.capabilities=e)}deactivate(){this.active=!1}async applyOps(e){if(!this.canMutate)throw Error(`Session dashboard mutation unavailable`);await this.transport.applyOps(e)}async grant(e,t){if(!this.canGrant)throw Error(`Session dashboard approval unavailable`);await this.transport.grant(e,t)}async pinWidget(e){if(!this.canMutate||!this.canPinWidgets)throw Error(`Session dashboard widget pinning unavailable`);await this.transport.pinWidget(e)}async pinMcpApp(e){if(!this.canMutate||!this.canPinMcpApps)throw Error(`Session dashboard MCP App pinning unavailable`);await this.transport.pinMcpApp(e)}widgetFrameUrl(e,t){return this.transport.widgetFrameUrl(e,t)}refreshWidgetFrame(e){return this.transport.refreshWidgetFrame(e)}widgetAppView(e,t){return this.transport.widgetAppView(e,t)}refreshWidgetAppView(e,t){return this.transport.refreshWidgetAppView(e,t)}},pa=new Map,ma=new Map,W=new Map,ha=null})))()}var _a,va,ya,ba;function xa(){return(xa=e((()=>{T(),Ae(),ye(),A(),Ze(),ft(),d(),_a=0,va=new WeakSet,ya=class extends xe{constructor(...e){super(...e),this.scanPending=!1,this.observedNodes=new Set,this.resizeObserver=typeof ResizeObserver>`u`?null:new ResizeObserver(e=>{let t=new Set(e.map(({target:e})=>e.closest(`.code-block-wrapper`)));for(let e of t)e&&mt(e)})}render(){return D}update(e){return this.root=e.element instanceof HTMLElement?e.element:void 0,this.scheduleScan(),D}disconnected(){this.resizeObserver?.disconnect(),this.observedNodes.clear(),this.root&&dt(this.root)}reconnected(){this.scheduleScan()}scheduleScan(){this.scanPending||!this.isConnected||(this.scanPending=!0,queueMicrotask(()=>{this.scanPending=!1,this.isConnected&&this.root?.isConnected&&this.scan(this.root)}))}scan(e){yt(e),e.querySelector(`.markdown-mermaid pre code`)&&h(async()=>{let{mountMermaidBlocks:e}=await import(`./markdown-mermaid-Dg-raW5O.js`);return{mountMermaidBlocks:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]),import.meta.url).then(({mountMermaidBlocks:t})=>{this.isConnected&&this.root===e&&e.isConnected&&t(e)&&this.scheduleScan()},()=>{for(let t of e.querySelectorAll(`.markdown-mermaid`))t.classList.remove(`markdown-mermaid`),t.prepend(j(`chat.mermaid.rendererError`))});for(let t of this.observedNodes)e.contains(t)||(this.resizeObserver?.unobserve(t),this.observedNodes.delete(t));for(let t of e.querySelectorAll(`.code-block-wrapper`)){let e=t.querySelector(`.code-block-viewport`),n=e?.querySelector(`code`);if(!(!e||!n)){if(!va.has(t)){va.add(t);let n=t.querySelector(`.code-block-expand`);if(n){let t=`code-block-${++_a}`;e.id=t,n.setAttribute(`aria-controls`,t)}}for(let t of[e,n])this.observedNodes.has(t)||(this.observedNodes.add(t),this.resizeObserver?.observe(t));this.resizeObserver||mt(t)}}}},ba=Se(ya)})))()}function Sa(e){let t=new CustomEvent(Na,{detail:e,cancelable:!0});return window.dispatchEvent(t),t.defaultPrevented?`accepted`:t.rejection?`rejected`:`unhandled`}function G(e){return Math.min(1,Math.max(0,e))}function Ca(e){if(e.points.length===0)return null;let t=1,n=1,r=0,i=0;for(let a of e.points)t=Math.min(t,G(a.x)),n=Math.min(n,G(a.y)),r=Math.max(r,G(a.x)),i=Math.max(i,G(a.y));return{x:t,y:n,width:r-t,height:i-n}}function wa(e){return String(Math.round(G(e)*100))}function K(e,n){return t(e.replace(/\s+/g,` `).trim(),n)}function Ta(e){let n=K(e,Fa);try{let e=new URL(n);return!e.username&&!e.password?n:(e.username=``,e.password=``,t(e.href,Fa))}catch{let e=n.replace(/^([a-z][a-z\d+.-]*:\/\/)[^/?#\s]*@/i,`$1`);return t(e,Fa)}}function Ea(e){try{let t=new URL(e).hostname;if(t)return K(t,Ia)}catch{}return t(e,Ia)}function Da(e,t=40){return e.replace(/[^\w-]/g,``).slice(0,t)}function Oa(e){let t=e.classes.slice(0,3).map(e=>Da(e)).filter(e=>e.length>0).map(e=>`.${e}`).join(``),n=Da(e.tag)||`element`,r=Da(e.id),i=`${n}${r?`#${r}`:``}${t}`,a=K(e.name,Pa);return`${i}${a?` "${a}"`:``}${e.role?` (role=${K(e.role,40)})`:``}`}function ka(e){let n=Ta(e.url),r=K(e.title,Pa),i=Ea(n),a=e.strokes.flatMap(e=>Ca(e)??[]),o=e.element?{descriptor:Oa(e.element),width:String(Math.round(e.element.rect.width)),height:String(Math.round(e.element.rect.height)),x:String(Math.round(e.element.rect.x)),y:String(Math.round(e.element.rect.y))}:null,s=[r?j(`browser.annotatePrompt.introTitled`,{url:n,title:r}):j(`browser.annotatePrompt.introUntitled`,{url:n})];return e.browserTab&&s.push(j(`browser.annotatePrompt.browserTarget`,{target:JSON.stringify(e.browserTab)})),a.slice(0,La).forEach((e,t)=>{s.push(j(`browser.annotatePrompt.region`,{index:String(t+1),x:wa(e.x+e.width/2),y:wa(e.y+e.height/2),width:wa(e.width),height:wa(e.height)}))}),a.length>La&&s.push(j(`browser.annotatePrompt.moreRegions`,{count:String(a.length-La)})),o&&s.push(j(`browser.annotatePrompt.elementDetail`,{descriptor:o.descriptor,width:o.width,height:o.height,x:o.x,y:o.y})),s.push(j(`browser.annotatePrompt.outro`)),{modelContext:s.join(`
`),card:{title:r||t(i,Pa),displayUrl:i,markedRegionCount:a.length,inspectedElement:o!==null}}}function Aa(e){return Math.max(4,Math.round(e*.005))}function ja(e,t){e.lineCap=`round`,e.lineJoin=`round`,e.strokeStyle=Ra,e.lineWidth=Aa(t.width);for(let n of t.strokes)if(n.points.length!==0){if(e.beginPath(),n.points.forEach((n,r)=>{let i=G(n.x)*t.width,a=G(n.y)*t.height;r===0?e.moveTo(i,a):e.lineTo(i,a)}),n.points.length===1){let r=n.points[0];r&&e.lineTo(G(r.x)*t.width+.1,G(r.y)*t.height)}e.stroke()}if(t.highlight){let{x:n,y:r,width:i,height:a}=t.highlight;e.strokeRect(G(n)*t.width,G(r)*t.height,Math.max(2,i*t.width),Math.max(2,a*t.height))}}function Ma(e){let t=document.createElement(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);if(!n)throw Error(j(`browser.errors.canvasUnavailable`));return n.drawImage(e.image,0,0,e.width,e.height),ja(n,e),t.toDataURL(`image/png`)}var Na,Pa,Fa,Ia,La,Ra;function za(){return(za=e((()=>{A(),Na=`openclaw:browser-annotation`,Pa=80,Fa=500,Ia=160,La=8,Ra=`#e0442d`})))()}function Ba(e){return E`<openclaw-panel-empty-state
.heading=${e.heading}
.description=${e.description}
>
${e.icon}${e.action!=null&&e.action!==D?E`<span slot="action">${e.action}</span>`:D}
</openclaw-panel-empty-state>`}var Va;function Ha(){return(Ha=e((()=>{T(),_e(),ae(),Va=class extends pe{constructor(...e){super(...e),this.heading=``,this.description=``}render(){return E`<div class="empty-state" role="status">
<div class="empty-state__icon" aria-hidden="true"><slot></slot></div>
<strong class="empty-state__title">${this.heading}</strong>
<p class="empty-state__description">${this.description}</p>
<slot name="action"></slot>
</div>`}static{this.styles=Ee`
:host {
display: flex;
box-sizing: border-box;
width: 100%;
height: 100%;
min-width: 0;
min-height: 0;
flex: 1 1 auto;
}
.empty-state {
display: flex;
box-sizing: border-box;
width: 100%;
min-height: 0;
flex: 1 1 auto;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 24px;
color: var(--muted);
text-align: center;
transform: translateY(-10px);
}
.empty-state__icon {
display: inline-flex;
width: 32px;
height: 32px;
align-items: center;
justify-content: center;
margin-bottom: 18px;
color: var(--muted);
}
::slotted(svg) {
width: 32px;
height: 32px;
stroke-width: 1.5px;
}
.empty-state__title {
color: var(--text);
font-size: calc(16px * var(--control-ui-text-scale, 1));
font-weight: 500;
line-height: 1.25;
}
.empty-state__description {
max-width: 320px;
margin: 8px 0 0;
color: var(--muted);
font-size: calc(13px * var(--control-ui-text-scale, 1));
line-height: 1.45;
}
::slotted([slot="action"]) {
margin-top: 16px;
}
`}},_([O()],Va.prototype,`heading`,void 0),_([O()],Va.prototype,`description`,void 0),customElements.get(`openclaw-panel-empty-state`)||customElements.define(`openclaw-panel-empty-state`,Va)})))()}function Ua(e,t,n=!1,r=!1){return E`
<openclaw-panel-loading-skeleton
.variant=${e}
?compact=${n}
?overlay=${r}
role="status"
aria-busy="true"
aria-label=${t}
></openclaw-panel-loading-skeleton>
`}var q;function Wa(){return(Wa=e((()=>{T(),_e(),ae(),q=class extends pe{constructor(...e){super(...e),this.variant=`files`,this.compact=!1,this.overlay=!1}static{this.styles=Ee`
:host {
display: block;
box-sizing: border-box;
width: 100%;
min-height: 100%;
padding: 14px;
color: var(--muted);
}
:host([compact]) {
min-height: 0;
padding: 8px;
}
:host([overlay]) {
position: absolute;
inset: 0;
z-index: 2;
min-height: 0;
background: color-mix(in srgb, var(--bg, #0e1015) 92%, transparent);
pointer-events: none;
}
:host([compact]) .viewport,
:host([compact]) .terminal,
:host([compact]) .discussion-frame {
min-height: 72px;
}
* {
box-sizing: border-box;
}
/* Terminal/desktop/browser hosts use shadow roots, so base.css's .skeleton
and global reduced-motion gate cannot reach here. Keep this primitive
declaration-identical to base.css; the unit test guards against drift. */
.skeleton {
position: relative;
overflow: hidden;
background: var(--skeleton-base, var(--bg-muted));
border-radius: var(--radius-md);
}
.skeleton::after {
position: absolute;
inset: 0;
background: linear-gradient(
90deg,
transparent 25%,
var(--skeleton-highlight, var(--bg-hover)) 50%,
transparent 75%
);
content: "";
transform: translateX(-100%);
animation: shimmer var(--skeleton-duration, 1.5s) ease-in-out infinite;
will-change: transform;
}
.line {
height: 10px;
}
.short {
width: 36%;
}
.medium {
width: 62%;
}
.long {
width: 88%;
}
.row,
.toolbar,
.bubble,
.card,
.summary {
display: flex;
gap: 10px;
align-items: center;
}
.rows,
.conversation,
.code {
display: grid;
gap: 12px;
}
.toolbar {
padding-bottom: 12px;
border-bottom: 1px solid var(--border);
margin-bottom: 14px;
}
.icon {
width: 18px;
height: 18px;
flex: 0 0 auto;
border-radius: 5px;
}
.copy {
display: grid;
flex: 1;
gap: 6px;
}
.meta {
height: 7px;
width: 28%;
}
.viewport {
min-height: 220px;
border-radius: 8px;
}
.address {
height: 28px;
flex: 1;
border-radius: 7px;
}
.button {
width: 28px;
height: 28px;
flex: 0 0 auto;
}
.card {
min-height: 58px;
padding: 10px;
border: 1px solid var(--border);
border-radius: 8px;
}
.summary {
margin-bottom: 16px;
}
.pill {
width: 64px;
height: 24px;
border-radius: 999px;
}
.file-heading {
height: 30px;
margin-bottom: 14px;
}
.code .line {
height: 9px;
border-radius: 3px;
}
.terminal {
display: grid;
gap: 11px;
padding: 12px;
min-height: 220px;
align-content: start;
border-radius: 8px;
background: color-mix(in srgb, var(--bg) 76%, transparent);
}
.bubble {
width: 82%;
min-height: 58px;
padding: 12px;
align-items: flex-start;
border-radius: 12px;
background: color-mix(in srgb, var(--bg-muted) 76%, transparent);
}
.bubble.user {
width: 58%;
margin-left: auto;
}
.discussion-frame {
min-height: 280px;
padding: 18px;
border: 1px solid var(--border);
border-radius: 8px;
}
@keyframes shimmer {
from {
transform: translateX(-100%);
}
to {
transform: translateX(100%);
}
}
@media (prefers-reduced-motion: reduce) {
.skeleton::after {
animation-duration: 0.01ms;
animation-iteration-count: 1;
}
}
`}line(e=`long`){return E`<div class="skeleton line ${e}"></div>`}rows(e){return Array.from({length:e},(e,t)=>E`
<div class="row">
<div class="skeleton icon"></div>
<div class="copy">
${this.line(t%2==0?`long`:`medium`)}
<div class="skeleton meta"></div>
</div>
</div>
`)}renderContent(){switch(this.variant){case`browser`:return E`
<div class="toolbar">
<div class="skeleton button"></div>
<div class="skeleton button"></div>
<div class="skeleton address"></div>
</div>
<div class="skeleton viewport"></div>
`;case`chat`:return E`
<div class="conversation">
<div class="bubble"><div class="copy">${this.line()}${this.line(`medium`)}</div></div>
<div class="bubble user"><div class="copy">${this.line(`medium`)}</div></div>
<div class="bubble"><div class="copy">${this.line()}${this.line(`short`)}</div></div>
</div>
`;case`desktop`:return E`
<div class="toolbar">${this.line(`medium`)}</div>
<div class="rows">${this.rows(3).map(e=>E`<div class="card">${e}</div>`)}</div>
`;case`discussion`:return E`
<div class="discussion-frame">
<div class="conversation">
${this.line(`medium`)} ${this.line()} ${this.line(`long`)} ${this.line(`short`)}
</div>
</div>
`;case`review`:return E`
<div class="summary">
<div class="skeleton pill"></div>
<div class="skeleton pill"></div>
</div>
<div class="skeleton file-heading"></div>
<div class="code">
${this.line()} ${this.line(`long`)} ${this.line(`medium`)} ${this.line()}
${this.line(`short`)}
</div>
`;case`terminal`:return E`
<div class="toolbar">
<div class="skeleton pill"></div>
<div class="skeleton pill"></div>
</div>
<div class="terminal">
${this.line(`medium`)} ${this.line()} ${this.line(`short`)} ${this.line(`long`)}
</div>
`;case`tasks`:return E`
<div class="toolbar">${this.line(`short`)}</div>
<div class="rows">${this.rows(4)}</div>
`;default:return E`
<div class="toolbar">
<div class="skeleton address"></div>
<div class="skeleton button"></div>
</div>
<div class="rows">${this.rows(5)}</div>
`}}render(){return E`${this.renderContent()}`}},_([O({reflect:!0,attribute:`data-panel-skeleton`})],q.prototype,`variant`,void 0),_([O({type:Boolean,reflect:!0})],q.prototype,`compact`,void 0),_([O({type:Boolean,reflect:!0})],q.prototype,`overlay`,void 0),customElements.get(`openclaw-panel-loading-skeleton`)||customElements.define(`openclaw-panel-loading-skeleton`,q)})))()}function Ga(e){if(e.status!==503)return;let t=e.headers?.get(`retry-after`)?.trim();if(!t||!/^\d+$/.test(t))return;let n=Number(t)*1e3;return Number.isSafeInteger(n)&&n>0&&n<=Za?n:void 0}function Ka(e,t){J.get(e)===t&&(J.delete(e),t.retryTimer!==void 0&&(clearTimeout(t.retryTimer),t.retryTimer=void 0),t.controller.abort(),t.blobUrl&&URL.revokeObjectURL(t.blobUrl))}function qa(e,t,n,r){return`${n?`stable-miss`:`retry-miss`}\0${r?`retry-503`:`drop-503`}\0${t.join(``)}\0${e}`}function Ja(e,t){let n=J.get(e);n&&(n.consumers.delete(t),!(n.consumers.size>0||n.releaseTimer!==void 0)&&(n.releaseTimer=setTimeout(()=>{n.releaseTimer=void 0,!(J.get(e)!==n||n.consumers.size>0)&&Ka(e,n)},0)))}async function Ya(e,t,n,r,i,a){let o=setTimeout(()=>a.controller.abort(),Xa),s=null,c=!1,l;try{for(let e of n.length>0?n:[``]){let n=await fetch(t,{...e?{headers:{Authorization:`Bearer ${e}`}}:{},signal:a.controller.signal});if(n.ok){s=URL.createObjectURL(await n.blob());break}if(c=n.status===404,l=i?Ga(n):void 0,n.status!==401&&n.status!==403)break}}catch{}finally{clearTimeout(o)}if(J.get(e)!==a){s&&URL.revokeObjectURL(s);return}if(!s){if(c&&r)return;if(l!==void 0&&a.consumers.size>0){a.retryAttempts<Qa?(a.retryAttempts+=1,a.retryTimer=setTimeout(()=>{a.retryTimer=void 0,J.get(e)===a&&a.consumers.size!==0&&(a.controller=new AbortController,Ya(e,t,n,r,i,a))},l)):a.retryEligibleAt=Date.now()+$a;return}Ka(e,a);return}a.blobUrl=s;for(let e of a.consumers.values())e()}var Xa,Za,Qa,$a,J,eo;function to(){return(to=e((()=>{Xa=3e4,Za=3e4,Qa=3,$a=3e4,J=new Map,eo=class{constructor(e,t={}){this.host=e,this.options=t,this.owner=Symbol(`authenticated-avatar-route-owner`),this.keys=new Set,this.connected=!1,this.onUpdate=()=>{this.connected&&this.host.requestUpdate()},e.addController(this)}hostConnected(){this.connected=!0,this.host.requestUpdate()}hostDisconnected(){this.connected=!1,this.reset()}reset(){for(let e of this.keys)Ja(e,this.owner);this.keys.clear()}withActiveRoutes(e){let t=this.keys;this.keys=new Set;try{return e()}finally{for(let e of t)this.keys.has(e)||Ja(e,this.owner)}}resolve(e,t){if(!e.startsWith(`/`))return e;if(!this.connected)return null;let n=this.options.cacheNotFound===!0,r=this.options.retryUnavailable===!0,i=qa(e,t,n,r),a=J.get(i);return a?a.blobUrl===null&&a.retryTimer===void 0&&a.retryEligibleAt!==void 0&&Date.now()>=a.retryEligibleAt&&(a.retryAttempts=0,a.retryEligibleAt=void 0,a.controller=new AbortController,Ya(i,e,t,n,r,a)):(a={blobUrl:null,consumers:new Map,controller:new AbortController,releaseTimer:void 0,retryTimer:void 0,retryAttempts:0,retryEligibleAt:void 0},J.set(i,a),Ya(i,e,t,n,r,a)),a.releaseTimer!==void 0&&(clearTimeout(a.releaseTimer),a.releaseTimer=void 0),a.consumers.set(this.owner,this.onUpdate),this.keys.add(i),a.blobUrl}}})))()}function no(e){if(e.signal?.aborted)return Promise.resolve(!1);let t=document.createElement(`div`);return document.body.append(t),new Promise(n=>{let r=!1,i=!1,a=i=>{r||(r=!0,e.signal?.removeEventListener(`abort`,o),be(D,t),t.remove(),n(i))},o=()=>a(!1);e.signal?.addEventListener(`abort`,o,{once:!0});let s=e.title??j(`common.confirm`);be(E`
<openclaw-modal-dialog
label=${s}
description=${e.message}
@modal-cancel=${()=>a(!1)}
>
<div class="exec-approval-card">
<div class="exec-approval-header">
<div>
<div class="exec-approval-title">${s}</div>
<div class="exec-approval-sub" style="white-space: pre-line">
${e.message}
</div>
</div>
</div>
${e.details?E`<div class="exec-approval-command mono">${e.details}</div>`:D}
${e.skipPreference?E`<label class="field checkbox exec-approval-skip">
<input
type="checkbox"
@change=${e=>{i=e.target.checked}}
/>
<span>${j(`common.dontAskAgain`)}</span>
</label>`:D}
<div class="exec-approval-actions">
<button
type="button"
class="btn ${e.danger?`danger`:`primary`}"
@click=${()=>{i&&e.skipPreference?.remember(),a(!0)}}
>
${e.confirmLabel??j(`common.confirm`)}
</button>
<button type="button" class="btn" autofocus @click=${()=>a(!1)}>
${e.cancelLabel??j(`common.cancel`)}
</button>
</div>
</div>
</openclaw-modal-dialog>
`,t)})}function ro(e){return e.skipPreference?.skipped?Promise.resolve(!0):io?Promise.resolve(!1):(io=!0,no(e).finally(()=>{io=!1}))}var io;function ao(){return(ao=e((()=>{T(),A(),ze(),io=!1})))()}var oo,so;function co(){return(co=e((()=>{Be(),oo={sessionsView:{placementFactService:`Service`,placementFactProfile:`Profile`,placementFactMachine:`Machine`,placementFactState:`State`,placementFactDisk:`Disk`,placementDiskFree:`{free} free`,runsOnDevice:`Runs on device`,runsOnWorker:`Runs on worker`,stopWorker:`Stop workerโฆ`,stopWorkerConfirm:`Stop the worker for "{session}"?`,stopWorkerConfirmAction:`Stop worker`,deviceOffline:`Device offline`,waitingForDevice:`Waiting for device to reconnect; retry after it returns.`,continueOnGatewayMenu:`Continue on Gatewayโฆ`,continueOnGatewayAction:`Continue on Gateway`,continueOnGatewayConfirm:`Continue "{session}" on the Gateway? Unsynced device files and in-flight work may be lost. OpenClaw will continue from the last Gateway-synced state and will not replay the interrupted turn.`,stopDeviceWorker:`Stop device workerโฆ`,offlineDeviceStopUnavailable:`Reconnect the device to stop and sync its workspace, or Continue on Gateway.`,stopDeviceWorkerConfirm:`Stop the device worker for "{session}"?`,stopDeviceWorkerConfirmAction:`Stop device worker`,restartSession:`Restart sessionโฆ`,restartingSession:`Restarting sessionโฆ`,restartSessionTitle:`Restart session`,restartSessionDescription:`Choose where "{session}" should restart.`,restartSessionWarning:`A new worker starts from the last reconciled worktree. Changes that the previous worker did not upload may be lost.`,restartSessionAction:`Restart session`,stoppingSession:`Stopping sessionโฆ`,finishingSessionMove:`Finishing session moveโฆ`,failedSessionTitle:`Runner failed`,failedSessionRestartPrompt:`Restart this session to continue.`,failedSessionStopPrompt:`Stop the failed worker before restarting this session.`,failedSessionUnavailable:`This session's runner failed and cannot accept messages.`}},so=Object.assign(()=>{Object.assign(Ve.sessionsView,oo.sessionsView)},{catalog:oo})})))()}function lo(e,t){return e>t?j(`execApproval.expiresIn`,{time:oe(e,t,!0)}):j(`execApproval.expired`)}function Y(e,t,n){return t?E`<div class="exec-approval-meta-row">
<span>${e}</span><span>${n?.path?Lt(t):t}</span>
</div>`:D}function uo(e){let t=[...e.commandSpans??[]].filter(t=>Number.isSafeInteger(t.startIndex)&&Number.isSafeInteger(t.endIndex)&&t.startIndex>=0&&t.endIndex>t.startIndex&&t.endIndex<=e.command.length).toSorted((e,t)=>e.startIndex-t.startIndex||t.endIndex-e.endIndex),n=[],r=0;for(let e of t)e.startIndex>=r&&(n.push(e),r=e.endIndex);if(!n.length)return E`<div class="exec-approval-command mono">${e.command}</div>`;let i=[];r=0;for(let t of n)t.startIndex>r&&i.push(e.command.slice(r,t.startIndex)),i.push(E`<mark class="exec-approval-command-span"
>${e.command.slice(t.startIndex,t.endIndex)}</mark
>`),r=t.endIndex;return r<e.command.length&&i.push(e.command.slice(r)),E`<div class="exec-approval-command mono">${i}</div>`}function fo(e){return E`<details class="exec-approval-details">
<summary>${j(`execApproval.details`)}</summary>
<div class="exec-approval-meta">${e}</div>
</details>`}function po(e,t){return t?E`<span class="exec-approval-chip mono" data-approval-chip=${e}>${t}</span>`:D}function mo(e){switch(e.kind){case`standing-grant`:return e.expiresInDays===void 0?j(`execApproval.scope.standingGrant`,{automation:e.automation}):j(`execApproval.scope.standingGrantDays`,{automation:e.automation,count:String(e.expiresInDays)});case`message-send`:return j(`execApproval.scope.messageSend`,{count:String(e.recipientCount),target:e.target});case`payment`:return j(`execApproval.scope.payment`,{amount:e.amount,currency:e.currency,target:e.target});case`external-post`:return j(`execApproval.scope.externalPost`,{target:e.target})}return e}function ho(e,t){return E` ${uo(e)}
${e.scope?E`<div class="exec-approval-scope">${mo(e.scope)}</div>`:D}
<div class="exec-approval-meta">
${Y(j(`execApproval.labels.host`),e.host)}
${Y(j(`execApproval.labels.cwd`),e.cwd,{path:!0})}
</div>
${fo(E`
${Y(j(`execApproval.labels.resolved`),e.resolvedPath,{path:!0})}
${Y(j(`execApproval.labels.security`),e.security)}
${Y(j(`execApproval.labels.ask`),e.ask)}
${t===`modal`?Y(j(`execApproval.labels.session`),e.sessionKey):D}
`)}`}function go(e,t){return E` ${e.pluginDescription?E`<pre class="exec-approval-command mono">${e.pluginDescription}</pre>`:D}
${t===`modal`&&e.request.sessionKey?fo(E`${Y(j(`execApproval.labels.session`),e.request.sessionKey)}`):D}`}function _o(e){let n=e.replace(/\s+/g,` `).trim();return n.length>64?`${t(n,61)}โฆ`:n}function vo(e,t){return j(e===`allow-once`?`execApproval.allowOnce`:e===`allow-always`?t===`exec`?`execApproval.alwaysAllowHere`:`execApproval.alwaysAllow`:`execApproval.deny`)}function yo(e){return e===`allow-once`?`btn primary`:e===`deny`?`btn danger`:`btn`}function bo(e){return e===`allow-once`?`Ctrl/Cmd+Enter`:e===`allow-always`?`Ctrl/Cmd+Shift+Enter`:`Ctrl/Cmd+D`}function xo(e){return e.request.allowedDecisions?.length?e.request.allowedDecisions:e.kind===`exec`&&e.request.ask===`always`?[`allow-once`,`deny`]:To}function So(e){return e.kind===`exec`?j(`execApproval.execApprovalNeeded`):e.pluginTitle??j(`execApproval.pluginApprovalNeeded`)}function Co(e){let t=e.approval,n=Date.now(),r=t.expiresAtMs<=n,i=_o(t.request.command),a=t.request.sessionKey?.trim(),o=e.sessionTitle??(a?ge(a):So(t)),s=r||t.expiresAtMs-n<12e4,c=lo(t.expiresAtMs,n),l=j(`execApproval.reviewOnly`),u=!e.canGrant&&e.error===l;return E`<article
class="sidebar-approval-row sidebar-issues-panel__details--warning"
data-attention-kind="pendingApproval"
data-approval-id=${t.id}
>
<span class="sidebar-issues-panel__icon sidebar-approval-row__icon" aria-hidden="true"
>${k.shieldQuestion}</span
>
<div class="sidebar-approval-row__content">
<div class="sidebar-approval-row__header" data-issue-row-focus tabindex="-1">
<span class="sidebar-issues-panel__entity" title=${o}>${o}</span>
<openclaw-approval-countdown
class="sidebar-approval-row__timer ${s?`sidebar-approval-row__timer--urgent`:``}"
role="timer"
aria-label=${c}
title=${c}
.expiresAtMs=${t.expiresAtMs}
.compact=${!0}
></openclaw-approval-countdown>
</div>
<div class="sidebar-approval-row__command mono" title=${t.request.command}>
<span aria-hidden="true">$ </span>${i}
</div>
${t.request.scope?E`<div class="exec-approval-scope">
${mo(t.request.scope)}
</div>`:D}
<div
class="sidebar-approval-row__actions"
role="group"
aria-label=${j(`approvalPage.actionsLabel`)}
>
${xo(t).map(n=>{let a=vo(n,t.kind);return E`<button
type="button"
class="btn btn--xs ${n===`deny`?`btn--ghost`:``} sidebar-approval-row__action sidebar-approval-row__action--${n}"
aria-label=${j(`execApproval.decisionRequest`,{decision:a,command:i})}
?disabled=${e.busy||!e.canGrant||r}
@click=${r=>e.onDecision(r,t.id,n)}
>
${a}
</button>`})}
${e.openSessionHref&&e.onOpenSession?E`<a
class="sidebar-approval-row__open-session"
href=${e.openSessionHref}
aria-label=${j(`sessionsView.openSession`)}
title=${j(`sessionsView.openSession`)}
@click=${e.onOpenSession}
>
${k.arrowUpRight}
</a>`:D}
</div>
${e.canGrant?D:E`<div class="sidebar-approval-row__message" role=${u?`alert`:`note`}>
${l}
</div>`}
${e.error&&!u?E`<div
class="sidebar-approval-row__message sidebar-approval-row__message--error"
role="alert"
>
${e.error}
</div>`:D}
</div>
</article>`}function wo(e){let t=e.approval,n=xo(t),r=j(`execApproval.reviewOnly`),i=!e.canGrant&&e.error===r,a=t.pluginSeverity?.trim().toLowerCase(),o=t.kind===`exec`||a===`warning`||a===`warn`?`warning`:a===`danger`||a===`critical`||a===`error`?`danger`:`info`,s=t.kind===`plugin`?t.pluginId?.trim():null,c=e.variant===`modal`?t.request.agentId?.trim():null;return E` <div
class="exec-approval-card exec-approval-card--${e.variant} exec-approval-card--severity-${o}"
data-approval-id=${t.id}
>
<div class="exec-approval-header">
<div>
<div class="exec-approval-title">${So(t)}</div>
${s||c?E`<div class="exec-approval-chips">
${po(`plugin`,s)} ${po(`agent`,c)}
</div>`:D}
<openclaw-approval-countdown
class="exec-approval-sub exec-approval-countdown"
role="timer"
.expiresAtMs=${t.expiresAtMs}
></openclaw-approval-countdown>
</div>
${(e.queueCount??0)>1?E`<div class="exec-approval-queue">
${j(`execApproval.pending`,{count:String(e.queueCount)})}
</div>`:D}
</div>
${e.variant===`inline`&&t.sourceSessionKey?E`<div class="exec-approval-warning" role="note">
${j(`execApproval.requestedBySession`,{session:ge(t.sourceSessionKey,e.sourceSession)})}
</div>`:D}
${t.kind===`exec`?ho(t.request,e.variant):go(t,e.variant)}
${t.kind===`exec`&&!n.includes(`allow-always`)?E`<div class="exec-approval-warning">${j(`execApproval.allowAlwaysUnavailable`)}</div>`:D}
${e.canGrant?D:E`<div
class=${i?`exec-approval-error`:`exec-approval-warning`}
role=${i?`alert`:`note`}
>
${r}
</div>`}
${e.error&&!i?E`<div class="exec-approval-error" role="alert">${e.error}</div>`:D}
<div class="exec-approval-actions">
${n.map(n=>{let r=vo(n,e.approval.kind);return E`<button
class=${yo(n)}
type="button"
aria-label=${r}
?disabled=${e.busy||!e.canGrant}
title=${e.variant===`modal`&&e.canGrant?`${r} (${bo(n)})`:r}
@click=${()=>e.onDecision(t.id,n)}
>
<span>${r}</span>
</button>`})}
</div>
</div>`}var To,Eo;function Do(){return(Do=e((()=>{T(),_e(),A(),se(),x(),ae(),nn(),Le(),To=[`allow-once`,`allow-always`,`deny`],Eo=class extends he{constructor(...e){super(...e),this.expiresAtMs=0,this.compact=!1,this.polling=new rn(this,1e3,()=>{this.requestUpdate(),this.compact||this.closest(`openclaw-modal-dialog`)?.setAttribute(`description`,lo(this.expiresAtMs,Date.now()))},!1)}connectedCallback(){super.connectedCallback(),this.polling.start()}render(){let e=Date.now();return E`${this.compact?oe(this.expiresAtMs,e,!0):lo(this.expiresAtMs,e)}`}},_([O({type:Number})],Eo.prototype,`expiresAtMs`,void 0),_([O({type:Boolean})],Eo.prototype,`compact`,void 0),customElements.get(`openclaw-approval-countdown`)||customElements.define(`openclaw-approval-countdown`,Eo)})))()}function Oo(e){return typeof e==`string`?He(e):void 0}function ko(e,t={}){let n=s(e),r=s(n?.messages),i=s(r?.queue),a=Oo(s(i?.byChannel)?.webchat)??Oo(i?.mode),o=Oo(t.effectiveMode),c=Oo(t.sessionMode);if(c)return c;if(t.configNeedsApply)return o;if(!(t.sessionMetadataLoaded===!1&&!o)&&!(!n&&!o))return a??o??`steer`}function Ao(e,t){return Ne(e)??t}function jo(){return(jo=e((()=>{We(),Rt(),je()})))()}function Mo(e){let t=e.replace(/\r\n/g,`
`).replace(/\r/g,`
`).split(`
`);return t.at(-1)===``&&t.pop(),t}function No(e,t){for(let n of e)if((n.kind===`add`||n.kind===`ctx`)&&n.lineNo!==void 0&&t[n.lineNo-1]!==n.text)return!1;return!0}function Po(e,t,n){return Array.from({length:n},(n,r)=>({kind:`ctx`,lineNo:t+r,text:e[t+r-1]}))}function Fo(e,t,n,r,i){let a=e.findIndex(e=>e.kind===`skip`&&e.gap===t),o=t.newStart+t.count-1;if(a<0||t.newStart<1||t.count<1||o>n.length||!No(e,n))return null;let s=r===`all`||t.count<=Lo?t.count:Math.min(Io,t.count),c=t.count-s,l=Po(n,r===`up`?t.newStart+c:t.newStart,s),u=[];return r===`up`&&c>0&&u.push({kind:`skip`,text:i(c),gap:{...t,count:c}}),u.push(...l),r!==`up`&&c>0&&u.push({kind:`skip`,text:i(c),gap:{oldStart:t.oldStart+s,newStart:t.newStart+s,count:c}}),[...e.slice(0,a),...u,...e.slice(a+1)]}var Io,Lo;function Ro(){return(Ro=e((()=>{Io=20,Lo=25})))()}function zo(e,t,n=Bo){let r=[],i=!1,a=!1,o=0,s=0,c,l,u=e.replace(/\r\n/g,`
`).split(`
`);u.at(-1)===``&&u.pop();for(let e of u){let u=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(e);if(u){let e=Number.parseInt(u[1]??``,10),n=Number.parseInt(u[2]??``,10),i=c===void 0?e-1:e-c;i>0&&r.push({kind:`skip`,text:t(i),gap:{oldStart:c??e-i,newStart:l??n-i,count:i}}),o=e,s=n,a=!0;continue}if(!(!a||e.startsWith(`\\`))){if(r.length>=n){i=!0;break}e.startsWith(`+`)?(r.push({kind:`add`,lineNo:s,text:e.slice(1)}),s+=1):e.startsWith(`-`)?(r.push({kind:`del`,lineNo:o,text:e.slice(1)}),o+=1):(r.push({kind:`ctx`,lineNo:s,text:e.slice(1)}),o+=1,s+=1),c=o,l=s}}return{lines:r,truncated:i}}var Bo;function Vo(){return(Vo=e((()=>{Bo=600})))()}function Ho(e){let t=[];for(let n=0;n<e.length;){let r=e[n];if(!r)break;if(r.kind!==`add`&&r.kind!==`del`){t.push({kind:`span`,line:r}),n+=1;continue}let i=[],a=[];for(;n<e.length;){let t=e[n];if(t?.kind===`del`)i.push(t);else if(t?.kind===`add`)a.push(t);else break;n+=1}let o=Math.max(i.length,a.length);for(let e=0;e<o;e+=1)t.push({kind:`pair`,...i[e]?{left:i[e]}:{},...a[e]?{right:a[e]}:{}})}return t}function Uo(){return(Uo=e((()=>{})))()}function Wo(e){let t=fe();if(!t)throw Error(`Browser storage is unavailable`);let n=vt(t,st(e.settings?.gatewayUrl));return{entries:Object.entries(n.recovery).filter(([,t])=>(t.session.queue??[]).every(t=>Dt(e,t))).map(([e,t])=>Object.assign({},t,{id:e})),blocked:n.recoveryBlocked===!0}}function Go(e,t){let n=fe();if(!n||!ce(e)||e.selectedChatSessionIncognito||e.connected&&e.client&&!e.client.recoveryScopeReady)return null;let r=st(e.settings?.gatewayUrl),i=vt(n,r);St(i,e);let a=ht(w(e,t.sessionKey,t.agentId)),o=i.sessions[a]??null;return{scope:t,gatewayOwner:r.gatewayOwner,recoveryScope:Tt(e),session:JSON.stringify(o),revision:gt(n,r.key,a,o?.draftRevision).latestAttempt}}function Ko(e,t,n,r=0){let i=fe();if(!i)return`storage-failed`;try{let a=Go(e,n.scope);if(!a||JSON.stringify(a)!==JSON.stringify(n))return`conflict`;let o=st(e.settings?.gatewayUrl),s=vt(i,o),{id:c,...l}=t;if(JSON.stringify(s.recovery[c])!==JSON.stringify(l)||!(t.session.queue??[]).every(t=>Dt(e,t)))return`conflict`;let u=w(e,n.scope.sessionKey,n.scope.agentId);if(ht(u)!==ht(n.scope))return`conflict`;let d=ht(u),f=s.sessions[d];if(f?.draft||f?.goalMode||f?.queue?.length)return`conflict`;let p=t.session;s.sessions[d]={...p,awaitingDefaults:void 0,draftRevision:bt(Math.max(r,n.revision,p.draftRevision??0)),queue:p.queue?.map(e=>Object.assign({},e,u,{sendState:(e.sendAttempts??0)>0||e.sendState===`unconfirmed`?`unconfirmed`:`failed`,sendError:e.sendError??`Recovered message. Review this destination and retry only if it did not arrive.`}))},delete s.recovery[c],lt(i,o,s);let m=vt(i,o);return m.recovery[c]||JSON.stringify(m.sessions[d])!==JSON.stringify($e(s.sessions[d]))?`storage-failed`:(pt(),`restored`)}catch{return`storage-failed`}}function qo(){return(qo=e((()=>{v(),ot(),it(),ut(),xt()})))()}function X(e){if(!M(It,e))return null;let t=e.id.trim(),n=e.taskId?.trim()||t;return!t||!n?null:{...e,id:t,taskId:n}}function Jo(){return(Jo=e((()=>{Ue(),kt()})))()}function Yo(e){return j(us[e])}function Xo(e){switch(e.runtime){case`subagent`:return j(`tasksPage.runtime.subagent`);case`cron`:return j(`tasksPage.runtime.cron`);case`acp`:return j(`tasksPage.runtime.acp`);case`cli`:return j(`tasksPage.runtime.cli`);default:return j(`tasksPage.runtime.unknown`)}}function Zo(e){return e.title??e.kind??(e.runtime?Xo(e):j(`tasksPage.untitled`))}function Qo(e){return e.status===`queued`||e.status===`running`?e.progressSummary??null:e.status===`failed`||e.status===`timed_out`?e.error??e.terminalSummary??e.progressSummary??null:e.terminalSummary??e.error??e.progressSummary??null}function $o(e){return e.status===`queued`||e.status===`running`}function Z(e){if(typeof e==`number`)return e;if(typeof e==`string`){let t=Date.parse(e);return Number.isFinite(t)?t:0}return 0}function Q(e,t,n){let r=n.prompt??t.prompt;return r&&e.prompt!==r?{...e,prompt:r}:e}function es(e,t,n=`detail`){if(!t)return e;let r=Z(e.updatedAt??e.endedAt??e.createdAt),i=Z(t.updatedAt??t.endedAt??t.createdAt);if(i>r)return Q(t,e,t);if(i<r)return e;let a=$o(e);if(a!==$o(t))return Q(a?t:e,e,t);if(!a)return n===`event`?Q(t,e,t):e;if(e.status===`running`&&t.status===`queued`)return Q(e,e,t);if(e.status===`queued`&&t.status===`running`)return Q(t,e,t);let o=e.toolUseCount??0,s=t.toolUseCount??0;return Q(o>s?e:s>o||n!==`detail`?t:e,e,t)}function ts(e){return e.toSorted((e,t)=>{let n=Z(t.updatedAt)-Z(e.updatedAt);return n===0?e.id<t.id?-1:+(e.id>t.id):n})}function ns(e){let t=(e,t)=>e.id<t.id?-1:+(e.id>t.id);return{active:e.filter(e=>e.status===`queued`||e.status===`running`).toSorted((e,n)=>Z(e.createdAt)-Z(n.createdAt)||t(e,n)),recent:e.filter(e=>e.status!==`queued`&&e.status!==`running`).toSorted((e,n)=>Z(n.endedAt??n.updatedAt??n.createdAt)-Z(e.endedAt??e.updatedAt??e.createdAt)||t(e,n)).slice(0,50)}}function rs(e){return M(Pt,e)?{tasks:ts(e.tasks.map(X).filter(e=>e!==null)),...e.nextCursor===void 0?{}:{nextCursor:e.nextCursor}}:null}function is(e){return M(At,e)?X(e.task):null}function as(...e){let t=new Map;for(let n of e)for(let e of n){let n=t.get(e.id);t.set(e.id,n?es(n,e,`snapshot`):e)}return ts([...t.values()])}function os(e){if(!M(jt,e))return null;let t=g(e.reason),n=X(e.task);return{found:e.found,cancelled:e.cancelled,...t?{reason:t}:{},...n?{task:n}:{}}}function ss(e){return M(Wt,e)?{results:e.results.map(e=>{let t=X(e.task),{task:n,...r}=e;return{...r,...t?{task:t}:{}}})}:null}function cs(e){if(!i(e))return null;if(e.action===`restored`)return{action:`restored`};if(e.action===`deleted`){let t=g(e.taskId);return t?{action:`deleted`,taskId:t}:null}if(e.action===`upserted`){let t=X(e.task);return t?{action:`upserted`,task:t}:null}return null}function ls(e,t){let n=cs(t);if(!n||n.action===`restored`)return{tasks:[...e],refetch:!0};if(n.action===`deleted`)return{tasks:ts(e.filter(e=>e.id!==n.taskId)),refetch:!1};let r=e.find(e=>e.id===n.task.id);return{tasks:ts([r?es(r,n.task,`event`):n.task,...e.filter(e=>e.id!==n.task.id)]),refetch:!1}}var us;function ds(){return(ds=e((()=>{Ue(),kt(),A(),Jo(),us={queued:`tasksPage.status.queued`,running:`tasksPage.status.running`,completed:`tasksPage.status.completed`,failed:`tasksPage.status.failed`,cancelled:`tasksPage.status.cancelled`,timed_out:`tasksPage.status.timedOut`}})))()}function fs(e){let n=e.replace(/\s+/g,` `).trim();return t(n,hs)}function ps(e){let t=fs(e);return t?`Regarding "${t}": `:null}function ms(e){return e.trim().replace(/^\/(?:btw|side)(?::\s*|\s+|$)/i,``).trim()}var hs;function gs(){return(gs=e((()=>{hs=300})))()}function _s(e){return j(vs[e])}var vs;function ys(){return(ys=e((()=>{A(),vs={manual:`sessionsView.archiveReasonManual`,"active-session-cap":`sessionsView.archiveReasonActiveSessionCap`,"stale-dashboard":`sessionsView.archiveReasonStaleDashboard`,"restart-recovery":`sessionsView.archiveReasonRestartRecovery`}})))()}function bs(e,t,n){return t===`worktree`?{taskId:e}:{taskId:e,mode:t,...n?{cloudProfileId:n}:{}}}function xs(){return(xs=e((()=>{})))()}function Ss(e){return!i(e)||typeof e.step!=`string`||e.status!==`pending`&&e.status!==`in_progress`&&e.status!==`completed`?null:{status:e.status,step:e.step}}function Cs(e,t){if(!i(e))throw Error(`Progress card response was invalid`);let n=e.card;if(n===null)return null;if(!i(n))throw Error(`Progress card response was invalid`);let r=n.markdown,a=n.revision,s=o(n.updatedAt),c=n.steps;if(n.sessionKey!==t||r!==void 0&&typeof r!=`string`||c!==void 0&&!Array.isArray(c)||typeof a!=`number`||!Number.isInteger(a)||a<1||s===void 0||!Number.isInteger(s))throw Error(`Progress card response did not match the requested session`);let l=Array.isArray(c)?c.map(Ss):void 0;if(l?.some(e=>e===null))throw Error(`Progress card response contained invalid steps`);let u=l?.filter(e=>e!==null);if(r===void 0&&(!u||u.length===0))throw Error(`Progress card response contained no content`);return{sessionKey:t,revision:a,updatedAt:s,...r===void 0?{}:{markdown:r},...u&&u.length>0?{steps:u}:{}}}function ws(e){let t=new Map,n=new Map,r=new Map,a=new Map,o=new Map,s=new Set,c=e.snapshot.client,l=!1,u=null,d=null,f=()=>{for(let e of s)e()},p=()=>new Set(Array.from(t.values()).flatMap(e=>Array.from(e))),m=(e,t)=>{for(n.delete(e),n.set(e,t);n.size>ks;){let e=p(),t=[...n.keys()].find(t=>!e.has(t));if(t===void 0)break;n.delete(t)}},h=()=>e.snapshot.phase===`connected`&&e.snapshot.client!==null&&Je(e.snapshot,Es)===!0,g=async t=>{let s=t.trim();if(!s||!h())return null;let c=n.get(s);if(c)return m(s,c),c.card;let l=a.get(s);if(l)return l;let u=e.snapshot.client;if(!u)return null;r.delete(s)&&f();let d=o.get(s)??0,p=u,g=u.request(Es,{sessionKey:s}).then(t=>{let n=Cs(t,s);return(o.get(s)??0)!==d||e.snapshot.client!==p?null:(m(s,{card:n,revision:n?.revision??null}),f(),n)}).catch(t=>{if((o.get(s)??0)===d&&e.snapshot.client===p){let e=t instanceof Ie&&i(t.details)&&t.details.code===`SESSION_PARTICIPATION_REQUIRED`;r.set(s,e?`access-denied`:`unavailable`),f()}throw t}).finally(()=>{a.get(s)===g&&a.delete(s)});return a.set(s,g),g},_=()=>{for(let e of p())g(e).catch(()=>void 0)},v=e=>{let t=e.client!==c,i=h(),s=i&&!l;if(l=i,!(!t&&!s)){if(t){c=e.client;for(let e of a.keys())o.set(e,(o.get(e)??0)+1);n.clear(),r.clear(),a.clear(),f()}_()}},y=e=>{if(e.event!==Os||!i(e.payload))return;let t=e.payload.sessionKey,s=e.payload.revision;if(!(typeof t!=`string`||s!==null&&(typeof s!=`number`||!Number.isInteger(s)))&&n.get(t)?.revision!==s){if(s===null){o.set(t,(o.get(t)??0)+1),r.delete(t),m(t,{card:null,revision:null}),f();return}if(o.set(t,(o.get(t)??0)+1),n.delete(t),r.delete(t),p().has(t)){let e=a.get(t);e?e.finally(()=>void g(t).catch(()=>void 0)).catch(()=>void 0):g(t).catch(()=>void 0)}}},b=()=>{u||d||(l=h(),u=e.subscribe(v),d=e.subscribeEvents(y))},x=()=>{t.size>0||s.size>0||(u?.(),d?.(),u=null,d=null,a.clear())},S=(e,n)=>{let r=new Set(n.map(e=>e.trim()).filter(Boolean));if(r.size===0){t.delete(e),x();return}t.set(e,r),b();for(let e of r)g(e).catch(()=>void 0)};return{watch:S,unwatch:e=>S(e,[]),load:g,dismiss:async t=>{let r=e.snapshot.client;if(!r)return!1;let i=Cs(await r.request(Ds,{sessionKey:t.sessionKey,expectedRevision:t.revision}),t.sessionKey),a=i===null;return a&&n.get(t.sessionKey)?.revision===t.revision?(m(t.sessionKey,{card:null,revision:null}),f()):i&&(m(t.sessionKey,{card:i,revision:i.revision}),f()),a},get:e=>n.get(e)?.card,getError:e=>r.get(e),subscribe:e=>(s.add(e),b(),()=>{s.delete(e),x()})}}function Ts(e){let t=As.get(e);if(t)return t;let n=ws(e);return As.set(e,n),n}var Es,Ds,Os,ks,As;function js(){return(js=e((()=>{f(),Me(),Ye(),Es=`progressCard.get`,Ds=`progressCard.put`,Os=`progressCard.changed`,ks=100,As=new WeakMap})))()}var Ms;function Ns(){return(Ns=e((()=>{js(),Ms=class{constructor(e,t){this.host=e,this.options=t,this.store=null,this.stopUpdates=null,this.sessionKey=``,this.dismiss=e=>this.store?.dismiss(e)??Promise.resolve(!1),e.addController(this)}get card(){return this.store?.get(this.sessionKey)??null}hostUpdate(){this.synchronize()}hostDisconnected(){this.release()}synchronize(){let e=this.options.gateway()??null,t=this.options.sessionKey()?.trim()??``,n=e?Ts(e):null;n!==this.store&&(this.release(),this.store=n,this.stopUpdates=n?.subscribe(()=>this.host.requestUpdate())??null),t!==this.sessionKey&&(this.sessionKey=t,this.store?.watch(this,t?[t]:[]))}release(){this.store?.unwatch(this),this.stopUpdates?.(),this.stopUpdates=null,this.store=null,this.sessionKey=``}}})))()}var Ps;function Fs(){return(Fs=e((()=>{Ps=class{constructor(){this.activeSessionKey=``,this.activationObserved=!1,this.requested=!1}beginActivation(e){this.activeSessionKey=e.trim(),this.activationObserved=!1,this.activationMarkedUnreadAt=void 0,this.requested=!1}shouldPatch(e,t,n){let r=e.trim(),i=n??void 0;return r!==this.activeSessionKey&&this.beginActivation(r),r?(this.activationObserved||(this.activationObserved=!0,this.activationMarkedUnreadAt=i),t===!1?i===void 0&&(this.activationMarkedUnreadAt=void 0,this.requested=!1,!1):i!==void 0&&i!==this.activationMarkedUnreadAt||t!==!0||this.requested?!1:(this.requested=!0,!0)):!1}patchFailed(e){e.trim()===this.activeSessionKey&&(this.requested=!1)}}})))()}function Is(e){let t=e.busy||e.disabled===!0;return E`
<form class="mcp-server-form" @submit=${t=>{t.preventDefault();let n=t.currentTarget,r=new FormData(n),i=r.get(`mcp-name`),a=r.get(`mcp-transport`),o=r.get(`mcp-target`);e.onSubmit({name:typeof i==`string`?i.trim():``,transport:a===`sse`||a===`stdio`?a:`streamable-http`,target:typeof o==`string`?o.trim():``})}}>
<label>
<span>${j(`mcpServers.nameLabel`)}</span>
<input
name="mcp-name"
class="settings-input"
type="text"
required
placeholder="context7"
autocomplete="off"
?autofocus=${e.autofocus??!1}
title=${e.blockedReason??``}
?disabled=${t}
/>
</label>
<label>
<span>${j(`mcpServers.transportLabel`)}</span>
<select
name="mcp-transport"
class="settings-select"
title=${e.blockedReason??``}
?disabled=${t}
>
<option value="streamable-http">${j(`mcpServers.transportStreamableHttp`)}</option>
<option value="sse">${j(`mcpServers.transportSse`)}</option>
<option value="stdio">${j(`mcpServers.transportStdio`)}</option>
</select>
</label>
<label class="mcp-server-form__target">
<span>${j(`mcpServers.targetLabel`)}</span>
<input
name="mcp-target"
class="settings-input"
type="text"
required
placeholder="https://mcp.example.com/mcp ยท npx some-mcp-server"
autocomplete="off"
title=${e.blockedReason??``}
?disabled=${t}
/>
</label>
<div class="mcp-server-form__actions">
<button
type="submit"
class="btn btn--sm"
title=${e.blockedReason??``}
?disabled=${t}
>
${e.busy?j(`mcpServers.adding`):j(`mcpServers.add`)}
</button>
<button type="button" class="btn btn--sm" ?disabled=${e.busy} @click=${e.onCancel}>
${j(`common.cancel`)}
</button>
</div>
</form>
`}function Ls(){return(Ls=e((()=>{T(),A()})))()}function Rs(e,t={}){let n=t.wide?`settings-page settings-page--wide`:`settings-page`;return E`<div class=${n}>${e}</div>`}function zs(e,t){return E`<a href=${e} target=${Et} rel=${rt()}
>${t}</a
>`}function Bs(e){let t=e.icon===`info`?k.info:k.circleQuestionMark;return E`
<openclaw-tooltip .content=${e.tooltip}>
<button
id=${e.id}
type="button"
class="settings-section__help-button"
aria-label=${e.label}
aria-controls=${e.popoverId}
aria-haspopup="dialog"
>
<span aria-hidden="true">${t}</span>
</button>
</openclaw-tooltip>
`}function Vs(e){return E`<a
class="learn-more-link"
href=${e}
target=${Et}
rel=${rt()}
>${j(`common.learnMore`)}</a
>`}function Hs(e){return E`
<section class="content-header content-header--settings">
<div>
<div class="page-title">${e.title}</div>
${e.subtitle?E`<div class="page-subtitle">${e.subtitle}</div>`:D}
</div>
${e.actions&&e.actions!==D?E`<div class="page-header-actions">${e.actions}</div>`:D}
</section>
`}function Us(e,t){let n=e.description?E`<p class="settings-section__desc">${e.description}</p>`:D,r=e.title||e.description?E`
<div class="settings-section__copy">
${e.title?E`
<h2 class="settings-section__heading">
${e.title}${e.count===void 0?D:E` <span class="settings-count">${e.count}</span>`}
</h2>
`:D}
${n}
</div>
`:D,i=r||e.actions?E`
<div class="settings-section__header">
${r}
${e.actions?E`<div class="settings-section__actions">${e.actions}</div>`:D}
</div>
`:D,a=e.danger?`settings-group settings-group--danger`:`settings-group`;return E`
<section class="settings-section">
${i}
<div class=${a}>${t}</div>
</section>
`}function Ws(e,t={}){let n=t.danger?`settings-group settings-group--danger`:`settings-group`;return E`<div class=${n}>${e}</div>`}function Gs(e){let t=e.stacked?`settings-row settings-row--stacked`:e.stackedOnNarrow?`settings-row settings-row--stacked-on-narrow`:`settings-row`;return E`
<div class=${t}>
<div class="settings-row__text">
<span class="settings-row__title">${e.title}</span>
${e.description?E`<span class="settings-row__desc">${e.description}</span>`:D}
</div>
${e.control!==void 0&&e.control!==D?E`<div class="settings-row__control">${e.control}</div>`:D}
</div>
`}function Ks(e){return E`
<button type="button" class="settings-row settings-row--nav" @click=${e.onClick}>
<div class="settings-row__text">
<span class="settings-row__title">${e.title}</span>
${e.description?E`<span class="settings-row__desc">${e.description}</span>`:D}
</div>
<div class="settings-row__control">
${e.control??D}
<span class="settings-row__chevron">${k.chevronRight}</span>
</div>
</button>
`}function qs(e){return E`
<wa-switch
class="settings-toggle"
size="s"
.checked=${ke(e.checked)}
?disabled=${e.disabled??!1}
@change=${t=>{let n=t.currentTarget;e.onChange(n.checked)===!1&&(n.checked=e.checked)}}
>
<span class="settings-control__sr-label">${e.ariaLabel}</span>
</wa-switch>
`}function Js(e){let t=t=>{if(!t.composedPath().some(e=>e instanceof HTMLInputElement)||t instanceof KeyboardEvent&&t.key!==`ArrowLeft`&&t.key!==`ArrowRight`)return;let n=t.currentTarget.checked;n!==e.checked&&e.onAct?.(n)};return E`
<div
class="settings-row settings-row--toggle"
@click=${t=>{let n=t.target;if(e.disabled||n instanceof Element&&n.closest(`wa-switch`)!==null)return;let r=!e.checked;e.onAct?.(r),e.onChange(r)}}
>
<div class="settings-row__text">
<span class="settings-row__title">${e.title}</span>
${e.description?E`<span class="settings-row__desc">${e.description}</span>`:D}
</div>
<div class="settings-row__control">
<wa-switch
class="settings-toggle"
size="s"
.checked=${ke(e.checked)}
?disabled=${e.disabled??!1}
@click=${t}
@keydown=${t}
@change=${t=>{let n=t.currentTarget;e.onChange(n.checked)===!1&&(n.checked=e.checked)}}
>
<span class="settings-control__sr-label">${e.ariaLabel??e.title}</span>
</wa-switch>
</div>
</div>
`}function Ys(e,t){return E`${j(t?`configForm.defaultValue`:`configForm.usingDefault`,{value:e})}`}function Xs(e){return E`
<wa-radio-group
class="settings-segmented ${e.className??``}"
size="s"
orientation="horizontal"
.value=${ke(e.value)}
?disabled=${e.disabled??!1}
@change=${t=>{let n=t.currentTarget.value;if(n!==void 0){let r=t.currentTarget,i=[...r.querySelectorAll(`wa-radio`)].find(e=>e.getAttribute(`value`)===n);e.onChange(n,i??r)}}}
>
${e.ariaLabel?E`<span slot="label" class="settings-control__sr-label">${e.ariaLabel}</span>`:D}
${e.options.map(t=>E`
<wa-radio
class="settings-segmented__btn ${t.value===e.value?`settings-segmented__btn--active`:``}"
appearance="button"
value=${t.value}
.checked=${ke(t.value===e.value)}
title=${t.title??D}
data-test-id=${t.testId??D}
@click=${n=>{t.value===e.value&&n.currentTarget instanceof HTMLElement&&e.onReselect?.(t.value,n.currentTarget)}}
>
${t.label}
</wa-radio>
`)}
</wa-radio-group>
`}function Zs(e){let t=e.kind===`muted`?``:` settings-status--${e.kind}`;return E`
<span class="settings-status${t}">
${e.dot===!1?D:E`<span class="settings-status__dot"></span>`}
${e.label}
</span>
`}function Qs(e,t={}){let n=t.mono?`settings-row__value settings-row__value--mono`:`settings-row__value`;return E`<span class=${n}>${e}</span>`}function $s(e){return E`<div class="settings-empty">${e}</div>`}function ec(e={}){let t=Math.max(1,e.rows??3);return E`
<div
class="settings-loading-skeleton"
role="status"
aria-busy="true"
aria-label=${e.label??j(`common.loading`)}
>
<div class="settings-loading-skeleton__rows" aria-hidden="true">
${Array.from({length:t},(e,t)=>E`
<div class="settings-row settings-loading-skeleton__row">
<div class="settings-row__text">
<span class="skeleton settings-loading-skeleton__title"></span>
<span class="skeleton settings-loading-skeleton__description"></span>
</div>
<div class="settings-row__control">
<span
class="skeleton settings-loading-skeleton__control ${t%2==0?`settings-loading-skeleton__control--wide`:``}"
></span>
</div>
</div>
`)}
</div>
</div>
`}function tc(e){return E`
<span class="settings-secret">
<input
class="settings-input"
type=${e.visible?`text`:`password`}
aria-label=${e.ariaLabel}
autocomplete="off"
spellcheck="false"
.value=${e.value}
placeholder=${e.placeholder??``}
?disabled=${e.disabled??!1}
@input=${t=>e.onInput(t.target.value)}
/>
<openclaw-tooltip .content=${e.visible?e.hideLabel:e.showLabel}>
<button
type="button"
class="settings-secret__toggle"
aria-label=${e.toggleLabel}
aria-pressed=${e.visible}
?disabled=${e.disabled??!1}
@click=${e.onToggle}
>
${e.visible?k.eye:k.eyeOff}
</button>
</openclaw-tooltip>
</span>
`}function nc(){return(nc=e((()=>{Nt(),Mt(),Ge(),T(),Te(),A(),Qe(),Le(),Re()})))()}async function rc(e,t){switch(t.kind){case`device-pairing`:{let t=e.gateway.snapshot;return t.phase!==`connected`||!Fe(t).canAdmin?!1:e.overlays.openDevicePairSetup()}default:return t.kind,!1}}function ic(){return(ic=e((()=>{Pe()})))()}function ac(){return typeof window<`u`&&window.event!==void 0}function oc(e){return e.connected&&e.directComposerSend&&!e.isCommand&&(e.message.trim().length>0||e.hasAttachments)}function sc(e){try{e.setItem(lc,`1`)}catch{}}function cc(e){let t;try{if(t=localStorage,t.getItem(lc)!==null)return}catch{return}let n=e.nativeNotifications;if(n){if(n.snapshot.permission!==`notDetermined`)return;sc(t);try{n.requestPermission()}catch{}return}let r=e.webPush.snapshot;if(!(!r.supported||r.permission!=="default"||r.subscription===`registered`||r.subscription===`vapid-mismatch`||r.loading)){sc(t);try{Notification.requestPermission().then(t=>{t===`granted`&&e.webPush.run({kind:`enable`})}).catch(()=>{})}catch{}}}var lc;function uc(){return(uc=e((()=>{lc=`openclaw.control.notificationsAutoPrompt.v1`})))()}function dc(e){return typeof e==`string`&&e.length>0}function fc(e){for(let t of[`sessionId`,`agentId`,`shell`,`cwd`])if(!dc(e[t]))return t;return null}function pc(e){return e instanceof Error&&/^gateway request timed out after \d+ms: terminal\.open$/u.test(e.message)}function mc(e){return e instanceof Error&&(e.message===`terminal open timed out`||pc(e))}var hc,gc,_c,vc,yc,bc,xc,Sc;function Cc(){return(Cc=e((()=>{Gt(),hc=2e4,gc=5e3,_c=2,vc=5e3,yc=35e3,bc=class extends Error{constructor(e){super(`terminal open timed out`,{cause:e}),this.name=`TerminalOpenTimeoutError`}},xc=class extends Error{constructor(e){super(`terminal session response is missing ${e}`),this.field=e,this.name=`TerminalOpenUnusableSessionError`}},Sc=class e{static{this.MAX_PENDING_EVENTS=512}constructor(e){this.streams=new Map,this.pending=new Map,this.unsubscribe=null,this.disposed=!1,this.pendingOpenCount=0,this.livenessTimer=null,this.livenessProbeInFlight=!1,this.livenessProbeFailures=0,this.lastLivenessFailureActivityVersion=null,this.lastTerminalActivityAtMs=Date.now(),this.inboundActivityVersion=0,this.client=e}ensureSubscribed(){this.unsubscribe||=this.client.addEventListener(e=>{if(e.event===`terminal.data`){this.noteTerminalActivity();let t=e.payload;if(t?.sessionId&&typeof t.seq==`number`&&typeof t.data==`string`){let e={kind:`data`,seq:t.seq,data:t.data},n=this.streams.get(t.sessionId);n?this.deliverData(t.sessionId,n,e):this.bufferEarly(t.sessionId,e)}return}if(e.event===`terminal.exit`){this.noteTerminalActivity();let t=e.payload;if(t?.sessionId){let e={exitCode:t.exitCode??null,signal:t.signal??null,reason:t.reason,error:t.error},n=this.streams.get(t.sessionId);n?n.recovering?this.bufferEarly(t.sessionId,{kind:`exit`,info:e}):this.deliverExit(t.sessionId,n,e):this.bufferEarly(t.sessionId,{kind:`exit`,info:e})}}})}async open(e,t){let n;try{n=await this.requestWhileHoldingStream(()=>this.client.request(`terminal.open`,e,{timeoutMs:yc}))}catch(e){throw mc(e)?(pc(e)&&this.forceReconnect(`terminal open watchdog timeout`),new bc(e)):e}let r=fc(n);if(r)throw dc(n.sessionId)&&this.close(n.sessionId),new xc(r);if(this.disposed)return n;let i=this.setStream(n.sessionId,t,{seqMode:`unknown`,expectedSeq:0,recovering:!1});return this.flushPending(n.sessionId,i),this.scheduleLivenessCheck(),n}async attach(e,t){let n=await this.requestWhileHoldingStream(()=>this.client.request(`terminal.attach`,{sessionId:e})),r=fc(n)??(typeof n.buffer==`string`?null:`buffer`);if(r)throw new xc(r);let i=typeof n.seq==`number`&&Number.isSafeInteger(n.seq)?n.seq:null;if(this.disposed)return n;let a=this.setStream(e,t,{seqMode:i===null?`counter`:`offset`,expectedSeq:i,recovering:!0}),o=a.abort.signal;try{await t.onReplay({data:n.buffer,newlyObservedFrom:n.buffer.length,mode:`initial`,signal:o})}catch(t){throw o.aborted||(this.removeStream(e),this.pending.delete(e),this.maybeUnsubscribe()),t}return o.aborted?n:(a.recovering=!1,this.flushPending(e,a,i??void 0,!0),this.scheduleLivenessCheck(),n)}async list(){return(await this.client.request(`terminal.list`))?.sessions??[]}async requestWhileHoldingStream(e){this.ensureSubscribed(),this.pendingOpenCount+=1;try{let t=await e();return--this.pendingOpenCount,t}catch(e){throw--this.pendingOpenCount,this.maybeUnsubscribe(),e}}deliverData(e,t,n){if(t.recovering){this.bufferEarly(e,n);return}if(!Number.isSafeInteger(n.seq)){this.recoverGap(e,t,n);return}if(t.seqMode===`counter`){t.expectedSeq=n.seq+1,t.sink.onData(n.data);return}if(n.seq-n.data.length===t.expectedSeq){n.data.length>0&&(t.seqMode=`offset`),t.expectedSeq=n.seq,t.sink.onData(n.data);return}if(t.seqMode===`unknown`&&t.expectedSeq===0&&n.seq===0){t.seqMode=`counter`,t.expectedSeq=1,t.sink.onData(n.data);return}this.recoverGap(e,t,n)}recoverGap(e,t,n){if(t.recovering)return;t.recovering=!0;let r=t.abort.signal;this.client.request(`terminal.attach`,{sessionId:e}).then(async i=>{if(r.aborted)return;let a=typeof i.seq==`number`&&Number.isSafeInteger(i.seq)?i.seq:null;if(a===null){t.seqMode=`counter`,t.expectedSeq=null,t.recovering=!1,this.deliverData(e,t,n),this.flushPending(e,t,void 0,!0);return}let o=t.expectedSeq;t.seqMode=`offset`,t.expectedSeq=a;let s=a-i.buffer.length,c=typeof o==`number`?Math.max(0,Math.min(i.buffer.length,o-s)):0;await t.sink.onReplay({data:i.buffer,newlyObservedFrom:c,mode:`recovery`,signal:r}),!r.aborted&&(t.recovering=!1,this.flushPending(e,t,a,!0))}).catch(()=>{if(r.aborted)return;let i=this.pending.get(e)?.drain();if(i?.some(e=>e.kind===`exit`)){this.pending.delete(e),t.recovering=!1,t.sink.onData(n.data);for(let n of i)if(n.kind===`data`)t.sink.onData(n.data);else{this.deliverExit(e,t,n.info);break}return}t.recovering=!1,this.pending.delete(e),this.forceReconnect(`terminal replay failed`)})}flushPending(e,t,n,r=!1){let i=this.pending.get(e);if(!i)return;this.pending.delete(e);let a=i.drain();for(let i of a){if(this.streams.get(e)!==t)break;if(!(r&&i.kind===`exit`&&i.info.reason===`detached`)){if(i.kind===`data`){if(n!==void 0&&i.seq<=n)continue;this.deliverData(e,t,i)}else t.recovering?this.bufferEarly(e,i):this.deliverExit(e,t,i.info)}}}deliverExit(e,t,n){this.removeStream(e),t.sink.onExit(n),this.pending.delete(e),this.maybeUnsubscribe()}setStream(e,t,n){this.removeStream(e);let r={abort:new AbortController,sink:t,...n};return this.streams.set(e,r),this.lastTerminalActivityAtMs=Date.now(),r}removeStream(e){this.streams.get(e)?.abort.abort(),this.streams.delete(e)}bufferEarly(t,n){let r=this.pending.get(t)??new zt(e.MAX_PENDING_EVENTS,{mode:`drop-oldest`});this.pending.set(t,r),r.push(n)}noteTerminalActivity(){this.resetLivenessProbeFailures(),this.lastTerminalActivityAtMs=Date.now(),this.inboundActivityVersion+=1}forceReconnect(e){this.resetLivenessProbeFailures(),this.client.forceReconnect(e)}resetLivenessProbeFailures(){this.livenessProbeFailures=0,this.lastLivenessFailureActivityVersion=null}scheduleLivenessCheck(e=hc){this.livenessTimer||this.livenessProbeInFlight||this.streams.size===0||(this.livenessTimer=setTimeout(()=>{this.livenessTimer=null,this.checkLiveness()},Math.max(0,e)))}checkLiveness(){if(this.streams.size===0)return;let e=hc-(Date.now()-this.lastTerminalActivityAtMs);if(e>0){this.scheduleLivenessCheck(e);return}let t=this.client.inboundActivitySeq??this.inboundActivityVersion;if(this.lastLivenessFailureActivityVersion!==null&&t!==this.lastLivenessFailureActivityVersion){this.resetLivenessProbeFailures(),this.lastTerminalActivityAtMs=Date.now(),this.scheduleLivenessCheck();return}let n=hc;this.livenessProbeInFlight=!0,this.client.request(`terminal.list`,void 0,{timeoutMs:gc}).then(()=>{this.resetLivenessProbeFailures(),this.lastTerminalActivityAtMs=Date.now()}).catch(()=>{if(this.streams.size===0){this.resetLivenessProbeFailures();return}let e=this.client.inboundActivitySeq??this.inboundActivityVersion;if(e!==t){this.resetLivenessProbeFailures(),this.lastTerminalActivityAtMs=Date.now();return}if(this.livenessProbeFailures+=1,this.lastLivenessFailureActivityVersion=e,this.livenessProbeFailures>=_c){this.forceReconnect(`terminal liveness timeout`);return}n=vc}).finally(()=>{this.livenessProbeInFlight=!1,this.scheduleLivenessCheck(n)})}async input(e,t){await this.requestAction(`terminal.input`,e,{sessionId:e,data:t})}async resize(e,t,n){await this.requestAction(`terminal.resize`,e,{sessionId:e,cols:t,rows:n})}async requestAction(e,t,n){let r=this.streams.get(t);(await this.client.request(e,n).catch(()=>null))?.ok!==!1||!r||this.streams.get(t)!==r||this.deliverExit(t,r,{exitCode:null,signal:null,reason:`disconnected`,error:`Terminal session is no longer available. Open a new terminal session.`})}async close(e){this.removeStream(e),this.pending.delete(e),await this.client.request(`terminal.close`,{sessionId:e}).catch(()=>void 0),this.pending.delete(e),this.maybeUnsubscribe()}get size(){return this.streams.size}dispose(){this.disposed=!0;for(let e of this.streams.values())e.abort.abort();this.streams.clear(),this.pending.clear(),this.stopLiveness(),this.dropSubscriptions()}maybeUnsubscribe(){this.streams.size===0&&this.pendingOpenCount===0&&(this.pending.clear(),this.stopLiveness(),this.dropSubscriptions())}stopLiveness(){this.resetLivenessProbeFailures(),this.livenessTimer&&=(clearTimeout(this.livenessTimer),null)}dropSubscriptions(){this.unsubscribe?.(),this.unsubscribe=null}}})))()}function wc(e){return typeof e==`string`&&e.length>0}function Tc(e){return i(e)&&wc(e.catalogId)&&wc(e.hostId)&&wc(e.threadId)?{catalogId:e.catalogId,hostId:e.hostId,threadId:e.threadId}:null}function Ec(e){if(!i(e))return null;if(e.kind===`attach`)return wc(e.sessionId)&&typeof e.agentOwned==`boolean`?{kind:`attach`,sessionId:e.sessionId,agentOwned:e.agentOwned}:null;let t=e.agentId;if(t!==null&&!wc(t))return null;if(e.kind===`restore`||e.kind===`open`)return{kind:e.kind,agentId:t};if(e.kind===`catalog`){let n=Tc(e.catalog);return n?{kind:`catalog`,agentId:t,catalog:n}:null}return null}function Dc(){try{let e=globalThis.sessionStorage?.getItem(Mc);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`&&e.length>0):[]}catch{return[]}}function Oc(e){try{globalThis.sessionStorage?.setItem(Mc,JSON.stringify(e))}catch{}}function kc(e){Oc(e.filter(e=>e.status===`live`&&e.gatewaySessionId).map(e=>e.gatewaySessionId))}function Ac(){try{let e=globalThis.sessionStorage?.getItem(Nc);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.flatMap(e=>{let t=Ec(e);return t?[t]:[]}):[]}catch{return[]}}function jc(e){try{if(e.length===0){globalThis.sessionStorage?.removeItem(Nc);return}globalThis.sessionStorage?.setItem(Nc,JSON.stringify(e))}catch{}}var Mc,Nc;function Pc(){return(Pc=e((()=>{Mc=`openclaw.terminal.sessions.v1`,Nc=`openclaw.terminal.actions.v1`})))()}function Fc(e,t){let n=e instanceof CustomEvent&&typeof e.detail==`object`&&e.detail!==null?e.detail:null;if(!n||n.open===!1)return null;let r=n.agentId?.trim()||t;return n.terminalSessionId?{kind:`attach`,sessionId:n.terminalSessionId,agentOwned:n.agentOwned??!0}:n.catalog?{kind:`catalog`,agentId:r,catalog:n.catalog}:n.open===!0?{kind:`restore`,agentId:r}:null}var Ic,Lc,Rc;function zc(){return(zc=e((()=>{Cc(),Pc(),Ic=class{constructor(){this.action=null}remember(e,t){this.action=e?{kind:`catalog`,agentId:t,catalog:e}:{kind:`open`,agentId:t}}clearUnlessRetryable(e){e instanceof bc||e instanceof xc||this.clear()}clear(){this.action=null}get available(){return this.action!==null}run(){let e=this.action;this.clear(),e&&Rc.queue(e)}},Lc=class{constructor(){this.refreshPending=!1,this.refreshTimedOut=!1,this.refreshTimer=null,this.drainScheduled=!1,this.hosts=[],this.fenceHost=null,this.fenceGeneration=0,this.timeoutHost=null,this.actions=[],this.rehydrate()}rehydrate(){let e=Ac(),t=e.some(e=>e.kind!==`restore`)?e.filter(e=>e.kind!==`restore`):e;this.actions.splice(0,this.actions.length,...t),t.length!==e.length&&jc(this.actions)}get host(){return this.hosts.at(-1)??null}bindHost(e){this.hosts.length===0&&this.rehydrate(),this.hosts=[...this.hosts.filter(t=>t!==e),e],this.drain()}releaseHost(e){this.hosts=this.hosts.filter(t=>t!==e),this.fenceHost===e&&this.resetLifecycle(e),this.hosts.length===0&&(this.clearRefreshTimer(),this.refreshTimedOut=!1,this.timeoutHost=null,this.rehydrate())}get hasActions(){return this.actions.length>0}get fenced(){return this.refreshPending}get waitingForRefresh(){return this.refreshPending&&!this.refreshTimedOut&&this.actions.length>0}beginRefreshFence(e,t){this.refreshPending=!0,this.fenceHost=e,this.fenceGeneration=t,this.clearRefreshFailure(),this.clearRefreshTimer(),this.armRefreshTimer()}releaseRefreshFence(e){this.fenceHost===e&&(this.clearRefreshTimer(),this.refreshPending=!1,this.fenceHost=null,this.clearRefreshFailure(),this.drain())}resetLifecycle(e){(this.fenceHost===null||this.fenceHost===e)&&(this.clearRefreshTimer(),this.refreshPending=!1,this.fenceHost=null,this.clearRefreshFailure())}async queue(e,t={}){let n=!1;if(e.kind!==`restore`)for(let e=this.actions.length-1;e>=0;--e)this.actions[e]?.kind===`restore`&&(this.actions.splice(e,1),n=!0);let r=this.actions.some(e=>e.kind!==`restore`),i=JSON.stringify(e);if(!(e.kind===`restore`&&r)&&!this.actions.some(e=>JSON.stringify(e)===i)&&(this.actions.push(e),n=!0),n&&jc(this.actions),t.deferUntilHostChange)return;this.armRefreshTimer();let a=this.host;this.refreshPending?a?.requestUpdate():a&&!a.hasTabs()&&a.setBooting(!0),await this.drain()}async drain(){let e=this.host;if(!(this.drainScheduled||this.actions.length===0||!e||!this.canRun(e))){this.drainScheduled=!0;try{await e.bootQueue.enqueue(async t=>{let n=this.actions[0];if(!n||!t()||!this.canRun(e)||!await this.execute(e,n)||!t())return;let r=this.actions.indexOf(n);r!==-1&&(this.actions.splice(r,1),jc(this.actions))})}finally{this.drainScheduled=!1;let e=this.host;this.actions.length>0&&e&&this.canRun(e)?this.drain():this.actions.length===0&&e&&!e.hasTabs()&&e.setBooting(!1)}}}cancel(e){this.host===e&&(this.actions.splice(0),jc(this.actions),e.setBooting(!1),this.clearRefreshFailure())}canRun(e){return!this.refreshPending&&e.canRun()}async execute(e,t){return t.kind===`attach`?e.attach(t.sessionId,t.agentOwned):t.kind===`open`?e.open(void 0,t.agentId):(await e.reattach(),this.canRun(e)?t.kind===`catalog`?e.open(t.catalog,t.agentId):e.ensureInitial(t.agentId):!1)}clearRefreshTimer(){this.refreshTimer!==null&&(globalThis.clearTimeout(this.refreshTimer),this.refreshTimer=null)}clearRefreshFailure(){this.refreshTimedOut&&=(this.timeoutHost?.clearTimeout(),this.timeoutHost=null,!1)}armRefreshTimer(){let e=this.fenceHost;if(!this.refreshPending||!e||this.refreshTimer!==null||this.actions.length===0)return;let t=this.fenceGeneration;this.refreshTimer=globalThis.setTimeout(()=>{this.refreshTimer=null,!(this.fenceHost!==e||t!==e.currentGeneration()||!this.refreshPending||this.actions.length===0)&&(this.refreshTimedOut=!0,this.timeoutHost=e,e.showTimeout(),e.setBooting(!1))},e.timeoutMs())}},Rc=new Lc})))()}function Bc(e){try{return e.getItem(Uc)===null&&(e.setItem(Uc,`1`),!0)}catch{return!1}}function Vc(){return Array.from({length:Kc},(e,t)=>({color:Wc[t%Wc.length]??Wc[0],angle:-Math.PI*(.2+Math.random()*.6),speed:260+Math.random()*360,size:4+Math.random()*5,spin:(Math.random()-.5)*12,rotation:Math.random()*Math.PI}))}function Hc(){if(typeof document>`u`||typeof window>`u`||!document.body||typeof window.requestAnimationFrame!=`function`||window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches)return;let e;try{e=window.localStorage}catch{return}if(!Bc(e))return;let t=document.createElement(`canvas`);t.setAttribute(`aria-hidden`,`true`),Object.assign(t.style,{position:`fixed`,inset:`0`,width:`100vw`,height:`100vh`,pointerEvents:`none`,zIndex:`2147483647`});let n=t.getContext(`2d`);if(!n)return;document.body.append(t);let r=Math.min(2,Math.max(1,window.devicePixelRatio||1)),i=window.innerWidth,a=window.innerHeight;t.width=Math.round(i*r),t.height=Math.round(a*r),n.setTransform(r,0,0,r,0,0);let o=Vc(),s={x:i/2,y:a*.62},c=performance.now(),l=e=>{let r=e-c,u=r/1e3,d=r/Gc;n.clearRect(0,0,i,a),n.globalAlpha=d<.65?1:Math.max(0,(1-d)/.35);for(let e of o){let t=Math.max(0,1-u*.22),r=s.x+Math.cos(e.angle)*e.speed*u*t,i=s.y+Math.sin(e.angle)*e.speed*u+420*u*u;n.save(),n.translate(r,i),n.rotate(e.rotation+e.spin*u),n.fillStyle=e.color,n.fillRect(-e.size/2,-e.size/4,e.size,e.size/2),n.restore()}d<1?window.requestAnimationFrame(l):t.remove()};window.requestAnimationFrame(l)}var Uc,Wc,Gc,Kc;function qc(){return(qc=e((()=>{Uc=`openclaw.confetti.firstReply`,Wc=[`#ff4d4d`,`#ff7079`,`#00e5cc`,`#f2a833`],Gc=1500,Kc=64})))()}function Jc(e){let t=o(e);if(t===void 0)return null;let n=t-Date.now();if(n<=0)return`now`;let r=Math.floor(n/6e4);if(r<1)return`<1m`;if(r<60)return`${r}m`;let i=Math.floor(r/60),a=r%60;if(i<24)return a>0?`${i}h ${a}m`:`${i}h`;let s=Math.floor(i/24);if(s<7){let e=i%24;return e>0?`${s}d ${e}h`:`${s}d`}return new Date(t).toLocaleDateString(void 0,{month:`short`,day:`numeric`})}function Yc(e){return Math.max(0,Math.min(100,Math.round(e)))}function Xc(e,t){let n=[];for(let r of(e?.providers??[]).filter(t)){let e=r.usage;if(!e)continue;let t=(e.windows??[]).map(e=>{let t={label:(e.label||``).trim(),usedPercent:Yc(e.usedPercent)};return e.resetAt!==void 0&&(t.resetAt=e.resetAt),t}),i=(e.billing??[]).flatMap(e=>{if(e.type!==`budget`||!Number.isFinite(e.used)||!Number.isFinite(e.limit)||e.used<0||e.limit<=0)return[];let t={used:e.used,limit:e.limit,unit:e.unit};return e.label&&(t.label=e.label),[t]});if(t.length===0&&i.length===0)continue;let a=[...new Set([r.provider,e.providerId].filter(e=>!!e))],o=JSON.stringify([r.displayName,e.accountEmail??null,t,i]),s=n.find(e=>e.identity===o);if(s){for(let e of a)s.group.providers.includes(e)||s.group.providers.push(e);continue}n.push({identity:o,group:{providers:a,displayName:r.displayName,...e.plan?{plan:e.plan}:{},...e.accountEmail?{accountEmail:e.accountEmail}:{},windows:t,budgets:i}})}return n.map(e=>e.group)}function Zc(){return(Zc=e((()=>{f()})))()}function Qc(e,t,n,r,i){if(!(e instanceof HTMLDetailsElement))return;let a=i?.activeRunId??null,o=i?.completedRunId??null,s=_l.get(e);if(!s||s.sessionKey!==t){e.open=n,_l.set(e,{activeRunId:a,handledCompletedRunId:o,sessionKey:t});return}a&&a!==s.activeRunId&&(s.activeRunId=a,s.handledCompletedRunId=null,r&&(e.open=!1)),o&&o===s.activeRunId&&o!==s.handledCompletedRunId&&(s.handledCompletedRunId=o,r&&(e.open=!0))}function $c(e){let t=e.steps;return t?.length?{completed:t.filter(e=>e.status===`completed`).length,total:t.length}:null}function el(e){return e.find(e=>e.status===`in_progress`)??e.find(e=>e.status===`pending`)}function tl(e,t){let n=o(t),r=o(e.updatedAt);return n!==void 0&&r!==void 0&&r<n}function nl(e,t,n){let r=e?tl(e,n):!1;if(t&&pl[t]&&!r)return null;let i=e?$c(e):null;if(!i||!e?.steps)return null;let a=el(e.steps);if(!a)return null;let o=a.status===`in_progress`&&r?`paused`:a.status;return{...i,status:o,step:a.step}}function rl(e){return el(e)??e.findLast(e=>e.status===`completed`)}function il(e,t){if(e===`in_progress`&&t===`done`)return k.check;if(e===`in_progress`&&(t===`failed`||t===`timeout`||t===`killed`))return k.circleX;switch(e){case`completed`:return k.check;case`in_progress`:return E`<span class="session-run-spinner"></span>`;case`paused`:case`pending`:return k.clock}return e}function al(e){let t=rl(e),n=t?e.indexOf(t):-1;return Math.max(1,n+1)}function ol(e){let t=document.createElement(`template`);t.innerHTML=e;let n=t.content.querySelector(`progress`);if(!n)return e;let r=n.getAttribute(`value`)?.trim(),i=n.getAttribute(`max`)?.trim(),a=n.getAttribute(`aria-label`)?.trim()||(r&&i?`${j(`sessionProgressCard.title`)} ยท ${r}/${i}`:j(`sessionProgressCard.title`));n.setAttribute(`aria-label`,a);let o=n.parentElement,s=document.createElement(`div`);s.className=`session-progress-card__progress`;let c=document.createElement(`span`);return c.className=`session-progress-card__progress-label`,c.textContent=a,s.append(c,n),o?.tagName===`P`&&o.children.length===0&&!o.textContent?.trim()&&o.remove(),t.content.prepend(s),t.innerHTML}function sl(e,t={}){if(!e)return D;let n=ct(e,{progressBars:!0});return E`<div class="session-progress-card__markdown sidebar-markdown">
${De(t.promoteProgress?ol(n):n)}
</div>`}function cl(e,t,n){let r=e.steps;return r?.length?E`<ol class="session-progress-card__steps">
${r.map(e=>{let r=e.status===`in_progress`&&n?ml[n]:void 0,i=e.status===`in_progress`&&!t&&!r?`paused`:e.status,a=j(r??(i===`paused`?`sessionProgressCard.status.paused`:dl[i]));return E`<li
class="session-progress-card__step session-progress-card__step--${i}"
aria-label=${j(`sessionProgressCard.stepLabel`,{status:a,step:e.step})}
>
<span
class="session-progress-card__step-marker"
data-status=${i}
data-outcome=${r?n:D}
aria-hidden="true"
>${il(i,n)}</span
>
<span class="session-progress-card__step-text">${e.step}</span>
</li>`})}
</ol>`:D}function ll(e,t,n){return E`<div class="session-progress-card__body">
${sl(e.markdown)} ${cl(e,t,n)}
</div>`}function ul(e,t,n,r,i,a,s=!0,c=!1,l){if(!e)return D;let u=$c(e),d=u?j(`sessionProgressCard.countLabel`,{completed:String(u.completed),total:String(u.total)}):j(`sessionProgressCard.noteLabel`),f=o(i),p=o(a),m=o(e.updatedAt),h=f!==void 0&&p!==void 0&&p>=f&&m!==void 0&&m>=f,g=s&&!tl(e,i),_=r&&pl[r]&&h?p:void 0,v=r&&pl[r]&&!_?void 0:r,y=_??m??Date.now(),b=_?fl[r]:`sessionProgressCard.activity.updated`,x=d,S=gl(y,b),C=n&&e.steps?.length&&e.steps.every(e=>e.status===`completed`)?E`<button
class="rail-header__action session-progress-card__dismiss"
type="button"
aria-label=${j(`sessionProgressCard.dismiss`)}
title=${j(`sessionProgressCard.dismiss`)}
@click=${t=>{t.preventDefault(),t.stopPropagation(),n?.(e)}}
>
${k.x}
</button>`:D;if(t===`composer`){let t=e.steps??[],n=rl(t),r=al(t),i=t.length>0&&t.every(e=>e.status===`completed`),a=u?j(`sessionProgressCard.countLabel`,{completed:String(u.completed),total:String(u.total)}):j(`sessionProgressCard.noteLabel`),o=n?.step??j(`sessionProgressCard.noteLabel`),s=v?pl[v]:void 0,f=`${o}. ${s?j(s):d}`,p=u?j(`sessionProgressCard.shortCount`,{completed:String(r),total:String(u.total)}):D,m=n?.status===`in_progress`&&!g&&!s?`paused`:n?.status,h=v===`done`?k.check:v===`failed`||v===`timeout`||v===`killed`?k.circleX:i?k.check:n?.status===`in_progress`?il(m??`pending`):k.clock;return E`<details
class="session-progress-card session-progress-card--composer"
data-progress-card-placement="composer"
data-complete=${String(i)}
${ve(t=>Qc(t,e.sessionKey,!i&&!c,c,l))}
>
<summary class="session-progress-card__summary" aria-label=${f}>
<span
class="session-progress-card__summary-indicator session-progress-card__current-marker${i||v===`done`?` session-progress-card__summary-indicator--complete`:``}"
data-status=${m??`pending`}
data-outcome=${v??D}
aria-hidden="true"
>
${h}
</span>
<span class="session-progress-card__summary-collapsed">
<span class="session-progress-card__current">${o}</span>
</span>
${u?E`<span
class="session-progress-card__summary-count session-progress-card__summary-count--collapsed"
data-outcome=${v??D}
>${s?j(s):`${r}/${u.total}`}</span
>`:D}
<span class="session-progress-card__summary-expanded">
<span class="session-progress-card__summary-title"
>${j(`sessionProgressCard.composerTitle`)}</span
>
<span class="session-progress-card__heading-actions"
><span>${S}${u?E` ยท ${p}`:D}</span
>${C}</span
>
</span>
<span
class="session-progress-card__summary-chevron session-progress-card__chevron"
aria-hidden="true"
>${k.chevronDown}</span
>
</summary>
<div class="session-progress-card__body" role="region" aria-label=${a}>
${sl(e.markdown)}
${cl(e,g,v)}
</div>
</details>`}return E`<section
class="session-progress-card session-progress-card--${t}"
data-progress-card-placement=${t}
aria-label=${x}
>
<div class="session-progress-card__heading">
<span>${j(`sessionProgressCard.title`)}</span>
<span class="session-progress-card__heading-actions">
<span
>${S}${u?E` ยท ${u.completed}/${u.total}`:D}</span
>${C}
</span>
</div>
${ll(e,g,v)}
</section>`}var dl,fl,pl,ml,hl,gl,_l;function vl(){return(vl=e((()=>{f(),T(),Ae(),ye(),we(),Oe(),A(),se(),Le(),wt(),dl={completed:`sessionProgressCard.status.completed`,in_progress:`sessionProgressCard.status.inProgress`,pending:`sessionProgressCard.status.pending`},fl={queued:`sessionProgressCard.activity.updated`,running:`sessionProgressCard.activity.updated`,done:`sessionProgressCard.activity.completed`,failed:`sessionProgressCard.activity.failed`,killed:`sessionProgressCard.activity.stopped`,timeout:`sessionProgressCard.activity.failed`},pl={done:`sessionProgressCard.outcome.completed`,failed:`sessionProgressCard.outcome.failed`,killed:`sessionProgressCard.outcome.stopped`,timeout:`sessionProgressCard.outcome.failed`},ml={done:`sessionProgressCard.status.completed`,failed:`sessionProgressCard.status.failed`,killed:`sessionProgressCard.status.stopped`,timeout:`sessionProgressCard.status.failed`},hl=class extends xe{constructor(...e){super(...e),this.timestamp=0,this.labelKey=`sessionProgressCard.activity.updated`}render(e,t){return this.timestamp=e,this.labelKey=t,this.isConnected&&this.startTimer(),this.renderTime()}disconnected(){this.stopTimer()}reconnected(){this.setValue(this.renderTime()),this.startTimer()}startTimer(){this.timer||=setInterval(()=>this.setValue(this.renderTime()),3e4)}stopTimer(){this.timer&&=(clearInterval(this.timer),void 0)}renderTime(){let e=j(this.labelKey,{time:de(this.timestamp)});return E`<time
datetime=${new Date(this.timestamp).toISOString()}
aria-label=${e}
title=${e}
>${e}</time
>`}},gl=Se(hl),_l=new WeakMap})))()}function yl(e){let t=qe(e??``);return t?E`<span
class="session-color-dot"
style=${`--session-color: var(--session-color-${t})`}
role="img"
aria-label=${j(`sessionsView.sessionColor`,{color:j(`sessionsView.colors.${t}`)})}
></span>`:D}function bl(){return(bl=e((()=>{T(),Ke(),A()})))()}var $;function xl(){return(xl=e((()=>{T(),_e(),to(),ae(),Le(),$=class extends he{constructor(...e){super(...e),this.routeUrl=null,this.authTokens=[],this.authReady=!1,this.undecodableRouteUrl=null,this.loader=new eo(this,{cacheNotFound:!0,retryUnavailable:!0})}render(){return this.loader.withActiveRoutes(()=>this.renderContent())}renderContent(){let e=this.routeUrl,t=e&&this.authReady&&this.undecodableRouteUrl!==e?this.loader.resolve(e,this.authTokens):null;return t?E`<img
class="workspace-icon"
src=${t}
alt=""
aria-hidden="true"
decoding="async"
@error=${()=>{this.undecodableRouteUrl=e}}
/>`:E`<span class="workspace-icon-fallback" aria-hidden="true">${k.folder}</span>`}},_([O({attribute:!1})],$.prototype,`routeUrl`,void 0),_([O({attribute:!1})],$.prototype,`authTokens`,void 0),_([O({attribute:!1})],$.prototype,`authReady`,void 0),_([Ce()],$.prototype,`undecodableRouteUrl`,void 0),customElements.get(`openclaw-workspace-icon`)||customElements.define(`openclaw-workspace-icon`,$)})))()}function Sl(e){if(typeof e==`boolean`)return e;let t=l(e)?.enabled;return typeof t==`boolean`?t:void 0}function Cl(e,t){let n=l(e),i=Sl(l(n?.tools)?.swarm),a=l(n?.agents),o=l(a?.entries),s=t?r(t):null,c=s?Object.keys(o??{}).find(e=>r(e)===s):null,u=c?l(o?.[c]):null;return Sl(l(u?.tools)?.swarm)??i??!0}function wl(e,t){return(e.updatedAt??0)>=(t.updatedAt??0)}function Tl(e,t){let n=new Map;for(let r of[...e,...t]){let e=n.get(r.key);(!e||wl(r,e))&&n.set(r.key,r)}return[...n.values()]}async function El(e){let t=await $t({sessions:e.sessions,parentKey:e.parentKey,isCurrent:e.isCurrent,pageSize:Dl});return t?Tl(e.currentRows,t):null}var Dl,Ol;function kl(){return(kl=e((()=>{en(),v(),Dl=1e4,Ol=class{constructor(){this.rows=[],this.key=``,this.revision=-1,this.generation=0,this.attemptRevision=-1,this.attempts=0,this.currentRowsByKey=new Map,this.timer=null}update(e){let t=`${e.sourceEpoch}:${e.parentKey}`;this.key!==t&&this.reset(t);let n=e.currentRows(),r=new Map(n.map(e=>[e.key,JSON.stringify(e)]));this.rows=Tl(this.rows,n.filter(e=>this.currentRowsByKey.get(e.key)!==r.get(e.key))),this.currentRowsByKey=r,e.onRows(this.rows);let i=e.sessions.canonicalListRevision;this.attemptRevision!==i&&(this.attemptRevision=i,this.attempts=0),this.revision!==i&&this.timer===null&&(this.timer=setTimeout(()=>this.hydrate(e),250))}dispose(){this.reset(``)}hydrate(e){let t=this.generation,n=e.sessions.canonicalListRevision,r=`${e.sourceEpoch}:${e.parentKey}`,i=()=>t===this.generation&&this.key===r,a=e.currentRows(),o=new Map(a.map(e=>[e.key,JSON.stringify(e)])),s=!1,c=!1;this.attempts+=1,El({sessions:e.sessions,parentKey:e.parentKey,currentRows:a,isCurrent:i}).then(t=>{if(!t||!i())return;s=!0,this.revision=n;let r=e.currentRows().filter(e=>o.get(e.key)!==JSON.stringify(e));this.rows=Tl(t,r),e.onRows(this.rows)}).catch(()=>{if(!i())return;c=!0;let t=Math.min(3e4,1e3*2**Math.min(this.attempts-1,5));this.timer=setTimeout(()=>{this.timer=null,i()&&this.update(e)},t)}).finally(()=>{i()&&(c||(this.timer=null),s&&this.revision!==e.sessions.canonicalListRevision&&this.update(e))})}reset(e){this.timer!==null&&clearTimeout(this.timer),this.rows=[],this.currentRowsByKey.clear(),this.key=e,this.revision=-1,this.generation+=1,this.attemptRevision=-1,this.attempts=0,this.timer=null}}})))()}function Al(e){let t=new Map,n=tn(),r=e.snapshot.client,i=null,a=null,o=null,s=0,c=0,l=!1,u=0,d=!1,f=null,p=null,m=()=>t.size>0,h=()=>{let n=e.snapshot.hello,r=new Set;for(let e of t.values())for(let t of e){let e=me(t,n).trim();e&&r.add(e)}return[...r].toSorted().slice(0,32)},g=()=>x(),_=()=>{n.reset(),x()},v=()=>{d||(d=!0,r=e.snapshot.client,i=null,a=null,o=null,s=0,f=e.subscribe(g),typeof document<`u`&&(document.addEventListener(`visibilitychange`,_),p=document))},y=()=>{d&&(d=!1,f?.(),f=null,p?.removeEventListener(`visibilitychange`,_),p=null,n.reset(),c+=1,u+=1,l=!1,i=null,a=null,o=null,s=0)};function b(){if(l=!1,!d)return;let t=e.snapshot,u=t.client;if(u!==r&&(n.reset(),r=u,i=null,a=null,o=null,s=0),t.phase!==`connected`||u===null||t.hello===null||Je(t,Ml)!==!0){i=null,a=null,o=null,s=0,m()||y();return}let f=typeof document<`u`&&document.visibilityState===`hidden`?[]:h(),p=f.some(e=>!e.startsWith(`agent:`))?t.assistantAgentId:void 0,g=JSON.stringify({agentId:p,sessionKeys:f});if(t.hello===i&&g===a){!m()&&o===g&&s===c&&y();return}i=t.hello,a=g;let _=++c,v=()=>d&&_===c&&t.hello===i&&g===a;n.cancel(),u.request(Ml,{...p?{agentId:p}:{},sessionKeys:f}).then(()=>{v()&&(o=g,s=_,n.reset(),m()||y())}).catch(()=>{v()&&(a=null,n.schedule(()=>{d&&x()}))})}function x(){if(!d||l)return;l=!0;let e=u;globalThis.queueMicrotask(()=>{e===u&&b()})}let S=(e,r)=>{let i=new Set(r.map(e=>e.trim()).filter(Boolean)),a=t.get(e);(a===void 0?i.size===0:a.size===i.size&&[...i].every(e=>a.has(e)))||(i.size===0?t.delete(e):t.set(e,i),n.reset(),m()?(v(),x()):d&&b())};return{watch:S,unwatch:e=>S(e,[])}}function jl(e){let t=Nl.get(e);if(t)return t;let n=Al(e);return Nl.set(e,n),n}var Ml,Nl;function Pl(){return(Pl=e((()=>{Ye(),an(),ne(),Ml=`sessions.viewers.set`,Nl=new WeakMap})))()}export{qs as $,di as $n,Co as $t,Cc as A,Wi as An,cn as Ar,Xo as At,Ys as B,yi as Bn,Vo as Bt,Fc as C,la as Cn,$n as Cr,os as Ct,Sc as D,Ji as Dn,mn as Dr,ns as Dt,kc as E,Yi as En,hn as Er,ss as Et,rc as F,Fi as Fn,qo as Ft,Ks as G,mi as Gn,jo as Gt,Ws as H,fi as Hn,Fo as Ht,ic as I,Oi as In,Wo as It,Gs as J,Qr as Jn,lo as Jt,Rs as K,Ur as Kn,Ao as Kt,nc as L,Si as Ln,Ko as Lt,ac as M,ki as Mn,Z as Mt,uc as N,Di as Nn,Zo as Nt,bc as O,Ui as On,ln as Or,ts as Ot,oc as P,Ei as Pn,Go as Pt,Zs as Q,ai as Qn,wo as Qt,zs as R,bi as Rn,Uo as Rt,Rc as S,sa as Sn,fr as Sr,cs as St,Dc as T,ia as Tn,wn as Tr,rs as Tt,Bs as U,_i as Un,Ro as Ut,$s as V,vi as Vn,zo as Vt,ec as W,pi as Wn,Mo as Wt,Us as X,ci as Xn,_o as Xt,tc as Y,Yr as Yn,So as Yt,Xs as Z,Jr as Zn,Do as Zt,Zc as _,xa as _n,jr as _r,ls as _t,kl as a,eo as an,qr as ar,Fs as at,Ic as b,na as bn,Cr as br,as as bt,xl as c,Ua as cn,ei as cr,js as ct,vl as d,Na as dn,Br as dr,bs as dt,xo as en,si as er,Js as et,nl as f,ka as fn,Hr as fr,_s as ft,Jc as g,ja as gn,_r as gr,gs as gt,Xc as h,za as hn,Fr as hr,ms as ht,El as i,ro as in,Xr as ir,Ps as it,cc as j,Ai as jn,sn as jr,Yo as jt,xc as k,Gi as kn,fn as kr,Qo as kt,bl as l,Ha as ln,ii as lr,Ts as lt,ul as m,Sa as mn,Ir as mr,ps as mt,jl as n,so as nn,ni as nr,Ls as nt,Cl as o,to as on,$r as or,Ms as ot,sl as p,Ma as pn,zr as pr,ys as pt,Hs as q,Zr as qn,ko as qt,Ol as r,ao as rn,Gr as rr,Is as rt,Tl as s,Wa as sn,oi as sr,Ns as st,Pl as t,co as tn,ri as tr,Qs as tt,yl as u,Ba as un,Kr as ur,xs as ut,Hc as v,ba as vn,xr as vr,ds as vt,Pc as w,ga as wn,bn as wr,is as wt,zc as x,oa as xn,gr as xr,es as xt,qc as y,ca as yn,Sr as yr,$o as yt,Vs as z,xi as zn,Ho as zt};
//# sourceMappingURL=control-ui-boot-chat-_QSl8fbH.js.map