UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

4,243 lines • 529 kB
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./chat-diff-highlight.runtime-wX5H5ZQl.js","./dist-DDaNsWmU.js","./code-language-BdW1kSsY.js","./control-ui-core-yIvVj14Y.css","./mcp-app-view-registration-f68t3LcT.js","./plugin-contracts-runtime-CNCaYops.js","./markdown-runtime-ORQpioyT.js","./sidebar-update-runtime-DonYLwN5.js","./mcp-app-routing-BHjVXpEf.js","./chat-transcript-styles-Dzr3t9kA.js","./mcp-app-confirm-C5ZrOS-h.js","./control-ui-boot-shared-styles-DKyMAG_6.css","./control-ui-boot-shared-CXHNz0Bh.css","./sidebar-update-runtime-ah7rgQE7.css","./chat-transcript-styles-B_dd5Ueo.css","./control-ui-boot-chat-styles-C_Ls1c0m.css","./control-ui-boot-chat-mLz7NUiY.css","./canvas-widget-view-C6adrCsM.js","./widget-sandbox-host-BtiBzdny.js","./youtube-video-card-CwTrsGat.js","./chat-question-panel-C1r3JwNX.js","./transport.runtime-DVoc3JXT.js","./response-body-DtENYz2O.js","./pending-session-create-Bsi_vbEZ.js","./control-ui-boot-new-CxgnwT6A.js","./control-ui-boot-new-styles-Bb6Ub5D3.js","./control-ui-boot-new-styles-u1aN_ui5.css","./control-ui-boot-new-D-SpiTTi.css"])))=>i.map(i=>d[i]);
import{n as e,r as t}from"./rolldown-runtime-8BhlS34s.js";import{$i as n,$n as r,Ac as i,B as a,Cn as o,Cu as s,Dc as c,Dl as l,Dn as u,Ds as d,El as f,En as p,Eu as m,Fl as h,Fn as g,Fs as _,Ft as v,Hl as y,Ia as b,Ic as x,It as S,Jr as C,Kc as w,Kn as T,Ko as E,Lc as D,Ll as O,Ln as k,N as A,Nc as ee,Oc as te,Pc as j,Pl as M,Qn as ne,Qs as re,R as N,Rl as ie,Rn as ae,Ru as P,Si as F,Sl as I,Su as oe,Tl as se,Tn as L,Tu as R,Uc as ce,Un as le,Vc as ue,W as de,Wn as fe,Xr as pe,Yc as me,Yn as he,Yr as ge,Ys as _e,Zn as ve,_l as ye,_n as be,_u as xe,bu as Se,c as Ce,cr as we,dn as Te,du as z,er as Ee,fn as De,gn as Oe,gt as ke,hn as Ae,i as je,j as Me,jc as Ne,jl as Pe,js as Fe,ju as B,kc as Ie,ku as Le,l as Re,lr as ze,lu as Be,mn as Ve,n as He,nc as Ue,nl as We,pu as Ge,qc as Ke,qn as qe,s as Je,tl as Ye,tr as Xe,ur as Ze,uu as Qe,vt as $e,wc as et,wn as tt,wu as nt,xr as rt,xu as it,ya as at,z as ot,zn as st}from"./control-ui-core-BncvAZjR.js";import{A as ct,E as lt,N as ut,Z as dt,et as ft,j as pt}from"./control-ui-boot-shared-Dfs-gZII.js";import{$t as mt,Ai as ht,Ci as gt,Cn as _t,Ct as vt,Fi as yt,Gi as bt,Hn as xt,Ii as St,Jr as Ct,K as wt,Ki as Tt,Li as Et,On as Dt,Pi as Ot,Qt as kt,Si as At,So as jt,St as Mt,Ti as Nt,Tn as Pt,Un as Ft,W as It,Wr as Lt,Xa as Rt,Xi as zt,Xn as Bt,Xt as Vt,Zi as Ht,Zn as Ut,aa as Wt,ai as Gt,an as Kt,bo as qt,ci as Jt,ea as Yt,ga as Xt,gr as Zt,ia as Qt,in as $t,it as en,ki as tn,li as nn,ma as rn,mn as an,mo as on,n as sn,na as V,nr as cn,oa as ln,oi as un,ot as dn,q as fn,r as pn,ra as H,sa as mn,si as hn,so as gn,ua as _n,ui as vn,wi as yn,xn as bn,xr as xn}from"./control-ui-core-9qYjK5B2.js";import{$ as U,B as Sn,C as Cn,F as W,I as wn,M as G,Q as Tn,R as En,T as Dn,X as K,Y as q,Z as On,a as J,c as kn,ct as Y,d as An,g as jn,gt as Mn,h as Nn,i as Pn,j as Fn,k as In,mt as Ln,nt as Rn,p as zn,r as Bn,s as Vn,t as Hn,tt as Un,u as Wn,ut as X,z as Gn}from"./lit-runtime-B8uOr6OX.js";import{A as Kn,Ft as qn,Lt as Jn,Mt as Yn,O as Xn,Qt as Zn,Rt as Qn,Zt as $n,_n as er,_r as tr,c as nr,cn as rr,gn as ir,hr as ar,l as or,s as sr,sn as cr,u as lr,vn as ur,zt as dr}from"./control-ui-boot-shared-umGE-sEP.js";import{A as fr,D as pr,E as mr,O as hr,S as gr,_ as _r,a as vr,c as yr,d as br,f as xr,g as Sr,h as Cr,i as wr,k as Tr,l as Er,m as Dr,n as Or,o as kr,p as Ar,r as jr,s as Mr,t as Nr,u as Pr,v as Fr,x as Ir,y as Lr}from"./control-ui-boot-chat-VeeaXyJz.js";import{c as Rr,d as zr,l as Br}from"./gateway-runtime-Cr51Pi7N.js";import{$a as Vr,$i as Hr,$t as Ur,Aa as Wr,Bi as Gr,Ci as Kr,Cn as qr,Cr as Jr,Ei as Yr,Ga as Xr,Gi as Zr,Ht as Qr,Ii as $r,Ka as ei,Ki as ti,Mn as ni,Mo as ri,Mt as ii,Nn as ai,Nt as oi,Po as si,Qa as ci,Qi as li,Qt as ui,Si as di,Sr as fi,Ti as pi,Ui as mi,Ut as hi,W as gi,Wa as _i,Wi as vi,Xi as yi,Xt as bi,Yi as xi,Zt as Si,ao as Ci,bi as wi,bn as Ti,bo as Ei,br as Di,ca as Oi,cn as ki,da as Ai,di as ji,dn as Mi,eo as Ni,et as Pi,gi as Fi,hi as Ii,ht as Li,in as Ri,ji as zi,jo as Bi,ka as Vi,kn as Hi,la as Ui,mi as Wi,nn as Gi,no as Ki,oi as qi,oo as Ji,pi as Yi,ri as Xi,rn as Zi,sn as Qi,tn as $i,tt as ea,ua as ta,un as na,uo as ra,vi as ia,wi as aa,wn as oa,wr as sa,xi as ca,xn as la,xo as ua,xr as da,yi as fa,yn as pa,yo as ma,z as ha}from"./control-ui-boot-shared-DJkUdZmL.js";import{c as ga,l as _a,n as va,o as ya,r as ba,s as xa,t as Sa,u as Ca}from"./session-snapshot-database-BurLa_ut.js";import{Aa as wa,Bi as Ta,Do as Ea,Ei as Da,Er as Oa,Fa as ka,Ft as Aa,Ia as ja,Jt as Ma,Ka as Na,Ki as Pa,Li as Fa,Na as Ia,Pt as La,Qi as Ra,Ra as za,Si as Ba,Tr as Va,Va as Ha,X as Ua,Xa as Wa,Xr as Ga,Xt as Ka,Y as qa,Yi as Ja,Zr as Ya,_a as Xa,_t as Za,da as Qa,eo as $a,fa as Z,hi as eo,ht as to,ii as Q,ja as no,ma as ro,mt as io,oa as ao,qi as oo,ro as so,sa as co}from"./ui-DuRgK6kL.js";import{A as lo,L as uo,M as fo,O as po,d as mo,k as ho,u as go}from"./control-ui-boot-shared-em9-jnbz.js";import{b as _o,g as vo,h as yo}from"./control-ui-boot-shared-Sj2zqjOr.js";import{C as bo,_ as xo,b as So,h as Co,k as wo,m as To,w as Eo}from"./config-runtime-BecGLziM.js";import{$i as Do,$r as Oo,$t as ko,An as Ao,At as jo,Br as Mo,Bt as No,Ci as Po,Dr as Fo,Dt as Io,Er as Lo,Et as Ro,Fr as zo,Gn as Bo,Gr as Vo,Ht as Ho,Ir as Uo,It as Wo,Kt as Go,Lr as Ko,Lt as qo,Mr as Jo,Nr as Yo,On as Xo,Ot as Zo,Qi as Qo,Qt as $o,Rr as es,T as ts,Ti as ns,Tr as rs,Tt as is,Ur as as,Ut as os,Vr as ss,Vt as cs,Wn as ls,Xr as us,Xt as ds,Yt as fs,Zr as ps,_n as ms,an as hs,bi as gs,br as _s,bt as vs,ct as ys,dt as bs,ea as xs,ei as Ss,fn as Cs,ft as ws,gn as Ts,ii as Es,in as Ds,ir as Os,jt as ks,kr as As,kt as js,mn as Ms,nn as Ns,on as Ps,qt as Fs,rn as Is,ta as Ls,ti as Rs,ut as zs,vt as Bs,w as Vs,wr as Hs,xi as Us,zr as Ws,zt as Gs}from"./control-ui-boot-shared-xfDhIVun.js";import{$ as Ks,$a as qs,A as Js,Ad as Ys,Af as Xs,Ao as Zs,At as Qs,Bc as $s,Bo as ec,Bs as tc,Cd as nc,Co as rc,Cr as ic,Ct as ac,Do as oc,Dt as sc,Ei as cc,Eo as lc,Er as uc,Et as dc,F as fc,Ff as pc,Fl as mc,Fo as hc,Fs as gc,G as _c,Gd as vc,Gs as yc,Gu as bc,H as xc,Hc as Sc,Hd as Cc,Hs as wc,I as Tc,Id as Ec,If as Dc,Io as Oc,Iu as kc,J as Ac,Ja as jc,Js as Mc,Jt as Nc,Ks as Pc,Ku as Fc,L as Ic,Ld as Lc,Ll as Rc,Lo as zc,M as Bc,Mf as Vc,Mo as Hc,Mt as Uc,N as Wc,Nf as Gc,Nl as Kc,No as qc,Nu as Jc,Oo as Yc,Os as Xc,Ot as Zc,P as Qc,Pf as $c,Po as el,Q as tl,Qa as nl,R as rl,Rd as il,Rf as al,Rl as ol,Ro as sl,So as cl,Sr as ll,St as ul,Su as dl,Td as fl,To as pl,Tt as ml,U as hl,Uc as gl,Ud as _l,Us as vl,V as yl,Vd as bl,Vo as xl,Wd as Sl,Wt as Cl,X as wl,Xa as Tl,Xd as El,Xu as Dl,Y as Ol,Ya as kl,Z as Al,Za as jl,Zd as Ml,Zs as Nl,_ as Pl,_r as Fl,_s as Il,_t as Ll,_u as Rl,ad as zl,ao as Bl,b as Vl,bc as Hl,bt as Ul,co as Wl,ct as Gl,do as Kl,ed as ql,en as Jl,eo as Yl,et as Xl,fa as Zl,fo as Ql,fs as $l,ft as eu,g as tu,gd as nu,gr as ru,gs as iu,gt as au,h as ou,ho as su,hr as cu,hs as lu,ht as uu,id as du,io as fu,j as pu,jl as mu,jo as hu,js as gu,jt as _u,ju as vu,k as yu,ki as bu,kl as xu,ko as Su,kr as Cu,kt as wu,lt as Tu,ms as Eu,mt as Du,nf as Ou,no as ku,ns as Au,on as ju,oo as Mu,ps as Nu,pt as Pu,q as Fu,qs as Iu,rd as Lu,ro as Ru,rs as zu,so as Bu,ss as Vu,tn as Hu,to as Uu,ts as Wu,ut as Gu,v as Ku,vo as qu,vr as Ju,vs as Yu,vt as Xu,vu as Zu,wo as Qu,wt as $u,x as ed,xc as td,xd as nd,xs as rd,xt as id,y as ad,yc as od,yd as sd,yr as cd,ys as ld,yt as ud,z as dd,zd as fd,zl as pd,zo as md,zs as hd}from"./control-ui-boot-shared-D3oo_6Fq.js";import{G as gd,H as _d,K as vd,c as yd,m as bd,p as xd,s as Sd}from"./control-ui-boot-shared-D4XEBdOG.js";import"./control-ui-boot-shared-styles-BaQ2sAfZ.js";import{A as Cd,F as wd,H as Td,I as Ed,K as Dd,L as Od,M as kd,N as Ad,O as jd,V as Md,W as Nd,c as Pd,d as Fd,f as Id,k as Ld,l as Rd,s as zd,u as Bd}from"./control-ui-boot-chat-Ck7W_FPO.js";import{A as Vd,B as Hd,C as Ud,D as Wd,E as Gd,F as Kd,I as qd,M as Jd,N as Yd,O as Xd,P as Zd,R as Qd,S as $d,T as ef,_ as tf,a as nf,b as rf,d as af,f as of,g as sf,h as cf,i as lf,j as uf,k as df,o as ff,p as pf,r as mf,t as hf,u as gf,v as _f,w as vf,x as yf,y as bf,z as xf}from"./control-ui-boot-chat-BPMc7uzL.js";import{$t as Sf,Cn as Cf,En as wf,F as Tf,Gt as Ef,I as Df,It as Of,L as kf,Lt as Af,M as jf,Mt as Mf,N as Nf,Nt as Pf,P as Ff,Pt as If,R as Lf,Rt as Rf,Sn as zf,Wt as Bf,Xt as Vf,_ as Hf,_t as Uf,ar as Wf,b as Gf,bn as Kf,cr as qf,dn as Jf,f as Yf,gt as Xf,h as Zf,ht as Qf,i as $f,ir as ep,k as tp,lr as np,m as rp,mt as ip,n as ap,nr as op,or as sp,r as cp,rr as lp,s as up,sr as dp,t as fp,tn as pp,tr as mp,un as hp,ur as gp,vn as _p,wn as vp,x as yp,xn as bp,yn as xp,yt as Sp,z as Cp}from"./control-ui-boot-chat-C8hdsB2M.js";import{E as wp,S as Tp,T as Ep,_ as Dp,b as Op,g as kp,v as Ap,y as jp}from"./control-ui-boot-chat-DxoNF0Ad.js";import"./control-ui-boot-chat-styles-BRrYkFSc.js";function Mp(e){let t=new Date(e);return Number.isFinite(t.getTime())?{label:t.toLocaleString([],{month:`short`,day:`numeric`,year:`numeric`,hour:`numeric`,minute:`2-digit`,timeZoneName:`short`}),title:t.toLocaleString([],{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`,hour:`numeric`,minute:`2-digit`,second:`2-digit`,timeZoneName:`short`}),dateTime:t.toISOString()}:{label:B(`chat.messages.unknownDate`),title:B(`chat.messages.unknownDate`),dateTime:``}}function Np(e,t=Date.now()){let n=new Date(e);if(!Number.isFinite(n.getTime()))return B(`chat.messages.unknownDate`);let r=t-n.getTime();return r>=-12e4&&r<Lp?a(Math.max(0,r)):n.toLocaleDateString([],{month:`short`,day:`numeric`,...n.getFullYear()===new Date(t).getFullYear()?{}:{year:`numeric`}})}function Pp(e,t=[]){let n=Mp(e),r=U`
    <time class="chat-group-timestamp" datetime=${n.dateTime} aria-live="off">
      ${Np(e)}
    </time>
  `;return U`
    <openclaw-tooltip
      class="msg-meta"
      ?open-on-click=${t.length>0}
      content=${t.length?``:n.label}
    >
      ${t.length?U`<button
              type="button"
              class="msg-meta__summary"
              aria-label=${B(`chat.messages.contextFor`,{timestamp:n.title})}
            >
              ${r}
            </button>`:r}
      ${t.length?U`<span slot="content" class="msg-meta__details">
              <span class="msg-meta__time">${n.label}</span>${t}
            </span>`:K}
    </openclaw-tooltip>
  `}function Fp(e,t){let n=0,r=0,i=0,a=0,o=0,s=null,c=!1,l=0;for(let{message:t}of e.messages){let e=t;if(e.role!==`assistant`)continue;let u=e.usage;if(u){c=!0;let e=u.input??u.inputTokens??0,t=u.output??u.outputTokens??0,o=u.cacheRead??u.cache_read_input_tokens??0,s=u.cacheWrite??u.cache_creation_input_tokens??0;n+=e,r+=t,i+=o,a+=s,l=Math.max(l,e+o+s)}let d=u?.cost??e.cost;d?.total&&(o+=d.total),typeof e.model==`string`&&e.model!==`gateway-injected`&&(s=e.model)}if(!c&&!s)return null;let u=t&&l>0?Math.min(Math.round(l/t*100),100):null;return{input:n,output:r,cacheRead:i,cacheWrite:a,cost:o,model:s,contextPercent:u}}function Ip(e,t){if(!t)return Pp(e);let n=[];for(let[e,r,i]of[[t.input,`↑`,`msg-meta__tokens`],[t.output,`↓`,`msg-meta__tokens`],[t.cacheRead,`R`,`msg-meta__cache`],[t.cacheWrite,`W`,`msg-meta__cache`]])e&&n.push(U`<span class=${i}>${r}${Me(e)}</span>`);if(t.cost>0&&n.push(U`<span class="msg-meta__cost">${A(t.cost)}</span>`),t.contextPercent!==null){let e=t.contextPercent,r=e>=90?`msg-meta__ctx msg-meta__ctx--danger`:e>=75?`msg-meta__ctx msg-meta__ctx--warn`:`msg-meta__ctx`;n.push(U`<span class="${r}">${e}% ctx</span>`)}if(t.model){let e=t.model.includes(`/`)?t.model.split(`/`).pop():t.model;n.push(U`<span class="msg-meta__model">${e}</span>`)}return Pp(e,n)}var Lp;function Rp(){return(Rp=e((()=>{q(),m(),Ci(),de(),Ji(),Lp=6048e5})))()}function zp(e){let t=e?.archivedBy,n=t?.id?B(`sessionsView.archivedBy`,{name:t.label??t.id}):e?.archiveReason?Md(e.archiveReason):void 0;return e?.archived&&e.archivedAt!==void 0&&n?{kind:`notice`,key:`archive:${e.sessionId??e.key}:${e.archivedAt}`,label:n,text:``,timestamp:e.archivedAt}:void 0}function Bp(e){return U`
    <div
      class="chat-divider__rule"
      role=${e.compaction?`status`:`separator`}
      aria-live=${e.compaction?`polite`:K}
      aria-label=${e.metric?`${e.label}, ${e.metric}`:e.label}
    >
      <span class="chat-divider__line"></span>
      <span class="chat-divider__label">
        ${e.compaction?U`<span class="chat-compaction__glyph" aria-hidden="true">
                <span class="chat-compaction__line"></span>
                <span class="chat-compaction__line"></span>
                <span class="chat-compaction__line"></span>
                <span class="chat-compaction__line"></span>
                <span class="chat-compaction__line"></span>
                ${V.check}
              </span>`:e.icon?U`<span class="chat-divider__icon" aria-hidden="true"
                  >${ln[e.icon]}</span
                >`:K}
        <span class="chat-divider__title">${e.label}</span>
        ${e.metric?U`
                <span class="chat-divider__separator" aria-hidden="true">·</span>
                <span class="chat-divider__metric">${e.metric}</span>
              `:K}
      </span>
      <span class="chat-divider__line"></span>
    </div>
  `}function Vp(e){return U`
    <div
      class="chat-divider ${e.compaction?`chat-compaction chat-compaction--${e.compaction}`:``}"
      data-chat-row-key=${e.key}
      data-ts=${String(e.timestamp)}
    >
      ${Bp(e)}
      ${e.description?U`
              <div class="chat-divider__details">
                <span class="chat-divider__description">${e.description}</span>
              </div>
            `:K}
    </div>
  `}function Hp(e){if(e.sessionsYield)return U`
      <div
        class="chat-notice chat-yield-marker"
        data-chat-row-key=${e.key}
        data-ts=${String(e.timestamp)}
      >
        <span class="chat-divider__icon" aria-hidden="true">${ln.hourglass}</span>
        <span>${e.label}</span>
        ${e.timestamp>0?Pp(e.timestamp):K}
      </div>
    `;let t=e.text?U`
        <div class="chat-text chat-notice__body" dir=${Pc(e.text)}>
          ${Bn(vs(e.text,{codeBlockChrome:`none`}))}
        </div>
      `:K;return U`
    <div
      class="chat-notice ${e.tone===`danger`?`chat-notice--danger callout danger`:``}"
      data-chat-row-key=${e.key}
      data-ts=${String(e.timestamp)}
      role=${e.tone===`danger`?`alert`:K}
    >
      ${e.label?Bp({icon:e.icon,label:e.label}):K}
      ${e.collapsedBody&&e.text?U`
              <details class="chat-notice__collapse">
                <summary class="chat-notice__toggle">${B(`chat.systemNotice.showContent`)}</summary>
                ${t}
              </details>
            `:t}
    </div>
  `}function Up(){return(Up=e((()=>{q(),Hn(),Qt(),H(),Bs(),m(),Td(),Iu(),Rp()})))()}function Wp(e){return!e||e.startsWith(`/`)||e.includes(`\0`)?!1:e.split(`/`).every(e=>e!==``&&e!==`.`&&e!==`..`)}function Gp(e){return Array.from(e).map(e=>{if(e===`\\`)return`\\\\`;let t=e.codePointAt(0);return t!==void 0&&(t<=31||t>=127&&t<=159)?`\\u{${t.toString(16).padStart(4,`0`)}}`:e}).join(``)}function Kp(e){let t=Z(e);if(!t||!Array.isArray(t.paths)||t.paths.length===0)return;let n=t.paths.filter(e=>typeof e==`string`&&Wp(e));if(!(n.length!==t.paths.length||typeof t.stagedResultRef!=`string`||!/^refs\/openclaw\/worker-results\/[A-Za-z0-9-]+$/u.test(t.stagedResultRef)||t.totalCount!==void 0&&(!Number.isSafeInteger(t.totalCount)||t.totalCount<n.length)))return{paths:n,stagedResultRef:t.stagedResultRef,...t.totalCount===void 0?{}:{totalCount:t.totalCount}}}function qp(e){if(e&&`workspaceResultConflict`in e)return Kp(e.workspaceResultConflict)}function Jp(e){let t=Z(e);if(t?.role===`custom`&&t.customType===$p)return Kp(t.details)}function Yp(e){return Math.max(e.paths.length,e.totalCount??e.paths.length)}function Xp(e){let t=e.paths.slice(0,em);return{paths:t,remaining:Math.max(0,Yp(e)-t.length)}}function Zp(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}function Qp(e,t){let n=t===void 0?e.paths.find(e=>!or(e)):e.paths.includes(t)&&!or(t)?t:void 0;if(!n)return;let r=Zp(`${e.stagedResultRef}:${n}`),i=Zp(e.stagedResultRef),a=Zp(`:(top,literal)${n}`);return{inspect:`git show ${r}`,takeCloud:`git checkout ${i} -- ${a}`}}var $p,em;function tm(){return(tm=e((()=>{lr(),$p=`cloud-workspace-conflict`,em=5})))()}function nm(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e.charAt(n);if(/\s/.test(i)){let r=n;for(;r<e.length&&/\s/.test(e.charAt(r));)r++;t.push({text:e.slice(n,r),cls:`ws`}),n=r;continue}if(i===`'`||i===`"`){let a=n+1;for(;a<e.length&&e.charAt(a)!==i;)a+=e.charAt(a)===`\\`?2:1;a=Math.min(a+1,e.length),t.push({text:e.slice(n,a),cls:`str`}),n=a,r=!1;continue}if(am.has(i)){let i=n;for(;i<e.length&&am.has(e.charAt(i));)i++;t.push({text:e.slice(n,i),cls:`op`}),n=i,r=!0;continue}let a=n;for(;a<e.length&&!/\s/.test(e.charAt(a))&&!am.has(e.charAt(a))&&e.charAt(a)!==`'`&&e.charAt(a)!==`"`;)a++;let o=e.slice(n,a),s=r?`name`:o.startsWith(`-`)?`flag`:/^\d+(?:[.,]\d+)?$/.test(o)?`num`:`plain`;t.push({text:o,cls:s}),n=a,r=!1}return t}function rm(e){return e.length>im?U`${e}`:U`${nm(e).map(e=>e.cls===`ws`||e.cls===`plain`?U`${e.text}`:U`<span class="chat-cmd--${e.cls}">${e.text}</span>`)}`}var im,am;function om(){return(om=e((()=>{q(),im=2e3,am=new Set([`|`,`;`,`&`,`<`,`>`])})))()}var sm,cm;function lm(){return(lm=e((()=>{jn(),co(),sm=class extends wn{constructor(...e){super(...e),this.highlighted=new Map,this.renderLine=e=>this.highlighted.get(e)??e.text}render(e,t,n){let{path:r,oldPath:i=r}=t;return this.renderDiff=n,(this.lines!==e||this.path!==r||this.oldPath!==i)&&(this.lines=e,this.path=r,this.oldPath=i,this.highlighted=new Map,ao(async()=>{let{highlightDiffLines:e}=await import(`./chat-diff-highlight.runtime-wX5H5ZQl.js`);return{highlightDiffLines:e}},__vite__mapDeps([0,1,2,3]),import.meta.url).then(({highlightDiffLines:t})=>t(e,r,i)).then(t=>{this.lines===e&&this.path===r&&this.oldPath===i&&(this.highlighted=t,this.isConnected&&this.setValue(this.renderDiff?.(this.renderLine)))}).catch(()=>{})),n(this.renderLine)}reconnected(){this.setValue(this.renderDiff?.(this.renderLine))}},cm=En(sm)})))()}function um(e){return e.modified===void 0?U`<span class="chat-diffstat">
      <span class="chat-diffstat__add">+${e.added}</span>
      <span class="chat-diffstat__del">-${e.removed}</span>
    </span>`:e.added===0&&e.removed===0&&!e.modified?K:U`<span class="chat-diffstat">
    ${e.added>0?U`<span class="chat-diffstat__add">+${e.added}</span>`:K}
    ${e.removed>0?U`<span class="chat-diffstat__del">-${e.removed}</span>`:K}
    ${e.modified>0?U`<span class="chat-diffstat__mod">~${e.modified}</span>`:K}
  </span>`}function dm(e,t=`succeeded`,n,r={path:``}){let i=e.some(e=>e.lineNo!==void 0);return cm(e,r,r=>U`
      <div
        class="chat-diff code-highlight"
        role="figure"
        aria-label=${B(t===`succeeded`?`chat.toolCards.fileChanges`:`chat.toolCards.attemptedChanges`)}
      >
        ${e.map(e=>{let t=e.kind===`skip`,a=e.kind===`ctx`?``:`chat-diff__row--${e.kind}`,o=e.kind===`add`?`+`:e.kind===`del`?`-`:``;return U`<div class="chat-diff__row ${a}">
            ${i?U`<span class="chat-diff__gutter">${t?``:e.lineNo??``}</span>`:K}
            <span class="chat-diff__sign">${o}</span>
            <span class="chat-diff__text"
              >${t?(n?.(e)??e.text)||`⋯`:r(e)}</span
            >
          </div>`})}
      </div>
    `)}function fm(){return(fm=e((()=>{q(),m(),lm()})))()}function pm(e){let t=e.currentTarget,n=(t?.closest(`.chat-tool-card__raw`))?.querySelector(`.chat-tool-card__raw-body`);if(!t||!n)return;let r=t.getAttribute(`aria-expanded`)===`true`;t.setAttribute(`aria-expanded`,String(!r)),n.hidden=r}function mm(e,t){return e.kind!==`canvas`||e.render!==`url`||!e.viewId||!e.url?null:{kind:`canvas`,docId:e.viewId,entryUrl:e.url,...e.title?{title:e.title}:{},...e.preferredHeight?{preferredHeight:e.preferredHeight}:{},...e.sandbox?{sandbox:e.sandbox}:{},...t?{rawText:t}:{}}}function hm(e){return U`
    <div class="chat-tool-card__raw">
      <button
        class="chat-inline-disclosure chat-tool-card__raw-toggle"
        type="button"
        aria-expanded="false"
        @click=${pm}
      >
        <span>${B(`chat.toolCards.rawDetails`)}</span>
        <span class="chat-inline-disclosure__chevron" aria-hidden="true">${V.chevronDown}</span>
      </button>
      <div class="chat-tool-card__raw-body" hidden>${gm({text:e})}</div>
    </div>
  `}function gm(e){let{label:t,text:n}=e,r=ds(n)?`markdown-block-art`:``;return U`
    <div class="chat-tool-card__block">
      ${t?U`<div class="chat-tool-card__block-header">
              <span class="chat-tool-card__block-icon">${V.zap}</span>
              <span class="chat-tool-card__block-label">${t}</span>
            </div>`:K}
      <pre class="chat-tool-card__block-content"><code class=${r}>${n}</code></pre>
    </div>
  `}function _m(e){if(typeof e==`string`)return oo(e,km);if(e==null||typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);try{return oo(JSON.stringify(e),km)}catch{return Object.prototype.toString.call(e)}}function vm(e){return U`
    <div class="chat-tool-kv">
      ${Object.entries(e).map(([e,t])=>U`
          <div class="chat-tool-kv__row">
            <span class="chat-tool-kv__key">${e}:</span>
            <span class="chat-tool-kv__value">${_m(t)}</span>
          </div>
        `)}
    </div>
  `}function ym(e){if(!Xa(e))return!1;let t=Object.keys(e);return t.length>0&&t.length<=Om}function bm(e,t){if(!Xa(e))return null;let n=Am[t];if(!n)return e;let r=Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)));return Object.keys(r).length>0?r:null}function xm(e,t){if(t.kind!==`read`&&t.kind!==`edit`&&t.kind!==`write`)return null;let n=t.fileOperations?.length===1?t.fileOperations[0]:void 0;if(n?.operation===`delete`)return null;let r=Z(e.args);if(r)for(let e of[`path`,`file_path`,`filePath`,`notebook_path`]){let t=r[e];if(typeof t==`string`&&t.trim())return t}let i=`${t.targetDetail?`${t.targetDetail}/`:``}${t.target??``}`.trim();return t.fileOperations?n?.path===i?n.path:null:i||null}function Sm(e,t,n){return t&&n?U`
        <button
          class="chat-tool-card__detail chat-tool-card__detail-link"
          type="button"
          title=${B(`chat.toolCards.openFile`)}
          @click=${()=>n({path:t})}
        >
          ${e}
        </button>
      `:U`<div class="chat-tool-card__detail">${e}</div>`}function Cm(e,t){let n=e===`failed`&&t!==void 0?B(`chat.toolCards.exitCode`,{code:String(t)}):B(`chat.toolCards.${e===`succeeded`?`completed`:e===`unknown`?`outcomeUnknown`:e}`);return U`<div class="chat-tool-card__outcome">${n}</div>`}function wm(e,t){return U`
    <div class="chat-tool-term">
      <div class="chat-tool-term__cmd">
        <span class="chat-tool-term__prompt">$</span
        ><code>${rm(e)}</code>
      </div>
      ${t===void 0?K:U`<pre class="chat-tool-term__out"><code>${t}</code></pre>`}
    </div>
  `}function Tm(e,t,n,r,i,a){let o=`${t}:${e.id}`,s=i||r===`skipped`?`raw`:`diff`,c=B(`chat.toolCards.viewMode`),l=[[`diff`,`chat.toolCards.diff`,dm(n,r,void 0,a)],[`raw`,`chat.toolCards.raw`,gm({...i?{label:B(`chat.toolCards.toolError`)}:{},text:e.outputText})]];return U`
    <wa-tab-group
      class="chat-tool-card__modes"
      aria-label=${c}
      .active=${s}
      activation="auto"
      without-scroll-controls
      ${W(e=>ws(e,c))}
    >
      ${l.map(([e,t])=>U`<wa-tab
          slot="nav"
          id=${`${o}-${e}-tab`}
          aria-controls=${`${o}-${e}-panel`}
          panel=${e}
          ?active=${s===e}
        >
          ${B(t)}
        </wa-tab>`)}
      ${l.map(([e,,t])=>U`<wa-tab-panel
          id=${`${o}-${e}-panel`}
          aria-labelledby=${`${o}-${e}-tab`}
          name=${e}
          ?active=${s===e}
        >
          ${t}
        </wa-tab-panel>`)}
    </wa-tab-group>
  `}function Em(e){return e.map(e=>`${e.kind===`add`?`+`:e.kind===`del`?`-`:` `}${e.text}`).join(`
`)}function Dm(e,{messageKey:t,sessionKey:n,agentId:r,onOpenSidebar:i,runActive:a,onOpenWorkspaceFile:o}){let s={kind:`tool-output`,card:e,sessionKey:n,agentId:r},c=ca(e),l=bp(e),u=xp(c),d=Math.max(u?.length??0,e.outputText?.length??0)>_p,f={...c,outputText:d&&i&&!l?oo(u??``,_p):u},p=U`
    ${u!==e.outputText&&e.outputText!==void 0&&!(d&&i)?hm(e.outputText):K}
    ${l?U`<p role="status">${B(`chat.toolCards.fullOutputUnavailable`)}</p>`:(d||f.outputTruncated)&&i?U`<button
              class="btn btn--sm"
              type="button"
              @click=${()=>i(s)}
            >
              ${B(`chat.toolCards.showFullOutput`)}
            </button>`:K}
  `,m=hi({name:f.name,args:f.args,details:f.details}),h=sp({name:f.name,args:f.args}),g=m.kind===`read`||m.kind===`search`||m.kind===`fetch`,_=g?h.detail:mp(h),v=f.outputText!==void 0,y=!!f.inputText?.trim(),b=ia(f),x=di(f,a),S=xm(f,m),C=!!i,w=(f.preview?.kind===`canvas`?mm(f.preview,f.outputText):null)??s,T=C?U`
        <openclaw-tooltip content=${B(`chat.toolCards.openDetails`)}>
          <button
            class="chat-tool-card__action-btn"
            type="button"
            @click=${()=>i?.(w)}
            aria-label=${B(`chat.toolCards.openDetails`)}
          >
            <span class="chat-tool-card__action-icon">${V.panelRightOpen}</span>
          </button>
        </openclaw-tooltip>
      `:K,E=m.diff&&m.diff.length>0?Ps(Em(m.diff),B(`common.copy`)):K;if(m.kind===`command`&&(m.command||m.code)&&!f.preview){let e=Z(f.args),t=m.code?e?.code===m.code?`code`:`input`:`command`,n=Object.fromEntries(Object.entries(e??{}).filter(([e])=>e!==t));return U`
      <div class="chat-tool-card chat-tool-card--flush ${b?`chat-tool-card--error`:``}">
        <div class="chat-tool-card__actions">${T}</div>
        ${m.code?t===`input`?U`${v?gm({text:f.outputText}):K}
                  <details class="chat-tool-card__input">
                    <summary>${B(`chat.toolCards.toolInput`)}</summary>
                    ${gm({text:m.code})}
                  </details>`:U`${gm({label:B(`chat.toolCards.toolInput`),text:m.code})}
                ${v?gm({text:f.outputText}):K}`:wm(m.command,f.outputText)}
        ${Object.keys(n).length>0?vm(n):K}
        ${p} ${Cm(x,f.exitCode)}
      </div>
    `}if((m.kind===`edit`||m.kind===`write`)&&m.diff&&m.diff.length>0){let e=m.fileOperations?.[0]??{path:m.target??``};return U`
      <div class="chat-tool-card ${b?`chat-tool-card--error`:``}">
        <div class="chat-tool-card__header">
          ${Sm(S??m.target??``,S,o)}
          <div class="chat-tool-card__actions">${E}${T}</div>
        </div>
        ${v?Tm(f,t,m.diff,x,b,e):dm(m.diff,x,void 0,e)}
        ${p} ${Cm(x,f.exitCode)}
      </div>
    `}let D=g?bm(f.args,m.kind):f.args,O=y&&(!g||D!==null);return U`
    <div class="chat-tool-card ${b?`chat-tool-card--error`:``}">
      ${_||C?U`
              <div class="chat-tool-card__header">
                ${_?m.kind===`read`?Sm(_,S,o):U`<div class="chat-tool-card__detail">${_}</div>`:K}
                <div class="chat-tool-card__actions">${T}</div>
              </div>
            `:K}
      ${O?ym(D)?vm(D):gm({label:B(`chat.toolCards.toolInput`),text:f.inputText}):K}
      ${v?f.preview?.kind===`canvas`?hm(f.outputText):gm({...b?{label:B(`chat.toolCards.toolError`)}:{},text:f.outputText}):b?gm({label:B(`chat.toolCards.toolError`),text:B(`chat.toolCards.noOutputFailed`)}):K}
      ${p} ${Cm(x,f.exitCode)}
    </div>
  `}var Om,km,Am;function jm(){return(jm=e((()=>{q(),G(),Ds(),H(),fs(),ht(),bs(),m(),Qr(),Fi(),op(),Kf(),om(),fm(),Om=12,km=400,Am={read:new Set([`path`,`file_path`,`filePath`,`notebook_path`]),search:new Set([`pattern`,`query`,`glob`,`path`]),fetch:new Set([`url`])}})))()}function Mm(e,t=!0,n){let r=e.filter(ia),i=n?Kn(n).outcomes:void 0,a=i?.failed??r.length,o=i?.skipped??e.filter(fa).length,s=r[0];if(a===0&&o===0)return K;let c=s?.exitCode===void 0?B(`chat.toolCards.failed`):B(`chat.toolCards.exitCode`,{code:String(s.exitCode)});return U`${a>0?U`<span class="chat-tool-failure"
          >${t?B(`chat.toolCards.failureCount`,{count:String(a)}):c}</span
        >`:K}${o>0?U`<span class="chat-tool-skipped"
          >${t?B(`chat.toolCards.skippedCount`,{count:String(o)}):B(`chat.toolCards.skipped`)}</span
        >`:K}`}function Nm(){return(Nm=e((()=>{q(),Xn(),m(),Fi()})))()}function Pm(e,t={}){let n=e.contentWindow;if(!n)return Promise.reject(Error(`widget frame is unavailable`));let r=t.id??Array.from(crypto.getRandomValues(new Uint32Array(4)),e=>e.toString(16).padStart(8,`0`)).join(``),i=t.timeoutMs??zm;return new Promise((e,t)=>{let a=()=>{window.removeEventListener(`message`,s),globalThis.clearTimeout(c)},o=e=>{a(),t(e)},s=t=>{if(t.source!==n)return;let i=t.data;i&&i.type===Rm&&i.id===r&&(typeof i.error==`string`?o(Error(i.error)):typeof i.dataUrl!=`string`||!i.dataUrl.startsWith(`data:image/png;base64,`)||i.dataUrl.length>Bm?o(Error(`widget returned an invalid snapshot`)):(a(),e(i.dataUrl)))};window.addEventListener(`message`,s);let c=globalThis.setTimeout(()=>o(new Vm(`widget snapshot request timed out`)),i);try{n.postMessage({type:Lm,id:r},`*`)}catch(e){o(e instanceof Error?e:Error(String(e)))}})}function Fm(e,t){let n=document.createElement(`a`);n.href=e,n.download=t,n.click()}async function Im(e,t,n,r={}){let i=Array.from((n??``).trim(),e=>{let t=e.codePointAt(0)??0;return t<=31||t===127||`<>:"/\\|?*`.includes(e)?`-`:e}).join(``).replace(/\s+/g,`-`).replace(/-+/g,`-`).replace(/^[. -]+|[. -]+$/g,``),a=oo(i,120).replace(/[. -]+$/g,``)||`widget`,o=(r.requestSnapshot??Pm)(t,r.timeoutMs===void 0?{}:{timeoutMs:r.timeoutMs});if(e===`copy`){C();let e=r.copyImage??(e=>{if(!navigator.clipboard?.write||typeof ClipboardItem>`u`)throw Error(`image clipboard is unavailable`);let t=e.then(async e=>(await globalThis.fetch(e)).blob());return t.catch(()=>{}),navigator.clipboard.write([new ClipboardItem({"image/png":t})])});try{return await e(o),`png`}catch(e){let t=await o.then(()=>null,e=>e);if(t instanceof Vm)return`rerender-required`;throw t??e}}try{let e=await o;return(r.download??Fm)(e,`${a}.png`),`png`}catch(e){if(!(e instanceof Vm))throw e;let n;if(r.documentHtml!==void 0)n=new Blob([r.documentHtml],{type:`text/html`});else{let i=t.getAttribute(`src`);if(!i)throw Error(`widget document URL is unavailable`,{cause:e});let a=new URL(i,window.location.href);if(a.origin!==window.location.origin)throw Error(`widget document URL is not same-origin`,{cause:e});let o=await(r.fetch??globalThis.fetch)(a.href);if(!o.ok)throw Error(`widget document download failed (${o.status})`,{cause:e});n=await o.blob()}let i=URL.createObjectURL(n);try{(r.download??Fm)(i,`${a}.html`)}finally{URL.revokeObjectURL(i)}return`html`}}var Lm,Rm,zm,Bm,Vm;function Hm(){return(Hm=e((()=>{pe(),Lm=`openclaw:widget-snapshot-request`,Rm=`openclaw:widget-snapshot`,zm=5e3,Bm=33554432,Vm=class extends Error{}})))()}var Um;function Wm(){return(Wm=e((()=>{Ya(),q(),Rn(),Nt(),Vt(),Mt(),en(),xs(),H(),gs(),Gt(),m(),vp(),pe(),Br(),kd(),Te(),R(),i(),Ep(),Um=class extends nt{constructor(){super(),this.latest=!1,this.failedImages=new Set,this.subscriptions=new Ie(this),this.open=()=>{this.opensExternally?this.openExternal():this.openPanel()},this.openPanel=()=>{let e=Ls(this.preview);e&&this.dispatchEvent(new CustomEvent(Ct,{detail:{open:!0,browserTab:e},bubbles:!0,composed:!0}))},this.onMenuSelect=e=>{let t=this.preview?.url;t&&(e.detail.item.value===`copy-url`?ge(t,()=>this.isConnected&&this.preview?.url===t):e.detail.item.value===`open-new-tab`?this.openExternal():e.detail.item.value===`open-within-openclaw`&&this.openPanel())},this.subscriptions.watchStore(()=>this.context?.gateway),this.subscriptions.watchStore(()=>this.context?.config),this.subscriptions.watchStore(()=>this.context?.theme)}static{this.styles=[Mn(wp),Ln`
      :host {
        display: block;
        max-width: 320px;
        margin-block: 6px;
      }
      .card {
        overflow: hidden;
        background: var(--card);
        border: 1px solid var(--border);
        border-radius: var(--radius-md);
      }
      .shot {
        display: block;
        width: 100%;
        padding: 0;
        background: none;
        border: 0;
        cursor: default;
      }
      .shot img {
        display: block;
        width: 100%;
        height: auto;
        max-height: 240px;
        object-fit: cover;
        object-position: top;
      }
      .shot.social img {
        aspect-ratio: 1.91;
        object-fit: contain;
        object-position: center;
      }
      .bar {
        position: relative;
        display: flex;
        align-items: center;
        gap: 8px;
        min-width: 0;
        padding: 7px 8px 7px 10px;
      }
      .shot + .bar {
        border-top: 1px solid var(--border);
      }
      .icon {
        display: flex;
        flex: 0 0 20px;
        align-items: center;
        justify-content: center;
        color: var(--muted);
      }
      .icon svg,
      .icon img {
        width: 16px;
        height: 16px;
      }
      .icon img {
        box-sizing: border-box;
        width: 20px;
        height: 20px;
        padding: 2px;
        object-fit: contain;
        /* Site icons are often dark on transparent; retain their colors on a light plate. */
        background: var(--button-icon-bg);
        border-radius: 4px;
      }
      .identity {
        display: grid;
        flex: 1;
        min-width: 0;
        gap: 1px;
      }
      .title,
      .url {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
      }
      .title {
        font-size: 0.8rem;
        font-weight: 500;
      }
      .url {
        color: var(--muted);
        font-size: 0.72rem;
      }
      .actions {
        display: flex;
        flex: none;
        gap: 2px;
        align-items: center;
        opacity: 0;
        transition: opacity 120ms ease;
      }
      .card:hover .actions,
      .card:focus-within .actions,
      .actions:has(wa-dropdown[open]) {
        opacity: 1;
      }
      .actions button {
        display: flex;
        align-items: center;
        padding: 4px 8px;
        color: var(--text);
        font: inherit;
        font-size: 0.75rem;
        background: none;
        border: 0;
        border-radius: var(--radius-sm);
        cursor: default;
      }
      .actions button:hover {
        background: var(--panel-hover);
      }
      .actions button:focus-visible {
        outline: 2px solid var(--accent);
        outline-offset: -2px;
      }
      .actions .more svg {
        width: 16px;
        height: 16px;
      }
      .shot[data-new-tab-action],
      .actions button[data-new-tab-action] {
        cursor: pointer;
      }
    `]}get canLoadPagePreview(){return!!(this.context?.config.current.automaticallyFetchFavicons&&Rr(this.context.gateway.snapshot,`controlUi.linkPreview`,`operator.read`,{requireAdvertisement:!1}))}updatePagePreview(){let e=this.context?.gateway.snapshot.client,t=this.preview?.url;if(!this.canLoadPagePreview||!e||!t){this.pageIdentity=void 0,this.pagePreview=void 0;return}if(this.pagePreviewCurrent)return;let n={client:e,url:t,generation:e.connectionGeneration,recoveryScope:e.recoveryScope};this.pageIdentity=n,this.pagePreview=void 0,this.failedImages.clear(),Ad(e,t).then(e=>{this.isConnected&&this.pageIdentity===n&&this.pagePreviewCurrent&&(this.pagePreview=e)})}get pagePreviewCurrent(){let e=this.pageIdentity,t=this.context?.gateway.snapshot.client;return!!(e&&t&&this.canLoadPagePreview&&e.client===t&&e.url===this.preview?.url&&e.generation===t.connectionGeneration&&e.recoveryScope===t.recoveryScope)}disconnectedCallback(){this.pageIdentity=void 0,this.pagePreview=void 0,super.disconnectedCallback()}updated(){this.updatePagePreview();let e=this.preview,t=this.context,n=t?.gateway.snapshot,r=n?.client,i=this.revision;if(!e||!t||!n||!r||!dn(n)||!this.latest||!i){(!this.latest||!n||!dn(n))&&(this.requestIdentity=void 0,this.thumbnailSrc=void 0);return}let a=JSON.stringify([Do(e),i]);if(this.requestIdentity?.key===a&&this.requestIdentity.client===r)return;let o={client:r,key:a};this.requestIdentity=o,this.thumbnailSrc=void 0,wf({client:r,tab:e,revision:i,resourceBasePath:t.resourceBasePath,authToken:mt({hello:n.hello,settings:{token:t.gateway.connection.token},password:t.gateway.connection.password})}).then(e=>{this.requestIdentity===o&&(this.thumbnailSrc=e)})}get opensExternally(){return this.context?.theme.settings.openLinksExternally===!0}openExternal(){let e=Ve(this.preview?.url??``,window.location.href);e&&!vt(e)&&De(e)}render(){let e=this.preview;if(!e)return K;let t=this.requestIdentity?.client===this.context?.gateway.snapshot.client&&this.requestIdentity?.key===JSON.stringify([Do(e),this.revision])?this.thumbnailSrc:void 0,n=this.pagePreviewCurrent?this.pagePreview:void 0,r=n?.faviconDataUrl,i=t&&!this.failedImages.has(t)?t:n?.imageDataUrl,a=e.url;try{a=new URL(e.url??``).host||e.url}catch{}let o=e.title?.trim()||n?.title||a||B(`browser.title`),s=e.url?`${o} — ${e.url}`:o;return U`
      <div class="card">
        ${i&&!this.failedImages.has(i)?U`
                <button
                  type="button"
                  class=${i===t?`shot`:`shot social`}
                  aria-label=${s}
                  title=${this.opensExternally?B(`browser.openExternal`):B(`browser.openPanel`)}
                  ?data-new-tab-action=${this.opensExternally}
                  @click=${this.open}
                >
                  <img
                    src=${i}
                    alt=""
                    @error=${()=>{this.failedImages.add(i),this.requestUpdate()}}
                  />
                </button>
              `:K}
        <div class="bar">
          <span class="icon" aria-hidden="true"
            >${r&&!this.failedImages.has(r)?U`<img
                    src=${r}
                    alt=""
                    @error=${()=>{this.failedImages.add(r),this.requestUpdate()}}
                  />`:V.globe}</span
          >
          <span class="identity">
            <span class="title">${o}</span>
            ${e.url?U`<span class="url">${e.url}</span>`:K}
          </span>
          <span class="actions">
            <button
              type="button"
              title=${this.opensExternally?B(`browser.openExternal`):B(`browser.openPanel`)}
              ?data-new-tab-action=${this.opensExternally}
              @click=${this.open}
            >
              ${B(`browser.open`)}
            </button>
            <wa-dropdown
              class="session-menu"
              placement="bottom-end"
              @wa-select=${this.onMenuSelect}
            >
              <button
                slot="trigger"
                type="button"
                class="more"
                aria-label=${B(`browser.moreActions`)}
                aria-haspopup="menu"
                title=${B(`browser.moreActions`)}
              >
                ${V.moreHorizontal}
              </button>
              <wa-dropdown-item class="session-menu__item" value="copy-url">
                <span slot="icon" class="session-menu__icon" aria-hidden="true">${V.copy}</span>
                ${B(`browser.copyUrl`)}
              </wa-dropdown-item>
              <wa-dropdown-item
                class="session-menu__item"
                value=${this.opensExternally?`open-within-openclaw`:`open-new-tab`}
                ?data-new-tab-action=${!this.opensExternally}
              >
                <span slot="icon" class="session-menu__icon" aria-hidden="true"
                  >${this.opensExternally?V.globe:V.externalLink}</span
                >
                ${this.opensExternally?B(`browser.openWithinOpenClaw`):B(`browser.openNewTab`)}
              </wa-dropdown-item>
            </wa-dropdown>
          </span>
        </div>
      </div>
    `}},Q([Ga({context:yn,subscribe:!0}),X({attribute:!1})],Um.prototype,`context`,void 0),Q([X({attribute:!1})],Um.prototype,`preview`,void 0),Q([X({attribute:!1})],Um.prototype,`revision`,void 0),Q([X({type:Boolean})],Um.prototype,`latest`,void 0),Q([Y()],Um.prototype,`thumbnailSrc`,void 0),Q([Y()],Um.prototype,`pagePreview`,void 0),customElements.get(`openclaw-browser-tab-card`)||customElements.define(`openclaw-browser-tab-card`,Um)})))()}async function Gm(e,t,n,r,i){let a=i||t.viewId?.trim();if(!a)return;let o=e.currentTarget;if(o instanceof HTMLButtonElement){o.disabled=!0,o.title=o.ariaLabel=B(`chat.toolCards.pinToDashboardPending`);try{let e={name:r,...t.title?.trim()?{title:t.title.trim()}:{}};await(i?n.pinMcpApp({...e,viewId:a}):n.pinWidget({...e,docId:a})),o.title=o.ariaLabel=B(`chat.toolCards.pinnedToDashboard`),o.dataset.pinned=`true`}catch{o.disabled=!1,o.ariaLabel=B(`chat.toolCards.pinToDashboard`);let e=B(`chat.toolCards.pinToDashboardFailed`);o.title=e,Qe({message:e})}}}function Km(e){let t=e.viewId?.trim(),n=e.url?.trim();if(!t||!n)return!1;try{let e=new URL(n,`http://localhost`);if(e.origin!==`http://localhost`||!e.pathname.startsWith(`/__openclaw__/canvas/documents/`))return!1;let[r,i]=e.pathname.slice(31).split(`/`,2);if(!r||!i)return!1;let a=decodeURIComponent(r);return/^[A-Za-z0-9._-]+$/u.test(a)&&a===t}catch{return!1}}function qm(e,t){if(!fh.has(e)&&fh.size>=mh){let e=fh.keys().next().value;e!==void 0&&fh.delete(e)}fh.set(e,t)}function Jm(e,t){let n=t;n&&n.type===oh&&hp(e,n.prompt,e.getAttribute(`src`)??``)}function Ym(e){let t=e.contentWindow;if(yh.has(e)||!vh.has(e)||!t)return;let n=gh.get(t);n&&(yh.add(e),gh.delete(t),n.addEventListener(`message`,t=>{Jm(e,t.data)}),n.start(),n.postMessage({type:sh}))}function Xm(){typeof window>`u`||bh.has(window)||(bh.add(window),window.addEventListener(`message`,e=>{let t=e.data;if(!t||t.type!==ah)return;let n=e.source,r=e.ports[0];if(n&&r&&e.origin===`null`){if(_h.has(n)){r.close();return}_h.add(n),gh.set(n,r);for(let e of dh)if(e.contentWindow===n){Ym(e);return}}}))}function Zm(){typeof window>`u`||hh.has(window)||(hh.add(window),window.addEventListener(`message`,e=>{let t=e.data;if(t&&t.type===ih&&typeof t.height==`number`)for(let n of dh){if(!n.isConnected){dh.delete(n);continue}if(n.contentWindow===e.source){let e=Math.min(Math.max(Math.trunc(t.height),lh),uh);n.style.height=`${e}px`,n.style.minHeight=`${e}px`;let r=n.getAttribute(ph)??n.getAttribute(`src`);r&&qm(r,e);return}}}))}function Qm(e){return An(`${e.sandbox??``}\u0000${e.frameKey??``}\u0000${+!!e.src}\u0000${e.connectionGeneration??0}\u0000${e.height??``}`,Sh(e))}function $m(e,t,n){if(e.mcpApp)return yt(`mcp-app-view`,Ch).catch(e=>{console.error(`[openclaw] failed to load MCP App view`,e)}),U`<mcp-app-view
      .sessionKey=${n?.sessionKey??``}
      .viewId=${e.mcpApp.viewId}
      .height=${e.preferredHeight??600}
      .title=${e.title?.trim()||B(`mcpApp.title`)}
    ></mcp-app-view>`;if(e.sandbox!==`strict`&&Km(e))return yt(`openclaw-canvas-widget-view`,wh).catch(e=>console.error(`[openclaw] failed to load widget view`,e)),An(`${e.viewId}\0${n?.sessionKey??``}`,U`
        <openclaw-canvas-widget-view
          .docId=${e.viewId.trim()}
          .sessionKey=${n?.sessionKey??``}
          .messageTimestamp=${n?.messageTimestamp}
          .title=${e.title?.trim()||B(`chat.toolCards.canvas`)}
          .preferredHeight=${e.preferredHeight}
          .allowScripts=${t.includes(`allow-scripts`)}
          .connectionGeneration=${v()}
        ></openclaw-canvas-widget-view>
      `);let r=lp(e.url);return Qm({title:e.title?.trim()||B(`chat.toolCards.canvas`),src:ep(e.url,n?.canvasPluginSurfaceUrl,n?.allowExternalEmbedUrls??!1),frameKey:e.url?.trim()||e.viewId?.trim(),connectionGeneration:r?v():void 0,height:e.preferredHeight,sandbox:t,promptCapable:r})}function eh(e,t){let n=e.detail.item.value;if(n===`raw-details`){let t=e.currentTarget,n=(t instanceof HTMLElement?t.closest(`.chat-tool-card__widget-host`):null)?.querySelector(`.chat-tool-card__widget-raw .chat-tool-card__raw-toggle`);n?.click(),(t instanceof HTMLElement?t.querySelector(`[data-raw-label]`):null)?.replaceChildren(B(n&&n.getAttribute(`aria-expanded`)===`true`?`chat.toolCards.hideRawDetails`:`chat.toolCards.showRawDetails`));return}if(n!==`copy`&&n!==`download`)return;let r=e.currentTarget,i=r instanceof HTMLElement?r.closest(`.chat-tool-card__preview`)?.querySelector(`.chat-tool-card__preview-frame`):null;if(!i){Qe({message:B(`chat.toolCards.widgetExportFailed`)});return}let a=i.closest(`openclaw-canvas-widget-view`)?.documentHtml;Im(n,i,t,{documentHtml:a}).then(e=>{e===`rerender-required`?Qe({message:B(`chat.toolCards.widgetExportRerender`)}):e===`html`?Qe({message:B(`chat.toolCards.widgetExportHtmlFallback`)}):n===`copy`&&Qe({message:B(`common.copied`)})}).catch(()=>{Qe({message:B(`chat.toolCards.widgetExportFailed`)})})}function th(){let e,t;return n=>{e?.disconnect(),e=void 0,t!==void 0&&(cancelAnimationFrame(t),t=void 0),n instanceof HTMLElement&&typeof ResizeObserver<`u`&&(t=requestAnimationFrame(()=>{t=void 0;let r=n.closest(`.chat-thread`);r&&(e=new ResizeObserver(()=>{let e=r.getBoundingClientRect().left+r.clientLeft+r.clientWidth-n.getBoundingClientRect().right;n.toggleAttribute(`data-widget-actions-above`,e<40)}),e.observe(n),e.observe(r))}))}}function nh(e,t){let n=!e.mcpApp&&lp(e.url);return!n&&!t?K:U`
    <wa-dropdown
      class="chat-tool-card__widget-actions"
      placement="bottom-end"
      aria-label=${B(`chat.toolCards.widgetActions`)}
      @wa-select=${t=>eh(t,e.title)}
    >
      <button
        slot="trigger"
        type="button"
        class="btn btn--ghost btn--icon chat-tool-card__widget-actions-trigger"
        aria-label=${B(`chat.toolCards.widgetActions`)}
        title=${B(`chat.toolCards.widgetActions`)}
      >
        ${V.moreHorizontal}
      </button>
      ${n?[[`copy`,V.copyImage,`chat.toolCards.copyAsImage`],[`download`,V.download,`chat.toolCards.downloadAsImage`]].map(([e,t,n])=>U`
                <wa-dropdown-item class="session-menu__item" value=${e}>
                  <span slot="icon" class="session-menu__icon" aria-hidden="true">${t}</span>
                  <span class="session-menu__text">${B(n)}</span>
                </wa-dropdown-item>
              `):K}
      ${t?U`<wa-dropdown-item class="session-menu__item" value="raw-details">
              <span slot="icon" class="session-menu__icon" aria-hidden="true"
                >${V.fileText}</span
              >
              <span class="session-menu__text" data-raw-label
                >${B(`chat.toolCards.showRawDetails`)}</span
              >
            </wa-dropdown-item>`:K}
    </wa-dropdown>
  `}function rh(e,t,n){if(!e)return K;if(e.kind===`browser-tab`)return t===`chat_tool`?U`<openclaw-browser-tab-card
          .preview=${e}
          .revision=${n?.browserTabRevision}
          .latest=${n?.browserTabLatest??!1}
        ></openclaw-browser-tab-card>`:K;if(e.kind!==`canvas`||t===`chat_tool`||e.surface!==`assistant_message`)return K;let r=e.mcpApp?void 0:Ef(e.url);if(r)return yt(`openclaw-youtube-video`,Th).catch(e=>console.error(`[openclaw] failed to load YouTube player`,e)),An(`${n?.sessionKey??``}\0${r.watchUrl}`,U`<openclaw-youtube-video
        .video=${r}
        .videoTitle=${e.title??``}
        .enabled=${n?.embedSandboxMode!==`strict`&&e.sandbox!==`strict`}
      >
        <a href=${r.watchUrl} target="_blank" rel="noopener noreferrer">
          ${e.title?.trim()||B(`chat.youtube.video`)}${V.externalLink}
        </a>
      </openclaw-youtube-video>`);let i=e.mcpApp?`mcp-app`:`canvas-html`,a=Wf(n?.embedSandboxMode??`scripts`,e.sandbox),o=n?.boardProvider,s=e.mcpApp?.viewId?.trim(),c=e.viewId?.trim(),l=e.mcpApp?s?pp(s):void 0:e.boardWidgetName||(c?Sf(c):void 0),u=!!(l&&o?.snapshot$.value.widgets.find(e=>e.name===l)),d=B(u?`chat.toolCards.pinnedToDashboard`:`chat.toolCards.pinToDashboard`),f=o&&(i===`mcp-app`?o.canPinMcpApps:o.canPinWidgets)&&l&&(i===`canvas-html`&&a.includes(`allow-scripts`)&&Km(e)||i===`mcp-app`&&s)?U`<button
          class="btn btn--ghost btn--icon chat-tool-card__widget-action"
          type="button"
          data-pin-widget
          ?disabled=${u}
          ?data-pinned=${u}
          title=${d}
          aria-label=${d}
          @click=${t=>void Gm(t,e,o,l,s)}
        >
          ${V.pin}
        </button>`:K,p=nh(e,!!n?.rawText),m=f===K&&p===K?K:U`<div class="chat-tool-card__preview-actions" data-widget-actions>
          ${f} ${p}
        </div>`;return U`
    <div
      ${m===K?K:W(th())}
      class="chat-tool-card__preview"
      data-content-kind=${i}
      ?data-has-widget-actions=${m!==K}
      data-kind="canvas"
      data-surface=${t}
    >
      ${m}
      <div class="chat-tool-card__preview-panel" data-side="canvas">
        ${$m(e,a,n)}
      </div>
    </div>
  `}var ih,ah,oh,sh,ch,lh,uh,dh,fh,ph,mh,hh,gh,_h,vh,yh,bh,xh,Sh,Ch,wh,Th;function Eh(){return(Eh=e((()=>{q(),Sn(),Wn(),G(),St(),H(),Jf(),gs(),m(),Di(),Vf(),S(),op(),Bf(),Be(),wd(),Hm(),Wm(),co(),da(),ih=`openclaw:widget-size`,ah=`openclaw:widget-prompt-offer`,oh=`openclaw:widget-prompt`,sh=`openclaw:widget-prompt-host-ready`,ch=`openclaw:widget-chat-host`,lh=48,uh=8e3,dh=new Set,fh=new Map,ph=`data-frame-key`,mh=100,hh=new WeakSet,gh=new WeakMap,_h=new WeakSet,vh=new WeakSet,yh=new WeakSet,bh=new WeakSet,xh=class extends Gn{render(e){Zm(),Ed();let t=e.sandbox??``,n=this.frame&&yh.has(this.frame)?this.frame.getAttribute(`src`):e.src??``,r=e.frameKey||n,i=(r?fh.get(r):void 0)??e.height;return e.promptCapable&&Xm(),An(n,U`
        <iframe
          ${W(e=>{e instanceof HTMLIFrameElement&&(this.frame&&this.frame!==e&&dh.delete(this.frame),this.frame=e)})}
          src=${n||K}
          data-frame-key=${r||K}
          class="chat-tool-card__preview-frame"
          title=${e.title}
          sandbox=${t}
          style=${i?`height:${i}px;min-height:${i}px`:``}
          @load=${t=>{if(t.currentTarget instanceof HTMLIFrameElement){let n=t.currentTarget;dh.add(n),e.promptCapable&&(vh.add(n),Ym(n)),Od(n),n.contentWindow?.postMessage({type:ch},`*`)}}}
        ></iframe>
      `)}},Sh=En(xh),Ch=async()=>{(await ao(()=>import(`./mcp-app-view-registration-f68t3LcT.js`),__vite__mapDeps([4,5,6,7,8,9,10,3,11,12,13,14,15,16]),import.meta.url)).registerMcpAppView()},wh=()=>ao(()=>import(`./canvas-widget-view-C6adrCsM.js`),__vite__mapDeps([17,5,6,7,9,18,3,11,12,13,14,15,16]),import.meta.url),Th=()=>ao(()=>import(`./youtube-video-card-CwTrsGat.js`),__vite__mapDeps([19,3]),import.meta.url)})))()}function Dh(e,t,n){let r=e.flatMap(e=>e.messages.flatMap(t=>ji(t.message).filter(e=>e.browserTab).map(t=>({card:t,groupKey:e.key}))));if(r.length===0)return[];let i=new Set,a=new Set;return r.toReversed().flatMap(({card:e,groupKey:t})=>{if(!e.browserTab||di(e,!1)!==`succeeded`)return[];let n=Do(e.browserTab);if(i.has(n))return[];i.add(n);let r=e.preview;if(r?.kind!==`browser-tab`)return[];let o=r.url.length<2047?JSON.stringify([Qo(r),r.url]):n;return a.has(o)?[]:(a.add(o),[{card:e,groupKey:t,preview:r}])}).toReversed().map(({card:e,groupKey:r,preview:i})=>{let a=Cf(e),o=rh(i,`chat_tool`,{browserTabRevision:a?JSON.stringify([t.sessionKey,a]):void 0,browserTabLatest:!!(a&&t.latestBrowserTabs?.get(Do(i))?.revision===a)});return n?.(r,o),o})}function Oh(e,t){let n=new Map;for(let r of e)Dh(r.groups,t,(e,t)=>{let i=r.previewAfterGroup?.get(e)??r.key,a=n.get(i)??[];a.push(t),n.set(i,a)});return n}function kh(e,t){let n=t?.pluginToolIcons?.get(t.toolName);return n?U`<span
      class="chat-tool-activity-icon"
      aria-hidden="true"
      style=${Fn({maskImage:`url("${n.url}")`})}
    >
      <img hidden src=${n.url} alt="" @error=${n.onError} />
    </span>`:V[e]??V.puzzle}function Ah(e){if(e.kind===`write`)return`write`;if(e.kind!==`edit`)return;let t=new Set(e.fileOperations?.map(({operation:e})=>e));return t.size>1?`mixed`:t.values().next().value??`update`}function jh(e,t){let n=Ah(e);if(n){let[e,r,i]=Gh[n];return B(`chat.toolCards.verbs.${t===`running`?e:t===`succeeded`?r:i}`)}let r=Wh[e.kind];return r?B(r):void 0}function Mh(e){return oo((nr(e).command||e).replace(/\s+/gu,` `).trim(),200)}function Nh(e,t){return t!==`edit`&&t!==`write`?e:Ue(e)}function Ph(e){let t=e.currentTarget;if(!(t instanceof HTMLElement))return;let n=t.querySelector(`.chat-tool-disclosure__content`);t.classList.toggle(`chat-tool-disclosure--overflowing`,!!(n&&n.scrollWidth>n.clientWidth))}function Fh(e,t,n,r,i,a){if(t.title)return U`<span class="chat-tool-row__title">${t.title}</span>`;if(t.kind===`command`&&t.command)return U`
      <span class="chat-tool-row__prompt" aria-hidden="true">$</span>
      <code class="chat-tool-row__cmd"
        >${rm(Mh(t.command))}</code
      >
    `;let o=jh(t,n);if(o&&t.target){let r=n===`succeeded`?t.stat:n===`running`&&(t.kind===`edit`||t.kind===`write`)?e.liveDiffStat:void 0;return U`
      <span class="chat-tool-row__verb">${o}</span>
      ${i&&a?U`<button
              class="chat-tool-row__file-link"
              type="button"
              title=${B(`chat.toolCards.openFile`)}
              @click=${e=>{e.stopPropagation(),a({path:i})}}
            >
              ${Nh(t.target,t.kind)}
            </button>`:U`<span class="chat-tool-row__target"
              >${Nh(t.target,t.kind)}</span
            >`}
      ${r?um(r):K}
      ${!i&&t.targetDetail&&t.kind!==`edit`&&t.kind!==`write`?U`<span class="chat-tool-row__detail">${t.targetDetail}</span>`:K}
    `}let s=zh(e),c=Wi(s.label)??s.label,l=Ii(s.name,c);return U`
    ${!l||s.label!==r?U`<span class="chat-tool-msg-summary__label">${c}</span>`:K}
    ${l?U`<span class="chat-tool-msg-summary__names">${l}</span>`:K}
  `}function Ih(e){return Array.isArray(e)?e.flatMap(e=>{let t=Z(e);return typeof t?.step!=`string`||t.status!==`pending`&&t.status!==`in_progress`&&t.status!==`completed`?[]:[{step:t.step,status:t.status}]}):[]}function Lh(e,t){if(e.name.trim().toLowerCase()!==`progress_card`)return null;let n=Z(e.args),r=Ih(n?.plan),i=typeof n?.markdown==`string`?n.markdown.trim():``,a=r.filter(e=>e.status===`completed`).length,o=r.find(e=>e.status===`in_progress`)??r.find(e=>e.status===`pending`)??r.findLast(e=>e.status===`completed`),s=t===`skipped`?B(`sessionProgressCard.receipt.skipped`):t===`failed`?B(`sessionProgressCard.receipt.failed`):t===`running`?B(`sessionProgressCard.receipt.updating`):r.length>0?B(`sessionProgressCard.receipt.updated`,{completed:String(a),current:o?.step??``,total:String(r.length)}):B(i?`sessionProgressCard.receipt.noteUpdated`:`sessionProgressCard.receipt.cleared`);return U`<div class="chat-tool-msg-collapse chat-progress-card-receipt">
    <div class="chat-tool-msg-summary chat-tool-row" role="status">
      <span class="chat-tool-msg-summary__icon">${kh(`listChecks`)}</span>
      <span class="chat-progress-card-receipt__text">${s}</span>
    </div>
  </div>`}function Rh(e,t){return t?.trim()?t:typeof e.args==`string`?Yi(e.inputText?.trim()?e.inputText:e.args):void 0}function zh(e){let t=sp({name:e.name,args:e.args,detailMode:`explain`}),n=t.detail?.trim();if(e.name.trim().toLowerCase()===`message`)return{label:t.label,name:n||void 0};let r=wi(e.args)||n;return r?{label:t.label,name:r}:{label:Rh(e,void 0)??t.label}}function Bh(e,t,n){if(t.title)return t.title;if(t.kind===`command`&&t.command)return`$ ${Mh(t.command)}`;let r=jh(t,n);if(r&&t.target)return`${r} ${t.target}`;let i=zh(e);return[i.label,i.name].filter(Boolean).join(` `)}function Vh(e){let t=ui(e.details);return t.length===0?K:U`
    <div class="chat-tool-reviews">
      ${t.map(e=>{let t=[`denied`,`timed_out`,`aborted`].includes(e.status),n=e.status===`in_progress`?`reviewing`:e.status===`timed_out`?`timedOut`:e.status;return U`
          <div class="chat-tool-review" data-review-status=${e.status}>
            <div class="chat-tool-review__header">
              <span class="chat-tool-review__icon"
                >${t?V.shieldX:V.shieldCheck}</span
              >
              <span class="chat-tool-review__label"
                >${B(`chat.toolCards.review.${n}`,{reviewer:e.label})}</span
              >
              ${[{kind:`risk`,level:e.riskLevel},{kind:`authorization`,level:e.userAuthorization}].map(({kind:e,level:t})=>t?U`<span class="chat-tool-review__chip"
                      >${B(`chat.toolCards.review.${e}`,{level:t})}</span
                    >`:K)}
            </div>
            ${e.status===`in_progress`?K:U`<div class="chat-tool-review__rationale">
                    ${e.rationale??B(`chat.toolCards.review.noRationale`)}
                  </div>`}
          </div>
        `})}
    </div>
  `}function Hh(e,t){let n=ca(e),r=di(n,t.runActive),i=Lh(n,r);if(i&&!t.children)return Uh(e,t,i);let a=hi({name:n.name,args:n.args,details:n.details}),o=sp({name:n.name,args:n.args,detailMode:`explain`}),s=t.activityCards??[n],c=s.some(e=>di(e,t.runActive)===`running`),l=t.expanded,u=Kh[a.kind]??o.icon,d=xm(n,a),f=!!d,p=U`
    <span
      class="chat-tool-msg-summary__icon"
      role="img"
      aria-label=${o.name}
      title=${o.name}
      >${kh(u,{toolName:o.name,pluginToolIcons:t.pluginToolIcons})}</span
    >
    <span class="chat-tool-disclosure__content"
      >${Fh(n,a,r,o.label,d,t.onOpenWorkspaceFile)}</span
    >
    ${l?K:Mm(s,!!t.children)}
    <span class="chat-tool-row__chevron" aria-hidden="true">${V.chevronRight}</span>
  `;return Uh(e,t,U`
      <div
        class="chat-tool-msg-collapse chat-tool-msg-collapse--manual ${l?`is-open`:``}"
      >
        ${f?U`<div
                class="chat-inline-disclosure chat-tool-msg-summary chat-tool-row chat-tool-row--file ${c?`chat-tool-row--running`:``}"
                @pointerenter=${Ph}
                @focusin=${Ph}
              >
                <button
                  class="chat-tool-row__toggle"
                  type="button"
                  aria-expanded=${String(l)}
                  aria-label=${Bh(n,a,r)}
                  @click=${()=>t.onToggleExpanded(n.id)}
                ></button>
                ${p}
              </div>`:U`<button
                class="chat-inline-disclosure chat-tool-msg-summary chat-tool-row ${c?`chat-tool-row--running`:``}"
                type="button"
                aria-expanded=${String(l)}
                @pointerenter=${Ph}
                @focus=${Ph}
                @click=${()=>t.onToggleExpanded(n.id)}
              >
                ${p}
              </button>`}
        ${l?t.children?U`<div class="chat-tool-children">
                  ${t.children}
                  <details class="chat-tool-wrapper-details">
                    <summary>${B(`chat.toolCards.toolInput`)}</summary>
                    <div class="chat-tool-msg-body">
                      ${Dm(e,t)}
                    </div>
                  </details>
                </div>`:U`<div class="chat-tool-msg-body">
                  ${Dm(e,t)}
                </div>`:K}
        ${t.showApprovalReviews===!1?K:Vh(n)}
      </div>
    `)}function Uh(e,t,n){return e?je(`tool-result`,{sessionKey:t.sessionKey??``,agentId:t.agentId,toolName:e.name,toolCallId:e.callId??e.id,input:e.args,output:{text:e.outputText,details:e.details,isError:e.isError,completed:e.completed},expanded:t.expanded},n,t.presented??!0):n}var Wh,Gh,Kh;function qh(){return(qh=e((()=>{q(),In(),sr(),xs(),H(),m(),vp(),bi(),Qr(),Fi(),op(),He(),om(),fm(),jm(),Nm(),Eh(),Wh={read:`chat.toolCards.verbs.read`,search:`chat.toolCards.verbs.searched`,fetch:`chat.toolCards.verbs.fetched`},Gh={update:[`editing`,`edited`,`edit`],add:[`creating`,`created`,`create`],delete:[`deleting`,`deleted`,`delete`],mixed:[`changing`,`changed`,`change`],write:[`writing`,`wrote`,`write`]},Kh={command:`squareTerminal`,read:`fileText`,edit:`pencil`,write:`fileCode`,search:`search`,fetch:`globe`}})))()}function Jh(e,t,n){let r=e.at(-1),i=r?.status===`failed`||r?.status===`blocked`,a=i?r:e.findLast(e=>e.status===`running`)??r;if(!a)return;let o=a.status;for(let r of t){let t=[...r.children];for(let i of t){if(n.get(i.card)===a){let t=n.get(r.card);t&&e.includes(t)&&(a=t)}t.push(...i.children)}}return a.title.trim()?{key:a.toolCallId??a.itemId,title:(a.status?void 0:a.summary)??a.meta??(a.title===sp({name:a.name}).label?``:a.title),name:a.name,commandBearing:a.commandBearing,status:i?o:a.status}:void 0}var Yh,Xh,Zh;function Qh(){return(Qh=e((()=>{q(),jn(),Wn(),H(),pa(),op(),qh(),Yh=3e3,Xh=class extends wn{constructor(...e){super(...e),this.scope=``,this.shownAt=0}render(e,t,n,r,i){this.pluginToolIcons=i;let a=this.scope!==e;if(this.scope=e,a&&(this.shown=void 0),this.clearTimer(),this.pending=void 0,!t)return this.shown=void 0,this.content(void 0,n);let o=t.status===`failed`||t.status===`blocked`,s=Yh-(Date.now()-this.shownAt);if(a||!this.shown||o||this.shown.key===t.key||s<=0)this.show(t);else{if(r&&this.shown){let e=r.find(e=>(e.toolCallId??e.itemId)===this.shown?.key);this.shown={...this.shown,status:e?.status}}this.pending=t,this.isConnected&&(this.timer=setTimeout(()=>{this.timer=void 0,this.pending&&(this.show(this.pending),this.pending=void 0,this.setValue(this.content()))},s))}return this.content()}show(e){(this.shown?.key!==e.key||this.shown.title!==e.title)&&(this.shownAt=Date.now()),this.shown=e}content(e=this.shown,t=``){let n=e?.name;return U`
      <span
        class="chat-activity-group__icon"
        role=${n?`img`:K}
        aria-label=${n??K}
        aria-hidden=${n?K:`true`}
        title=${n??K}
        >${n?kh(e?.commandBearing?`squareTerminal`:Ti(n),{toolName:n,pluginToolIcons:this.pluginToolIcons}):V.listTree}</span
      >
      <span class="chat-tool-disclosure__content">
        ${e?An(e.title,U`<span class="chat-activity-group__label chat-activity-group__label--live">${e.title}${e.status===`running`?`…`:``}</span>`):U`<span class="chat-activity-group__label">${t}</span>`}
      </span>
    `}clearTimer(){this.timer!==void 0&&(clearTimeout(this.timer),this.timer=void 0)}disconnected(){this.clearTimer()}reconnected(){this.pending&&(this.show(this.pending),this.pending=void 0,this.setValue(this.content()))}},Zh=En(Xh)})))()}var $h;function eg(){return(eg=e((()=>{Ya(),po(),q(),Rn(),on(),Nt(),H(),m(),gl(),R(),jp(),Dp(),Mc(),$h=class extends s{constructor(...e){super(...e),this.dismissed=!1,this.iconUrls={},this.pluginIconUrls={},this.failedImages=new Set,this.gateway=new Sc(this,{getGateway:()=>this.context?.gateway,invalidateRequests:()=>this.resetIcons(),onPageActivation:()=>{this.gateway.connected&&document.visibilityState===`visible`&&this.statusTask.run()}}),this.catalogIcons=new kp({kind:`catalog`,getFetchContext:()=>Ap(this.context),isConnected:()=>this.isConnected&&this.gateway.connected,onUrlsChange:e=>{this.iconUrls=e},onLoadingChange:()=>this.requestUpdate()}),this.pluginIcons=new kp({getFetchContext:()=>Ap(this.context),isConnected:()=>this.isConnected&&this.gateway.connected,onUrlsChange:e=>{this.pluginIconUrls=e},onLoadingChange:()=>this.requestUpdate()}),this.statusTask=new ho(this,{args:()=>[this.gateway.connected?this.gateway.client:null,this.agentId,this.gateway.epoch,this.recommendation?.kind===`plugin`?this.gateway.snapshot?.pluginCapabilities?.generation:void 0,this.recommendation?.id,this.recommendation?.kind,this.recommendation?.kind===`skill`?this.recommendation.registry:void 0],task:async([e,t],{signal:n})=>{let r=this.recommendation;if(!e||!r)return lo;let i=this.presentation;if((!i||i.id!==r.id||i.kind!==r.kind||i.kind===`skill`&&r.kind===`skill`&&i.registry!==r.registry)&&(this.resetIcons(),this.presentCard(r)),r.kind===`plugin`){let{plugin:t}=await b(e,r.id,n);return n.throwIfAborted(),{...r,name:t.catalog.name,author:t.catalog.author,description:t.catalog.summary,iconUrl:t.catalog.imageUrl,pluginId:t.local.pluginId,official:t.catalog.official,installed:t.local.installed,canInstall:t.catalog.official&&t.local.action===`install`}}if(!t)throw Error(`Skill recommendations require an agent.`);let[a,o]=await Promise.all([e.request(`skills.detail`,{slug:r.id},{signal:n}),at(e,t)]);if(n.throwIfAborted(),!a.skill||!o)throw Error(`Skill details are unavailable.`);let s=o.skills.some(({clawhub:e})=>e?.status===`linked`&&e.valid&&!e.requestedReference&&e.registry===r.registry&&`@${e.ownerHandle}/${e.slug}`===r.id);return{...r,name:a.skill.displayName,author:a.owner?.handle??void 0,pluginId:void 0,description:a.skill.summary??void 0,official:a.skill.isOfficial===!0,installed:s,canInstall:a.skill.isOfficial===!0&&!s}},onComplete:e=>{e.iconUrl&&!this.iconUrls[e.iconUrl]&&this.catalogIcons.invalidate(e.iconUrl),this.presentCard(e)}})}resetIcons(){this.catalogIcons.reset(),this.pluginIcons.reset(),this.loadedImage=void 0,this.failedImages=new Set,this.presentation=void 0}presentCard(e){e.pluginId!==this.presentation?.pluginId&&this.pluginIcons.reset(),this.presentation=e,e.pluginId&&this.pluginIcons.load(e.pluginId),this.catalogIcons.syncCatalog([],e.iconUrl?[e.iconUrl]:[])}disconnectedCallback(){this.statusTask.abort(),this.resetIcons(),super.disconnectedCallback()}openListing(e=!1){let t=this.recommendation;if(t){if(t.kind===`plugin`)this.context.navigate(`plugins`,{pathname:qt(t.id,this.context.basePath),search:e?`?action=install`:``});else{let e=new URLSearchParams({clawhub:t.id});this.agentId&&e.set(`agent`,this.agentId),this.context.navigate(`skills`,{search:`?${e}`})}}}render(){if(!this.recommendation||this.dismissed)return K;let e=this.statusTask.status===fo.COMPLETE,t=this.presentation??this.recommendation,n=this.statusTask.status===fo.ERROR,r=Nl({pluginId:t.pluginId,imageUrl:t.iconUrl},{pluginIconUrls:this.pluginIconUrls,iconUrls:this.iconUrls},this.failedImages),i=r?this.loadedImage!==r:!!(t.pluginId&&this.pluginIcons.isLoading(t.pluginId))||!!(t.iconUrl&&this.catalogIcons.isLoading(t.iconUrl))||!e&&!n&&!t.pluginId&&!t.iconUrl,a=!e&&!n;return U`
      <div
        class="card chat-clawhub-card"
        data-clawhub-id=${t.id}
        aria-busy=${a||i}
      >
        <button class="chat-clawhub-card__listing" type="button" @click=${()=>this.openListing()}>
          <span class="chat-clawhub-card__icon ${i?`skeleton`:``}" aria-hidden="true">
            ${r?U`<img
                    src=${r}
                    alt=""
                    ?hidden=${i}
                    @load=${()=>{this.loadedImage=r}}
                    @error=${()=>{this.failedImages=new Set([...this.failedImages,r])}}
                  />`:i?K:V.plug}
          </span>
          <span class="chat-clawhub-card__identity">
            <span class="card-title chat-clawhub-card__name"
              ><span>${t.name}</span> ${Op(t.author)}
              ${t.official?Tp():K}
            </span>
            ${t.description?U`<span class="card-sub">${t.description}</span>`:K}
          </span>
        </button>
        <div class="chat-clawhub-card__actions" aria-live="polite">
          ${e&&this.statusTask.value?.installed?U`<span class="chip chip-ok chat-clawhub-card__installed"
                  >${V.check}<span>${B(`pluginsPage.installed`)}</span></span
                >`:e?U`<button
                      type="button"
                      class="btn chat-clawhub-card__dismiss"
                      @click=${()=>{this.dismissed=!0}}
                    >
                      ${B(`common.dismiss`)}
                    </button>
                    <button
                      type="button"
                      class="btn primary chat-clawhub-card__install"
                      @click=${()=>this.openListing(this.statusTask.value?.canInstall===!0)}
                    >
                      ${this.statusTask.value?.canInstall?B(`pluginsPage.install`):B(`chat.clawhub.viewDetails`)}
                    </button>`:n?U`<button
                      type="button"
                      class="btn chat-clawhub-card__dismiss"
                      @click=${()=>this.statusTask.run()}
                    >
                      ${B(`chat.clawhub.retryStatus`)}
                    </button>`:U`<span
                        class="skeleton chat-clawhub-card__status-skeleton"
                        aria-hidden="true"
                      ></span>
                      <span class="sr-only">${B(`common.loading`)}</span>`}
        </div>
      </div>
    `}},Q([Ga({context:yn,subscribe:!0})],$h.prototype,`context`,void 0),Q([X({attribute:!1})],$h.prototype,`recommendation`,void 0),Q([X({attribute:!1})],$h.prototype,`agentId`,void 0),Q([Y()],$h.prototype,`dismissed`,void 0),Q([Y()],$h.prototype,`iconUrls`,void 0),Q([Y()],$h.prototype,`pluginIconUrls`,void 0),Q([Y()],$h.prototype,`loadedImage`,void 0),Q([Y()],$h.prototype,`failedImages`,void 0),Q([Y()],$h.prototype,`presentation`,void 0),customElements.define(`openclaw-chat-clawhub-card`,$h)})))()}function tg(e){return[...e.drafts].flatMap(([t,n])=>!e.resolved.has(t)&&n.signature&&(n.edited||n.reopenedAfterBoundary||n.status===`skipped`)?[{itemId:t,signature:n.signature,edited:n.edited===!0,...n.status===`skipped`?{dismissed:!0}:{},answers:[...n.answers.values()].map(e=>({selected:[...e.selected],freeText:e.freeText})),...n.reopenedAfterBoundary?{reopenedAfterBoundary:n.reopenedAfterBoundary}:{}}]:[])}function ng(e){e.load||=(async()=>{let t=await(await ig()).readDurableComposerDraft(e.scope);if(t.status===`storage-failed`){e.error=`storage`,e.onChange();return}e.revision=t.status===`found`?t.draft.revision:t.revision??0,e.writeId=t.status===`found`?t.draft.writeId:t.writeId,t.status===`not-found`&&t.revision!==void 0&&t.revision>=(e.intentRevision??0)&&e.drafts.clear();let n=t.status===`found`?t.draft.questionDrafts??[]:[];e.saved=JSON.stringify(n);for(let t of n){let n=e.drafts.get(t.itemId),r=n?.status===`submitted`&&n.admittedQueueId;e.resolved.has(t.itemId)||n?.edited||n?.status&&!r||n?.signature&&n.signature!==t.signature||e.drafts.set(t.itemId,{signature:t.signature,edited:t.edited,status:r?`submitted`:t.dismissed?`skipped`:void 0,admittedQueueId:n?.admittedQueueId,answers:new Map(t.answers.map((e,t)=>[String(t),{selected:new Set(e.selected),freeText:e.freeText}])),reopenedAfterBoundary:n?.reopenedAfterBoundary??t.reopenedAfterBoundary})}e.loaded=!0,e.onChange()})().catch(()=>{e.error=`storage`,e.onChange()})}function rg(e,t=!1){t&&(e.intentRevision=Wr(e.intentRevision)),e.write=(e.write??Promise.resolve()).then(async()=>{if(await e.load,!e.loaded||e.invalidated)return;let t=tg(e),n=JSON.stringify(t);if(n===e.saved||n===e.attempted)return;e.attempted=n;let r=Wr(e.revision),i=`question:${crypto.randomUUID()}`,a=await ig();if(e.invalidated)return;let o=await a.writeDurableComposerDraft(e.scope,{revision:r,text:``,attachments:[],questionDrafts:t},{expectedRevision:e.revision,expectedWriteId:e.writeId,writeId:i});o.status===`persisted`?(e.revision=r,e.writeId=i,e.saved=n,e.error=void 0):e.error=o.status===`conflict`?`conflict`:`storage`,e.onChange()}).catch(()=>{e.error=`storage`,e.onChange()})}var ig;function ag(){return(ag=e((()=>{Vi(),co(),ig=()=>ao(()=>import(`./control-ui-boot-shared-DJkUdZmL.js`).then(e=>(e.d(),e.u)),__vite__mapDeps([5,6,7,3,11,12,13]),import.meta.url)})))()}function og(e,t){let n=dg(t)?e?.freeText:e?.freeText.trim(),r=t.answerFormat,i=n?r===`lines`?n.split(/\r?\n/u):[n]:[];return[...e?.selected??[],...i]}function sg(e){let{question:t}=e;if(t.options.length===0)return K;let n=t.resource?.selection===`implicit`,r=t.options.filter(t=>!n||e.selected.has(t.value??t.label)),i=r.some(e=>e.thumbnail);return U`
    <div
      class="chat-question-panel__options"
      role=${t.multiSelect?`group`:`radiogroup`}
      aria-label=${t.header}
    >
      ${r.map((r,a)=>{let o=r.value??r.label,s=e.selected.has(o),c=s||e.selected.size===0&&a===0?0:-1;return U`
          <button
            class="chat-question-panel__option ${s?`chat-question-panel__option--selected`:``}"
            type="button"
            role=${n?`button`:t.multiSelect?`checkbox`:`radio`}
            aria-checked=${Dn(n?void 0:s?`true`:`false`)}
            aria-label=${Dn(n?B(`common.multiSelect.remove`,{value:r.label}):void 0)}
            tabindex=${t.multiSelect?0:c}
            data-option-index=${a}
            ?disabled=${e.disabled}
            @click=${()=>e.onSelect(o)}
          >
            <span class="chat-question-panel__option-marker" aria-hidden="true">
              ${n?`−`:s?`✓`:``}
            </span>
            ${i?U`<span class="chat-question-panel__thumbnail" aria-hidden="true">${r.thumbnail?.startsWith(`data:`)?U`<img src=${r.thumbnail} alt="" loading="lazy" referrerpolicy="no-referrer" />`:U`<span>◇</span>`}</span>`:K}
            <span class="chat-question-panel__option-copy">
              <strong class="chat-question-panel__option-label">${r.label}</strong>
              ${r.description?U`<small>${r.description}</small>`:K}
            </span>
            ${a<9?Ht(a+1):K}
          </button>
          ${r.thumbnail&&!r.thumbnail.startsWith(`data:`)?U`<a class="chat-question-panel__external-image" href=${r.thumbnail} target="_blank" rel="noreferrer noopener">${B(`chat.externalImage.notLoaded`)}: ${r.label} — ${B(`chat.externalImage.open`)}</a>`:K}
        `})}
    </div>
  `}function cg(e,t,n,r){let i=t=>{(t.currentTarget instanceof HTMLInputElement||t.currentTarget instanceof HTMLTextAreaElement)&&e.onInput(t.currentTarget.value)};return e.question.isSecret?U`<input
        class=${t}
        type="password"
        autocomplete="off"
        placeholder=${n}
        aria-label=${Dn(r)}
        .value=${e.value}
        ?disabled=${e.disabled}
        @input=${i}
      />`:U`<textarea
        class="${t} chat-question-panel__textarea"
        rows="1"
        placeholder=${n}
        aria-label=${Dn(r)}
        aria-description=${B(`chat.questions.multilineHint`,{shortcut:`Ctrl/⌘+Enter`})}
        .value=${e.value}
        ?disabled=${e.disabled}
        @input=${i}
      ></textarea>`}function lg(e){let{question:t}=e;if(t.resource||t.options.length>0&&!t.isOther)return K;let n=t.header||B(`chat.questions.answer`);return U`
    ${t.options.length===0?U`<label class="field">
            <span>${n}</span>
            ${cg(e,`input`,B(`chat.questions.answerPlaceholder`,{label:t.secretStore?.name??n}))}
          </label>`:U`<label
            class="chat-question-panel__option chat-question-panel__option--other ${e.selected?`chat-question-panel__option--selected`:``}"
          >
            <span class="chat-question-panel__option-marker" aria-hidden="true"></span>
            ${cg(e,`chat-question-panel__other`,B(`chat.questions.other`),B(`chat.questions.ownAnswerFor`,{header:t.header}))}
            ${t.options.length<9?Ht(t.options.length+1):K}
          </label>`}
    ${t.isSecret?K:U`<div class="chat-question-panel__input-hint">
            ${Yt(B(`chat.questions.multilineHint`,{shortcut:`{shortcut}`}),Ht([`Ctrl`,`/`,`⌘`,`+`,`Enter`],{inline:!0}))}
          </div>`}
  `}function ug(e,t){for(let n of e){if(t.has(n.questionId)||!n.defaultAnswers||n.isSecret)continue;let e=new Set(n.options.map(e=>e.value??e.label));t.set(n.questionId,{selected:new Set(n.defaultAnswers.filter(t=>e.has(t))),freeText:n.defaultAnswers.filter(t=>!e.has(t)).join(n.answerFormat===`lines`?`
`:``)})}}function dg(e){return e.isSecret===!0||e.presentation===`form`}function fg(){return(fg=e((()=>{q(),Cn(),zt(),m()})))()}function pg(e,t){let n=t?t.split(`, `):[],r=n.length>0&&n.every(t=>e.options?.includes(t))?new Set(n):new Set;return{selected:r,freeText:r.size>0?``:t}}function mg(e,t){if(!t.startsWith(`> `))return null;let n=0,r=new Map;for(let i=0;i<e.questions.length;i+=1){let a=e.questions[i];if(!a)return null;let o=`${hg(a.title)}\n\n`;if(!t.startsWith(o,n))return null;n+=o.length;let s=e.questions[i+1],c=s?`\n\n${hg(s.title)}\n\n`:void 0,l=c?t.indexOf(c,n):t.length;if(l<n||c&&t.includes(c,l+c.length))return null;let u=t.slice(n,l);if(!u.trim())return null;r.set(String(i),pg(a,u)),n=l+(c?2:0)}return n===t.length?r:null}function hg(e){let t=new TextEncoder,n=``,r=0;for(let i of e){if(r+=t.encode(i).length,r>512)break;n+=i}return`> ${n.replace(/[\r\n]/g,` `)}`}function gg(e,t){let n=t.resolved.get(e.itemId),r=n?void 0:t.delivery.get(e.itemId),i=n??t.drafts.get(e.itemId),a=r?mg(e,r.text):i?.status===`submitted`?i.answers:void 0,o=r&&!a?r.text:n?.unparsedText,s=t.archived.has(e.itemId),c=i?.status===`reopening`,l=i?.status===`skipped`||c,u=n?B(`chat.asyncQuestions.sent`):r?B(r.sendState===`failed`?`chat.asyncQuestions.failed`:r.sendState===`unconfirmed`?`chat.queue.deliveryUnconfirmed`:r.sendState===`waiting-reconnect`?`chat.queue.states.waitingForReconnect`:r.sendState===`sending`?`chat.asyncQuestions.sending`:`chat.asyncQuestions.queued`):i?.status===`submitted`?B(`chat.asyncQuestions.awaitingConfirmation`):void 0,d=r?.sendState===`failed`||r?.sendState===`unconfirmed`;return U`<div class="chat-question-summary" role="status" aria-live="polite">
    ${o?U`<div class="chat-question-summary__prompt">${o}</div>`:e.questions.map((e,t)=>U`<div>
              <strong>${e.title}</strong>
              <div>
                ${a?og(a.get(String(t)),{}).join(`, `):B(c?`chat.asyncQuestions.reopening`:l?`chat.asyncQuestions.dismissed`:s?`chat.asyncQuestions.archived`:`chat.asyncQuestions.inComposer`)}
              </div>
            </div>`)}
    ${u?U`<div class="chat-question-summary__delivery">
            <span>${u}</span>
            ${d&&t.retry?U`<button
                    type="button"
                    class="btn btn--sm"
                    @click=${()=>t.retry?.(r.id)}
                  >
                    ${B(`chat.asyncQuestions.retry`)}
                  </button>`:K}
            ${r?.sendError?U`<div>${r.sendError}</div>`:K}
          </div>`:K}
    ${s||l?U`<div>
              ${B(l?`chat.asyncQuestions.dismissedReason`:`chat.asyncQuestions.archivedReason`)}
            </div>
            ${l&&t.storageError?U`<div role="alert">${t.storageError}</div>`:K}
            <button
              type="button"
              class="btn btn--sm"
              ?disabled=${c}
              @click=${()=>t.reopen(e.itemId)}
            >
              ${B(`chat.questions.answer`)}
            </button>`:K}
  </div>`}function _g(){return(_g=e((()=>{q(),m(),fg()})))()}function vg(e){let t=Z(e),n=Z(t?.__openclaw),r=vd(e),i=typeof t?.stopReason==`string`?t.stopReason.toLowerCase():``;if(t?.role!==`assistant`||t.openclawAsyncDelivery||Fc(e)||Z(t.provenance)?.kind===`inter_session`||i===`tooluse`)return null;let a=Lu(e)!==null||Z(t.openclawAbort)?.aborted===!0||[`aborted`,`cancelled`,`canceled`,`timeout`,`timed_out`,`error`].includes(i);return n?.runTerminal===!0||zl(e)!==null||n?.mirrorOrigin!==`codex-app-server`&&(r===`final_answer`||i===`stop`||a)?a||r===`commentary`||ki(e)?`settled`:`successful`:null}function yg(e){let t=new Map,n=new Map,r=new Map,i=new Map,a=new Map,o=[],s=-1,c;for(let[l,u]of e.entries()){let e=Z(u),d=tr(u),f=Z(e?.provenance),p=Dl(u);d?.role===`user`&&(!f?.kind||f.kind===`external_user`)&&!gu(u)&&(s=l,c=p,p&&!n.has(p)&&n.set(p,l)),d?.role===`user`&&d.runId&&f?.kind===`internal_system`&&f.sourceTool===`main_session_restart_recovery`&&r.set(d.runId,l);let m=vg(u);if(p){let e=t.get(p);t.set(p,{first:e?.first??l,last:l,settled:m?l:e?.settled})}let h=Cg(u);if(h&&i.set(h.itemId,{question:h,index:l,runId:p,originRunId:p??c}),d?.role===`user`&&d.id&&d.sequence!==null&&!d.isImported&&(!f?.kind||f.kind===`external_user`)){let t=Ui(u);if(t){let n=Z(e?.__openclaw)?.replyToId,r=typeof n==`string`?n.trim():``,o=[...i.values()].filter(({question:e})=>!a.has(e.itemId)&&(!r||e.sourceMessageId===r)).map(({question:e})=>({question:e,answers:mg(e,t)})).filter(e=>e.answers!==null||!!(r&&t.trim())),s=o.length===1?o[0]:void 0;s&&a.set(s.question.itemId,{status:`submitted`,answers:s.answers??new Map,...s.answers?{}:{unparsedText:t}})}}m===`successful`&&o.push({index:l,turnStart:p?n.get(p)??-1:s,runId:p,key:JSON.stringify(p?[`run`,p]:[d?.id,d?.sequence,e?.timestamp,Ui(u)])})}let l=new Map,u=new Map,d=new Map;for(let e of o){if(e.runId){l.set(t.get(e.runId).first,e);let n=r.get(e.runId);n!==void 0&&n<e.index&&d.set(n,e)}u.set(e.turnStart,e)}for(let t of[l,u,d]){let n;for(let r=e.length-1;r>=0;--r){let e=t.get(r);e&&(!n||e.index>n.index)&&(n=e),n&&t.set(r,n)}}return{history:[...i.values()].map(({question:e,index:n,runId:r,originRunId:i})=>{let a=i?t.get(i):void 0,o=r?l:u,s=a?a.settled!==void 0&&a.settled>n?o.get(a.last+1):void 0:o.get(n+1),c=d.get(n+1);for(let e of[c,c?l.get(c.index+1):void 0,c?u.get(c.index+1):void 0])e&&(!s||e.index>s.index)&&(s=e);return{question:e,boundary:s?.key}}),resolved:a}}function bg(e){let t=du(),n=Eg.get(e);if(n?.revision===t)return n.history;let r=yg(e);return Eg.set(e,{revision:t,history:r}),r}function xg(e,t){let n=t.asyncQuestionStorage?{...t.asyncQuestionStorage,scopeKey:`questions:v1:${t.asyncQuestionStorage.scopeKey}`}:void 0,r=n?JSON.stringify([n.gatewayOwner,n.recoveryScope,n.scopeKey]):void 0;for(let[t,r]of e.asyncQuestionSessions??[])n&&r.scope.gatewayOwner===n.gatewayOwner&&r.scope.recoveryScope===n.recoveryScope||(r.invalidated=!0,e.asyncQuestionSessions?.delete(t));let i=JSON.stringify([t.sessionKey,t.currentAgentId,t.connectionEpoch,r]),a;if(n&&r){let t=e.asyncQuestionSessions??=new Map;a=t.get(r),a||(a={scope:n,drafts:new Map,resolved:new Set,revision:0,saved:`[]`,loaded:!1,onChange:()=>{}},t.set(r,a))}(e.asyncQuestionScope!==i||a&&e.asyncQuestionDrafts!==a.drafts)&&(e.asyncQuestionScope=i,e.asyncQuestionGeneration=(e.asyncQuestionGeneration??0)+1,e.asyncQuestionDrafts=a?.drafts??new Map);let o=e.asyncQuestionDrafts,s=e.asyncQuestionGeneration,c=()=>e.asyncQuestionScope===i&&e.asyncQuestionGeneration===s&&e.asyncQuestionDrafts===o,{history:l,resolved:u}=bg(t.messages??[]),d=new Map((t.queue??[]).flatMap(e=>e.asyncQuestionItemId?[[e.asyncQuestionItemId,e]]:[])),f=()=>{c()&&(e.asyncQuestionRevision+=1,t.onRequestUpdate?.())};if(a){a.resolved=new Set(u.keys()),a.onChange=f;for(let{question:e}of l)wg(e,o);ng(a),a.loaded&&u.size&&rg(a)}let p=new Map,m=l.flatMap(({question:e,boundary:t})=>{let n=d.get(e.itemId);if(n&&!u.has(e.itemId)){let t=wg(e,o);t.status=`submitted`,t.admittedQueueId=n.id,t.answers=mg(e,n.text)??t.answers}let r=u.get(e.itemId)??o.get(e.itemId);return d.has(e.itemId)||r?.status===`submitted`?[]:r?.status===`skipped`||r?.status===`reopening`?(t&&p.set(e.itemId,t),[]):t&&!r?.edited&&!r?.status&&!r?.error&&r?.reopenedAfterBoundary!==t?(p.set(e.itemId,t),[]):[e]}),h=()=>{c()&&(a&&rg(a,!0),f())},g=()=>a?.error?B(a.error===`conflict`?`chat.asyncQuestions.draftConflict`:`chat.asyncQuestions.draftStorageFailed`):void 0,_=async n=>{let r=l.find(({question:e})=>e.itemId===n),s=o.get(n);if(c()&&r&&!u.has(n)&&!e.asyncQuestionPresentation?.resolved.has(n)&&s?.status!==`reopening`&&(p.has(n)||s?.status===`skipped`)){let s=wg(r.question,o),l=s.status===`skipped`&&a;if(s.status=l?`reopening`:void 0,s.error=void 0,s.reopenedAfterBoundary=r.boundary,l){for(;;){h(),await l.write;let t=e.asyncQuestionPresentation;if(o.get(n)!==s||s.status!==`reopening`)return;if(!c()||t?.resolved.has(n)){s.status=void 0,l.onChange();return}let r=t?.archived.get(n);if(s.reopenedAfterBoundary===r)break;s.reopenedAfterBoundary=r}s.status=void 0}t.onReopen?.(n,i),h()}},v={scope:i,pending:m,archived:p,historyKey:JSON.stringify([[...p],[...u].map(([e,t])=>[e,t.unparsedText,[...t.answers].map(([e,t])=>[e,og(t,{})])]),[...d].map(([e,t])=>[e,t.id,t.text,t.sendState,t.sendError]),!!(t.onAsyncQuestionSubmit&&t.onQueueRetry)]),drafts:o,resolved:u,delivery:d,discard:e=>{if(!c())return;let t=e.asyncQuestionItemId,n=t?o.get(t):void 0;t&&n?.admittedQueueId===e.id&&!u.has(t)&&(o.set(t,{...n,status:void 0,admittedQueueId:void 0,error:void 0,reopenedAfterBoundary:l.find(({question:e})=>e.itemId===t)?.boundary}),h())},retry:t.onAsyncQuestionSubmit&&t.onQueueRetry?n=>{c()&&e.transcriptRenderContext.onAsyncQuestionSubmit&&t.onQueueRetry?.(n)}:void 0,storageError:g(),onChange:h,reopen:_,dismiss:async t=>{let n=l.find(e=>e.question.itemId===t)?.question;if(!c()||!n||u.has(t))return;let r=wg(n,o);if(r.status)return;r.status=`skipped`,r.error=void 0,h(),await a?.write;let i=e.asyncQuestionPresentation;c()&&i?.drafts.get(t)===r&&r.status===`skipped`&&!i.resolved.has(t)&&Qe({message:g()??B(`chat.asyncQuestions.dismissedNotice`),actionLabel:B(`common.undo`),onAction:()=>{c()&&e.asyncQuestionPresentation?.reopen(t)}})},submit:t.onAsyncQuestionSubmit?async(t,n,r)=>c()?await e.transcriptRenderContext.onAsyncQuestionSubmit?.(t,n,r)===!0:!1:void 0};return e.asyncQuestionPresentation=v,v}function Sg(e,t){return typeof e==`string`&&e.length<=t&&e.trim().length>0}function Cg(e){if(!Xa(e)||e.role!==`assistant`)return null;let t=e.openclawAsyncDelivery;if(!Xa(t)||!Sg(t.itemId,256)||!Array.isArray(t.questions)||t.questions.length===0||t.questions.length>12)return null;let n=[];for(let e of t.questions){if(!Xa(e)||!Sg(e.title,4096)||e.options!==void 0&&(!Array.isArray(e.options)||e.options.length===0||e.options.length>4||!e.options.every(e=>Sg(e,256))))return null;n.push({title:e.title,options:e.options})}let r=tr(e),i=r?.id&&r.sequence!==null&&!r.isImported?r.id:void 0;return{itemId:t.itemId,...i?{sourceMessageId:i}:{},questions:n}}function wg(e,t){let n=t.get(e.itemId),r=JSON.stringify(e.questions);return(!n||n.signature&&n.signature!==r)&&(n={signature:r,answers:new Map(e.questions.map((e,t)=>[String(t),{selected:new Set(e.options?.slice(0,1)),freeText:``}]))},t.set(e.itemId,n)),n.signature=r,n}function Tg(e,t,n){let r=wg(e,t.drafts),i=t.pending.reduce((e,t)=>e+t.questions.length,0);return{model:{requestKey:JSON.stringify([t.scope,e.itemId]),title:B(`chat.asyncQuestions.title`),questions:e.questions.map((e,t)=>({questionId:String(t),header:e.options?e.title:B(`chat.questions.answer`),question:e.title,options:(e.options??[]).map(e=>({label:e})),isOther:!0})),autoFocus:!1,nonBlocking:!0,collapsed:n.collapsed??!1,collapsedLabel:B(i===1?`chat.asyncQuestions.pendingOne`:`chat.asyncQuestions.pendingMany`,{count:String(i)}),disabled:!t.submit,submitting:r.status===`submitting`,drafts:r.answers,error:r.error,notice:t.storageError,requestPosition:n.requestPosition},onChange:()=>{r.edited=!0,t.onChange()},onCollapsedChange:n.onCollapsedChange,onPreviousRequest:n.onPreviousRequest,onNextRequest:n.onNextRequest,onSkip:()=>t.dismiss(e.itemId),onSubmit:async n=>{if(r.status)return;r.status=`submitting`,r.error=void 0,t.onChange();let i=e.questions.map((e,t)=>`${hg(e.title)}\n\n${n[String(t)]?.join(`, `)??``}`).join(`

`);try{if(!await t.submit?.(i,e.itemId,e.sourceMessageId))throw Error(B(`chat.asyncQuestions.sendFailed`));r.status=`submitted`}catch(e){throw r.status=void 0,r.error=e instanceof Error?e.message:String(e),e}finally{t.onChange()}}}}var Eg;function Dg(){return(Dg=e((()=>{ar(),gd(),m(),Ai(),Zi(),Be(),bc(),Xc(),ql(),ag(),_g(),fg(),Eg=new WeakMap})))()}function Og(e){let t=ft(e);if(!t)return K;let n=t.snapshot;return U`
    <details class="chat-context-attachment">
      <summary class="chat-context-attachment__summary">
        <span aria-hidden="true">${V.layers}</span>
        ${B(`chat.messages.attachedContext.label`)}
        <span class="chat-context-attachment__chevron" aria-hidden="true"
          >${V.chevronRight}</span
        >
      </summary>
      <div class="chat-context-attachment__body">
        <p>${B(`chat.messages.attachedContext.captured`)}</p>
        <dl>
          ${[`title`,`page`,`agentId`,`workspace`,`file`,`selection`].map(e=>n[e]?U`<dt>${B(`chat.messages.attachedContext.${e}`)}</dt>
                  <dd>${n[e]}</dd>`:K)}
        </dl>
        <details class="chat-context-attachment__technical">
          <summary>${B(`chat.messages.attachedContext.technical`)}</summary>
          <pre>${JSON.stringify(n,null,2)}</pre>
        </details>
        <p>${B(`chat.messages.attachedContext.reference`)}</p>
      </div>
    </details>
  `}function kg(){return(kg=e((()=>{q(),dt(),H(),m(),Ci(),Ji()})))()}function Ag(e,t){return new Set((e??[]).filter(e=>e.identities.some(e=>e.id===t)).map(e=>e.emoji))}function jg(e,t){let n=e.identities.map(e=>e.id===t?B(`chat.reactions.you`):e.label??e.id).toSorted((e,t)=>Number(t===B(`chat.reactions.you`))-Number(e===B(`chat.reactions.you`))),r=n.slice(0,Fg).join(`, `),i=n.length-Math.min(n.length,Fg);return B(`chat.reactions.reactedWith`,{names:i>0?B(`chat.reactions.andOthers`,{names:r,count:String(i)}):r,emoji:e.emoji})}function Mg(e,t){let n=e.sender?.identity,r=e.role===`user`&&n?.type===`profile`&&n.id===t.userId;return{messageReactions:t.messageReactions,userId:t.userId,onReact:t.onReact,reactionPlacement:r?`bottom-end`:`bottom-start`}}function Ng(e,t,n,r){let i=n?void 0:t?.reactionMessageId,a=Mg(e,r),o=i?a.messageReactions?.get(i):void 0;if(!i||!o?.length)return K;let{userId:s,onReact:c}=a,l=Ag(o,s);return U`<div class="chat-message-reactions" data-message-id=${i}>
    ${o.map(e=>{let t=l.has(e.emoji);return U`<openclaw-tooltip .content=${jg(e,s)}>
        <button
          class="chat-reaction-chip"
          type="button"
          aria-label=${`${e.emoji} ${e.count}`}
          aria-pressed=${String(t)}
          ?disabled=${!c}
          @click=${()=>c?.(i,e.emoji,t)}
        >
          <span class="chat-reaction-chip__emoji">${e.emoji}</span>
          ${An(e.count,U`<span class="chat-reaction-chip__count">${e.count}</span>`)}
        </button>
      </openclaw-tooltip>`})}
    ${c?U`<openclaw-message-reaction-picker
            class="chat-reaction-chip chat-reaction-chip--add"
            compact
            placement=${a.reactionPlacement??`bottom-start`}
            .activeEmoji=${l}
            .onSelect=${(e,t)=>c(i,e,t)}
          ></openclaw-message-reaction-picker>`:K}
  </div>`}var Pg,Fg,Ig,Lg;function Rg(){return(Rg=e((()=>{go(),q(),Rn(),Wn(),G(),Qn(),Qt(),H(),as(),ys(),m(),R(),Pg=[`👍`,`❤️`,`🎉`,`👀`,`🚀`,`😂`],Fg=3,Ig=Wt(Un`<path d="M21 11.5a9 9 0 1 1-8.5-8.5"/>
  <path d="M8 14s1.5 2 4 2 4-2 4-2M16 5h6M19 2v6"/>
  <path d="M9 9h.01M15 9h.01"/>`),Lg=class extends nt{constructor(...e){super(...e),this.activeEmoji=new Set,this.placement=`bottom-start`,this.compact=!1,this.custom=!1,this.value=``,this.invalid=!1}static{this.styles=Ln`
    :host {
      display: inline-flex;
    }
    button,
    input {
      font: inherit;
      color: var(--text);
    }
    button {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      border: 0;
      background: transparent;
      cursor: default;
    }
    button:focus-visible {
      outline: 2px solid var(--accent);
      outline-offset: 1px;
    }
    input:focus-visible {
      outline: none;
      border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
    }
    .trigger {
      width: 24px;
      height: 24px;
      padding: 0;
      border-radius: var(--radius-md);
      color: var(--muted);
      transition:
        color 120ms ease,
        background-color 120ms ease;
    }
    .trigger svg {
      width: 14px;
      height: 14px;
    }
    .trigger:hover,
    .trigger[aria-expanded="true"] {
      color: var(--accent);
      background: var(--bg-hover);
    }
    :host([compact]) .trigger {
      border: 1px solid var(--border);
      border-radius: var(--radius-full);
      background: var(--bg-elevated);
    }
    :host([compact]) .trigger:hover,
    :host([compact]) .trigger[aria-expanded="true"] {
      border-color: var(--accent);
      background: var(--accent-subtle);
    }
    wa-popover {
      --arrow-size: 0;
    }
    wa-popover::part(body) {
      padding: 4px;
      border: 1px solid var(--border);
      border-radius: var(--radius-full);
      background: var(--popover);
      color: var(--text);
      box-shadow:
        0 1px 2px rgba(0, 0, 0, 0.08),
        0 12px 32px rgba(0, 0, 0, 0.16);
    }
    wa-popover.custom::part(body) {
      border-radius: var(--radius-md);
    }
    .palette {
      display: flex;
      align-items: center;
      gap: 2px;
    }
    .palette .emoji {
      width: 34px;
      height: 34px;
      border-radius: var(--radius-full);
      font-size: 20px;
      line-height: 1;
      transition:
        transform 120ms ease,
        background-color 120ms ease;
    }
    .palette .emoji:hover {
      background: var(--bg-hover);
      transform: scale(1.18);
    }
    .palette .emoji[aria-pressed="true"] {
      background: var(--accent-subtle);
      box-shadow: inset 0 0 0 1px var(--accent);
    }
    .divider {
      width: 1px;
      height: 20px;
      margin: 0 3px;
      background: var(--border);
    }
    .more {
      width: 30px;
      height: 30px;
      border-radius: var(--radius-full);
      color: var(--muted);
    }
    .more:hover {
      color: var(--text);
      background: var(--bg-hover);
    }
    .more svg {
      width: 16px;
      height: 16px;
    }
    .custom {
      width: 236px;
      padding: 2px;
    }
    .custom-row {
      display: flex;
      align-items: center;
      gap: 4px;
    }
    .back {
      flex: 0 0 auto;
      width: 28px;
      height: 28px;
      border-radius: var(--radius-full);
      color: var(--muted);
    }
    .back:hover {
      color: var(--text);
      background: var(--bg-hover);
    }
    .back svg {
      width: 14px;
      height: 14px;
    }
    input {
      flex: 1;
      min-width: 0;
      height: 32px;
      padding: 0 10px;
      border: 1px solid var(--border);
      border-radius: var(--radius-md);
      background: var(--bg);
      font-size: 18px;
      line-height: 1;
    }
    input::placeholder {
      font-size: 13px;
      color: var(--muted);
    }
    input[aria-invalid="true"] {
      border-color: var(--accent);
    }
    .hint {
      margin: 6px 4px 2px;
      color: var(--muted);
      font-size: 12px;
      line-height: 1.35;
    }
    @media (prefers-reduced-motion: reduce) {
      .trigger,
      .palette .emoji {
        transition: none;
      }
      .palette .emoji:hover {
        transform: none;
      }
    }
  `}close(){let e=this.renderRoot.querySelector(`wa-popover`);e&&(e.open=!1)}select(e){this.onSelect?.(e,this.activeEmoji.has(e)),this.close()}applyCustom(){let e=this.value.trim();if(dr(e)){this.select(e);return}this.invalid=e.length>0}async showCustom(){this.custom=!0,await this.updateComplete,this.renderRoot.querySelector(`input`)?.focus()}async showPalette(){this.custom=!1,this.value=``,this.invalid=!1,await this.updateComplete,this.focusPalette()}focusPalette(){let e=this.paletteButtons();(e.find(e=>e.getAttribute(`aria-pressed`)===`true`)??e[0])?.focus()}paletteButtons(){return[...this.renderRoot.querySelectorAll(`.palette button`)]}movePaletteFocus(e){let t=this.paletteButtons(),n=this.shadowRoot?.activeElement,r=t.findIndex(e=>e===n),i=e.key===`ArrowRight`?(r+1)%t.length:e.key===`ArrowLeft`?(r-1+t.length)%t.length:e.key===`Home`?0:e.key===`End`?t.length-1:-1;i>=0&&(e.preventDefault(),t[i]?.focus())}renderPalette(){return U`<div
      class="palette"
      role="group"
      aria-label=${B(`chat.reactions.quick`)}
      @keydown=${e=>this.movePaletteFocus(e)}
    >
      ${Pg.map(e=>U`<button
          class="emoji"
          type="button"
          aria-label=${e}
          aria-pressed=${String(this.activeEmoji.has(e))}
          @click=${()=>this.select(e)}
        >
          ${e}
        </button>`)}
      <span class="divider" aria-hidden="true"></span>
      <openclaw-tooltip .content=${B(`chat.reactions.more`)}>
        <button
          class="more"
          type="button"
          aria-label=${B(`chat.reactions.more`)}
          @click=${()=>void this.showCustom()}
        >
          ${V.moreHorizontal}
        </button>
      </openclaw-tooltip>
    </div>`}renderCustom(){let e=Vo()?.join(``);return U`<div class="custom">
      <div class="custom-row">
        <button
          class="back"
          type="button"
          aria-label=${B(`chat.reactions.back`)}
          @click=${()=>void this.showPalette()}
        >
          ${V.arrowLeft}
        </button>
        <input
          aria-label=${B(`chat.reactions.emoji`)}
          aria-invalid=${String(this.invalid)}
          autocomplete="off"
          placeholder=${B(`chat.reactions.placeholder`)}
          .value=${this.value}
          @input=${e=>{e.currentTarget instanceof HTMLInputElement&&(this.value=e.currentTarget.value,this.invalid=!1,!e.isComposing&&dr(this.value.trim())&&this.applyCustom())}}
          @compositionend=${e=>{e.currentTarget instanceof HTMLInputElement&&(this.value=e.currentTarget.value),dr(this.value.trim())&&this.applyCustom()}}
          @keydown=${e=>{e.isComposing||(e.key===`Enter`?(e.preventDefault(),e.stopPropagation(),this.applyCustom()):e.key===`Backspace`&&!this.value&&(e.preventDefault(),this.showPalette()))}}
        />
      </div>
      <p class="hint" aria-live="polite">
        ${this.invalid?B(`chat.reactions.invalid`):e?B(`chat.reactions.shortcut`,{shortcut:e}):B(`chat.reactions.hint`)}
      </p>
    </div>`}render(){return U`
      <openclaw-tooltip .content=${B(`chat.reactions.add`)}>
        <button
          id="reaction-trigger"
          class="trigger"
          type="button"
          aria-label=${B(`chat.reactions.add`)}
          aria-haspopup="dialog"
          aria-expanded="false"
        >
          ${Ig}
        </button>
      </openclaw-tooltip>
      <wa-popover
        class="chat-reaction-picker ${this.custom?`custom`:``}"
        for="reaction-trigger"
        placement=${this.placement}
        distance="6"
        without-arrow
        aria-label=${B(`chat.reactions.add`)}
        ${W(zs)}
        @wa-show=${e=>{e.currentTarget instanceof mo&&e.currentTarget.anchor?.setAttribute(`aria-expanded`,`true`)}}
        @wa-after-show=${()=>this.focusPalette()}
        @wa-hide=${e=>{e.currentTarget instanceof mo&&e.currentTarget.anchor?.setAttribute(`aria-expanded`,`false`)}}
        @wa-after-hide=${()=>{this.custom=!1,this.value=``,this.invalid=!1}}
        @keydown=${e=>{e.key===`Escape`&&(e.stopPropagation(),this.close())}}
      >
        ${this.custom?this.renderCustom():this.renderPalette()}
      </wa-popover>
    `}},Q([X({attribute:!1})],Lg.prototype,`onSelect`,void 0),Q([X({attribute:!1})],Lg.prototype,`activeEmoji`,void 0),Q([X()],Lg.prototype,`placement`,void 0),Q([X({type:Boolean,reflect:!0})],Lg.prototype,`compact`,void 0),Q([Y()],Lg.prototype,`custom`,void 0),Q([Y()],Lg.prototype,`value`,void 0),Q([Y()],Lg.prototype,`invalid`,void 0),customElements.get(`openclaw-message-reaction-picker`)||customElements.define(`openclaw-message-reaction-picker`,Lg)})))()}function zg(e){let t=Zr(e),n=Mi(e,t),r=Z(e),i=Z(r?.__openclaw),a;return r?.role===`user`&&i?.humanMentions&&(typeof r.content==`string`?r.content:Array.isArray(r.content)?r.content.flatMap(e=>{let t=Z(e);return t?.type===`text`&&typeof t.text==`string`?[t.text]:[]}).join(`
`):null)===n&&(a=ri(n,i.humanMentions)),{message:e,normalizedMessage:t,displayMarkdown:n,humanMentions:a}}function Bg(e,t=Zr(e),n=Mi(e,t)){return n||iu(e,t.content)}function Vg({message:e,normalizedMessage:t,displayMarkdown:n},r){let{messageId:i,canFetchFullMessage:a,onReply:o,senderLabel:s}=r,c=ti(t.role),l=vc(e)?.startsWith($n)===!0,u=a?Sl(e,c):void 0,d=u?{messageId:u,state:r.getAssistantMessageExpansion?.(u)}:void 0,f=d?.state,p=f?.status===`loaded`?f.markdown:n,m=c===`assistant`?_d(p):p,h=c===`assistant`||c===`user`||l?m:void 0,g=Bg(e,t,m),_=o&&!l?oo(g,500):``,v=nd(e),y=(c===`user`||c===`assistant`)&&!l?v:null;return!g&&!h&&!_&&!d&&!y?null:{copyMarkdown:g,...y?{reactionMessageId:y}:{},...h===void 0?{}:{markdown:h},fullMessage:d,..._?{replyTarget:{messageId:i,text:_,senderLabel:s,...v?{sourceMessageId:v}:{}}}:{}}}function Hg(e,t){return!!(e&&(e.markdown||e.replyTarget&&t.onReply||e.reactionMessageId&&t.onReact))}function Ug(e,t){if(!e)return K;let n=e.reactionMessageId;return U`
    ${e.replyTarget&&t.onReply?Wg(e.replyTarget,t.onReply):K}
    ${e.markdown?hs(e.markdown):K}
    ${n&&t.onReact?U`<openclaw-message-reaction-picker
            class="chat-reaction-action"
            placement=${t.reactionPlacement??`bottom-start`}
            .activeEmoji=${Ag(t.messageReactions?.get(n),t.userId)}
            .onSelect=${(e,r)=>t.onReact?.(n,e,r)}
          ></openclaw-message-reaction-picker>`:K}
  `}function Wg(e,t){return U`
    <openclaw-tooltip .content=${B(`chat.messages.reply`)}>
      <button
        class="chat-reply-btn"
        type="button"
        aria-label=${B(`chat.messages.replyToMessage`)}
        @click=${()=>t(e)}
      >
        ${V.messageSquare}
      </button>
    </openclaw-tooltip>
  `}function Gg(){return(Gg=e((()=>{q(),Zn(),Ds(),H(),m(),Ci(),Bi(),na(),mi(),al(),Cc(),vf(),Yu(),Rg(),Ji()})))()}function Kg(){return U`<svg class="chat-reply-connector" aria-hidden="true" ${Jg()}>
    <path fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round"></path>
  </svg>`}var qg,Jg;function Yg(){return(Yg=e((()=>{q(),jn(),qg=class extends wn{constructor(...e){super(...e),this.draw=()=>{let e=this.element,t=e.parentElement,n=t?.querySelector(`.chat-reply-attribution--reply`),r=n?.querySelector(`.chat-reply-attribution__label`),i=t?.querySelector(`:scope > .chat-avatar, :scope > .chat-avatar-slot`);if(!e.isConnected||!t||!n||!r||!i)return;let a=t.getBoundingClientRect(),o=i.getBoundingClientRect(),s=r.getBoundingClientRect(),c=o.left+o.width/2-a.left,l=o.top-a.top,u=getComputedStyle(t).direction===`rtl`?-1:1,d=n.getBoundingClientRect(),f=(u===1?d.left:d.right)-a.left-u*5,p=s.top+s.height/2-a.top;e.setAttribute(`width`,String(a.width)),e.setAttribute(`height`,String(a.height)),e.firstElementChild?.setAttribute(`d`,`M ${c} ${l} V ${p+7} Q ${c} ${p} ${c+u*7} ${p} H ${f}`)},this.connect=()=>{let e=this.element?.parentElement;if(this.isConnected&&this.element?.isConnected&&e&&(this.draw(),!this.observer&&typeof ResizeObserver==`function`)){this.observer=new ResizeObserver(this.draw),this.observer.observe(e);let t=e.querySelector(`.chat-group-messages`);t&&this.observer.observe(t)}}}render(){return K}update(e){return this.element=e.element,queueMicrotask(this.connect),K}disconnected(){this.observer?.disconnect(),this.observer=void 0}reconnected(){queueMicrotask(this.connect)}},Jg=En(qg)})))()}function Xg(e){return e&&!(`pending`in e||`missing`in e||`oversized`in e)?e:void 0}function Zg(e,t,n){let r=e?nd(e)??void 0:void 0,i=r?Xg(n?.(r)):void 0,a=t??i?.sender,o=i?.senderLabel||ci(a);return o?{state:`named`,name:o,sender:{...a,name:o},agentAvatar:i?.agentAvatar,openId:r}:r_}function Qg(e,t,n,r){let i=n?.(e),a=Xg(i),o=!!(i&&`oversized`in i),s=!r||!!(r.replyShared||r.replyTurnSource),c=s&&t?.senderLabel||``;if(i&&`missing`in i||s&&!c&&o)return s?{state:`unavailable`,name:c}:r_;let l=a?.sender,u=a?.senderLabel||ci(l)||``,d=!!l&&!l?.name?.trim()&&!l?.username?.trim()&&(u===ci(l)||u===Dt()),f=(a?r?.replyShared?l?d?c||ci(l):u:c:u:c)||``,p=r&&!r.replyShared&&(r.replyTurnSource&&nd(r.replyTurnSource.message)===e||r.runId&&a?.turnRunId===r.runId||!r.replyTurnSource&&a&&!a.sender&&!a.turnRunId);return f&&!p?{state:`named`,name:f,sender:{...l,name:f},agentAvatar:a?.agentAvatar,openId:e,...a||t?.text||o?{}:{request:e}}:a||f?r_:{state:i&&`pending`in i&&s?`reserved`:`hidden`,request:e}}function $g(e,t,n,r){let i=e.replyTarget;if(i?.kind!==`id`)return r_;let a=Qg(i.id,e.replyPreview,t,r?{replyShared:!0}:void 0),o=a.sender?.identity;return o?.type===`profile`&&o.id===n&&(a.name=Dt()),a}function e_(e,t,n=e.messages){if(e.role!==`assistant`)return r_;let r=e.messages.map(({message:e})=>Zr(e).replyTarget),i=r.find(e=>e?.kind===`id`);if(i?.kind===`id`){let r=n.map(({message:e})=>Zr(e)).filter(({replyTarget:e})=>e?.kind===`id`&&e.id===i.id).map(({replyPreview:e})=>e),a=r.find(e=>e?.text&&e.senderLabel)??r.find(e=>e?.senderLabel)??r.find(Boolean);return Qg(i.id,a,t,e)}if(r.some(e=>e?.kind===`current`)){let n=e.replyCurrentSource,r=n&&Zr(n.message).sender;return n&&(r||!e.replyShared)&&(e.replyShared||n.key!==e.replyTurnSource?.key)?Zg(n.message,r,t):r_}return e.replyToSender?Zg(e.replyToMessage?.message,e.replyToSender,t):r_}function t_(e,{onOpenReply:t,onResolveReply:n,replyNavigationId:r},i=!1){if(e.request&&n?.(e.request),e.state===`hidden`)return K;let a=`chat-reply-attribution chat-reply-attribution--${i?`inline`:`reply`}`,o=U`<span class="chat-reply-attribution__label"
    >${i?K:U`<span class="chat-reply-attribution__mobile-icon" aria-hidden="true">${V.cornerUpLeft}</span>`}${B(`chat.messages.replyingToLabel`)}</span
  >`;if(e.state===`reserved`)return U`<div class="${a} chat-reply-attribution--pending" aria-hidden="true">
      ${o}
    </div>`;let{name:s=``,openId:c}=e,l=e.state===`named`,u=!!c&&r===c,d=U`
    ${l?vl(e.sender,void 0,e.agentAvatar):K}
    <span class="chat-reply-attribution__name" title=${s}>${s}</span>
  `;return U`<div class=${a}>
    ${o}
    ${l&&c&&t?U`<button
            class="chat-reply-attribution__person chat-reply-attribution__target"
            type="button"
            aria-label=${B(`chat.messages.replyingTo`,{name:s})}
            ?disabled=${u}
            aria-busy=${u?`true`:`false`}
            @click=${()=>t(c)}
          >
            ${d}
          </button>`:s?U`<span class="chat-reply-attribution__person">${d}</span>`:K}
    ${l?K:U`<span class="chat-reply-attribution__unavailable"
            >${B(`chat.messages.replyOriginalUnavailable`)}</span
          >`}
  </div>`}function n_(e,t){return t!==K&&(e.state===`named`||e.state===`unavailable`)?Kg():K}var r_;function i_(){return(i_=e((()=>{q(),Pt(),H(),m(),mi(),Vr(),vf(),wc(),Yg(),r_={state:`hidden`}})))()}function a_(e,t){return An(e,U`<button
      class="btn btn--sm chat-copy-btn"
      type="button"
      @click=${n=>void Is(n,e,t)}
    >
      <span data-copy-label>${t}</span>
    </button>`)}function o_(e){let t=e.conflict;if(!t)return K;let n=Yp(t),r=Xp(t),i=Qp(t),a=B(n===1?`chat.workspaceConflict.titleOne`:`chat.workspaceConflict.titleMany`,{count:String(n)});return U`
    <details
      class="chat-composer-neighbor-card chat-composer-neighbor-card--warn chat-workspace-conflict-notice"
      role="status"
    >
      <summary class="chat-workspace-conflict-notice__summary">
        <span class="chat-composer-neighbor-card__icon" aria-hidden="true"
          >${V.alertTriangle}</span
        >
        <span class="chat-composer-neighbor-card__copy">
          <strong>${a}</strong>
          <span>${B(`chat.workspaceConflict.summary`)}</span>
        </span>
        <span class="chat-workspace-conflict-notice__chevron" aria-hidden="true"
          >${V.chevronUp}</span
        >
        ${e.onDismiss?U`<button
                class="chat-error__dismiss"
                type="button"
                @click=${t=>{t.preventDefault(),t.stopPropagation(),e.onDismiss?.()}}
                aria-label=${B(`chat.workspaceConflict.dismiss`)}
              >
                ${V.x}
              </button>`:K}
      </summary>
      <div class="chat-workspace-conflict-notice__content">
        <ul class="chat-workspace-conflict-paths">
          ${r.paths.map(e=>{let n=Qp(t,e);return U`<li>
              <code>${Gp(e)}</code>
              ${n?U`<span class="chat-workspace-conflict-path-actions">
                      ${a_(n.inspect,B(`chat.workspaceConflict.inspectCloud`))}
                      ${a_(n.takeCloud,B(`chat.workspaceConflict.takeCloud`))}
                    </span>`:K}
            </li>`})}
        </ul>
        ${r.remaining>0?U`<div class="chat-workspace-conflict-more">
                ${B(`chat.workspaceConflict.morePaths`,{count:String(r.remaining)})}
              </div>`:K}
        <details class="chat-workspace-conflict-commands-disclosure">
          <summary>${B(`chat.workspaceConflict.showCommands`)}</summary>
          <div class="chat-workspace-conflict-ref">
            <span>${B(`chat.workspaceConflict.stagedResult`)}</span>
            <code>${t.stagedResultRef}</code>
            ${Ps(t.stagedResultRef,B(`chat.workspaceConflict.copyStagedResult`))}
          </div>
          ${i?U`<div class="chat-workspace-conflict-commands">
                    <div>
                      <span>${B(`chat.workspaceConflict.inspectCloud`)}</span>
                      <code>${i.inspect}</code>
                      ${Ps(i.inspect,B(`chat.workspaceConflict.copyInspectCommand`))}
                    </div>
                    <div>
                      <span>${B(`chat.workspaceConflict.takeCloud`)}</span>
                      <code>${i.takeCloud}</code>
                      ${Ps(i.takeCloud,B(`chat.workspaceConflict.copyTakeCommand`))}
                    </div>
                  </div>
                  <p class="chat-workspace-conflict-command-help">
                    ${B(`chat.workspaceConflict.commandHelp`)}
                  </p>`:U`<p class="chat-workspace-conflict-command-help">
                  ${B(`chat.workspaceConflict.commandsUnavailable`)}
                </p>`}
        </details>
      </div>
    </details>
  `}function s_(e,t,n){let r=Yp(e),i=Xp(e);return U`
    <div
      class="chat-bubble chat-bubble--workspace-conflict"
      data-message-id=${t}
      data-entry-id=${n||K}
    >
      <div class="chat-workspace-conflict-event" role="status">
        <div class="chat-workspace-conflict-event__header">
          <span aria-hidden="true">${V.alertTriangle}</span>
          <strong
            >${B(r===1?`chat.workspaceConflict.eventTitleOne`:`chat.workspaceConflict.eventTitleMany`,{count:String(r)})}</strong
          >
        </div>
        <p>${B(`chat.workspaceConflict.eventDescription`)}</p>
        <ul class="chat-workspace-conflict-paths">
          ${i.paths.map(e=>U`<li><code>${Gp(e)}</code></li>`)}
        </ul>
        ${i.remaining>0?U`<div class="chat-workspace-conflict-more">
                ${B(`chat.workspaceConflict.morePaths`,{count:String(i.remaining)})}
              </div>`:K}
        <div class="chat-workspace-conflict-ref">
          <span>${B(`chat.workspaceConflict.stagedResult`)}</span>
          <code>${e.stagedResultRef}</code>
        </div>
      </div>
    </div>
  `}function c_(){return(c_=e((()=>{q(),Wn(),Ds(),H(),m(),tm()})))()}function l_(e){return[...e.orderedContent,...e.supplementalAttachments].filter(e=>e.type===`attachment`&&e.attachment.kind===`video`)}function u_(e,t){let n=tr(e);return n?.role!==`user`||n.isImported?{localSubmission:!1}:!n.id||sd(e)?{localSubmission:!!n.sendId}:n.id.startsWith(`pending:`)?{}:{canonicalMessageKey:JSON.stringify([t,n.id,n.sequence])}}function d_(e,t){return U`
    <div class="chat-tools-inline">
      ${e.map((e,n)=>{if(t.toolCardOverrides?.has(e))return t.toolCardOverrides.get(e);let r=`${t.messageKey}:toolcard:${n}`,i=t.isToolExpanded?.(r)??!1;return Hh(e,{...t,expanded:i,onToggleExpanded:t.onToggleToolExpanded?()=>t.onToggleToolExpanded?.(r,i):()=>void 0})})}
    </div>
  `}function f_(e){return e===0?K:U`
    <div class="chat-pairing-qr-notices">
      ${Array.from({length:e},()=>U`
          <div
            class="chat-assistant-attachment-card chat-assistant-attachment-card--blocked chat-pairing-qr-expired"
          >
            <span class="chat-pairing-qr-expired__icon" aria-hidden="true"
              >${V.alertTriangle}</span
            >
            <div class="chat-pairing-qr-expired__content">
              <div class="chat-pairing-qr-expired__heading">
                <span class="chat-pairing-qr-expired__title"
                  >${B(`chat.pairingQrExpired.title`)}</span
                >
                <span class="chat-pairing-qr-expired__badge"
                  >${B(`chat.pairingQrExpired.badge`)}</span
                >
              </div>
              <div class="chat-assistant-attachment-card__reason">
                ${B(`chat.pairingQrExpired.reason`)}
              </div>
            </div>
          </div>
        `)}
    </div>
  `}function p_(e,t,n,r){let i=n.assistantMessageDisclosure,{message:a,normalizedMessage:o,displayMarkdown:s,humanMentions:c}=i?.expanded&&i.message?zg(i.message):e,l=a,u=typeof l.role==`string`?l.role:`unknown`,d=ti(u),f=n.asyncQuestions?.submit?Cg(a):null,p=ti(o.role),m=Jp(a);if(m)return s_(m,t,n.entryId);let h=p===`tool`,g=vi(a),_=n.showToolCalls??!0?ji(a):[],v=_.some(e=>n.toolCardOverrides?.get(e)!==K),{images:y,attachments:b,expiredPairingQrCount:x,nextPairingQrExpiresAt:S,orderedContent:C,supplementalImages:w,supplementalAttachments:T}=ld(a,o.content);rd(t,S,n.onRequestUpdate);let E=y.length>0,D=p===`user`?b.filter(e=>e.type===`attachment`&&e.attachment.kind===`video`):[],O=b.filter(e=>!D.includes(e)),k=p===`user`&&qc(O),A={galleryImages:y,galleryVideos:e=>{let r=l_({orderedContent:C,supplementalAttachments:T}),i=r.indexOf(e),a=n.getTurnVideoMessages?.(t);if(!a||i<0)return{index:i,items:r};let o=[],s=-1;for(let e of a)if(e.key===t)s=o.length+i,o.push(...r);else{let t=zg(e.message);o.push(...l_(ld(t.message,t.normalizedMessage.content)))}return{index:s,items:o}},sessionKey:n.sessionKey,agentId:n.agentId,policyKey:n.mediaPolicyKey,...E?u_(a,n.sessionKey):{},connectionEpoch:n.connectionEpoch,resourceBasePath:n.resourceBasePath,authToken:n.assistantAttachmentAuthToken,onRequestUpdate:n.onRequestUpdate,onRequestOpenImage:n.onRequestOpenImage,onOpenImage:n.onOpenImage,resolveArtifactDownload:n.resolveArtifactDownload},ee=n.messageActions?.markdown??s,te=o.content.filter(e=>e.type===`omitted_media`),j=o.content.filter(e=>e.type===`canvas`),M=o.content.filter(e=>e.type===`clawhub`),ne=n.showReasoning&&u===`assistant`?ta(a):null,re=ne?`_Reasoning:_\n\n${ne}`:null,N=(p===`user`?n.messageActions?.markdown:void 0)??(s||null),ie={assistantTranscriptRoleHeaders:u===`assistant`,codeBlockChrome:u===`user`?`none`:`copy`,codeBlockInteraction:u===`assistant`?`interactive`:`static`,fileLinks:!0,githubRepo:u===`assistant`?n.githubRepo??null:null,humanMentions:N===s?c:void 0,...u===`assistant`&&n.githubRepositories?{githubRepositories:n.githubRepositories}:{},interactiveImages:n.onOpenImage!==void 0,sessionLinks:!0,tableInteractions:`enabled`,linkFavicons:!!n.fetchLinkFavicon&&!n.isStreaming},ae=N&&!n.isStreaming?ko(N):null,P=p===`user`&&!N&&!o.replyTarget&&!E&&!v&&te.length===0&&x===0&&b.length>0&&b.every(e=>sl(e)||xl(e)),F=[`chat-bubble`,E||D.length>0||k||p===`user`&&O.some(e=>sl(e)||xl(e))?`chat-bubble--with-images`:``,P?`chat-bubble--preview-chips-only`:``,k?`chat-bubble--with-files`:``,h?`chat-bubble--tool-shell`:``,n.isStreaming?`streaming`:``].filter(Boolean).join(` `);if(!N&&!f&&!re&&!v&&!E&&x===0&&te.length===0&&b.length===0&&j.length===0&&M.length===0&&!o.replyTarget)return K;let I=`toolmsg:${t}`,oe=n.isToolMessageExpanded?.(I)??!1,se=[...new Set(_.map(e=>e.name))],L=_.length===1?_[0]:null,R=g&&!!N&&!ae&&!E&&L?.outputText?.trim()===N?.trim(),ce=R?null:N,le=p===`assistant`&&!!N&&!f&&(!i?.expanded||!!i.message)&&C.some(e=>e.type!==`text`),ue=!!L&&(!N||R)&&!E,de=ue?void 0:_.find(ia),fe=L?sp({name:L.name,args:L.args,detailMode:`explain`}):null,pe=L&&fe?Rh(L,fe.detail):void 0,me=pe?!N&&!E?pe:L?.outputText?.trim()?`output`:void 0:se.length<=3?se.join(`, `):`${se.slice(0,2).join(`, `)} +${se.length-2} more`,he=N?Yi(N)??``:``,ge=fe&&!N&&!E?fe.label:B(`chat.toolCards.toolOutput`),_e=Wi(ge)??ge,ve=Ii(me,_e),ye=fe?kh(fe.icon,{toolName:fe.name,pluginToolIcons:n.pluginToolIcons}):V.zap,be=d===`assistant`&&j.length>0?U`${j.map(e=>U`<div class="chat-tool-card__widget-host">
            ${rh(e.preview,`chat_message`,{rawText:e.rawText??null,canvasPluginSurfaceUrl:n.canvasPluginSurfaceUrl,boardProvider:n.boardProvider,embedSandboxMode:n.embedSandboxMode??`scripts`,allowExternalEmbedUrls:n.allowExternalEmbedUrls,sessionKey:n.sessionKey,messageTimestamp:typeof l.timestamp==`number`?l.timestamp:void 0})}
            ${e.rawText?U`<div class="chat-tool-card__widget-raw">
                    ${hm(e.rawText)}
                  </div>`:K}
          </div>`)}`:K,xe=Math.max(1,Math.floor(n.duplicateCount??1)),Se=xe>1?{count:xe,label:B(`chat.messages.duplicatesCollapsed`,{count:String(xe)})}:void 0,Ce=g&&v&&!N&&!E&&x===0&&te.length===0&&b.length===0&&j.length===0&&!re,we={...n,messageKey:t,onOpenSidebar:r},Te=()=>f?gg(f,n.asyncQuestions):ae?oc(ae,t,{...n,role:g?`tool`:p},ie):ce?Yc(ce,t,{...n,role:g?`tool`:p},ie,Se):K,z=()=>{let e=Zs(C,e=>e.type===`image`?Hc([e.image],A):hc([e],A,r,n.onAssistantAttachmentLoaded)),s=Mi(a,{...o,content:[{type:`text`,text:e.markdown}]});return Yc(s,t,{...n,role:p,assistantMessageDisclosure:i?{...i,markdown:s}:void 0},ie,N?Se:void 0,{...e.media,text:ce??``})},Ee=()=>le?z():Te(),De=typeof n.transcriptVisible==`object`?n.transcriptVisible.isPresented():n.transcriptVisible,Oe=()=>U`
    ${d===`assistant`?M.map(e=>U`<openclaw-chat-clawhub-card
              .recommendation=${e}
              .agentId=${n.agentId}
            ></openclaw-chat-clawhub-card>`):K}
    ${f_(x)}
    ${Hc(le?w:y,A,D.map(e=>U`
          <div class="chat-image-frame chat-video-preview">
            ${De===!1?K:Re(n.transcriptVisible??!0,Oc(e,A,r,n.onAssistantAttachmentLoaded,`preview`))}
          </div>
        `))}
    ${zu(te)}
    ${hc(le?T:O,A,r,n.onAssistantAttachmentLoaded,p===`assistant`)}
    ${g?be:K}
    ${re?U`<div class="chat-thinking">
            ${Bn(vs(re,{codeBlockInteraction:`interactive`}))}
          </div>`:K}
    ${g?K:be}
    ${n.avatar?U`<div class="chat-message-avatar-anchor">
            ${Ee()}${n.avatar}
          </div>`:Ee()}
    ${v?g&&ue&&L?Dm(L,we):d_(_,{...we,showApprovalReviews:!g&&void 0}):K}
    ${g&&de?Cm(`failed`,de.exitCode):K}
  `;return U`
    <div
      class="${F}"
      ${n.entryRef?W(n.entryRef):K}
      data-message-id=${t}
      data-file-session-key=${n.fileLinkSessionKey??K}
      data-entry-id=${n.entryId||K}
      data-message-text=${ee||K}
      .messageActions=${n.messageActions}
    >
      ${n.replyLine?t_(n.replyLine,n,!0):K}
      ${Ce?d_(_,we):g?Uh(L,{...we,expanded:oe},U`
                  <div
                    class="chat-tool-msg-collapse chat-tool-msg-collapse--manual ${oe?`is-open`:``}"
                  >
                    <button
                      class="chat-inline-disclosure chat-tool-msg-summary"
                      type="button"
                      aria-expanded=${String(oe)}
                      @pointerenter=${Ph}
                      @focus=${Ph}
                      @click=${()=>n.onToggleToolMessageExpanded?.(I,oe)}
                    >
                      <span class="chat-tool-msg-summary__icon">${ye}</span>
                      <span class="chat-tool-disclosure__content">
                        <span class="chat-tool-msg-summary__label">${_e}</span>
                        ${ve?U`<span class="chat-tool-msg-summary__names"
                                >${ve}</span
                              >`:he?U`<span class="chat-tool-msg-summary__preview"
                                  >${he}</span
                                >`:K}
                      </span>
                      <span class="chat-tool-row__chevron" aria-hidden="true"
                        >${V.chevronRight}</span
                      >
                    </button>
                    ${oe?U`<div class="chat-tool-msg-body">${Oe()}</div>`:zu(te)}
                    ${_.map(e=>Vh(e))}
                  </div>
                `):Oe()}
      ${d===`assistant`&&Qd(a)?U`<div
              class="chat-tasks-status chat-turn-recap chat-turn-recap--continuation"
              role="status"
            >
              ${B(`chat.composer.runInterrupted`)}
            </div>`:K}
      ${xe>1&&(!N||ae)?U`<div
              class="chat-duplicate-count"
              aria-label=${B(`chat.messages.duplicatesCollapsed`,{count:String(xe)})}
            >
              ×${xe}
            </div>`:K}
    </div>
    ${Og(a)}
  `}function m_(){return(m_=e((()=>{ar(),q(),G(),Hn(),Zn(),H(),$o(),Bs(),m(),Ci(),na(),Rf(),Ai(),mi(),Fi(),op(),Je(),xf(),nu(),eg(),tm(),Dg(),Au(),el(),kg(),hu(),Gg(),Su(),Yu(),lc(),md(),i_(),zc(),qh(),jm(),c_(),Eh(),Ji()})))()}function h_(){try{return P()?.getItem(C_)===`1`}catch{return!1}}function g_(e){for(let[t,{dismiss:n}]of E_)e instanceof Node&&e.contains(t)&&n()}function __(e){for(let[t,{popover:n}]of E_)if(e.contains(t)&&n.contains(document.activeElement))return!0;return!1}function v_(){let e=window.visualViewport,t=e?.offsetLeft??0,n=e?.offsetTop??0,r=e?.width??window.innerWidth??document.documentElement.clientWidth;return{bottom:n+(e?.height??window.innerHeight??document.documentElement.clientHeight),left:t,right:t+r,top:n}}function y_(e,t,n){return n<t?t:Math.min(Math.max(e,t),n)}function b_(e,t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=v_(),a=w_,o=T_,s=i.right-i.left,c=i.bottom-i.top,l=Math.min(r.width,s-16),u=Math.min(r.height,c-16),d=n.top-i.top-a-o,f=i.bottom-n.bottom-a-o,p=d<u&&f>=d,m=y_(n.right-l,i.left+a,i.right-a-l),h=y_(p?n.bottom+o:n.top-o-u,i.top+a,i.bottom-a-u);t.style.left=`${Math.round(m)}px`,t.style.top=`${Math.round(h)}px`,t.dataset.placement=p?`below`:`above`}function x_(e){let t=B(`chat.messages.rewind`);return U`
    <span class="chat-confirm-wrap chat-rewind-wrap">
      <openclaw-tooltip .content=${t}>
        <button
          class="chat-group-rewind"
          aria-label=${t}
          @click=${t=>S_(t.currentTarget,e)}
        >
          ${V.refresh}
        </button>
      </openclaw-tooltip>
    </span>
  `}function S_(e,t){let n=B(`chat.messages.rewind`),r=B(`chat.messages.rewindConfirm`);if(h_()){t();return}let i=e.closest(`.chat-confirm-wrap`);if(!i)return;let a=i,o=E_.get(a);if(o){o.dismiss({restoreFocus:!0});return}let s=document.createElement(`div`);s.className=`chat-confirm-popover`,s.setAttribute(`role`,`dialog`),s.setAttribute(`aria-modal`,`true`),s.setAttribute(`aria-label`,r),s.innerHTML=`
    <p class="chat-confirm-popover__text"></p>
    <label class="chat-confirm-popover__remember">
      <input type="checkbox" class="chat-confirm-popover__check" />
      <span></span>
    </label>
    <div class="chat-confirm-popover__actions">
      <button class="chat-confirm-popover__cancel" type="button"></button>
      <button class="chat-confirm-popover__yes" type="button"></button>
    </div>
  `;let c=s.querySelector(`.chat-confirm-popover__cancel`),l=s.querySelector(`.chat-confirm-popover__yes`),u=s.querySelector(`.chat-confirm-popover__check`);s.querySelector(`.chat-confirm-popover__text`).textContent=r,l.textContent=n,s.querySelector(`.chat-confirm-popover__remember span`).textContent=B(`chat.messages.dontAskAgain`),c.textContent=B(`common.cancel`),a.ownerDocument.body.appendChild(s),E_.set(a,{popover:s,dismiss:p}),b_(e,s);let d=!1,f=null;function p(t){d||(d=!0,f?.disconnect(),document.removeEventListener(`click`,m,!0),document.removeEventListener(`contextmenu`,m,!0),window.removeEventListener(`keydown`,h,!0),E_.delete(a),s.remove(),t?.restoreFocus&&e.isConnected&&e.focus({preventScroll:!0}))}function m(t){let n=t.target;n instanceof Node&&!s.contains(n)&&(t.type===`contextmenu`||!e.contains(n))&&p()}function h(e){e.key===`Escape`&&s.contains(document.activeElement)&&(e.preventDefault(),e.stopImmediatePropagation(),p({restoreFocus:!0}))}function g(e){e.key===`Tab`&&(e.shiftKey&&document.activeElement===u?(e.preventDefault(),l.focus()):!e.shiftKey&&document.activeElement===l&&(e.preventDefault(),u.focus()))}c.addEventListener(`click`,()=>p({restoreFocus:!0})),l.addEventListener(`click`,()=>{if(u.checked)try{P()?.setItem(C_,`1`)}catch{}p(),t()}),s.addEventListener(`click`,e=>e.stopPropagation()),s.addEventListener(`keydown`,g),document.addEventListener(`contextmenu`,m,!0),window.addEventListener(`keydown`,h,!0),f=new MutationObserver(()=>{(!a.isConnected||!e.isConnected)&&p()}),f.observe(a.ownerDocument.body,{childList:!0,subtree:!0}),c.focus({preventScroll:!0}),requestAnimationFrame(()=>{!d&&s.isConnected&&(b_(e,s),document.addEventListener(`click`,m,!0))})}var C_,w_,T_,E_;function D_(){return(D_=e((()=>{q(),H(),m(),Ci(),Ji(),C_=`openclaw:skip-rewind-confirm`,w_=8,T_=6,E_=new Map})))()}function O_(e,t){if(!e)return K;let n=t.queuedMessageAction?.id===e.id?t.queuedMessageAction:void 0,r=e.state===`waiting-reconnect`,i=r?void 0:n?.onAction??t.onRetryQueuedMessage,a=(e.state===`failed`||e.state===`unconfirmed`||e.state===`held`||r)&&!n?t.onDiscardQueuedMessage:void 0;return U`<span
    class="chat-send-status"
    title=${e.error??K}
    data-send-state=${e.state}
  >
    <span class="chat-send-status__part">
      <span aria-hidden="true">·</span>
      <span
        >${B(r?`chat.queue.states.waitingForReconnect`:e.state===`held`?`chat.queue.states.needsReview`:e.state===`unconfirmed`?`chat.queue.deliveryUnconfirmed`:`chat.queue.notSent`)}</span
      >
    </span>
    ${i?U`
            <span class="chat-send-status__part">
              <span aria-hidden="true">·</span>
              <button
                class="chat-send-status__action chat-send-status__retry"
                type="button"
                aria-label=${n?.label??B(`chat.queue.retryQueuedMessage`)}
                @click=${()=>i(e.id)}
              >
                ${n?.label??B(`chat.queue.retry`)}
              </button>
            </span>
          `:K}
    ${a?U`
            <span class="chat-send-status__part">
              <span aria-hidden="true">·</span>
              <button
                class="chat-send-status__action chat-send-status__discard"
                type="button"
                title=${B(`chat.queue.discardPendingMessage`)}
                @click=${t=>{t.detail<=1&&a(e.id)}}
              >
                ${B(`chat.queue.discard`)}
              </button>
            </span>
          `:K}
  </span>`}function k_(){return(k_=e((()=>{q(),m()})))()}function A_(e,t){let n=e.sender?.identity;return n?.type===`profile`&&n.id===t}function j_(e){return ti(e.role)===`user`&&!!e.sourceClients?.length&&!e.sender&&!e.senderLabel?.trim()}function M_(e,t){let n=ti(e.role);if(j_(e))return qf(e.sourceClients??[]);if(n===`custom`){if(e.messages.every(({message:e})=>{let t=Z(e)?.customType;return t===`run-failed-before-reply`||t===`cloud-workspace-recovery-failed`})){let t=e.messages.every(({message:e})=>{let t=Z(e);return t?.customType===`run-failed-before-reply`&&Z(t.details)?.errorKind===`state_contention`});return B(t?`common.system`:`chat.messages.errorSender`)}return e.messages.every(({message:e})=>Jp(e))?B(`chat.workspaceConflict.eventSender`):B(`common.system`)}let r=Dt({name:t.userName}),i=e.senderLabel?.trim();return n===`user`?A_(e,t.userId)?r:i??B(`chat.messages.unattributedSender`):n===`assistant`?i??t.assistantName??`Assistant`:n===`tool`?B(`chat.messages.toolSender`):n}function N_(){return(N_=e((()=>{Pt(),m(),dp(),mi(),tm()})))()}function P_(e,t){let{onChange:n,onSubmit:r,onSkip:i}=t;return{model:{requestKey:e.id,title:B(`chat.questions.eyebrow`),questions:e.questions,agentId:e.agentId,sessionKey:e.sessionKey,secretStoreAllowedHostsDraft:e.secretStoreAllowedHostsDraft,collapsed:t.collapsed??!1,disabled:e.status!==`pending`,submitting:e.submitting,drafts:e.drafts,error:e.error,requestPosition:t.requestPosition},onChange:n,onSecretStoreAllowedHostsChange:t=>{e.secretStoreAllowedHostsDraft=t,n?.()},onSubmit:r?async t=>{if(await r(t),e.status===`pending`&&e.error)throw Error(e.error)}:void 0,onSkip:i?async()=>{if(await i(),e.status===`pending`&&e.error)throw Error(e.error)}:void 0,onDismissError:e.error&&n?()=>{e.error=null,n()}:void 0,onCollapsedChange:t.onCollapsedChange,onPreviousRequest:t.onPreviousRequest,onNextRequest:t.onNextRequest}}function F_(e,t){return e.status===`cancelled`?B(`chat.questions.skipped`):e.status===`expired`?B(`chat.questions.expired`):e.status===`unavailable`?B(`chat.questions.unavailable`):t.isSecret?B(`chat.questions.answered`):e.answers?.answers[t.questionId]?.join(`, `)||(e.answeredElsewhere?B(`chat.questions.answeredElsewhere`):B(`chat.questions.answered`))}function I_(e){return e.status===`pending`?K:U`
    <div class="chat-question-summary" aria-label=${B(`chat.questions.summaryLabel`)}>
      ${e.questions.map(t=>U`
          <div class="chat-question-summary__item">
            <div class="chat-question-summary__prompt">${t.question}</div>
            <div class="chat-question-summary__line">
              <strong>${t.header}:</strong>
              <span>${F_(e,t)}</span>
            </div>
          </div>
        `)}
    </div>
  `}var L_,R_;function z_(){return(z_=e((()=>{q(),Rn(),St(),un(),nn(),m(),R(),co(),L_={tagName:`openclaw-chat-question-panel`,get label(){return B(`chat.questions.eyebrow`)},loadModule:()=>ao(()=>import(`./chat-question-panel-C1r3JwNX.js`),__vite__mapDeps([20,5,6,7,3,11,12,13]),import.meta.url)},R_=class extends oe{constructor(...e){super(...e),this.panelLoader=new Ot(this)}willUpdate(){this.panelLoader.requestWhileActive(L_,this.isConnected&&!!this.props)}connectedCallback(){super.connectedCallback(),this.requestUpdate()}disconnectedCallback(){this.panelLoader.requestWhileActive(L_,!1),super.disconnectedCallback()}render(){if(!this.props)return K;if(Et(L_))return U`<openclaw-chat-question-panel
        .props=${this.props}
      ></openclaw-chat-question-panel>`;let e=this.panelLoader.visibleState;return e?.status===`error`?hn({error:e.error,stale:e.stale,subtitle:L_.label,onRetry:()=>this.panelLoader.retry()}):vn()}},Q([X({attribute:!1})],R_.prototype,`props`,void 0),customElements.get(`openclaw-chat-question-card`)||customElements.define(`openclaw-chat-question-card`,R_)})))()}function B_(e,t,n){return J(e,e=>`${e.kind}:${e.key}`,e=>V_(e,t,n))}function V_(e,t,n){if(e.kind===`reading-indicator`)return Qu(e,{mascot:t.branding?.mascot,workingPhrases:t.branding?.workingPhrases,waitingApproval:t.waitingApproval===!0,startupLabel:t.startupLabel,outputTokens:t.runOutputTokens,presentation:n});if(e.kind===`question`){let n=t.questionPrompts?.get(e.questionId);return n?I_(n):K}let r=zg({role:`assistant`,content:[{type:`text`,text:e.text}],timestamp:e.startedAt});return p_(r,e.key,{...t,isStreaming:e.isStreaming,entryRef:t.entryRefFor?.(e.key),showReasoning:!1,messageActions:Vg(r,{messageId:e.key,onReply:t.onReply,senderLabel:t.assistant?.name??`Assistant`})},t.onOpenSidebar)}function H_(e,t={}){let{assistant:n}=t,r=n?.name??`Assistant`,i=e.flatMap(e=>e.kind===`stream`?[e.startedAt]:[]),a=i.length>0?Math.min(...i):null,o=e.some(e=>e.kind===`reading-indicator`||e.kind===`stream`&&e.isStreaming),s=e.every(e=>e.kind!==`stream`),c=s||t.showAssistantAvatar===!1?K:hd(`assistant`,n),l=e.find(e=>e.kind===`stream`),u=e_({role:`assistant`,messages:[],replyToSender:l?.replyToSender,replyToMessage:l?.replyToMessage},t.resolveReplyPreview),d=`chat-group assistant${u.state!==`hidden`&&c!==K?` chat-group--reply`:``}${s?` chat-group--working`:``}${a===null?``:` chat-group--with-footer`}`;return U`
    <div class=${d} data-chat-row-key=${e[0]?.key??K}>
      ${c}
      <div class="chat-group-messages">
        ${t_(u,t)} ${B_(e,t,`standalone`)}
      </div>
      ${n_(u,c)}
      ${a===null?K:o?W_:U`
                <div class="chat-group-footer">
                  <div class="chat-group-footer__meta">
                    <span class="chat-sender-name">${r}</span>
                    ${Pp(a)}
                  </div>
                </div>
              `}
    </div>
  `}function U_(e,t){let n=qr(e.durationMs),r=e.groups.flatMap(e=>e.messages.map(({message:e})=>({cards:ji(e),activity:Array.isArray(ro(e)?.activity)?pi(e):void 0}))),i=r.flatMap(({cards:e,activity:t})=>t===void 0?[]:[{cards:e,activity:t}]),a=new Set(i.flatMap(({cards:e,activity:t})=>[...e.flatMap(e=>e.callId?[e.callId]:[]),...t.map(e=>e.toolCallId??e.itemId)])),o=[...new Map(r.flatMap(e=>e.cards).map(e=>[e.callId??e,e])).values()],s=new Set(r.filter(e=>e.activity===void 0).flatMap(e=>e.cards)),c=o.filter(e=>s.has(e)&&(!e.callId||!a.has(e.callId))),l=i.flatMap(e=>e.activity);for(let[e,t]of c.entries()){let n=di(t,!1),r=sp(t);l.push({itemId:`work-summary-raw:${e}`,toolCallId:t.callId,kind:`tool`,phase:`end`,title:r.name,name:r.name,status:n===`succeeded`?`completed`:n===`unknown`?void 0:n})}let u=n?B(`chat.workRun.workedFor`,{duration:n}):B(`chat.workRun.worked`),d=Kr(l),f=d.total,p=d.outcomes.filter(({kind:e})=>e!==`failed`&&e!==`skipped`),m=Mm(o,!0,l),h=U`
    <div class="chat-activity-group chat-work-group ${t.expanded?`is-open`:``}">
      <button
        class="chat-inline-disclosure chat-activity-group__summary"
        type="button"
        aria-expanded=${String(t.expanded)}
        @pointerenter=${Ph}
        @focus=${Ph}
        @click=${t.onToggle}
      >
        <span class="chat-tool-disclosure__content">
          <span class="chat-activity-group__label">${u}</span>
        </span>
        ${t.expanded&&f>0?U`<span class="chat-work-group__total"
                >·
                ${B(`chat.workRun.toolCalls${f===1?`One`:`Many`}`,{count:String(f)})}</span
              >`:K}
        ${p.map(e=>U`<span class="muted">· ${e.label}</span>`)}
        ${m===K?K:U`<span class="chat-work-group__outcomes">· ${m}</span>`}
        <span class="chat-tool-row__chevron" aria-hidden="true">${V.chevronRight}</span>
      </button>
      <div class="chat-work-group__separator" aria-hidden="true"></div>
      ${t.expanded?K:t.browserTabPreviews??K}
    </div>
  `;return t.presentation===`continuation`?h:U`
        <div
          class="chat-group tool chat-group--turn-block chat-group--work"
          data-chat-row-key=${e.key}
        >
          <div class="chat-group-messages">${h}</div>
        </div>
      `}var W_;function G_(){return(G_=e((()=>{q(),Pn(),H(),ht(),m(),aa(),Fi(),op(),oa(),gc(),m_(),Gg(),Rp(),z_(),i_(),qh(),Nm(),rc(),W_=U`<div class="chat-group-footer" aria-hidden="true"></div>`})))()}var K_,q_;function J_(){return(J_=e((()=>{q(),jn(),K_=class extends wn{constructor(...e){super(...e),this.media=globalThis.matchMedia?.(`(max-width: 768px), (max-width: 932px) and (max-height: 500px) and (orientation: landscape)`),this.content=()=>K,this.updateLayout=()=>{this.setValue(this.content(this.media?.matches??!1))}}render(e){return this.content=e,this.isConnected&&this.media?.addEventListener(`change`,this.updateLayout),e(this.media?.matches??!1)}disconnected(){this.media?.removeEventListener(`change`,this.updateLayout)}reconnected(){this.media?.addEventListener(`change`,this.updateLayout),this.updateLayout()}},q_=En(K_)})))()}function Y_(e,t,n){let r=`inter-session:`+e.key,i=!!t.searchResult||(t.isToolMessageExpanded?.(r)??!1),a=e.messages.reduce((e,t)=>e+(t.duplicateCount??1),0);return U`
    <div
      class="chat-group tool chat-group--turn-block"
      data-chat-row-key=${e.key}
      data-file-session-key=${e.senderSession?.sessionKey??K}
    >
      <div class="chat-group-messages">
        <details
          class="chat-session-activity"
          .open=${i}
          @toggle=${e=>{if(!(e.currentTarget instanceof HTMLDetailsElement)||t.searchResult)return;let n=e.currentTarget.open;n!==(t.isToolMessageExpanded?.(r)??!1)&&t.onToggleToolMessageExpanded?.(r,!n)}}
        >
          <summary
            class="chat-inline-disclosure chat-session-activity__summary"
            aria-disabled=${t.searchResult?`true`:K}
            tabindex=${t.searchResult?`-1`:K}
            @click=${e=>{t.searchResult&&e.preventDefault()}}
          >
            ${Eu(e,{...t,updateCount:a,linkSource:!1})}
            ${t.searchResult?K:U`<span class="chat-session-activity__chevron" aria-hidden="true">${V.chevronRight}</span>`}
          </summary>
          <div class="chat-session-activity__body">
            ${i?Eu(e,{...t,showAvatar:!1}):K}
            ${i||!t.onToggleToolMessageExpanded?J(e.messages,e=>e.key,(t,r)=>{let i=n(t,r);return U`<div class="chat-session-activity__message">
                        ${i.content}
                        <div class="chat-session-activity__meta">
                          ${Pp(nc(t.message)??e.timestamp)}
                          <div
                            class="chat-group-footer-actions"
                            data-message-actions-for=${t.key}
                          >
                            ${i.actions}
                          </div>
                        </div>
                      </div>`}):K}
          </div>
        </details>
      </div>
    </div>
  `}function X_(){return(X_=e((()=>{q(),Pn(),H(),nu(),Nu(),Rp()})))()}function Z_(e,t,n){let r=zg(t.message),i=Vg(r,{...n,messageId:t.key,canFetchFullMessage:!!(n.loadFullAssistantMessage&&n.sessionKey),senderLabel:M_(e,n)}),a=i?.fullMessage?.messageId;if(a){let e=n.getAssistantMessageExpansion?.(a);(!e||e.status===`error`&&e.revision<6)&&n.onToggleAssistantMessageExpanded?.(a)}return{item:t,source:r,actions:i}}function Q_(e,t,n,{item:r,source:i,actions:a}){let o,s=a?.fullMessage;if(s&&n.loadFullAssistantMessage&&n.onToggleAssistantMessageExpanded){let{messageId:e,state:t}=s,r=t?.status===`error`&&t.revision>=6;o={expanded:t?.status===`loaded`,...t?.status===`loaded`?{markdown:a?.markdown,message:t.message}:{},...r?{onRetryFullMessage:()=>n.onToggleAssistantMessageExpanded?.(e)}:{}}}let c=e.isStreaming&&t===e.messages.length-1;return U`${p_(i,r.key,{...n,isStreaming:c,entryId:nd(r.message)??void 0,entryRef:n.entryRefFor?.(r.key),duplicateCount:r.duplicateCount??1,showToolCalls:n.showToolCalls??!0,autoExpandToolCalls:n.autoExpandToolCalls??!1,assistantMessageDisclosure:o,messageActions:a},n.onOpenSidebar)}${Ng(e,a,c,n)}`}function $_(e,t,n=`standalone`){let r=e[0];if(!r||t.showToolCalls===!1)return K;let i=e.flatMap(e=>e.messages),a=[],o=new Map,s=new Map,c=new Set,l=i.flatMap(n=>{let r=pi(n.message);t.runActive&&t.activityRunId&&(!t.activityGroupKey||e.some(e=>e.key===t.activityGroupKey))&&Dl(n.message)===t.activityRunId&&r.forEach(e=>c.add(e));let i=new Map(r.map(e=>[e.toolCallId,e]));for(let[e,t]of ji(n.message).entries()){a.push(t),o.set(t,{messageKey:n.key,disclosureId:`${n.key}:toolcard:${e}`});let r=t.callId?i.get(t.callId):void 0;r&&s.set(t,r)}return r}).filter(e=>!e.hideFromChannelProgress&&!e.suppressChannelProgress),u=[...new Map(l.filter(e=>c.has(e)).map(e=>[e.toolCallId??e.itemId,e])).values()],f=lt(a),p=Jh(u,f,s),m=new Set(l.map(e=>e.toolCallId??e.itemId)),h=`activity:${r.key}`,g=`activity-body-${d(r.key).toString(16)}`,_=t.isToolMessageExpanded?.(h)??!1,v=Yr(l,{includeInlineOutcomes:_}),y=new Map;function b(e){let{card:n,children:r}=e,i=o.get(n),a=t.isToolExpanded?.(i.disclosureId)??!1,s=[],c=[...r];for(let e of c)s.push(e.card),c.push(...e.children),y.set(e.card,K);return Hh(n,{...t,messageKey:i.messageKey,expanded:a,onToggleExpanded:()=>t.onToggleToolExpanded?.(i.disclosureId,a),activityCards:[n,...s],children:r.length?U`${a?r.map(b):K}`:void 0})}if(_)for(let e of f)e.children.length>0&&y.set(e.card,b(e));let x=a.flatMap(e=>ui(e.details)),S=a.flatMap(e=>{let t=Si(e.details);return t?[t]:[]}),C=Ur(x,S),w=x[0]?.label??`Review`,T=C?B(`chat.toolCards.review.${C}`,{reviewer:w}):``,E=U`
    <div
      class="chat-activity-group ${_?`is-open`:``}"
      data-file-session-key=${r.senderSession?.sessionKey??K}
    >
      <button
        class="chat-inline-disclosure chat-activity-group__summary"
        type="button"
        aria-expanded=${String(_)}
        aria-controls=${g}
        @pointerenter=${Ph}
        @focus=${Ph}
        @click=${()=>t.onToggleToolMessageExpanded?.(h,_)}
      >
        ${Zh(JSON.stringify([t.sessionKey,t.connectionEpoch,t.activityRunId]),p,v,u,t.pluginToolIcons)}
        ${p?Kr(l).outcomes.filter(({kind:e})=>e!==`failed`&&e!==`skipped`).map(({label:e})=>U`<span class="muted">${e}</span>`):K}
        ${C?U`<span
                class="chat-activity-group__review-status"
                data-outcome=${C}
                role="img"
                aria-label=${T}
                >${C===`denied`?V.shieldX:C===`reviewing`?V.shieldQuestion:V.shieldCheck}</span
              >`:K}
        ${_?K:Mm(a.filter(e=>e.callId&&m.has(e.callId)),!0,l)}
        <span class="chat-tool-row__chevron" aria-hidden="true">${V.chevronRight}</span>
      </button>
      <div class="chat-activity-group__body" id=${g} ?hidden=${!_}>
        ${_?e.map(e=>e.messages.map((n,r)=>Q_(e,r,{...t,toolCardOverrides:y},Z_(e,n,t)))):K}
      </div>
      ${Dh(e,t)}
    </div>
  `;return n===`continuation`?E:U`
        <div
          class="chat-group tool chat-group--turn-block chat-group--activity chat-group--with-footer"
          data-chat-row-key=${r.key}
        >
          <div class="chat-group-messages">${E}</div>
        </div>
      `}function ev(e){if(ti(e.role)!==`tool`)return!1;let t=e.messages.flatMap(e=>ji(e.message));return e.messages.length>1||t.length>1||t.some(e=>ui(e.details).length>0)}function tv(e,t){let n=e.senderSession?.sessionKey;return n?{...t,fileLinkSessionKey:n,onOpenWorkspaceFile:t.onOpenWorkspaceFile&&(e=>{let r={...e,sessionKey:n};t.onOpenWorkspaceFile?.(r)}),onOpenSidebar:t.onOpenSidebar&&(e=>t.onOpenSidebar?.(e.kind===`markdown`?{...e,fileLinkSessionKey:n}:e))}:t}function nv(e,t){let n=tv(e,t);if(ev(e))return $_([e],n,`continuation`);let r={...n,isForwarded:Lc(e)},i=J(e.messages,e=>e.key,(t,i)=>Q_(e,i,r,Z_(e,t,n)));return U`${i}${n.showToolCalls===!1?K:Dh([e],n)}`}function rv(e,t){let n=e.senderSession?.sessionKey,r=tv(e,t);if(fd(e))return Y_(e,r,(t,n)=>{let i=Z_(e,t,r);return{content:Q_(e,n,{...r,isForwarded:!0,onToggleUserMessageExpanded:void 0,replyLine:e_({...e,messages:[t]},r.resolveReplyPreview)},i),actions:i.actions?Ug(i.actions,r):K}});let i=ti(e.role),a=j_(e),o=i!==`user`||!!(e.sender||e.senderLabel?.trim()),s=r.assistantName??`Assistant`,c=A_(e,r.userId),l=i===`user`&&!!(r.userId&&e.sender)&&!c,u=Lc(e),d=i===`assistant`&&u,f=r.frameContent?r.frameReplyLine??r_:e_(e,r.resolveReplyPreview),p=e.sender?.identity??(i===`assistant`?{type:`agent`,id:e.senderSession?.agentId??r.agentId??`main`}:void 0),m=f.sender?.identity,h=!(p&&m?.type===p.type&&m.id===p.id)&&!d&&!a&&(i!==`user`||!c||r.showOwnSenderName!==!1),g=e.sourceClients?.filter(e=>np(e)!==`web`),_=M_(e,r),v=i===`user`||i===`assistant`||i===`tool`?i:e.messages.every(e=>Jp(e.message))?`workspace-conflict`:`other`,y=r.avatarPlacement??`gutter`,b=()=>U`${h?Uo(_,l&&e.sender?.identity?.type===`profile`?Yo(e.sender.identity.id,r.personActivity,_):null,`chat-sender-name`):K}
  ${g?.length?U`<span class="chat-message-source">${qf(g)}</span>`:K}`,x=Fp(e,r.contextWindow??null);if(i===`tool`&&r.showToolCalls===!1)return K;if(ev(e))return $_([e],r);let S=r.frameContent!==void 0,C=i===`tool`||i===`assistant`&&!r.searchResult&&!S&&!d&&Hd(e.messages[0]?.message)===`commentary`,w=S?r.frameActionOwner?[r.frameActionOwner]:[]:e.messages,T=w.map(t=>Z_(e,t,r)),E=e.messages.length-1,D=T.at(-1)?.actions??null,O=w.at(-1)?.key,k=i===`user`&&(r.onRewind&&!r.rewindDisabled||Hg(D,r))?U`
        <div
          class="chat-group-footer-actions"
          data-message-actions-for=${O??K}
        >
          ${D?.replyTarget&&r.onReply?Wg(D.replyTarget,r.onReply):K}
          ${r.onRewind&&!r.rewindDisabled?x_(r.onRewind):K}
          ${Ug(D,Mg(e,r))}
        </div>
      `:K,A=d&&n?qi({id:n}):i===`user`&&e.sender?qi(e.sender):null,ee=fl(e.messages.at(-1)?.message),te=i===`user`&&y===`gutter`&&(l||!!T[E]?.source.displayMarkdown),j=o&&!C&&y===`gutter`&&(d||i!==`assistant`||r.showAssistantAvatar!==!1)?d?tc(e.senderSession?.agentId,r):hd(e.role,{agentId:r.agentId,name:s,avatar:r.assistantAvatar??null,textAvatar:r.assistantTextAvatar},c?{name:r.userName??null,avatar:r.userAvatar??null}:void 0,e.sender):K,M=f.state!==`hidden`&&j!==K;return U`
    <div
      class="chat-group ${v} chat-group--with-footer${C?` chat-group--turn-block`:``}${r.latestAssistant?` chat-group--latest-assistant`:``}${l?` chat-group--peer`:``}${d?` chat-group--forwarded`:``}${A===null?``:` chat-group--sender-tint`}${M?` chat-group--reply`:``}"
      style=${A===null?K:`--chat-sender-hue: ${A}`}
      data-chat-row-key=${e.key}
      data-file-session-key=${n??K}
    >
      ${te?K:j}
      <div class="chat-group-messages">
        ${u?Eu(e,r):K}
        ${t_(f,r)}
        ${r.frameContent??q_(t=>J(T,e=>e.item.key,(n,a)=>{let{item:o,actions:s}=n,c=Hg(s,r)&&a<E&&!C?t?U`<div class="chat-group-footer chat-message-footer">
                          <div class="chat-group-footer__meta">
                            ${b()}
                            ${Ip(n.source.normalizedMessage.timestamp,null)}
                          </div>
                          <div
                            class="chat-group-footer-actions"
                            data-message-actions-for=${o.key}
                          >
                            ${Ug(s,r)}
                          </div>
                        </div>`:U`<div
                          class="chat-message-actions-row"
                          data-message-actions-for=${o.key}
                        >
                          ${Ug(s,r)}
                        </div>`:K,d=i===`assistant`?r_:$g(n.source.normalizedMessage,r.resolveReplyPreview,r.userId,l||e.replyShared),f=l&&d.state!==`hidden`,p=Q_(e,a,{...r,isForwarded:u,replyLine:l?void 0:d,avatar:!f&&te&&(l||a===E)?j:void 0},n),m=l?t_(d,r):K;return U`
                  ${f?U`<div class="chat-message--reply">
                          ${m} ${p}${j} ${n_(d,j)}
                        </div>`:U`${m}${p}`}
                  ${c}
                `}))}
        ${S||r.showToolCalls===!1?K:Dh([e],r)}
        ${r.activeContinuation?B_(r.activeContinuation.parts,r.activeContinuation.options,`continuation`):r.turnRecap?pl(r.turnRecap,{presentation:`continuation`}):K}
      </div>
      ${C?K:e.isStreaming||r.activeContinuation?W_:U`<div
                class="chat-group-footer ${i===`user`&&(g?.length||l||h&&y!==`footer`)?`chat-group-footer--persistent-identity`:``}${ee?` chat-group-footer--send-status`:``}"
              >
                ${l?K:k}
                <div class="chat-group-footer__meta">
                  ${i===`user`&&o&&y===`footer`?vl(e.sender):K}
                  ${b()} ${O_(ee,r)}
                  ${Ip(e.timestamp,x)}
                </div>
                ${l?k:i!==`user`&&D?U`
                          <div
                            class="chat-group-footer-actions"
                            data-message-actions-for=${O??K}
                          >
                            ${Ug(D,r)}
                          </div>
                        `:K}
              </div>`}
      ${n_(f,j)}
    </div>
  `}function iv(){return(iv=e((()=>{q(),Pn(),H(),Jo(),m(),dp(),mi(),bi(),aa(),Fi(),gp(),Xi(),I(),xf(),gc(),bc(),vf(),il(),tm(),Qh(),wc(),Nu(),m_(),D_(),Gg(),Rg(),k_(),N_(),G_(),Rp(),i_(),J_(),X_(),qh(),Nm(),rc()})))()}function av(e,t,n){if(e===t)return!0;let r=Pe(e);return!!(n&&l(t)&&r?.rest===`global`&&so(r.agentId)===so(n))}function ov(e,t,n){let r=e.presentation,i={id:e.id,request:{command:r.kind===`exec`?r.commandText:r.title,agentId:r.agentId??null,sessionKey:t,allowedDecisions:r.allowedDecisions},...n&&n!==t?{sourceSessionKey:n}:{},createdAtMs:e.createdAtMs,expiresAtMs:e.expiresAtMs};return r.kind===`exec`?{...i,kind:`exec`,request:{...i.request,host:r.host??null}}:r.kind===`plugin`?{...i,kind:`plugin`,pluginTitle:r.title,pluginDescription:r.description,pluginDetail:r.detail,pluginSeverity:r.severity,pluginId:r.pluginId??null}:{...i,kind:`system-agent`,pluginTitle:r.title,pluginDescription:r.description,proposalHash:r.proposalHash}}function sv(e,t,n){if(!_o(er,e))return[];let r=vo(er,e);return av(r.sessionKey,t,n)?r.approvals.filter(e=>e.status===`pending`).map(e=>ov(e,t,e.sourceSessionKey)):[]}function cv(e,t,n,r){if(!_o(ir,t))return null;let i=vo(ir,t),a=n??i.sessionKey;if(!av(i.sessionKey,a,r))return null;if(i.phase===`terminal`)return e.filter(e=>e.id!==i.approval.id);let o=e.filter(e=>e.id!==i.approval.id);return o.push(ov(i.approval,a,i.sourceSessionKey)),o.toSorted((e,t)=>e.createdAtMs-t.createdAtMs)}function lv(){return(lv=e((()=>{yo(),ur(),I()})))()}function uv(e,t,n){return{columns:[{id:e,panes:[{id:t,sessionKey:n}],paneWeights:[1]}],columnWeights:[1],activePaneId:t}}function dv(e,t,n){let r=Ta(e[t],`${n} before divider`);return r/(r+Ta(e[t+1],`${n} after divider`))}function fv(e,t){return`${t}${e.reduce((e,n)=>Math.max(e,ae(n.id,t)),0)+1}`}function pv(e,t){for(let[n,r]of e.columns.entries()){let e=r.panes.findIndex(e=>e.id===t),i=r.panes[e];if(i)return{column:r,columnIndex:n,pane:i,paneIndex:e}}return null}function mv(e){return e.columns.flatMap(e=>e.panes)}function hv(e,t){if(!t)return mv(e);let n=pv(e,e.activePaneId)?.pane;return n?[n]:[]}function gv(e,t,n,r){let i=pv(e,t),a=structuredClone(e);if(!i)return a;let o=fv(mv(e),`p`);if(r===`left`||r===`right`){let t=Ta(a.columnWeights[i.columnIndex],`split column weight for located pane`),s=i.columnIndex+ +(r===`right`);a.columns.splice(s,0,{id:fv(e.columns,`c`),panes:[{id:o,sessionKey:n}],paneWeights:[1]}),a.columnWeights.splice(i.columnIndex,1,t/2,t/2)}else{let e=a.columns[i.columnIndex];if(!e)return a;let t=Ta(e.paneWeights[i.paneIndex],`split pane weight for located pane`),s=i.paneIndex+ +(r===`down`);e.panes.splice(s,0,{id:o,sessionKey:n}),e.paneWeights.splice(i.paneIndex,1,t/2,t/2)}return a.activePaneId=o,a}function _v(e,t,n){let r=pv(e,t);if(!r)return structuredClone(e);let i=structuredClone(e),a=i.columns[r.columnIndex];if(!a)return i;let o=i.activePaneId===t,s=i.activePaneId;o&&(s=a.panes[r.paneIndex-1]?.id??i.columns[r.columnIndex-1]?.panes.at(-1)?.id??i.columns.flatMap(e=>e.panes).find(e=>e.id!==t)?.id??``),a.panes.splice(r.paneIndex,1),a.paneWeights.splice(r.paneIndex,1),a.panes.length===0?(i.columns.splice(r.columnIndex,1),i.columnWeights.splice(r.columnIndex,1)):a.paneWeights=k(a.paneWeights);let c=mv(i);if(!(c.length<=1&&!n?.has(c[0]?.id??``)))return i.columnWeights=k(i.columnWeights),i.activePaneId=s,i}function vv(e,t,n){let r=structuredClone(e),i=pv(r,t)?.pane;return i&&(i.sessionKey=n),r}function yv(e,t){let n=structuredClone(e);return pv(e,t)&&(n.activePaneId=t),n}function bv(e,t,n){if(t.kind===`split`){let r=n?mv(e).find(e=>e.sessionKey===n):void 0;return n&&!r?e:gv(e,r?.id??e.activePaneId,t.sessionKey,t.direction)}let r=mv(e).find(e=>e.sessionKey===t.sessionKey);return r?yv(e,r.id):e}function xv(e,t,n){let r=[...e];if(t<0||t+1>=e.length)return r;let i=e[t],a=e[t+1];if(i===void 0||a===void 0)return r;let o=i+a,s=Math.max(wv,Math.min(.85,n));return r[t]=o*s,r[t+1]=o*(1-s),r}function Sv(e,t,n){let r=structuredClone(e);return r.columnWeights=xv(r.columnWeights,t,n),r}function Cv(e,t,n,r){let i=structuredClone(e),a=i.columns.find(e=>e.id===t);return a&&(a.paneWeights=xv(a.paneWeights,n,r)),i}var wv;function Tv(){return(Tv=e((()=>{eo(),g(),wv=.15})))()}function Ev(e){return Ea(e.sessionKey)?.toLowerCase()===`global`?E(e,e.sessionKey).agentId??so(e.assistantAgentId??e.agentsList?.defaultId??e.agentsList?.agents?.[0]?.id??`main`):M(e.sessionKey)}function Dv(e){e?.browserSearchTimer&&(globalThis.clearTimeout(e.browserSearchTimer),e.browserSearchTimer=null)}function Ov(e){Uv.add(e)}function kv(e,t){Ov(t),e.handleOpenSidebar(t)}function Av(e){e.sidebarContent&&Uv.has(e.sidebarContent)&&(e.sidebarContent=null)}function jv(e){return{previews:[],activePreviewId:null,activeId:null,agentId:Ev(e),browserPath:``,browserSearch:``,filter:`all`,browserSearchTimer:null,connectionEpoch:e.connectionEpoch,error:null,list:null,loading:!1,pendingReload:!1,sessionKey:e.sessionKey}}function Mv(e,t){return e.sessionWorkspaceState===t&&t.sessionKey===e.sessionKey&&t.agentId===Ev(e)&&t.connectionEpoch===e.connectionEpoch}function Nv(e){let t=e.sessionWorkspaceState;if(t&&Mv(e,t))return t;Av(e),Dv(t);let n=jv(e);return e.sessionWorkspaceState=n,n}function Pv(e,t,n){e.error=t,e.errorOwner=n}function Fv(e,t){e.errorOwner===t&&Pv(e,null)}function Iv(e,t,n=!1){if(!e.client||!e.connected)return;if(t.loading){n&&(t.pendingReload=!0);return}t.loading=!0,Pv(t,null),n&&(t.list=null),t.pendingReload=!1;let r=e.sessionKey,i=t.agentId,a=e.client,o=t.browserPath,s=t.browserSearch,c=()=>Mv(e,t)&&t.browserPath===o&&t.browserSearch===s;(async()=>{try{let[n,l]=await Promise.all([e.sessions.listFiles(r,{path:s?``:o,search:s,agentId:i}),a.request(`artifacts.list`,{sessionKey:r,...i?{agentId:i}:{}})]);if(!c())return;t.list={sessionKey:r,...n?.root?{root:n.root}:{},...typeof n?.gitCheckout==`boolean`?{gitCheckout:n.gitCheckout}:{},files:n?.files??[],...n?.browser?{browser:n.browser}:{},artifacts:l?.artifacts??[]}}catch(e){c()&&Pv(t,z(e))}finally{Mv(e,t)&&(t.loading=!1),e.requestUpdate?.()}})()}function Lv(e,t){let n=e.sessionWorkspaceState;if(!n||n.sessionKey!==e.sessionKey)return!1;let r=n.diffContent!==void 0&&e.sidebarContent===n.diffContent;return delete n.diffContent,t?(n.loading?n.pendingReload=!0:Iv(e,n),r):(n.pendingReload=!0,r)}function Rv(e){let t=e.sessionWorkspaceState;t&&t.sessionKey===e.sessionKey&&(Av(e),Dv(t),e.sessionWorkspaceState=jv(e),e.requestUpdate?.())}function zv(e,t,n,r){let i=Nv(e),a=i.previews.find(e=>e.id===t||e.requestIds?.includes(t));return a||(a={id:t,label:n,content:r},i.previews=[...i.previews,a]),i.activePreviewId=a.id,e.requestUpdate?.(),a}function Bv(e,t){let n=Nv(e);(t===null||n.previews.some(e=>e.id===t))&&(n.activePreviewId=t,e.requestUpdate?.())}function Vv(e,t){let n=Nv(e),r=n.previews.findIndex(e=>e.id===t);r<0||(n.previews=n.previews.filter(e=>e.id!==t),n.activePreviewId===t&&(n.activePreviewId=n.previews[Math.min(r,n.previews.length-1)]?.id??null),e.requestUpdate?.())}function Hv(e){let t=e.sessionWorkspaceState;t&&(t.previews=[],t.activePreviewId=null,e.requestUpdate?.())}var Uv;function Wv(){return(Wv=e((()=>{Ge(),rt(),I(),Uv=new WeakSet})))()}function Gv(e){return Kt(void 0,t=>{let{render:n,finish:r}=t,i=[...e],a=``,o,s=e=>t.settled?!1:!i.includes(e)||!e.isCurrent()?(a=B(`chat.detailPanel.draftRecovery.changed`),n(c),!1):!0,c=()=>U`
      <openclaw-modal-dialog
        label=${B(`chat.detailPanel.draftRecovery.review`)}
        description=${B(`chat.detailPanel.draftRecovery.description`)}
        @modal-cancel=${()=>r()}
      >
        <section class="exec-approval-card exec-approval-modal-stack">
          <div class="exec-approval-header">
            <div>
              <div class="exec-approval-title">${B(`chat.detailPanel.draftRecovery.review`)}</div>
              <div class="exec-approval-sub">
                ${B(`chat.detailPanel.draftRecovery.description`)}
              </div>
            </div>
          </div>
          ${i.map(e=>U`
              <section
                role="group"
                style="overflow-wrap: anywhere"
                aria-label=${[e.path,e.context?.sessionTitle,e.context?.paneLabel,e.context?.sessionKey].filter(Boolean).join(` — `)}
              >
                ${e.context?U`
                        <div class="exec-approval-title">${e.context.sessionTitle}</div>
                        <div class="exec-approval-sub">${e.context.paneLabel}</div>
                        <div class="exec-approval-sub">${e.context.sessionKey}</div>
                      `:K}
                <label class="field">
                  <span>${e.path}</span>
                  <textarea readonly rows="6" .value=${e.content}></textarea>
                </label>
                <div class="exec-approval-actions">
                  <button
                    type="button"
                    class="btn"
                    @click=${async()=>{if(!s(e))return;let t=await ge(e.content,()=>s(e));s(e)&&(o=t?e:void 0,a=t?``:B(`chat.detailPanel.draftRecovery.copyFailed`),n(c))}}
                  >
                    ${o===e?B(`common.copied`):B(`chat.detailPanel.draftRecovery.copy`,{name:e.name})}
                  </button>
                  <button
                    type="button"
                    class="btn"
                    @click=${()=>{s(e)&&Li(e.name,e.content)}}
                  >
                    ${B(`chat.detailPanel.draftRecovery.download`,{name:e.name})}
                  </button>
                  <button
                    type="button"
                    class="btn danger"
                    @click=${()=>{s(e)&&e.discard()&&(i=i.filter(t=>t!==e),a=``,i.length?n(c):r())}}
                  >
                    ${B(`chat.detailPanel.draftRecovery.discard`,{name:e.name})}
                  </button>
                </div>
              </section>
            `)}
          ${a?U`<p role="alert">${a}</p>`:K}
          <div class="exec-approval-actions">
            <button type="button" class="btn" autofocus @click=${()=>r()}>
              ${B(`chat.detailPanel.draftRecovery.keep`)}
            </button>
          </div>
        </section>
      </openclaw-modal-dialog>
    `;n(c)})}function Kv(){return(Kv=e((()=>{q(),$t(),m(),Xf(),pe(),Uf()})))()}async function qv(){if(!(ty||$v.size===0)){ty=!0;try{await Gv([...$v].map(([e,t])=>({name:t.name,path:t.path,context:t.context,content:t.draft.content,isCurrent:()=>$v.get(e)===t,discard:()=>$v.get(e)===t&&($v.delete(e),Qv(),!0)})))}finally{ty=!1}}}function Jv(e){return e.draftKey??`${e.root??``}\u0000${e.path}`}function Yv(e){return $v.get(Jv(e))?.draft}function Xv(e,t){if(!t.editing)return null;let{dirty:n}=t,r=n?t.expectedHash:e.edit?.hash??``;return Zv(e,n?{content:t.content,expectedHash:r}:null),{dirty:n,expectedHash:r}}function Zv(e,t){let n=Jv(e);$v.delete(n),t&&$v.set(n,{draft:t,name:e.name,path:e.path,context:e.draftContext}),Qv()}function Qv(){$v.size>0?ey??=Tt(()=>$v.size===0,()=>Qe({message:B(`chat.detailPanel.reloadBlocked`),actionLabel:B(`chat.detailPanel.draftRecovery.review`),onAction:()=>void qv()})):(ey?.(),ey=void 0)}var $v,ey,ty;function ny(){return(ny=e((()=>{bt(),m(),Xf(),Be(),Kv(),Uf(),$v=new Map,ty=!1})))()}function ry(e,t,n,r,i,a,o){if(!e.client||!e.connected)return;let s={kind:`loading`,fileTab:{id:n,label:o.label}},c=zv(e,n,s.fileTab.label,s),l=c.canonicalKey??n;t.activeId=l,o.line!=null&&(c.navigation={line:o.line},t.navigationOrder=(t.navigationOrder??0)+1,c.navigationOrder=t.navigationOrder,c.content.kind===`file`&&(c.content.navigation=c.navigation),t.previews=[...t.previews]),c.content.kind===`unavailable`&&(c.content=s,t.previews=[...t.previews]),e.handleOpenSidebar(s);let u=c.content;if(u!==s&&(!o.revalidate||u.kind===`loading`||u.kind===`file`&&Yv(u)))return;let d={order:++cy};sy.set(c,d);let f=iy(c),p=new Map(t.previews.map(e=>{let t=sy.get(e);return[e,{snapshot:iy(e),read:t,published:t?.published}]})),m=()=>t.previews.includes(c)&&sy.get(c)===d&&ay(c,f)&&Mv(e,t),h=e=>{m()&&(Pv(t,e,d),c.content={kind:`unavailable`,message:e},d.published=iy(c),t.previews=[...t.previews])};(async()=>{Pv(t,null);try{let e=await r(),n=e==null?null:i(e),s=e==null?void 0:o.resolveLabel?.(e),u=e==null?void 0:o.resolveKey?.(e);if(!n){h(a);return}if(m()){t.activeId===l&&u&&(t.activeId=u);let e=u?t.previews.find(e=>e!==c&&e.canonicalKey===u):void 0;if(e){e.requestIds=[...new Set([...e.requestIds??[],c.id,...c.requestIds??[]])],c.navigation&&(c.navigationOrder??0)>(e.navigationOrder??0)&&(e.navigation=c.navigation,e.navigationOrder=c.navigationOrder,e.content.kind===`file`&&(e.content.navigation=e.navigation));let r=p.get(e),i=sy.get(e),a=i===r?.read&&i?.published===r?.published?r?.snapshot:i?.published;o.revalidate&&(i?.order??0)<=d.order&&ay(e,a)&&(oy(e,n,s),i&&Fv(t,i),d.published=iy(e),sy.set(e,d)),t.previews=t.previews.filter(e=>e!==c),t.activePreviewId===c.id&&(t.activePreviewId=e.id);return}c.canonicalKey=u,oy(c,n,s),d.published=iy(c),t.previews=[...t.previews]}}catch(e){h(o.resolveError?.(e)??z(e))}finally{e.requestUpdate?.()}})()}function iy(e){let t=e.content;return{content:t,text:t.kind===`file`?t.content:void 0,hash:t.kind===`file`?t.edit?.hash:void 0}}function ay(e,t){let n=e.content;return t!==void 0&&n===t.content&&(n.kind!==`file`||!Yv(n)&&n.content===t.text&&n.edit?.hash===t.hash)}function oy(e,t,n){let r=e.content;t.kind===`file`&&e.navigation&&(t.line=e.navigation.line,t.navigation=e.navigation),(r.kind!==`file`||t.kind!==`file`||r.content!==t.content||r.edit?.hash!==t.edit?.hash||r.path!==t.path||r.root!==t.root||r.mimeType!==t.mimeType)&&(e.content=t),e.label=n||e.label}var sy,cy;function ly(){return(ly=e((()=>{Ge(),ny(),Wv(),sy=new WeakMap,cy=0})))()}function uy(e){if(!e.absolutePath)return K;let t=`Open in editor`;return U`
    <div class="sidebar-file-view__editor">
      <wa-dropdown
        class="sidebar-file-view__editor-menu"
        placement="bottom-end"
        .open=${e.open}
        @wa-select=${t=>{let n=t.detail.item.value;n&&fi.includes(n)&&e.onOpenEditor(n)}}
        @wa-show=${()=>e.onOpenChange(!0)}
        @wa-hide=${()=>e.onOpenChange(!1)}
      >
        <button
          slot="trigger"
          class="btn btn--sm sidebar-file-view__action"
          type="button"
          title=${t}
          aria-label=${t}
        >
          ${V.externalLink}
        </button>
        ${fi.map(e=>U`
            <wa-dropdown-item class="sidebar-file-view__editor-item" value=${e}>
              ${Jr[e]}
            </wa-dropdown-item>
          `)}
      </wa-dropdown>
    </div>
  `}function dy(){return(dy=e((()=>{q(),H(),gs(),sa()})))()}function fy(){try{return P()?.getItem(yy)===`true`}catch{return!1}}function py(e){try{P()?.setItem(yy,String(e))}catch{}}function my(e){return new Set(e.match(/\r\n?|\n/g)).size<=1}function hy(e,t){let n=t.toLocaleLowerCase();return n?e.split(/\r\n?|\n/).flatMap((e,t)=>e.toLocaleLowerCase().includes(n)?[t+1]:[]):[]}function gy({label:e,icon:t,onClick:n,className:r=``,pressed:i,disabled:a=!1}){return U`
    <openclaw-tooltip .content=${e}>
      <button
        class="btn btn--sm sidebar-file-view__action ${r}"
        type="button"
        aria-label=${e}
        aria-pressed=${i===void 0?K:String(i)}
        ?disabled=${a}
        @click=${n}
      >
        ${t}
      </button>
    </openclaw-tooltip>
  `}function _y(e,t){let n=t?.copyFeedback[e];return gy({label:B(n===`failed`?`common.copyFailed`:n===`copied`?`common.copied`:e===`path`?`chat.detailPanel.copyPath`:`chat.detailPanel.copyContents`),icon:n===`copied`?V.check:V.copy,onClick:()=>t?.onCopy(e),className:n===`copied`?`copied`:``})}function vy(e,t,n,r){let i=Ao(e,n?.execNode),a=n?.matches.length?n.currentMatchIndex+1:0;return U`
    <section class="sidebar-file-view ${n?.wrap?`sidebar-file-view--wrap`:``}">
      <div class="sidebar-file-view__path-bar">
        <div class="sidebar-file-view__path-field">
          <span class="sidebar-file-view__path" title=${e.path}>${e.path}</span>
          ${_y(`path`,n)}
          <openclaw-mcp-app-catalog
            surface="file"
            .sessionKey=${r?.sessionKey??e.draftContext?.sessionKey??``}
            .agentId=${r?.agentId??``}
            .filePath=${e.path}
          ></openclaw-mcp-app-catalog>
        </div>
        ${n?U`
                <div class="sidebar-file-view__actions">
                  ${!n.htmlPreview||n.htmlPreview.source?gy({label:B(n.wrap?`chat.codeBlock.disableWrap`:`chat.codeBlock.enableWrap`),icon:V.wrapText,onClick:n.onToggleWrap,className:`sidebar-file-view__wrap`,pressed:n.wrap}):K}
                  ${n.htmlPreview?U`<button
                          class="btn btn--sm"
                          type="button"
                          aria-pressed=${String(n.htmlPreview.source)}
                          @click=${n.htmlPreview.onToggle}
                        >
                          ${n.htmlPreview.source?B(`chat.workspaceFiles.preview`):B(`chat.detailPanel.viewSource`)}
                        </button>`:K}
                  ${n.editing?U`
                          <button
                            class="btn btn--sm"
                            type="button"
                            ?disabled=${!n.dirty||n.saving}
                            @click=${n.onSave}
                          >
                            ${n.saving?B(`common.saving`):B(`common.save`)}
                          </button>
                          <button
                            class="btn btn--sm"
                            type="button"
                            ?disabled=${n.saving}
                            @click=${n.onDiscard}
                          >
                            ${B(`chat.detailPanel.discard`)}
                          </button>
                        `:U`
                          ${e.edit?gy({label:B(`chat.detailPanel.editFile`),icon:V.edit,onClick:n.onEdit,disabled:n.loadingEditor}):K}
                          ${gy({label:B(`chat.detailPanel.searchInFile`),icon:V.search,onClick:n.onToggleSearch,className:`sidebar-file-view__search-toggle`,pressed:n.searchOpen})}
                          ${n.onReveal?gy({label:B(`chat.detailPanel.showInFiles`),icon:V.folder,onClick:()=>n.onReveal?.(e.path)}):K}
                          ${uy({absolutePath:i,open:n.editorMenuOpen,onOpenChange:n.onEditorMenuOpenChange,onOpenEditor:n.onOpenEditor})}
                          ${_y(`contents`,n)}
                        `}
                </div>
              `:K}
      </div>
      ${Object.values(n?.copyFeedback??{}).includes(`failed`)?U`<div class="file-view__save-notice" role="alert">${B(`common.copyFailed`)}</div>`:K}
      ${n?.searchOpen?U`
              <div class="file-view__search" @keydown=${n.onSearchKeydown}>
                <input
                  type="search"
                  aria-label=${B(`chat.detailPanel.searchInFile`)}
                  placeholder=${B(`common.search`)}
                  .value=${n.query}
                  @input=${e=>n.onSearchInput(e.currentTarget.value)}
                />
                <span class="file-view__search-counter" role="status"
                  >${a}/${n.matches.length}</span
                >
                ${[[`chat.detailPanel.previousMatch`,n.onPreviousMatch,` file-view__search-action--previous`],[`chat.detailPanel.nextMatch`,n.onNextMatch,``]].map(([e,t,r])=>U`<button
                    class="btn btn--sm file-view__search-action${r}"
                    type="button"
                    aria-label=${B(e)}
                    ?disabled=${n.matches.length===0}
                    @click=${t}
                  >
                    ${V.chevronDown}
                  </button>`)}
              </div>
            `:K}
      ${n?.saveNotice?U`
              <div class="file-view__save-notice" role="alert">
                <span>
                  ${n.saveNotice.kind===`conflict`?B(`chat.detailPanel.fileChanged`):n.saveNotice.message}
                </span>
                ${n.saveNotice.kind===`conflict`?U`
                        <div class="file-view__save-notice-actions">
                          <button
                            class="btn btn--sm"
                            type="button"
                            ?disabled=${n.saving}
                            @click=${n.onReload}
                          >
                            ${B(`common.reload`)}
                          </button>
                          <button
                            class="btn btn--sm"
                            type="button"
                            ?disabled=${n.saving}
                            @click=${n.onOverwrite}
                          >
                            ${B(`chat.detailPanel.overwrite`)}
                          </button>
                        </div>
                      `:K}
              </div>
            `:K}
      ${n?.htmlPreview?U`<div class="chat-html-preview" ?hidden=${n.htmlPreview.source}>
              ${n.htmlPreview.presentation}
            </div>`:K}
      <div class="file-view" ?hidden=${n?.htmlPreview&&!n.htmlPreview.source}>
        ${n?.htmlPreview?.sourceFallback??K}
        ${An(n?.mountKey??e,U`<div class="file-view__mount"></div>`)}
        ${n?.loadingEditor?Qf(`review`,B(`common.loading`),!1,!0):K}
      </div>
      ${n?.editing||n?.htmlPreview?K:U`
              <div class="sidebar-file-view__footer">
                <button @click=${t} class="btn btn--sm" type="button">
                  ${B(`chat.detailPanel.viewRawText`)}
                </button>
              </div>
            `}
    </section>
  `}var yy;function by(){return(by=e((()=>{q(),_s(),Wn(),Xo(),H(),ip(),ht(),m(),$i(),Xf(),dy(),Gi(),Uf(),yy=`openclaw.control.fileView.wrap.v1`})))()}function xy(e){return typeof e!=`number`||!Number.isFinite(e)||e<0?``:Fa(e,{style:`legacy-binary`,maxUnit:`mega`,separator:` `,fractionDigits:(e,t)=>t===`byte`?null:Math.round(e*10)%10?1:0})}function Sy({icon:e,name:t,meta:n,tooltip:r=t,badge:i=K,actions:a=K,onOpen:o,active:s=!1,directory:c=!1}){return U`
    <div
      class="chat-workspace-rail__file ${c?`chat-workspace-rail__file--directory`:``}
      ${s?`chat-workspace-rail__file--active`:``}"
      role="listitem"
    >
      <button
        class="chat-workspace-rail__file-open"
        type="button"
        aria-label=${r}
        @click=${o}
      >
        <span class="chat-workspace-rail__file-icon">${e}</span>
        <span class="chat-workspace-rail__file-main">
          <openclaw-tooltip .content=${r}>
            <span class="chat-workspace-rail__file-name">${t}</span>
          </openclaw-tooltip>
          ${n?U`<span class="chat-workspace-rail__file-meta">${n}</span>`:K}
        </span>
      </button>
      ${i} ${a}
    </div>
  `}function Cy(e){if(!e)return K;let t=e.list?.files??[],n=qo(t.map(e=>e.path||e.name)),r=e.list?.artifacts??[],i=e.list?.browser,a=i?.entries??[],o=Ea(e.browserSearch)?.toLowerCase()??``,s=(...e)=>e.some(e=>e?.toLowerCase().includes(o)),c=t.filter(e=>e.kind===`modified`),l=t.filter(e=>e.kind===`read`),u=e=>e.filter(e=>s(e.path,e.name)),d=u(c),f=u(l),p=r.filter(e=>s(e.title,e.id,e.mimeType)),m=t.length>0||r.length>0||a.length>0,h=[{filter:`all`,label:B(`chat.workspaceFiles.filterAll`),count:t.length+r.length},{filter:`changed`,label:B(`chat.workspaceFiles.changedCount`,{count:String(c.length)}),count:c.length},{filter:`read`,label:B(`chat.workspaceFiles.readCount`,{count:String(l.length)}),count:l.length},{filter:`artifacts`,label:B(`chat.workspaceFiles.artifactCount`,{count:String(r.length)}),count:r.length}],g=h.some(({filter:t,count:n})=>t===e.filter&&n>0)?e.filter:`all`,_=(e,t)=>U`
    <span
      class="chat-workspace-rail__row-actions"
      role="group"
      aria-label=${B(`chat.workspaceFiles.actions`)}
    >
      <openclaw-tooltip .content=${B(`chat.workspaceFiles.preview`)}>
        <button
          class="chat-workspace-rail__row-action"
          type="button"
          aria-label=${B(`chat.workspaceFiles.preview`)}
          @click=${t=>{t.stopPropagation(),e()}}
        >
          ${V.eye}
        </button>
      </openclaw-tooltip>
      ${t===void 0?K:U` <span @click=${e=>e.stopPropagation()}>
              ${Ps(t,B(`chat.workspaceFiles.copyPath`))}
            </span>`}
    </span>
  `,v=t=>t.length===0?K:U`
          <div class="chat-workspace-rail__list" role="list">
            ${t.map(t=>{let r=()=>e.onOpenFile(t.path,`session`);return Sy({icon:V.fileText,name:n.get(t.path||t.name)??t.name,tooltip:t.path||t.name,meta:xy(t.size),onOpen:r,active:Nd(e.activeId,e.sessionKey,e.list?.root,t.path,t.workspacePath),badge:t.missing?U`<span class="chat-workspace-rail__file-badge"
                      >${B(`chat.workspaceFiles.missing`)}</span
                    >`:K,actions:_(r,t.path)})})}
          </div>
        `,y=!i&&e.list!==null&&!e.loading&&!o&&e.browserPath!==``,b=y?e.browserPath.slice(0,Math.max(0,e.browserPath.lastIndexOf(`/`))):i?.search?null:i?.parentPath,x=()=>U`
    ${i?.search?U`<div class="chat-workspace-rail__browser-caption">${B(`chat.workspaceFiles.searchResults`)}</div>`:K}
    <div class="chat-workspace-rail__list chat-workspace-rail__list--browser" role="list">
      ${b==null?K:Sy({icon:V.folder,name:`..`,directory:!0,meta:B(`chat.workspaceFiles.parentFolder`),onOpen:()=>e.onBrowsePath(b)})}
      ${a.length===0?U`<div class="chat-workspace-rail__state">
              ${B(y?`chat.workspaceFiles.folderUnavailable`:i?.search?`chat.workspaceFiles.noSearchResults`:`chat.workspaceFiles.noBrowserFiles`)}
            </div>`:K}
      ${a.map(t=>{let n=t.kind===`directory`,r=()=>n?e.onBrowsePath(t.path):e.onOpenFile(t.path,`workspace`),i=t.sessionKind;return Sy({icon:n?V.folder:V.fileText,name:t.name,tooltip:t.path||t.name,meta:n?t.path||B(`chat.workspaceFiles.root`):[t.path,xy(t.size)].filter(Boolean).join(` / `),onOpen:r,directory:n,active:Nd(e.activeId,e.sessionKey,e.list?.root,t.path,t.path),badge:i?U`<span
                class="chat-workspace-rail__file-badge chat-workspace-rail__file-badge--kind"
                >${B(wy[i])}</span
              >`:K,actions:n?K:_(r,t.path)})})}
    </div>
    ${i?.truncated?U`<div class="chat-workspace-rail__state">${B(`chat.workspaceFiles.truncated`)}</div>`:K}
  `,S=()=>p.length===0?K:U`
          <div class="chat-workspace-rail__list" role="list">
            ${p.map(t=>{let n=()=>e.onOpenArtifact(t.id);return Sy({icon:t.mimeType?.startsWith(`image/`)?V.image:V.paperclip,name:t.title,meta:[t.mimeType,xy(t.sizeBytes)].filter(Boolean).join(` / `),onOpen:n,active:`artifact:${t.id}`===e.activeId,actions:_(n)})})}
          </div>
        `,C=!!o||g!==`all`,w=(e,t,n,r,i)=>i===K||g!==`all`&&g!==e?K:An(C,U`<details class="chat-workspace-rail__group" ?open=${r||C}>
        <summary class="chat-workspace-rail__group-summary">
          <span class="chat-workspace-rail__group-chevron" aria-hidden="true"
            >${V.chevronRight}</span
          >
          ${t}<span class="chat-workspace-rail__group-count">${n}</span>
        </summary>
        ${i}
      </details>`);return U`
    <aside class="chat-workspace-rail" aria-label=${B(`chat.workspaceFiles.label`)}>
      ${e.list?.root?U`
              <openclaw-tooltip .content=${e.list.root}>
                <div class="chat-workspace-rail__path">${e.list.root}</div>
              </openclaw-tooltip>
            `:K}
      <div class="chat-workspace-rail__toolbar">
        <label class="chat-workspace-rail__search">
          <span class="chat-workspace-rail__search-icon" aria-hidden="true">${V.search}</span>
          <input
            type="search"
            placeholder=${B(`chat.workspaceFiles.search`)}
            aria-label=${B(`chat.workspaceFiles.search`)}
            .value=${e.browserSearch}
            @input=${t=>e.onSearch(t.currentTarget.value)}
          />
        </label>
        ${t.length||r.length?U` <div
                class="chat-workspace-rail__filters"
                role="group"
                aria-label=${B(`chat.workspaceFiles.filters`)}
              >
                ${h.filter(({count:e})=>e>0).map(({filter:t,label:n})=>U` <button
                      type="button"
                      class="chat-workspace-rail__chip"
                      aria-pressed=${g===t}
                      @click=${()=>e.onSetFilter(t)}
                    >
                      ${n}
                    </button>`)}
              </div>`:K}
      </div>
      ${e.error?U`<div class="chat-workspace-rail__state chat-workspace-rail__state--error">
              ${e.error}
            </div>`:e.loading&&!m?Qf(`files`,B(`chat.workspaceFiles.loading`)):U`
                <div class="chat-workspace-rail__scroll">
                  ${w(`changed`,B(`chat.workspaceFiles.changed`),d.length,!0,v(d))}
                  ${w(`read`,B(`chat.workspaceFiles.read`),f.length,!1,v(f))}
                  ${w(`artifacts`,B(`chat.workspaceFiles.artifacts`),p.length,!1,S())}
                  ${w(null,B(`chat.workspaceFiles.browser`),a.length,!0,i||y?x():K)}
                </div>
              `}
    </aside>
  `}var wy;function Ty(){return(Ty=e((()=>{q(),Wn(),Ds(),Wo(),H(),ip(),ht(),m(),de(),wy={modified:`chat.workspaceFiles.changed`,read:`chat.workspaceFiles.read`,mixed:`chat.workspaceFiles.session`}})))()}function Ey(e){let t=e.match(/\.([a-z0-9_-]+)$/i)?.[1]?.toLowerCase()??``;return t===`yml`?`yaml`:t}function Dy(e){let t=e.replace(/\r/g,`\\r`).replace(/\n/g,`\\n`),n=t.startsWith(` `)&&t.endsWith(` `);return bd(n&&!/^ +$/.test(t)?` ${t} `:t)}function Oy(e){if(typeof e!=`number`)return null;let t=new Date(e);return Number.isNaN(t.getTime())?null:t.toISOString()}function ky(e,t){let n=e.workspacePath||e.path||t,r=Oy(e.updatedAtMs),i=[`This file is not previewable inline.`,``,`- Path: ${Dy(n)}`,e.mimeType?`- Type: ${Dy(e.mimeType)}`:null,typeof e.size==`number`?`- Size: ${e.size.toLocaleString()} bytes`:null,r?`- Updated: ${r}`:null].filter(e=>e!==null).join(`
`);return{kind:`markdown`,content:i,rawText:i}}function Ay(e,t){if(!e)return t;let n=e.includes(`\\`)&&!e.includes(`/`)?`\\`:`/`,r=e.replace(/[\\/]+$/,``),i=t.replace(/^[\\/]+/,``).replaceAll(/[\\/]/g,n);return r?`${r}${n}${i}`:`${n}${i}`}async function jy(e,t,n){let{data:r,encoding:i,url:a,blob:o}=e,{title:s}=e.artifact,c=e.artifact.mimeType??``,l,u;if(o?c.startsWith(`image/`)?l=await zi(o,{readError:`Artifact image could not be decoded`,invalidResultError:`Artifact image could not be decoded`}):u=await o.text():i===`base64`&&r&&(c.startsWith(`image/`)?l=`data:${c};base64,${r}`:(c===`application/json`||c.startsWith(`text/`))&&(u=new TextDecoder().decode(F(r)))),l)return{kind:`image`,title:s,src:l,mimeType:c,rawText:a??null};if(u!==void 0)return{kind:`markdown`,content:`# ${s}\n\n${xd(u,c===`application/json`?`json`:``)}`,rawText:u};if(i===`base64`||a&&If(a,n))return{kind:`attachment`,attachmentKind:`document`,title:s,mimeType:c,download:t};let d=a?`# ${s}\n\n[Open artifact](${a})`:`# ${s}\n\nArtifact download is not previewable in the sidebar.`;return{kind:`markdown`,content:d,rawText:d}}function My(e,t){Lv(e,t)&&(e.sidebarContent=Ry(e),e.requestUpdate?.())}function Ny(e,t,n,r={}){let i=r.requestPath??n,a=r.sessionKey??t.sessionKey,o=r.sessionKey?Pe(r.sessionKey)?.agentId:t.agentId,s=a===t.sessionKey,c=e.sessionWorkspaceDraftScope,l=e.sessionWorkspaceDraftContext,u=e.settings?.gatewayUrl??``;ry(e,t,s?`file:${i}`:JSON.stringify([`file`,a,i]),()=>e.sessions.getFile(a,i,{agentId:o}),a=>{let d=a.file;if(!d)return null;let f=d.name||Ue(n);if(d.previewKind===`image`)return d.contentEncoding!==`base64`||typeof d.content!=`string`||!d.mimeType||!Sd.has(d.mimeType)?null:{kind:`image`,title:f,src:`data:${d.mimeType};base64,${d.content}`,mimeType:d.mimeType,rawText:d.workspacePath||d.path||n};if(d.previewKind===`unsupported`)return{...ky(d,n),fileLinkSessionKey:a.sessionKey};if(d.previewKind!==`text`||d.contentEncoding!==`utf8`||typeof d.content!=`string`)return null;let p=typeof d.hash==`string`&&my(d.content)&&zr(e,`sessions.files.set`)===!0&&Zt(e.hello?.auth??null)?{hash:d.hash,save:async({content:n,expectedHash:r})=>{try{let c=await e.sessions.setFile(a.sessionKey,i,n,{agentId:o,expectedHash:r}),l=c?.file.hash,u=c?.file.updatedAtMs;return typeof l==`string`&&s&&Mv(e,t)&&My(e,!0),typeof l==`string`?{ok:!0,hash:l,...typeof u==`number`?{updatedAtMs:u}:{}}:{ok:!1,code:`error`,message:`Save failed.`}}catch(e){let t=e instanceof Bt&&e.details&&typeof e.details==`object`?e.details:null;return t?.type===`session_file_conflict`?{ok:!1,code:`conflict`,...typeof t.currentHash==`string`?{currentHash:t.currentHash}:{}}:{ok:!1,code:`error`,message:z(e)}}},fetchLatest:async()=>{let t=(await e.sessions.getFile(a.sessionKey,i,{agentId:o}))?.file;return!t||typeof t.content!=`string`||typeof t.hash!=`string`?null:{content:t.content,hash:t.hash,editable:my(t.content)}}}:void 0;return{kind:`file`,path:d.workspacePath||d.path||n,name:f,content:d.content,sessionFileSource:{sessionKey:a.sessionKey,agentId:o,path:d.workspacePath||d.path||n},draftKey:[u,c??``,a.sessionKey,a.root??``,d.workspacePath||d.path||n].join(`\0`),draftContext:{sessionKey:a.sessionKey,sessionTitle:(s?l?.sessionTitle:void 0)??re(a.sessionKey),paneLabel:l?.paneLabel},root:a.root??null,mimeType:d.mimeType,language:Ey(f),line:r.line??null,rawText:d.content,...p?{edit:p}:{}}},`Failed to load ${n}`,{line:r.line,label:Ue(n),revalidate:!0,resolveLabel:e=>e.file?.name,resolveKey:e=>{let t=e.file?.workspacePath||e.file?.path;return t?Dd(e.sessionKey,e.root,t):void 0},resolveError:e=>e instanceof Bt&&typeof e.details==`object`&&e.details!==null&&`reason`in e.details&&e.details.reason===`outside_session_boundary`?B(`chat.detailPanel.outsideSessionBoundary`,{session:(s?l?.sessionTitle:void 0)??re(a)}):void 0})}function Py(e,t){Ny(e,Nv(e),t.path,{line:t.line,sessionKey:t.sessionKey})}function Fy(e,t){let n=Nv(e);Dv(n);let r=t.replaceAll(`\\`,`/`),i=r.lastIndexOf(`/`);n.browserPath=i>0?r.slice(0,i):``,n.browserSearch=``,n.filter=`all`,n.activeId=`file:${t}`,Iv(e,n,!0),e.requestUpdate?.()}function Iy(e,t,n){let r={sessionKey:t.sessionKey,artifactId:n,...t.agentId?{agentId:t.agentId}:{}},i=async n=>{let i=Nv(e);if(i.sessionKey!==r.sessionKey||i.agentId!==t.agentId)return null;let a=e.client,o=e.connectionEpoch,s=await Mf(e,r,n,{readBinary:!0});return n.aborted||!e.connected||e.client!==a||e.connectionEpoch!==o||!Mv(e,i)?null:s?.blob?s.blob:s?.encoding!==`base64`||s.data===void 0?null:new Blob([F(s.data)],{type:s.artifact.mimeType??`application/octet-stream`})};ry(e,t,`artifact:${n}`,async()=>{let t=await Mf(e,r);return t?.artifact?{artifact:t.artifact,content:await jy(t,i,e.resourceBasePath)}:null},e=>e.content,`Failed to load artifact ${n}`,{label:t.list?.artifacts?.find(e=>e.id===n)?.title||B(`chat.workspaceFiles.artifacts`),resolveLabel:e=>e.artifact?.title})}function Ly(e,t){e.sessionWorkspaceDraftScope=t?.draftScope,e.sessionWorkspaceDraftContext=t?.draftContext;let n=Nv(e);(t?.expanded===!1||t?.presented===!1)&&n.browserSearchTimer&&(Dv(n),n.pendingReload=!0),t?.presented!==!1&&t?.expanded===!0&&e.connected&&e.agentsList&&!n.loading&&!n.browserSearchTimer&&(!n.error||n.pendingReload)&&(n.pendingReload||n.list?.sessionKey!==e.sessionKey)&&Iv(e,n);let r=Ry(e);return{sessionKey:e.sessionKey,list:n.list?.sessionKey===e.sessionKey?n.list:null,loading:n.loading,error:n.error,activeId:n.activeId,filter:n.filter,browserPath:n.browserPath,browserSearch:n.browserSearch,onSetFilter:t=>{n.filter=t,e.requestUpdate?.()},onRefresh:()=>Iv(e,n,!0),onBrowsePath:t=>{Dv(n),n.browserPath=t,n.browserSearch=``,Iv(e,n,!0)},onOpenFile:(t,r)=>{let i=r===`workspace`?{requestPath:Ay(n.list?.root,t)}:{};Ny(e,n,t,i)},onSearch:t=>{n.browserSearch=t,e.requestUpdate?.(),Dv(n),n.browserSearchTimer=globalThis.setTimeout(()=>{n.browserSearchTimer=null,Iv(e,n,!0)},160)},onOpenArtifact:t=>Iy(e,n,t),onOpenDiff:r?()=>kv(e,r):void 0}}function Ry(e){let t=Nv(e);if(!(zr(e,`sessions.diff`)===!0&&e.client))return null;if(t.diffContent)return t.diffContent;let n=e.sessionKey,r=e.client,i=t.agentId,a={kind:`session-diff`,owner:t,load:async e=>{if(!r)throw Error(B(`chat.sessionDiff.disconnected`));return await r.request(`sessions.diff`,{sessionKey:n,...i?{agentId:i}:{},...e})},loadFileText:zr(e,`sessions.files.get`)===!0&&e.client?async t=>{try{let r=(await e.sessions.getFile(n,t,{agentId:i}))?.file;return!r||r.previewKind!==`text`||r.contentEncoding!==`utf8`||typeof r.content!=`string`?null:r.content}catch{return null}}:void 0,openFile:t=>Ny(e,Nv(e),t)};return Ov(a),t.diffContent=a,a}function zy(){return(zy=e((()=>{yd(),Pf(),Ut(),xn(),m(),Xf(),Ge(),Br(),_e(),I(),ly(),Wv(),by(),Ty(),Uf()})))()}function By(){return{id:`side-panel-column`,side:`right`,panels:[],activePanelId:``,height:rb,width:nb,browserWidthPending:!0}}function Vy(e){if(ve(e,`dashboard`))return e.expanded||e.open!==!0?`expanded`:`split`}function Hy(e,t){let n=qy(e,`dashboard`);if(t===`expanded`){let e=n.columns[0]?.panels.find(e=>e.slot===`dashboard`);e&&(n=Ky(n,e.id))}else Ee(n)?.slot===`dashboard`&&(n=qy(n,`conversation`));return Qy(n,t===`expanded`)}function Uy(e,t){let n=new Set(e.columns.flatMap(e=>e.panels.map(e=>e.id)));if(!n.has(t))return t;let r=2;for(;n.has(`${t}-${r}`);)r+=1;return`${t}-${r}`}function Wy(e,t){for(let n of e.columns){let r=n.panels.findIndex(e=>e.id===t);if(r<0)continue;let i=n.panels.filter(t=>t.id!==e.mainPanelId).findIndex(e=>e.id===t);if(n.panels.splice(r,1),n.activePanelId===t){let t=n.panels.filter(t=>t.id!==e.mainPanelId);n.activePanelId=t[Math.min(i,t.length-1)]?.id??``}return}}function Gy(e){let t=structuredClone(e),n=t.columns[0]??=By(),r=n.panels.find(e=>e.slot===`conversation`);return r||(r={id:Uy(t,`conversation`),slot:`conversation`},n.panels.push(r)),t.mainPanelId=Ee(t)?.id??r.id,n.activePanelId===t.mainPanelId&&(n.activePanelId=Xe(t)[0]?.id??``),t}function Ky(e,t){if(!e.columns[0]?.panels.find(e=>e.id===t)||Ee(e)?.id===t)return structuredClone(e);let n=Gy(e),r=n.mainPanelId;return n.mainPanelId=t,n.columns[0].activePanelId=r,n.open=!0,n.expanded=!1,delete n.expandedSide,n}function qy(e,t){let n=structuredClone(e);if((Ee(n)?.slot??`conversation`)===t)return n.expandedSide?Qy(n,!1):n;let r=n.columns.find(e=>e.panels.some(e=>e.slot===t))??(n.columns[0]??=By()),i=r.panels.find(e=>e.slot===t);return i||(i={id:Uy(n,t),slot:t},r.panels.push(i)),r.activePanelId=i.id,n.open=!0,n.expanded&&(n.expanded=!1,delete n.expandedSide),n}function Jy(e,t){let n=structuredClone(e),r=n.columns.flatMap(e=>e.panels).find(e=>e.slot===t);if(r){if(n.expandedSide&&r.id===ne(n)?.id&&(n=Qy(n,!1)),t===`conversation`)return r.id!==n.mainPanelId&&(n.open=!1),n;r.id===n.mainPanelId&&(n=Gy(n),n.mainPanelId=n.columns[0].panels.find(e=>e.slot===`conversation`).id),Wy(n,r.id);let e=n.columns[0];e&&!ne(n)&&(e.activePanelId=Xe(n)[0]?.id??``),Xe(n).length===0&&(n.open=!1)}return n.columns.length===0&&(n.open=!1),n}function Yy(e,t){let n=structuredClone(e),r=n.columns.find(e=>e.panels.some(e=>e.id===t));return r&&t!==n.mainPanelId&&(r.activePanelId=t,n.open=!0,n.expanded&&(n.expanded=!1,delete n.expandedSide)),n}function Xy(e,t,n,r){let i=structuredClone(e),a=i.columns[0]?.panels;if(!a||t===n)return i;let o=a.findIndex(e=>e.id===t),s=a.findIndex(e=>e.id===n);if(o<0||s<0)return i;let[c]=a.splice(o,1),l=a.findIndex(e=>e.id===n);return a.splice(l+ +(r===`after`),0,c),i}function Zy(e,t){let n=structuredClone(e);return t&&(n.columns[0]??=By(),n.expanded&&(n.expanded=!1,delete n.expandedSide)),n.open=t,!t&&n.expandedSide&&(n.expanded=!1,delete n.expandedSide),n}function Qy(e,t){let n=structuredClone(e);return delete n.expandedSide,{...n,expanded:t,...t?{open:!0}:{}}}function $y(e,t){if(!Xe(e).some(e=>e.id===t))return structuredClone(e);if(e.expanded&&e.expandedSide&&ne(e)?.id===t)return Qy(e,!1);let n=Yy(Gy(e),t);return n.expanded=!0,n.expandedSide=!0,n}function eb(e,t){return{...structuredClone(e),dock:t}}function tb(e,t,n){let i=structuredClone(e),a=i.columns.find(e=>e.id===t);return a&&Number.isFinite(n)&&(r(i)===`bottom`?a.height=T(n):(a.width=qe(n),delete a.browserWidthPending)),i}var nb,rb,ib;function ab(){return(ab=e((()=>{he(),fe(),nb=480,rb=360,ib=`openclaw-sidebar-geometry-commit`})))()}var ob;function sb(){return(sb=e((()=>{m(),Pi(),ke(),ha(),Ge(),Jl(),ea(),ob=class{constructor(e){this.notify=e,this.result=null,this.loading=!1,this.busy=!1,this.error=null,this.notice=null,this.read=null,this.selectedFile=`SKILL.md`,this.target=null,this.readOwner=null}synchronize(e){let t=this.target;(t?.client!==e?.client||t?.connectionEpoch!==e?.connectionEpoch||t?.sessionKey!==e?.sessionKey||t?.agentId!==e?.agentId)&&(this.target=e,this.result=null,this.loading=!1,this.busy=!1,this.error=null,this.notice=null,this.closeRead())}current(e){return this.target===e&&e.isCurrent()}closeRead(){this.readOwner=null,this.read=null,this.selectedFile=`SKILL.md`}async load(e=!1){let t=this.target;if(!(!t||!this.current(t)||this.loading||this.result&&!e)){this.loading=!0,this.error=null,this.notify();try{let e=await t.client.request(`skills.library.list`,{sessionKey:t.sessionKey});this.current(t)&&(this.result=e)}catch(e){this.current(t)&&(this.error=z(e))}finally{this.current(t)&&(this.loading=!1,this.notify())}}}async openRead(e,t){let n=this.target;if(!n||!this.current(n)||this.busy||this.loading)return;let r={};this.readOwner=r,this.error=null,this.busy=!0,this.notify();try{let i=await n.client.request(`skills.library.read`,{sessionKey:n.sessionKey,skillId:e,revision:t});this.current(n)&&this.readOwner===r&&(this.read=i,this.selectedFile=`SKILL.md`)}catch(e){this.current(n)&&this.readOwner===r&&(this.error=z(e))}finally{this.current(n)&&(this.busy=!1,this.notify())}}async activate(e,t,n){let r=this.target;if(r&&this.current(r)&&!this.busy&&!this.loading){this.busy=!0,this.error=null,this.notice=null,this.notify();try{if(await r.client.request(`skills.library.activate`,{action:e,sessionKey:r.sessionKey,...t?{skillId:t}:{},...n?{revision:n}:{}}),!this.current(r))return;this.notice=B(`skillLibrary.session.queued`),this.result=null,this.closeRead();let i={agentId:r.agentId,sessionKey:r.sessionKey};Hu(r.client,i),$e(r.client,i),await Promise.all([this.load(),gi(r.client,i)])}catch(e){this.current(r)&&(this.error=z(e))}finally{this.current(r)&&(this.busy=!1,this.notify())}}}}})))()}function cb(){return{entries:[],nextEntryId:1,userEntryId:null,userEntryAwaitingFinal:!1,userEntryAwaitingFinalStartedAtMs:null,assistantEntryId:null}}function lb(e){return{...cb(),nextEntryId:e.nextEntryId,entries:e.entries.map((e,t)=>({...e,order:t,isStreaming:!1}))}}function ub(e,t){let n=db(e,t);if(!t.transcriptId||n===e)return n;let r=t.itemId===void 0?n.entries.findLastIndex(e=>e.role===t.role):n.entries.findIndex(e=>e.id===`item-${t.itemId}`);if(r<0)return n;let i=n.entries.slice();return i[r]={...i[r],transcriptId:t.transcriptId},{...n,entries:i}}function db(e,t){let n=t.text;if(t.final?n.trim()===``:n===``)return e;if(t.itemId!==void 0){let r=`item-${t.itemId}`,i=e.entries.find(e=>e.id===r),a={id:r,role:t.role,order:t.order,text:yb(t.final?n:(i?.text??``)+n),isStreaming:!t.final};return fb({...e,entries:[...e.entries.filter(e=>e.id!==r),a]})}let r=t.nowMs??Date.now();if(t.textMode===`verbatim`||t.textMode===`snapshot`)return pb(e,t.role,t.role===`user`?e.userEntryId:e.assistantEntryId,n,t.final,t.textMode);if(t.role===`assistant`){let i=hb(e,`user`,r);return pb(i,t.role,i.assistantEntryId,n,t.final)}let i=e.userEntryId,a=i!==null&&gb(e,i,n,t.final,r),o=i===null||a?hb(e,`assistant`,r):e;return pb(a&&i!==null?{...hb(o,`user`,r),userEntryId:null,userEntryAwaitingFinal:!1,userEntryAwaitingFinalStartedAtMs:null}:o,t.role,a?null:i,n,t.final)}function fb(e,t=[]){let n=new Map(t.map(({itemId:e,order:t})=>[`item-${e}`,t]));return{...e,entries:e.entries.map(e=>n.has(e.id)?{...e,order:n.get(e.id)}:e).toSorted((e,t)=>(e.order??1/0)-(t.order??1/0)).slice(-60)}}function pb(e,t,n,r,i,a){if(n===null){let n=`rt-${e.nextEntryId}`,o=[...e.entries,{id:n,role:t,text:yb(a?r:r.trimStart()),isStreaming:!i}].slice(-60);return mb({...e,entries:o,nextEntryId:e.nextEntryId+1},t,n,i)}let o=e.entries.findIndex(e=>e.id===n),s=e.entries[o];if(!s)return pb(e,t,null,r,i,a);let c=yb(a===`snapshot`?r:a===`verbatim`?s.text+r:t===`assistant`?_b(s.text,r,i):vb(s.text,r,i)),l=s.text===c&&s.isStreaming===!i?e.entries:e.entries.map((e,t)=>t===o?{...e,text:c,isStreaming:!i}:e);return mb({...e,entries:l},t,n,i)}function mb(e,t,n,r){return t===`user`?{...e,userEntryId:r?null:n,userEntryAwaitingFinal:!1,userEntryAwaitingFinalStartedAtMs:null}:{...e,assistantEntryId:r?null:n}}function hb(e,t,n=Date.now()){let r=t===`user`?e.userEntryId:e.assistantEntryId;if(r===null)return e;let i=e.entries.map(e=>e.id===r&&e.isStreaming?{...e,isStreaming:!1}:e);return t===`user`?{...e,entries:i,userEntryAwaitingFinal:!0,userEntryAwaitingFinalStartedAtMs:n}:{...e,entries:i,assistantEntryId:null}}function gb(e,t,n,r,i){let a=e.entries.find(e=>e.id===t);if(!a||a.isStreaming)return!1;let o=a.text;return!(o.trim()===``||n.trim()===``||n[0]&&/\s/.test(n[0])||n===o||n.startsWith(o)||o.endsWith(n)||r&&e.userEntryAwaitingFinal&&(e.userEntryAwaitingFinalStartedAtMs===null?1/0:i-e.userEntryAwaitingFinalStartedAtMs)<=kb&&bb(o,n))}function _b(e,t,n){return e.trim()===``?t.trimStart():n&&(t===e||t.startsWith(e)||bb(e,t))?t:`${e}${t}`}function vb(e,t,n){if(e.trim()===``)return t.trimStart();if(t===``||t===e||e.endsWith(t))return e;if(t.startsWith(e))return t;if(t[0]&&/\s/.test(t[0]))return`${e}${t}`;if(n&&bb(e,t))return t;let r=wb(e,t),i=r>0?t.slice(r):t;return i===``?e:`${e}${r>0||!Tb(e,i)?``:` `}${i}`}function yb(e){if(e.length<=Eb)return e;let t=e.indexOf(Ob),n=Pa(e,0,t>=255&&t<=Db?t:Db).replace(/[\uD800-\uDBFF]$/,``),r=Eb-n.length-3,i=Pa(e,-r);return`${n}${Ob}${i}`}function bb(e,t){let n=xb(e),r=xb(t);if(n.length===0||r.length===0||n[0]!==r[0])return!1;if(n.length>1&&r.length>1&&n[1]===r[1])return!0;let i=Sb(e),a=Sb(t),o=Cb(i,a),s=Math.min(i.length,a.length);return o>=6&&o/Math.max(1,s)>=.45}function xb(e){return[...e.toLowerCase().matchAll(/[\p{L}\p{N}]+/gu)].map(e=>e[0])}function Sb(e){return e.toLowerCase().replace(/\s+/g,` `).trim()}function Cb(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r+=1;return r}function wb(e,t){let n=e.toLowerCase(),r=t.toLowerCase(),i=Math.min(n.length,r.length);for(let e=i;e>=3;--e)if(n.endsWith(r.slice(0,e)))return e;return 0}function Tb(e,t){let n=e.at(-1),r=t[0];return!n||!r||/\s/.test(n)||/\s/.test(r)?!1:/[\p{L}\p{N}.!?,:;)\]}"'’”]/u.test(n)&&/[\p{L}\p{N}]/u.test(r)}var Eb,Db,Ob,kb;function Ab(){return(Ab=e((()=>{Eb=8e3,Db=256,Ob=`
…
`,kb=1500})))()}function jb(e,t){let n=Hb.get(e);n||(n=new Map,Hb.set(e,n));let r=n.get(t)??0,i=[...n.values()].reduce((e,t)=>e+t,0);if(r>=Rb||i>=zb)throw Error(`Too many active or closing realtime Talk voice sessions`);n.set(t,r+1);let a=n,o=new AbortController,s=new AbortController,c=!1,l,u,d=()=>{if(c)return;c=!0,l!==void 0&&(clearTimeout(l),l=void 0),u!==void 0&&(clearTimeout(u),u=void 0);let e=(a.get(t)??1)-1;e>0?a.set(t,e):a.delete(t)};return{signal:o.signal,closeSignal:s.signal,beginDrain:()=>{c||l!==void 0||u!==void 0||(l=setTimeout(()=>{o.abort()},Bb),u=setTimeout(()=>{o.abort(),s.abort(),d()},Vb))},release:d}}function Mb(e){if(e.nextTransport?.stop({emitClosed:!1}),e.transport===`gateway-relay`&&e.nextTransport){e.owner.release();return}e.closeVoiceSession()}function Nb(){let e=Error(`voice transcript persistence aborted`);return e.name=`AbortError`,e}async function Pb(e,t,n){let r;for(let n of[0,500,2e3]){if(e.aborted)throw Nb();try{n>0&&await Ra(n,e),await t();return}catch(t){if(e.aborted)throw Nb();r=t}}throw r instanceof Error?r:Error(n,{cause:r})}var Fb,Ib,Lb,Rb,zb,Bb,Vb,Hb;function Ub(){return(Ub=e((()=>{Ka(),Ja(),Oa(),Tr(),Fb=1024,Ib=1024,Lb=class{constructor(e,t,n){this.queue=e,this.write=t,this.onFailure=n,this.sequence=0,this.nextWriteOrder=1,this.items=new Map,this.changed=Va()}observe(e){if(e.type===`settled`)return this.settle(this.requireItem(e.itemId)),[];if(this.items.has(e.itemId))return[];if(this.items.size>=Fb||e.itemId.length>Ib||(e.previousItemId?.length??0)>Ib)throw Error(`Realtime transcript item identity limit exceeded`);let t={previousItemId:e.previousItemId===void 0?this.lastItemId:e.previousItemId,role:e.role,settled:e.role===null};return e.role!==null&&this.enqueue(()=>this.writeThrough(t),hr.maxEntryChars,()=>void 0),this.items.set(e.itemId,t),this.assignOrders()}publish(e){if(e.itemId!==void 0){let t=this.requireItem(e.itemId);if(t.role!==e.role)throw Error(`Realtime transcript item changed roles`);return t.settled?void 0:(e.final&&this.settle(t,fr(e.text)||void 0),{...e,order:t.order})}if(e.final){let t=fr(e.text);if(t){let n=String(++this.sequence);this.enqueue(()=>this.write(n,e.role,t),t.length)}}return e}close(){let e=new Set;for(let[t,n]of this.items)n.order===void 0&&e.add(t),n.settled||(e.add(t),this.settle(n)),n.previousItemId&&!this.items.has(n.previousItemId)&&e.add(n.previousItemId);return this.assignOrders(!0),[...e]}assignOrders(e=!1){let t=[];for(;;){let n=[...this.items].filter(([,e])=>e.order===void 0),r=n.find(([,e])=>e.previousItemId==null?this.lastItemId===void 0:e.previousItemId===this.lastItemId)??(e?n.find(([,e])=>e.previousItemId==null||!this.items.has(e.previousItemId)||this.items.get(e.previousItemId)?.order!==void 0)??n[0]:void 0);if(!r)break;let[i,a]=r;a.order=a.role===null?this.sequence:++this.sequence,this.lastItemId=i,a.role!==null&&t.push({itemId:i,order:a.order})}return this.notify(),t}async writeThrough(e){let t;for(;!e.written;){let e=[...this.items.values()].find(e=>e.role!==null&&e.order===this.nextWriteOrder);if(!e?.settled){await this.changed.promise;continue}e.written=!0,this.nextWriteOrder+=1;let n=e.text;if(e.text=void 0,n&&e.role!==null)try{await this.write(String(e.order),e.role,n)}catch(e){t??={error:e},this.onFailure(e)}}if(t)throw t.error}settle(e,t){e.settled||(e.settled=!0,e.text=t,this.notify())}notify(){this.changed.resolve(),this.changed=Va()}requireItem(e){let t=this.items.get(e);if(!t||t.role===null)throw Error(`Realtime transcript refers to an unknown speech item`);return t}enqueue(e,t,n=this.onFailure){let r=this.queue.enqueue(e,{weight:t});if(!r.accepted)throw Error(hr.overflowMessage);r.completion.catch(n)}},Rb=2,zb=16,Bb=Ma,Vb=Bb+Ma,Hb=new WeakMap})))()}function Wb(e){if(typeof e!=`string`)return;let t=pr(e);if(t===`webrtc`||t===`provider-websocket`||t===`gateway-relay`||t===`managed-room`)return t}function Gb(){return(Gb=e((()=>{mr()})))()}async function Kb(e){let t=!1,n;if(await Promise.all([...qb].map(async r=>{try{await r.switchCameraIfEnabled(e)}catch(e){t=!0,n??=e}})),t)throw n}var qb,Jb;function Yb(){return(Yb=e((()=>{Ka(),Tr(),m(),Ge(),Nc(),Ub(),Gb(),co(),qb=new Set,Jb=class{constructor(e,t,n={},r={},i={}){this.client=e,this.sessionKey=t,this.callbacks=n,this.options=r,this.localOptions=i,this.transport=null,this.pendingStartup=null,this.closed=!1,this.closeCompletion=Promise.resolve(),this.lifecycleGeneration=0,this.videoEnabled=!1,this.videoOperation=0,this.transportGeneration=0,this.acceptingTranscripts=!1,this.transcriptQueue=hr.createQueue()}async start(){let e=jb(this.client,this.sessionKey),t=!1,n;try{this.retireTransport();let r=this.lifecycleGeneration;this.closed=!1,this.callbacks.onStatus?.(`connecting`,B(`chat.voice.preparing`));let[{createRealtimeTalkTransport:i},a]=await Promise.all([ao(()=>import(`./transport.runtime-DVoc3JXT.js`),__vite__mapDeps([21,5,6,22,7,3,11,13,12]),import.meta.url),this.resolveVideoCapability()]);if(this.closed||r!==this.lifecycleGeneration)return;n=new Cl(()=>void 0,e=>this.callbacks.onStatus?.(`connecting`,e)),this.pendingStartup=n;try{await n.open(this.localOptions.inputDeviceId)}catch(e){if(this.closed||r!==this.lifecycleGeneration)return;throw e}if(this.closed||r!==this.lifecycleGeneration)return;n.requireStream();let o=[`voice-transcript`,`voice-selection`];a&&o.push(`camera-frame`);let s=await this.createSession({...this.options,capabilities:o},r),{transport:c}=s;if(c===`managed-room`)throw Error(`Managed-room realtime Talk sessions are not available in this UI yet`);let l=s.voiceSessionId??(s.transport===`gateway-relay`?s.relaySessionId:void 0);if(!l)throw Error(`Realtime Talk session did not return a voice session id`);if(this.closed||r!==this.lifecycleGeneration){this.closeUnadoptedVoiceSession(l,c,e),t=!0;return}let u=r;c!==`gateway-relay`&&(this.voiceSessionId=l,this.transportGeneration=u,this.acceptingTranscripts=!0,this.clientVoiceSessionOwner=e,t=!0);let d=()=>{if(c===`gateway-relay`)this.closeUnadoptedVoiceSession(l,c,e);else if(this.clientVoiceSessionOwner===e){let e=this.detachVoiceSession();e&&this.closeLogicalVoiceSession(e)}},f=c===`gateway-relay`?this.callbacks:this.clientOwnedTranscriptCallbacks(l,u,e.signal),p=this.transcriptQueue,m=null,h;try{n.requireStream(),m=i(s,{client:this.client,sessionKey:this.sessionKey,voiceSessionId:l,flushTranscriptWrites:async()=>await p.flush(),callbacks:f,input:n,videoDeviceId:this.localOptions.videoDeviceId}),this.pendingStartup=m,this.callbacks.onVideoCapability?.(a&&typeof m.setVideoEnabled==`function`),h=this.pendingStartup===m?await m.start():`cancelled`}catch(n){throw this.pendingStartup===m&&(this.pendingStartup=null),Mb({nextTransport:m,transport:c,owner:e,closeVoiceSession:d}),t=!0,n}if(this.pendingStartup===m&&(this.pendingStartup=null),h===`cancelled`||this.closed||r!==this.lifecycleGeneration){Mb({nextTransport:m,transport:c,owner:e,closeVoiceSession:d}),t=!0;return}this.transport=m,this.selectedTransport=c,c===`gateway-relay`&&(this.voiceSessionId=l,this.transportGeneration=u,this.acceptingTranscripts=!0,e.release()),t=!0;try{m.activate?.()}catch(e){throw this.transport===m&&this.retireTransport(),e}}finally{n&&this.pendingStartup===n&&(this.pendingStartup=null,n.stop()),t||e.release()}}async resolveVideoCapability(){if(!this.callbacks.onVideoCapability)return!1;try{let e=this.options.provider?.trim(),t=this.options.model?.trim(),n=await this.client.request(`talk.catalog`,{...e?{provider:e}:{},...t?{model:t}:{}},{timeoutMs:Ma}),r=n.realtime.activeProvider;return r?n.realtime.providers.find(e=>e.id===r||e.aliases?.includes(r))?.supportsVideoFrames===!0:!1}catch{return!1}}async createSession(e,t){if(e.voiceChangeId&&e.transport===`gateway-relay`)return this.createRelaySession(e);try{return await this.client.request(`talk.client.create`,{sessionKey:this.sessionKey,...e},{timeoutMs:Ma})}catch(n){if(e.voiceChangeId||this.closed||this.lifecycleGeneration!==t)throw n;let r=e.transport;if(!r){let e;try{e=await this.client.request(`talk.config`,{},{timeoutMs:Ma})}catch{throw n}if(!e.config||typeof e.config!=`object`)throw n;let t=e.config?.talk?.realtime?.transport;if(t!==void 0&&(r=Wb(t),!r))throw n}if(this.closed||this.lifecycleGeneration!==t||r&&r!==`gateway-relay`)throw n;try{return await this.createRelaySession(e)}catch{throw n}}}createRelaySession(e){return this.client.request(`talk.session.create`,{sessionKey:this.sessionKey,...e,mode:`realtime`,transport:`gateway-relay`,brain:`agent-consult`,capabilities:[`voice-selection`]},{timeoutMs:Ma})}stop(){try{return this.retireTransport()}finally{this.callbacks.onStatus?.(`idle`)}}getVoiceSessionId(){return this.closed?void 0:this.voiceSessionId}getTransport(){return this.closed?void 0:this.selectedTransport}retireTransport(){this.lifecycleGeneration+=1,this.closed=!0,this.videoOperation+=1,this.rememberVideoEnabled(!1);let e=this.detachVoiceSession(),t=this.transport,n=this.pendingStartup!==null,r=[];this.transport=null,this.selectedTransport=void 0;try{r.push(Promise.resolve(this.stopPendingStartup()))}finally{try{r.push(Promise.resolve(t?.stop()))}finally{e&&r.push(this.closeLogicalVoiceSession(e))}}return(e||t||n)&&(this.closeCompletion=Promise.all(r).then(()=>void 0),this.closeCompletion.catch(()=>void 0)),this.closeCompletion}stopPendingStartup(){let e=this.pendingStartup;return this.pendingStartup=null,e?.stop({emitClosed:!1})}closeUnadoptedVoiceSession(e,t,n){if(t===`gateway-relay`){this.client.request(`talk.session.close`,{sessionId:e},{timeoutMs:Ma}).catch(()=>void 0).finally(n.release);return}let r=hr.createQueue();r.seal(),this.closeLogicalVoiceSession({voiceSessionId:e,transcriptQueue:r,owner:n})}clientOwnedTranscriptCallbacks(e,t,n){let r=new Lb(this.transcriptQueue,(t,r,i)=>this.writeTranscriptWithRetry({voiceSessionId:e,entryId:t,role:r,text:i,signal:n}),e=>{if(n.aborted)return;let r=`Voice transcript could not be saved: ${z(e)}`;console.warn(r,e),this.transportGeneration===t&&this.callbacks.onStatus?.(`error`,r)});this.transcriptItems=r;let i=()=>this.transportGeneration===t&&this.voiceSessionId===e&&this.acceptingTranscripts;return{...this.callbacks,onTalkEvent:e=>{if(i())try{e.type===`session.closed`&&this.retireTransport()}finally{this.callbacks.onTalkEvent?.(e)}},onTranscriptItem:e=>{if(!i())return;let n;try{n=r.observe(e)}catch(e){this.failTranscriptPersistence(t,z(e));return}n.length>0&&this.callbacks.onTranscriptOrder?.(n)},onTranscript:e=>{if(!i())return;let n;try{n=r.publish(e)}catch(e){this.failTranscriptPersistence(t,z(e));return}n&&this.callbacks.onTranscript?.(n)}}}failTranscriptPersistence(e,t=hr.overflowMessage){this.transportGeneration===e&&this.acceptingTranscripts&&this.voiceSessionId&&(this.retireTransport(),this.transportGeneration+=1,console.warn(t),this.callbacks.onStatus?.(`error`,t))}async writeTranscriptWithRetry(e){await Pb(e.signal,()=>this.client.request(`talk.client.transcript`,{sessionKey:this.sessionKey,voiceSessionId:e.voiceSessionId,entryId:e.entryId,role:e.role,text:e.text,timestamp:Date.now()},{signal:e.signal,timeoutMs:Ma}),`voice transcript save failed`)}detachVoiceSession(){let e=this.voiceSessionId;if(!e)return;let t=this.clientVoiceSessionOwner?{voiceSessionId:e,generation:this.transportGeneration,transcriptQueue:this.transcriptQueue,owner:this.clientVoiceSessionOwner}:void 0,n=this.transcriptItems?.close()??[];if(this.transcriptItems=void 0,this.transcriptQueue.seal(),this.voiceSessionId=void 0,this.acceptingTranscripts=!1,this.transcriptQueue=hr.createQueue(),this.clientVoiceSessionOwner=void 0,n.length>0){let e=`Voice call closed with ${n.length} unfinished transcript item(s); finalized speech was preserved.`;console.warn(e)}return t}closeLogicalVoiceSession(e){let t=e.owner;t.beginDrain();let n=e.transcriptQueue.flush().then(()=>Pb(t.closeSignal,()=>this.client.request(`talk.client.close`,{sessionKey:this.sessionKey,voiceSessionId:e.voiceSessionId},{signal:t.closeSignal,timeoutMs:Ma}),`Realtime Talk voice session close failed`)).finally(t.release);n.catch(n=>{t.closeSignal.aborted||(console.warn(`Realtime Talk voice session close failed`,n),this.transportGeneration===e.generation&&this.callbacks.onStatus?.(`error`,`Realtime Talk voice session close failed`))});let r=n.then(()=>e.transcriptQueue.flush({requireSuccess:!0}));return r.catch(()=>void 0),r}async setVideoEnabled(e){let t=this.transport;if(this.closed||!t?.setVideoEnabled)throw Error(`Camera is unavailable for this realtime session`);let n=++this.videoOperation,r=this.videoEnabled;this.rememberVideoEnabled(e);try{await t.setVideoEnabled(e)}catch(e){throw n===this.videoOperation&&!this.closed&&this.transport===t&&this.rememberVideoEnabled(r),e}n===this.videoOperation&&(this.closed||this.transport!==t)&&this.rememberVideoEnabled(!1)}rememberVideoEnabled(e){this.videoEnabled=e,e?qb.add(this):qb.delete(this)}async switchCamera(e){let t=e?.trim()||void 0;if(this.localOptions.videoDeviceId=t,this.closed||!this.transport?.switchCamera)throw Error(`Camera switching is unavailable for this realtime session`);await this.transport.switchCamera(t)}async switchCameraIfEnabled(e){if(this.videoEnabled)try{await this.switchCamera(e)}catch(e){throw this.callbacks.onVideoError?.(e),e}}}})))()}var Xb,Zb;function Qb(){return(Qb=e((()=>{rr(),Yn(),m(),Xb=cr+1e4,Zb=class{constructor(e){this.owner=e,this.active=!0,this.unsubscribe=e.client.addEventListener(e=>{e.event===`talk.voice.change`&&qn(e.payload)&&this.receive(e.payload)})}current(e=this.owner.currentCall()){return this.active&&this.owner.isCurrent()&&e!==null&&this.owner.currentCall()===e}ready(e){if(!this.current(e))return;let t=this.change;t&&e.getVoiceSessionId()!==t.request.voiceSessionId&&(t.ready=e,this.completeReady(t))}failed(e){this.current(e)&&this.change&&this.fail(this.change,B(`chat.voice.selectionFailed`))}receive(e){if(!this.active||!this.owner.isCurrent()||e.sessionKey!==this.owner.sessionKey)return;if(e.phase===`cancelled`){let t=this.change;t?.request.changeId===e.changeId&&t.request.voiceSessionId===e.voiceSessionId&&(this.clearChange(t),this.owner.cancel(B(`chat.voice.selectionFailed`)));return}let t=this.owner.currentCall();if(!this.current(t)||t.getVoiceSessionId()!==e.voiceSessionId||this.change)return;let n={request:e,completing:!1,timer:setTimeout(()=>this.fail(n,B(`chat.voice.selectionTimedOut`)),Xb)};this.change=n,this.owner.restart(e).then(e=>{if(this.change===n&&this.active&&this.owner.isCurrent()){if(!e||!this.current(e)){this.fail(n,B(`chat.voice.selectionFailed`));return}n.started=e,this.completeReady(n)}}).catch(()=>this.fail(n,B(`chat.voice.selectionFailed`)))}clearChange(e){clearTimeout(e.timer),this.change===e&&(this.change=void 0)}completeReady(e){let t=e.started,n=t?.getVoiceSessionId();this.change===e&&t&&e.ready===t&&this.current(t)&&n&&n!==e.request.voiceSessionId&&!e.completing&&(e.completing=!0,this.owner.client.request(`talk.voice.complete`,{changeId:e.request.changeId,voiceSessionId:n,outcome:`ready`},{timeoutMs:Xb}).then(()=>{this.change===e&&this.current(t)&&this.clearChange(e)}).catch(()=>this.fail(e,B(`chat.voice.selectionConfirmationFailed`))))}fail(e,t){this.change===e&&(this.clearChange(e),this.reportFailure(e,t),this.active&&this.owner.isCurrent()&&this.owner.cancel(t))}reportFailure(e,t){let n=this.owner.currentCall()?.getVoiceSessionId();this.owner.client.request(`talk.voice.complete`,{changeId:e.request.changeId,...n&&n!==e.request.voiceSessionId?{voiceSessionId:n}:{},outcome:`failed`,error:t},{timeoutMs:Xb}).catch(()=>void 0)}dispose(){this.active=!1,this.unsubscribe();let e=this.change;e&&(this.clearChange(e),this.reportFailure(e,B(`common.cancelled`)))}}})))()}function $b(e){let t=ix.get(e);t!==void 0&&(clearInterval(t),ix.delete(e))}function ex(e){let t=null;return n=>{if(t&&=($b(t),null),!(n instanceof HTMLElement)||(n.textContent=Fr(gr(e,Date.now())),e.status!==`active`))return;t=n;let r=setInterval(()=>{if(!n.isConnected){$b(n);return}n.textContent=Fr(gr(e,Date.now()))},1e3);ix.set(n,r)}}function tx(e,t,n){if(!t)return K;let r=Fr(gr(t,Date.now())),i=Ir(t),a=e.goalExpandedId===t.id,o=n.canAct&&!!n.onGoalAction,s=t.status===`paused`||t.status===`blocked`||t.status===`usage_limited`||t.status===`budget_limited`,c=s&&!a?t.lastStatusNote:void 0;return U`
    <div
      class="agent-chat__goal agent-chat__goal--${t.status}"
      data-expanded=${String(a)}
      role="group"
      aria-label=${_r(t)}
    >
      <div class="agent-chat__goal-row">
        <span class="agent-chat__goal-icon" aria-hidden="true"
          >${ax[t.status]}</span
        >
        <span class="agent-chat__goal-copy">
          <openclaw-tooltip .content=${c??``} ?disabled=${!c}>
            <span class="agent-chat__goal-label" tabindex=${c?`0`:K}
              >${Lr(t.status)}</span
            >
          </openclaw-tooltip>
          <span class="agent-chat__goal-objective">${t.objective}</span>
        </span>
        <span class="agent-chat__goal-elapsed" ${W(ex(t))}></span>
        <span class="agent-chat__goal-actions">
          <span class="agent-chat__goal-command-actions">
            ${[[`edit`,n.onGoalEdit&&t.status!==`complete`,`chat.goals.edit`,`chat.goals.editChip`,V.penLine],[`pause`,t.status===`active`,`chat.goals.pause`,`chat.goals.pauseChip`,V.pause],[`resume`,s,`chat.goals.resume`,`chat.goals.resumeChip`,V.play],[`clear`,!0,`chat.goals.clear`,`chat.goals.clearChip`,V.trash]].map(([e,r,i,a,s])=>o&&r?U`<openclaw-tooltip content=${B(i)}>
                    <button
                      class="agent-chat__goal-action agent-chat__goal-${e}"
                      type="button"
                      aria-label=${B(i)}
                      @click=${()=>e===`edit`?n.onGoalEdit?.(t):n.onGoalAction?.(t.id,e)}
                    >
                      ${s}
                      <span class="agent-chat__goal-action-label">${B(a)}</span>
                    </button>
                  </openclaw-tooltip>`:K)}
          </span>
          <button
            class="agent-chat__goal-action agent-chat__goal-expand"
            type="button"
            aria-expanded=${a?`true`:`false`}
            aria-label=${B(a?`chat.goals.hideDetails`:`chat.goals.showDetails`)}
            @click=${()=>{e.goalExpandedId=a?null:t.id,n.requestUpdate()}}
          >
            ${a?V.chevronDown:V.chevronRight}
          </button>
        </span>
      </div>
      <div
        class="agent-chat__goal-detail"
        data-expanded=${String(a)}
        aria-hidden=${String(!a)}
        ?inert=${!a}
      >
        <div class="agent-chat__goal-detail-content">
          <div
            class="agent-chat__goal-detail-objective"
            ${Ms()}
            .textContent=${t.objective}
          ></div>
          ${t.lastStatusNote?U`<div class="agent-chat__goal-detail-note">${t.lastStatusNote}</div>`:K}
          <div class="agent-chat__goal-detail-meta">
            ${i?U`
                    <span class="agent-chat__goal-detail-usage">${i}</span>
                    <span class="agent-chat__goal-detail-separator" aria-hidden="true">·</span>
                  `:K}
            <span class="agent-chat__goal-detail-duration">${r}</span>
          </div>
        </div>
      </div>
    </div>
  `}function nx(){for(let e of ix.values())clearInterval(e);ix.clear()}function rx(e,t){return e?U`
    <div class="chat-composer-neighbor-card chat-composer-neighbor-card--warn" role="status">
      <span class="chat-composer-neighbor-card__icon" aria-hidden="true"
        >${V.alertTriangle}</span
      >
      <div class="chat-composer-neighbor-card__copy">
        <strong>${B(e.pending?`chat.goals.checking`:`chat.goals.recoveryTitle`)}</strong>
        <span
          >${B(e.retired===`expired`?`chat.goals.recoveryExpired`:e.retired===`invalid`?`chat.goals.recoveryInvalid`:`chat.goals.recoveryHint`)}</span
        >
      </div>
      <button
        class="btn btn--sm"
        type="button"
        ?disabled=${!t||e.pending}
        @click=${e.onCheck}
      >
        ${B(e.retired?`chat.goals.refreshCurrent`:`chat.goals.checkOutcome`)}
      </button>
    </div>
  `:K}var ix,ax;function ox(){return(ox=e((()=>{q(),G(),Qt(),H(),Cs(),m(),ii(),oi(),ix=new Map,ax={active:Wt(Un` <path d="M12 13V2l8 4-8 4" />
  <path d="M20.561 10.222a9 9 0 1 1-12.55-5.29" />
  <path d="M8.002 9.997a5 5 0 1 0 8.9 2.02" />`),paused:V.pause,blocked:V.alertTriangle,usage_limited:V.alertTriangle,budget_limited:V.alertTriangle,complete:V.check}})))()}function sx(){return{...uu(),...ul(),composerComposing:!1,editRevision:0,mentionMenu:new wu,emojiMenu:new _u,composingDraft:null,composerInputIntentKey:null,pendingClearedSubmittedDraft:null,goalExpandedId:null,goalComposer:null,activeQuestionKey:null,gatewayQuestionIds:new Set,asyncQuestionIds:new Set,questionCollapsed:!1,questionTakeoverActive:!1,restoreComposerFocus:!1,composerInput:null,composerTextarea:null,microphonePicker:null,capabilityMenuOpen:!1,capabilityMenuView:`root`,textareaRef:null,composerInputRef:null,dictation:null,composerDraftScopeKey:null,dictationError:null,dictationSelection:null}}function cx(e){let t=xx.get(e);if(t)return t;let n=sx();return xx.set(e,n),n}function lx(e){return e?.phase===`done`||e?.phase===`interrupted`}function ux(e,t,n){return e.sessionKey===t&&!e.pendingRunId&&(e.sendState===`submitting`||e.sendState===`sending`||e.sendState===`waiting-model`)&&(n==null||e.sendRunId!==n.runId)}function dx(e){return e.runActive===!0&&!lx(e.runStatus)||e.queue.some(t=>ux(t,e.sessionKey,e.runStatus))}function fx(e){return`${e.currentAgentId}\u0000${e.sessionKey}`}function px(e,t,n){let r=e.getDraft?e.getDraft():e.draft;if(r===t&&n===void 0)return;let i=e.getMentions?.()??e.mentions??[];cx(e.paneId).editRevision+=1,e.onDraftChange(t,n);let a=e.getMentions?.()??n??e.mentions??[];(i.length!==a.length||i.some((e,n)=>{let i=a[n];return e.profileId!==i.profileId||r.slice(e.start,e.end)!==t.slice(i.start,i.end)}))&&e.onRequestUpdate?.()}function mx(e,t){e.editRevision+=1,e.composerInputIntentKey=t}function hx(e,t){return e.composerInputIntentKey===t&&(e.composerInputIntentKey=null,!0)}function gx(e,t){e.pendingClearedSubmittedDraft?.key===t&&(e.pendingClearedSubmittedDraft=null)}function _x(e){return e.inputType===`insertFromPaste`||e.inputType===`insertFromDrop`}function vx(e,t,n,r,i){let a=i.pendingClearedSubmittedDraft;return!a||e.value!==a.value||r||_x(t)?!1:(e.value=n,jc(e),!0)}function yx(e){e.emojiMenu.close(),e.mentionMenu.dispose(),e.composerDraftScopeKey=null,e.dictation?.dispose(),e.microphonePicker?.dispose(),e.composerInput&&kl(e.composerInput)}function bx(e){if(e){let t=xx.get(e);t&&yx(t),xx.delete(e);return}for(let e of xx.values())yx(e);xx.clear(),nx()}var xx;function Sx(){return(Sx=e((()=>{nl(),Uc(),ox(),Qs(),$u(),Xu(),xx=new Map})))()}function Cx(e){return e.some(e=>e instanceof Element&&(e.matches(`a, img, audio, video, iframe, input, textarea, select`)||e instanceof HTMLElement&&(e.isContentEditable||e.getAttribute(`contenteditable`)===`true`||e.getAttribute(`contenteditable`)===`plaintext-only`||e.getAttribute(`contenteditable`)===``)))}function wx(e){let t=e.closest(`.code-block-wrapper`)?.querySelector(`.code-block-copy`);if(t)return{label:B(`common.copyCode`),text:Fs(t)};let n=e.closest(`pre, code`);if(n)return{label:B(`common.copyCode`),text:n.textContent??``};let r=e.closest(`table`)??e.closest(`.markdown-table`)?.querySelector(`table`);if(r instanceof HTMLTableElement)return{label:B(`common.copyTable`),text:Io(r)};let i=e.closest(`.chat-assistant-attachment-card, .chat-attachment-file`);if(i){let e=i.querySelector(`a.chat-assistant-attachment-card__download[href]:not([aria-disabled='true'])`);if(e?.getAttribute(`href`))return{label:B(`chat.messages.copyLink`),text:e.href};let t=i.querySelector(`.chat-assistant-attachment-card__title, .chat-attachment-file__name`)?.textContent;if(t)return{label:B(`chat.messages.copyFileName`),text:t}}return null}function Tx(){return(Tx=e((()=>{Go(),Ro(),m(),Ci(),Ji()})))()}function Ex(e){Ix&&(e===void 0||Ix.paneId===e)&&(window.clearTimeout(Ix.timer),Ix=null),(e===void 0||Fx?.paneId===e)&&(Fx?.element.remove(),Fx?.listeners.abort(),Fx=null)}function Dx(e){return Fx?.paneId===e&&Fx.element.contains(document.activeElement)}function Ox(e,t){if(e.isCollapsed||e.rangeCount!==1)return null;let n=e.getRangeAt(0),r=n.commonAncestorContainer,i=(r instanceof Element?r:r.parentElement)?.closest(`.chat-bubble`);if(!i||!t.contains(i))return null;let a=e.toString();if(!a.trim())return null;let o=n.cloneRange();o.selectNodeContents(i),o.setEnd(n.startContainer,n.startOffset);let s=o.toString().length;return o.setEnd(n.endContainer,n.endOffset),{text:a,start:s,end:o.toString().length,...i.dataset.messageId?{messageId:i.dataset.messageId}:{},...i.dataset.entryId?{entryId:i.dataset.entryId}:{}}}function kx(e,t){let n=window.visualViewport,r=(n?.offsetLeft??0)+8,i=(n?.offsetTop??0)+8,a=r+(n?.width??window.innerWidth)-16,o=i+(n?.height??window.innerHeight)-16;e.style.maxWidth=`${a-r}px`,e.style.maxHeight=`${o-i}px`;let s=e.getBoundingClientRect(),c=t.left+t.width/2-s.width/2,l=t.top-s.height-8,u=t.bottom+8,d=e.classList.contains(`chat-annotation-editor`)&&u+s.height<=o||l<i?u:l;e.style.left=`${Math.max(r,Math.min(c,a-s.width))}px`,e.style.top=`${Math.max(i,Math.min(d,o-s.height))}px`}function Ax(e,t,n,r,i){Ex(),document.body.appendChild(e);let a=new AbortController;Fx={element:e,listeners:a,paneId:n};let{signal:o}=a,s=()=>kx(e,i?.getBoundingClientRect()??t);return s(),document.addEventListener(`pointerdown`,t=>{e.contains(t.target)||Ex()},{capture:!0,signal:o}),document.addEventListener(`keydown`,e=>{it(xe.escape,e)&&(e.preventDefault(),e.stopPropagation(),Ex(),r?.())},{signal:o}),document.addEventListener(`scroll`,t=>{(!(t.target instanceof Node)||!e.contains(t.target))&&Ex()},{capture:!0,passive:!0,signal:o}),window.addEventListener(`resize`,s,{signal:o}),window.visualViewport?.addEventListener(`resize`,s,{signal:o}),o}function jx(e,t){let n=document.createElement(`button`);return n.type=`button`,n.setAttribute(`aria-label`,e),n.textContent=e,n.addEventListener(`click`,t),n}function Mx(e,t,n){let r=document.createElement(`div`);r.className=`chat-selection-popup`,r.setAttribute(`role`,`toolbar`),r.setAttribute(`aria-label`,B(`chat.messages.selectionActions`)),r.addEventListener(`pointerdown`,e=>e.preventDefault());let i=e=>{Ex(),window.getSelection()?.removeAllRanges(),e()};if(n.onAddToChat){let a=n.onAddToChat;r.append(jx(B(`chat.messages.addToChat`),()=>i(()=>a(t,e))))}r.append(jx(B(`chat.messages.askInSideChat`),()=>i(()=>n.onAskSideChat(t,e))));let a=Ax(r,e,n.paneId);document.addEventListener(`selectionchange`,()=>{(!window.getSelection()||window.getSelection()?.isCollapsed)&&Ex()},{signal:a})}function Nx(e){if(e.readSignal?.aborted)return;let t=document.createElement(`div`);t.className=`chat-annotation-editor`,t.setAttribute(`role`,`dialog`),t.setAttribute(`aria-label`,B(`chat.messages.annotationEditor`));let n=document.createElement(`textarea`);n.value=e.comment,n.rows=1,n.placeholder=B(`chat.messages.annotationComment`),n.setAttribute(`aria-label`,B(`chat.messages.annotationComment`));let r=()=>{Ex(),e.onCancel?.()},i=()=>{if(e.readSignal?.aborted){Ex();return}e.onSave(n.value)!==!1&&Ex()},a=jx(B(`chat.messages.saveAnnotation`),i);a.className=`btn primary chat-annotation-editor__confirm`,a.textContent=``,On(V.cornerDownLeft,a);let o=document.createElement(`div`);o.className=`chat-annotation-editor__controls`;let s=jx(B(`chat.messages.deleteAnnotation`),()=>{Ex(),e.readSignal?.aborted||(e.onDelete??e.onCancel)?.()});s.className=`btn btn--icon btn--ghost chat-annotation-editor__delete`,s.title=B(`chat.messages.deleteAnnotation`),s.textContent=``,On(V.trash,s);let c=jx(B(`common.cancel`),r);c.className=`btn`;let l=jx(B(`common.save`),i);l.className=`btn primary`,o.append(s,c,l),t.append(n,a,o),e.expanded&&t.classList.add(`chat-annotation-editor--expanded`),t.addEventListener(`keydown`,e=>{if(e.target===n&&!Lf(e)&&(it(xe.sendMessage,e)||it(xe.modifiedEnter,e))&&(e.preventDefault(),i()),e.key===`Tab`){let r=[n,...Array.from(t.querySelectorAll(`button`))].filter(e=>e.getClientRects().length>0),i=r[0],a=r.at(-1);e.shiftKey&&document.activeElement===i?(e.preventDefault(),a?.focus()):!e.shiftKey&&document.activeElement===a&&(e.preventDefault(),i?.focus())}});let u=Ax(t,e.anchorRect,e.paneId,e.onCancel,e.anchorElement),d=()=>{let r=n.scrollTop;n.style.height=`auto`,n.style.height=`${n.scrollHeight}px`,n.scrollTop=r,kx(t,e.anchorElement?.getBoundingClientRect()??e.anchorRect)};n.addEventListener(`input`,d,{signal:u}),n.addEventListener(`compositionend`,Cp,{signal:u}),n.addEventListener(`keyup`,Df,{signal:u}),n.addEventListener(`blur`,Df,{signal:u}),window.addEventListener(`resize`,d,{signal:u}),d(),e.sourceRange&&typeof Highlight<`u`&&(CSS.highlights.set(`openclaw-comment`,new Highlight(e.sourceRange)),u.addEventListener(`abort`,()=>CSS.highlights.delete(`openclaw-comment`),{once:!0}));let f=()=>Ex();return e.readSignal?.addEventListener(`abort`,f,{once:!0}),u.addEventListener(`abort`,()=>e.readSignal?.removeEventListener(`abort`,f),{once:!0}),n.focus({preventScroll:!0}),n.setSelectionRange(n.value.length,n.value.length),()=>{Fx?.element===t&&kx(t,e.anchorElement?.getBoundingClientRect()??e.anchorRect)}}function Px(e,t){let n=e.currentTarget instanceof HTMLElement?e.currentTarget:null;n&&(Ex(),Ix={paneId:t.paneId,timer:window.setTimeout(()=>{Ix=null;let e=window.getSelection(),r=e?Ox(e,n):null;r&&e&&n.isConnected&&Mx(e.getRangeAt(0).getBoundingClientRect(),r,t)},0)})}var Fx,Ix;function Lx(){return(Lx=e((()=>{q(),H(),m(),Ci(),kf(),Se(),Ji(),Fx=null,Ix=null})))()}function Rx(){return{asyncQuestionDrafts:new Map,asyncQuestionRevision:0,turnRecapWatch:null,searchOpen:!1,searchQuery:``,searchFocusPending:!1,searchReturnFocusTarget:null,searchReturnFocusOwner:null,transcriptRenderDependencies:[],transcriptRenderContext:{}}}function zx(e){let t=Qx.get(e);if(t)return t;let n=Rx();return Qx.set(e,n),n}function Bx(e,t){let n=$x?.paneId===e?$x.element:null;return t.contains(t.ownerDocument.activeElement)||Dx(e)||__(t)||!!(n&&(n.contains(document.activeElement)||__(n)))}function Vx(e,t){qx(e),t&&g_(t),Ex(e)}function Hx(e,t){Vx(e,t),t?.querySelectorAll(`.chat-thread`).forEach(Zo);let n=Qx.get(e);n&&(n.asyncQuestionDrafts=new Map,n.transcriptRenderDependencies=[],n.searchOpen=!1,n.searchQuery=``,n.searchFocusPending=!1,n.searchReturnFocusTarget=null,n.searchReturnFocusOwner=null)}function Ux(e,t){Vx(e,t);let n=e?[Qx.get(e)]:Qx.values();for(let e of n)e&&(e.asyncQuestionGeneration=(e.asyncQuestionGeneration??0)+1,e.asyncQuestionDrafts=new Map);e?(Qx.delete(e),Gd(e)):(Qx.clear(),Gd())}function Wx(e,t){let n=zx(e);return n.searchOpen?U`
    <div
      class="agent-chat__search-bar"
      @keydown=${e=>{e.key!==`Escape`||e.defaultPrevented||e.isComposing||e.keyCode===229||(e.preventDefault(),e.stopPropagation(),Gx(n,t))}}
    >
      ${V.search}
      <input
        type="text"
        placeholder=${B(`chat.thread.searchPlaceholder`)}
        aria-label=${B(`chat.thread.search`)}
        .value=${n.searchQuery}
        ${n.searchFocusPending?W(e=>{e instanceof HTMLInputElement&&(n.searchFocusPending=!1,queueMicrotask(()=>{e.isConnected&&e.focus({preventScroll:!0})}))}):K}
        @input=${e=>{n.searchQuery=e.target.value,t()}}
      />
      <openclaw-tooltip .content=${B(`chat.thread.closeSearch`)}>
        <button
          class="btn btn--ghost"
          aria-label=${B(`chat.thread.closeSearch`)}
          @click=${()=>Gx(n,t)}
        >
          ${V.x}
        </button>
      </openclaw-tooltip>
    </div>
  `:K}function Gx(e,t){let n=e.searchReturnFocusTarget,r=e.searchReturnFocusOwner;e.searchOpen=!1,e.searchQuery=``,e.searchFocusPending=!1,e.searchReturnFocusTarget=null,e.searchReturnFocusOwner=null,t(),queueMicrotask(()=>{(n?.isConnected?n:r?.querySelector(`.agent-chat__composer-combobox > textarea`))?.focus({preventScroll:!0})})}function Kx(e,t,n){let r=zx(e);if(r.searchOpen){Gx(r,t);return}r.searchOpen=!0,r.searchFocusPending=!0;let i=n?.target,a=n?.currentTarget;r.searchReturnFocusTarget=i instanceof HTMLElement&&i.isConnected?i:null,r.searchReturnFocusOwner=a instanceof HTMLElement&&a.isConnected?a:null,t()}function qx(e){let t=$x;if(e&&e!==t?.paneId)return;t&&(g_(t.element),t.element.remove()),$x=null;let n=document.querySelector(`.chat-reply-context-menu`);n&&(g_(n),n.remove()),t?.listeners.abort()}function Jx(e){let t=e.currentTarget,n=e.target;if(e.pointerType!==`touch`||!(t instanceof HTMLElement)||!(n instanceof Element))return;let r=n.closest(`.chat-group--with-footer`);if(!(r instanceof HTMLElement)||!t.contains(r)||n.closest(`a, button, details, input, label, select, textarea, [contenteditable]`))return;let i=window.getSelection();if(i&&!i.isCollapsed)return;let a=r.classList.contains(`chat-group--peer`)?n.closest(`.chat-bubble`)??[...r.querySelectorAll(`.chat-bubble`)].find(t=>{let n=t.getBoundingClientRect();return e.clientY>=n.top&&e.clientY<=n.bottom}):null,o=a?!a.classList.contains(`chat-bubble--actions-revealed`):!r.classList.contains(`chat-group--meta-revealed`);for(let e of t.querySelectorAll(`.chat-group--meta-revealed`))e.classList.remove(`chat-group--meta-revealed`);r.classList.toggle(`chat-group--meta-revealed`,o);for(let e of t.querySelectorAll(`.chat-bubble--actions-revealed`))e.classList.remove(`chat-bubble--actions-revealed`);o&&a?.classList.add(`chat-bubble--actions-revealed`)}function Yx(e,t){Jx(e),!(e.button!==0||e.ctrlKey||typeof t.onCompanionSelection!=`function`)&&Px(e,{paneId:t.paneId,onAddToChat:t.onAddToChat,onAskSideChat:(e,n)=>t.onCompanionSelection?.(e,n)})}function Xx(e,t){if(!e||e.isCollapsed)return!1;for(let n=0;n<e.rangeCount;n+=1)if(e.getRangeAt(n).intersectsNode(t))return!0;return!1}function Zx(e,t){if(e.defaultPrevented||Cx(e.composedPath()))return;let n=e.composedPath().find(e=>e instanceof Element);if(!n)return;let r=n.closest(`.chat-bubble`),i=r?.closest(`.chat-group`);if(i?.querySelector(`.chat-reading-indicator, .chat-bubble.streaming`))return;let a=wx(n),o=window.getSelection(),s=Xx(o,r??n)?o?.toString():``,c=r?.messageActions?.replyTarget,l=r?.dataset.entryId?.trim()??``,u=r?.dataset.messageId?.trim()??``,d=i?.classList.contains(`user`)&&!!l,f=[...i?.querySelectorAll(`[data-message-actions-for]`)??[]].find(e=>e.dataset.messageActionsFor===u),p=f?.querySelector(`.chat-copy-btn`),m=i?.dataset.chatRowKey?.startsWith(`agent-run:`)===!0,h=!(!c||!t.onSetReply||m&&!f),g=d&&typeof t.onRewindMessage==`function`,_=r?.messageActions?.copyMarkdown,v=!!(p||_),y=d&&typeof t.onForkMessage==`function`;if(!h&&!g&&!v&&!y&&!s&&!a?.text)return;e.preventDefault(),e.stopPropagation(),qx();let b=document.createElement(`div`);b.className=`chat-reply-context-menu`,b.setAttribute(`role`,`menu`),b.setAttribute(`aria-label`,B(`chat.messages.actions`)),b.style.left=`${e.clientX}px`,b.style.top=`${e.clientY}px`;let x=[],S=e=>{let t=document.createElement(`button`);t.type=`button`,t.disabled=e.disabled??!1,t.setAttribute(`role`,`menuitem`),t.addEventListener(`click`,e.onClick);let n=document.createElement(`span`);n.dataset.copyLabel=``,n.textContent=e.label,t.append(n);let r=document.createElement(`openclaw-tooltip`);return r.content=e.tooltip,r.append(t),e.className&&(r.className=e.className),b.append(r),x.push(t),t},C=(e,n)=>{n&&S({label:e,tooltip:e,onClick:r=>{Is(r,n,e).then(e=>{e&&$x?.element===b&&qx(t.paneId)})}})};if(s&&C(B(`chat.messages.copySelection`),s),a&&C(a.label,a.text),h&&c){let e=document.createElement(`button`);e.type=`button`,e.setAttribute(`role`,`menuitem`),e.setAttribute(`aria-label`,B(`chat.messages.replyToMessage`)),e.textContent=B(`chat.messages.reply`),e.addEventListener(`click`,()=>{t.onSetReply?.(c),qx(),t.onFocusComposer?.()}),b.append(e),x.push(e)}let w=!!(t.runActive||t.runWorking);if(g){let e=S({label:B(`chat.messages.rewindToHere`),disabled:w,tooltip:B(w?`chat.messages.rewindUnavailable`:`chat.messages.rewindToHere`),className:`chat-confirm-wrap chat-rewind-wrap`,onClick:()=>{S_(e,()=>{qx(),Promise.resolve(t.onRewindMessage?.(l)).then(e=>{e&&t.onFocusComposer?.()})})}})}_&&!p?C(Ns(),_):p&&S({label:Ns(),tooltip:Ns(),onClick:()=>{qx(),p?.click()}}),y&&S({label:B(`chat.messages.forkFromHere`),disabled:w,tooltip:B(w?`chat.messages.forkUnavailable`:`chat.messages.forkFromHere`),onClick:()=>{qx(),t.onForkMessage?.(l)}}),(n.closest(`openclaw-modal-dialog, dialog`)??document.body).appendChild(b);let T={element:b,paneId:t.paneId,listeners:new AbortController};$x=T;let E=b.getBoundingClientRect(),D=e.clientX,O=e.clientY;D+E.width>window.innerWidth&&(D=window.innerWidth-E.width-8),O+E.height>window.innerHeight&&(O=window.innerHeight-E.height-8),b.style.left=`${Math.max(0,D)}px`,b.style.top=`${Math.max(0,O)}px`,x.find(e=>!e.disabled)?.focus(),requestAnimationFrame(()=>{if(!b.isConnected||$x!==T)return;let e=e=>{b.contains(e.target)||qx()},n=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),qx(),t.onFocusComposer?.())},{signal:r}=T.listeners;document.addEventListener(`click`,e,{signal:r}),document.addEventListener(`contextmenu`,e,{capture:!0,signal:r}),document.addEventListener(`keydown`,n,{signal:r})})}var Qx,$x;function eS(){return(eS=e((()=>{q(),G(),Ds(),H(),Ro(),m(),Ci(),ht(),vf(),Tx(),D_(),Lx(),Ji(),Qx=new Map,$x=null})))()}var tS;function nS(){return(nS=e((()=>{vf(),tS=class{constructor(){this.input=null,this.projected=new Map,this.committed=new Map,this.refs=new Map,this.seen=new Set,this.pending=new Set,this.active=new Map,this.enabled=!1,this.refFor=e=>this.refs.get(e)}get projectedKeys(){return this.projected}project(e){if(this.input===e)return this.projected;let t=new Map;for(let n of e)if(n.kind===`group`&&(n.role===`user`||Yd(n)))for(let e of n.messages)t.set(e.key,n.role===`user`?e.key:null);else n.kind===`stream`&&t.set(n.key,null);return this.input=e,this.projected=t,t}sync(e,t){if(e===this.committed&&t===this.enabled)return;let n=[...e.keys()],r=n.findIndex(e=>this.committed.has(e));this.pending.clear();for(let[i,a]of n.entries()){let n=e.get(a);if(n!=null&&(t&&this.enabled&&(this.committed.size===0||r>=0&&i>=r)&&!this.seen.has(n)&&this.pending.add(n),!this.refs.has(a))){let e;this.refs.set(a,t=>{e!==t&&(e&&this.active.get(e)?.(),e=t instanceof HTMLElement?t:void 0),e&&this.pending.delete(n)&&this.enter(e)})}}for(let t of this.refs.keys())e.has(t)||(this.refs.get(t)?.(void 0),this.refs.delete(t));for(let t of e.values())t!==null&&this.seen.add(t);this.committed=e,this.enabled=t}enter(e){if(this.active.get(e)?.(),globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches)return;let t=()=>{this.active.get(e)===t&&(this.active.delete(e),e.removeEventListener(`animationend`,n),e.removeEventListener(`animationcancel`,n),e.classList.remove(`chat-bubble--enter`))},n=n=>{n.target===e&&n.animationName===`chat-message-enter`&&t()};this.active.set(e,t),e.addEventListener(`animationend`,n),e.addEventListener(`animationcancel`,n),e.classList.add(`chat-bubble--enter`)}didCommit(){this.pending.clear()}disconnect(){this.enabled=!1,this.pending.clear();for(let e of this.active.values())e()}}})))()}var rS;function iS(){return(iS=e((()=>{rS=class{constructor(){this.highlight=null}reveal(e,{messageId:t,behavior:n},r){let i=[...e?.querySelectorAll(`.chat-bubble`)??[]].find(e=>(e.dataset.entryId??e.dataset.messageId)===t),a=r.scrollElement;if(!i||!a)return!1;this.clear();let o=i.getBoundingClientRect(),s=a.scrollTop+o.top-a.getBoundingClientRect().top-a.clientTop+(o.height-a.clientHeight)/2;r.scrollToOffset(s,{behavior:n});let c=n===`auto`?1e3:1200;return i.style.setProperty(`--duration`,`${c}ms`),i.classList.add(`chat-bubble--reply-target`),this.highlight={element:i,timer:window.setTimeout(()=>this.clear(),c)},!0}clear(){this.highlight&&=(window.clearTimeout(this.highlight.timer),this.highlight.element.classList.remove(`chat-bubble--reply-target`),this.highlight.element.style.removeProperty(`--duration`),null)}}})))()}function aS(e){let t=ro(e)?.content;return(Array.isArray(t)?t:[]).flatMap(e=>(Hr(e)??[]).filter(e=>e.type===`attachment_error`)).map(({attachment:e})=>`${e.label}: ${B(`chat.attachments.notSent`)}. ${Wu(e.code)}`).join(` `)||null}function oS(e){let t=Ui(e)?.trim();return[aS(e),t].filter(Boolean).join(` `)||null}function sS(e,t=oS){if(e.role.toLowerCase()!==`assistant`)return null;for(let n=e.messages.length-1;n>=0;--n){let r=e.messages[n],i=t(r?.message);if(i)return{key:r?.key??e.key,text:i}}return null}function cS(e){let t=(e,t)=>({key:e,text:oo(t,lS)});for(let n=e.length-1;n>=0;--n){let r=e[n];if(!r)continue;let i=oS;if(r.kind===`agent-run-frame`){if(r.outcome.kind===`completed`){let e=r.outcome.actionOwner,n=e?oS(e.message):null;if(e&&n)return t(e.key,n);i=aS}if(r.outcome.kind===`failed`)continue}for(let e of r.kind===`agent-run-frame`?r.parts.toReversed():[r]){if(e.kind===`stream-run`){if(r.kind===`agent-run-frame`&&r.outcome.kind!==`completed`){let n=e.parts.findLast(e=>e.kind===`stream`&&e.text.trim());if(n?.kind===`stream`)return t(n.key,n.text.trim())}continue}for(let n of Vd(e).toReversed()){if(fd(n)){let e=n.messages.reduce((e,t)=>e+(t.duplicateCount??1),0),r=n.senderSession?.label??n.senderSession?.sessionKey,i=r?B(e===1?`chat.messages.interSessionUpdateFrom`:`chat.messages.interSessionUpdatesFrom`,{count:String(e)})+` `+r:B(e===1?`chat.messages.interSessionUpdate`:`chat.messages.interSessionUpdates`,{count:String(e)});return t(n.messages.at(-1)?.key??n.key,i)}let e=sS(n,i);if(e)return t(e.key,e.text)}}}return null}var lS,uS;function dS(){return(dS=e((()=>{m(),Ci(),Ai(),li(),Jd(),il(),Au(),Ji(),lS=500,uS=class{constructor(){this.text=``}sync(e,t){this.key===void 0||!t?(this.key=e?.key??null,this.text=``):e&&e.key!==this.key&&(this.key=e.key,this.text=e.text)}}})))()}function fS(e,t,n,r,...i){let a=Math.max(0,Math.floor(n/12)-SS),o=Math.min(e,Math.ceil((n+r)/12)+SS),s=new Set;for(let e=a;e<o;e++)s.add(e);for(let e of i){let n=e?t.get(e):void 0;n!==void 0&&s.add(n)}return[...s].toSorted((e,t)=>e-t)}function pS(e,t,n){let r={height:t.clientHeight,...Kl(t)},i={...e,viewport:r},a=!1;if(e.viewport&&r.height!==e.viewport.height){i.followingResize=!0,i.followActive||=n,a||=i.followActive;let o=i.resizeTarget?.atEnd||e.viewport.anchorToEnd,s=Math.max(0,t.scrollHeight-r.height);i.resizeTarget={offset:o?s:Math.min(e.viewport.scrollTop,s),atEnd:o}}if(e.viewport&&r.scrollTop!==e.viewport.scrollTop){let t=i.resizeTarget?.offset;t!==void 0&&(Math.abs(r.scrollTop-t)<=1||r.scrollTop>=Math.min(e.viewport.scrollTop,t)&&r.scrollTop<=Math.max(e.viewport.scrollTop,t))||(i.followingResize&&(i.followActive=!0,a=!0),i.followingResize=!1,i.resizeTarget=void 0)}return{state:i,scheduleLayout:a}}function mS(e){if(!(e instanceof HTMLElement)||typeof getComputedStyle!=`function`)return 0;let t=Number.parseFloat(getComputedStyle(e).paddingTop);return Number.isFinite(t)?t:0}function hS(e,t){return mS(e)+t}function gS(e,t){t!==e.options.scrollMargin&&e.setOptions({...e.options,scrollMargin:t})}function _S(){return{width:typeof window>`u`?0:window.innerWidth,height:typeof window>`u`?0:window.innerHeight}}function vS(e,t){let n=e?.getBoundingClientRect();if(!e||t.scrollElement!==e||!n?.width||!n.height)return!1;let r=[];for(let n of e.querySelectorAll(`.chat-virtual-row`)){let e=t.indexFromElement(n),i=Number.parseFloat(getComputedStyle(n).height);r.push({index:e,height:Number.isFinite(i)?i:n.offsetHeight})}let i=!1;for(let{index:e,height:n}of r){let r=t.options.getItemKey(e),a=t.itemSizeCache.get(r);t.resizeItem(e,n),i||=t.itemSizeCache.get(r)!==a}return i}function yS(e,t,n){if(!t&&n.targetWindow?.ResizeObserver){let t=n.indexFromElement(e);return n.itemSizeCache.get(n.options.getItemKey(t))??n.options.estimateSize(t)}let r=t?.borderBoxSize?.[0]?.blockSize??Dr(e,t,n);if(r===0&&n.scrollElement?.clientHeight===0){let t=n.indexFromElement(e);return n.itemSizeCache.get(n.options.getItemKey(t))??n.options.estimateSize(t)}return r}function bS(e){return e&&e.clientHeight>0?Math.max(0,e.scrollHeight-e.clientHeight):null}function xS(e,t){let n=bS(e),r=t.scrollOffset;return n===null||r===null?`pending`:r>=0&&r<=n?`settled`:n===0?(t.scrollOffset=0,t.scrollToOffset(0),`corrected`):`pending`}var SS,CS;function wS(){return(wS=e((()=>{Ar(),su(),SS=6,CS=class{constructor(e,t){this.host=e,this.inner=t,this.resizeObserver=null,this.viewport=null,this.innerElement=null,this.region=null,e.addController(this)}hostUpdated(){let e=this.host.scrollElement,t=this.inner(),n=e?.closest(`.chat-main__conversation`)??e;if(e===this.viewport&&t===this.innerElement&&n===this.region||(this.hostDisconnected(),!e?.isConnected||t?.parentElement!==e||!n))return;this.viewport=e,this.innerElement=t,this.region=n;let r=t.querySelector(`:scope > .chat-virtual-sizer`)??t,i,a;this.resizeObserver=new ResizeObserver(e=>{let t=!1;for(let o of e)if(o.target===r){let e=o.borderBoxSize?.[0]?.inlineSize??o.contentRect.width;t||=e!==i,i=e}else if(o.target===n){let e=o.borderBoxSize?.[0]?.blockSize??o.contentRect.height;t||=e!==a,a=e}t&&this.sync()}),this.resizeObserver.observe(r,{box:`border-box`}),this.resizeObserver.observe(n,{box:`border-box`})}hostDisconnected(){this.resizeObserver?.disconnect(),this.resizeObserver=null,this.viewport=null,this.innerElement=null,this.region=null}read(){let e=this.host.scrollElement,t=this.inner();if(!e?.isConnected||t?.parentElement!==e)return null;let n=e.getBoundingClientRect().left+e.clientLeft;return{viewport:e,gutter:t.getBoundingClientRect().left-n,columnWidth:t.clientWidth,regionHeight:(e.closest(`.chat-main__conversation`)??e).clientHeight}}sync(e=this.read()){if(!e)return;let{viewport:t,gutter:n,columnWidth:r,regionHeight:i}=e;r>0&&t.style.setProperty(`--chat-transcript-column-width`,`${r}px`),t.style.setProperty(`--chat-position-rail-viewport-height`,`${i}px`),t.toggleAttribute(`data-position-rail-gutter`,n>=68)}}})))()}var TS;function ES(){return(ES=e((()=>{su(),wS(),Bl(),TS=class{constructor(){this.offset=null,this.frame=null,this.rowModelFrame=null,this.maxOffset=null,this.lastOffset=null,this.composerResizePending=null}isResizeAnchor(e){let t=bS(e);return this.offset!==null&&t!==null&&e!==null&&Math.abs(e.scrollTop-this.offset)<=1&&this.offset!==t}recordLayoutCorrection(e,t){this.offset!==null&&Math.abs(this.offset-e)<=1?this.offset=t:this.clear()}scheduleReconcile(e){this.frame===null&&(this.frame=requestAnimationFrame(()=>{this.frame=null,e()}))}cancelReconcile(){this.frame!==null&&(cancelAnimationFrame(this.frame),this.frame=null)}scheduleRowModelReconcile(e){this.rowModelFrame===null&&(this.rowModelFrame=requestAnimationFrame(()=>{this.rowModelFrame=requestAnimationFrame(()=>{this.rowModelFrame=null,e()})}))}disconnect(){this.cancelComposerResize(),this.cancelReconcile(),this.rowModelFrame!==null&&(cancelAnimationFrame(this.rowModelFrame),this.rowModelFrame=null)}invalidateComposerResize(e){this.composerResizePending??={preserveEnd:e&&this.maxOffset!==null&&this.lastOffset!==null&&this.maxOffset-this.lastOffset<=8}}commitComposerResize(e,t,n,r){if(!this.composerResizePending||!t||r)return null;let{preserveEnd:i}=this.composerResizePending;this.composerResizePending=null;let a=this.maxOffset,o=this.lastOffset,s=bS(e);if(!e||s===null)return null;let c=e.scrollTop,l=a!==null&&Math.abs(c-Math.min(a,s))<=8,u=!n&&l&&this.lastOffset!==null&&c>this.lastOffset;(i||l&&(n||u))&&(e.scrollTop=s,this.offset=e.scrollTop),this.maxOffset=s,this.lastOffset=e.scrollTop;let d={before:i&&o!==null&&o>s&&c===s?o:c,after:e.scrollTop,resumeFollow:u};return(a!==s||d.before!==d.after)&&Mu(e,{type:`resize`,viewport:{clientHeight:e.clientHeight,scrollHeight:e.scrollHeight,scrollTop:d.after},...d.before===d.after?{}:{scrollCorrection:{before:d.before,after:d.after}}}),d}cancelComposerResize(){this.composerResizePending=null}get atEnd(){return this.maxOffset!==null&&this.lastOffset!==null&&Math.abs(this.maxOffset-this.lastOffset)<=1}recordViewport(e){return this.maxOffset=bS(e),this.lastOffset=e?.scrollTop??null,this.atEnd}clear(){this.cancelComposerResize(),this.offset=null}capture(e){this.offset=this.recordViewport(e)?this.maxOffset:null}reconcile(e,t,n,r){let i=this.recordViewport(e);if(!t){this.clear();return}if(!n&&e&&this.maxOffset!==null&&this.offset!==null){if(i){this.offset=this.maxOffset;return}if(Math.abs(e.scrollTop-this.offset)>1){this.clear();return}r()}}}})))()}function DS(e,t,n,r){if(n===r)return r;let i=n-r;e.setOptions({...e.options,scrollMargin:hS(t,n)});let a=e.scrollOffset,o=a===null?null:Math.max(0,a+i);return o!==null&&o!==a&&(e.scrollOffset=o,e.scrollToOffset(o)),n}function OS(){return(OS=e((()=>{wS()})))()}function kS(e){let t=e.target,n=(t instanceof Element?t.closest(`button[aria-expanded], button[aria-pressed], summary`):null)?.closest(`.chat-virtual-row`);return n?{row:n,top:n.getBoundingClientRect().top}:null}function AS(e,t,n,r){if(!e)return!0;let i=e.row;if(i.closest(`.sidebar-region__right-runtime`)&&!(t instanceof Element&&t.contains(i)))return!1;if(!i.isConnected||!n?.contains(i))return!0;let a=r.indexFromElement(i),o=r.options;return r.setOptions({...o,anchorTo:`start`}),r.resizeItem(a,i.offsetHeight),r.setOptions(o),n.scrollTop+=i.getBoundingClientRect().top-e.top,!0}function jS(e,t=getComputedStyle(e)){let n=t.boxSizing===`border-box`;return{width:Number.parseFloat(t.width)+(n?0:Number.parseFloat(t.paddingLeft)+Number.parseFloat(t.paddingRight)+Number.parseFloat(t.borderLeftWidth)+Number.parseFloat(t.borderRightWidth)),height:Number.parseFloat(t.height)+(n?0:Number.parseFloat(t.paddingTop)+Number.parseFloat(t.paddingBottom)+Number.parseFloat(t.borderTopWidth)+Number.parseFloat(t.borderBottomWidth))}}var MS,NS,PS;function FS(){return(FS=e((()=>{q(),Sn(),Bl(),MS=class{constructor(e){this.onClamp=e,this.viewport=null,this.observers=[],this.rangeHeights=new WeakMap}get viewportResizePending(){let e=this.viewport,t=e?.parentElement,n=t?.clientHeight;if(!e||!t||!n)return!1;let r=getComputedStyle(t);return n!==e.clientHeight||r.paddingTop!==e.style.paddingTop||r.paddingBottom!==e.style.paddingBottom}connect(e){if(e===this.viewport)return;this.disconnect(),this.viewport=e;let t=e?.parentElement;if(!e||!t)return;let n=n=>{let r=n.find(e=>e.target===t);this.viewport===e&&r&&this.sync(r.borderBoxSize[0])};this.observers=[`content-box`,`border-box`].map(e=>{let r=new ResizeObserver(n);return r.observe(t,{box:e}),r})}sync(e){let t=this.viewport,n=t?.parentElement;if(!t?.isConnected||!n||!e&&n.getClientRects().length===0)return;let r=getComputedStyle(n),i=e?{width:e.inlineSize,height:e.blockSize}:jS(n,r);if(!i.width||!i.height)return;let{paddingTop:a,paddingBottom:o}=r,s=`${i.width}px`,c=`${i.height}px`;if(t.style.width===s&&t.style.height===c&&t.style.paddingTop===a&&t.style.paddingBottom===o)return;let l=t.style.height===``?null:t.scrollTop;t.style.width=s,t.style.height=c,t.style.paddingTop=a,t.style.paddingBottom=o,l!==null&&this.publishResize(l)}commitRange(e,t){let n=this.rangeHeights.get(e);if(n===t)return;let r=e.parentElement===this.viewport&&n!==void 0&&t<n?this.viewport?.scrollTop:void 0;this.rangeHeights.set(e,t),e.style.height=`${t}px`,r!==void 0&&this.publishResize(r)}publishResize(e){let t=this.viewport;if(!t)return;let n=Bu(t),r=n.scrollTop;e!==r&&this.onClamp(e,r),Mu(t,{type:`resize`,viewport:n,...e===r?{}:{scrollCorrection:{before:e,after:r}}})}disconnect(){for(let e of this.observers)e.disconnect();this.observers=[],this.viewport=null}},NS=class extends Gn{render(e,t){return K}update(e,[t,n]){return e.element instanceof HTMLElement&&t.commitRange(e.element,n),K}},PS=En(NS)})))()}function IS({rows:e,renderRow:t,virtualizer:n,overlay:r,header:i,scrollElementRef:a,captureInteractionResize:o,measureRowRefFor:s,measureRows:c,layout:l,headerHeight:u}){let d=n.getVirtualItems();return U`
    <div
      class="chat-thread-inner chat-thread-inner--virtual"
      ?data-measuring-rows=${c}
      ${W(a)}
      ${PS(l,n.getTotalSize()+u)}
      @click=${{handleEvent:o,capture:!0}}
    >
      ${i}
      <div class="chat-virtual-sizer">
        ${r}
        <div
          class="chat-virtual-block"
          style=${Fn({transform:`translateY(${(d[0]?.start??n.options.scrollMargin)-n.options.scrollMargin}px)`})}
        >
          ${J(d,e=>e.key,(n,r)=>{let i=e[n.index];if(!i)return K;let a=d[r-1],o=a&&n.index>a.index+1?n.start-a.end:0;return U`
                ${o>0?U`<div aria-hidden="true" style=${Fn({height:`${o}px`})}></div>`:K}
                <div
                  class="chat-virtual-row ${n.index===0?`chat-virtual-row--first`:``}"
                  style=${Fn({containIntrinsicBlockSize:`${n.size}px`})}
                  data-index=${String(n.index)}
                  data-virtual-row-key=${i.key}
                  ${W(s(i.key))}
                >
                  ${t(i)}
                </div>
              `})}
        </div>
      </div>
    </div>
  `}function LS(){return(LS=e((()=>{q(),G(),Pn(),In(),FS()})))()}function RS(){return{pendingScrollOffset:null,scrollCommand:null,touching:!1,touchScrolling:!1,get touchActive(){return this.touching||this.touchScrolling},renderedScrollState:{atEnd:!1,touchActive:!1},renderState(e){return{atEnd:e,touchActive:this.touchActive}},maintenanceScrollOffset:null,pendingInteractionAnchor:null,syncNativeOffset:null,recordProgrammaticScroll:null}}function zS(e,t){return t!==null&&e.maintenanceScrollOffset!==null&&Math.min(e.maintenanceScrollOffset,bS(t)??0)===t.scrollTop}function BS(e,t){let n=(bS(t)??0)-(t?.scrollTop??0);return zS(e,t)||e.pendingScrollOffset!==null||e.scrollCommand!==null&&n>8}function VS(e,t,{source:n,behavior:r},i,a){n!==`auto`||e.scrollCommand?.target!==`end`?i():e.scrollCommand.behavior===`smooth`&&r!==`smooth`&&a(),e.scrollCommand={behavior:r,target:`end`},t.scrollToEnd({behavior:r});let o=t.scrollElement,s=bS(o);o&&s!==null&&Math.abs(s-o.scrollTop)<=1&&i()}function HS(e,t,n,r){if(!n||e.pendingScrollOffset||e.touchActive)return!1;let i=e.scrollCommand?.target===`end`?e.scrollCommand.behavior:`auto`;r(i);let a=bS(t.scrollElement);return a!==null&&t.scrollToOffset(a,{behavior:i}),!0}function US(e,t,n,r){let i=r.scrollElement,a=i?.scrollTop??0;xr(t,n,r),e.recordProgrammaticScroll?.(a,i?.scrollTop??0,n.behavior===void 0)}function WS(e,t,n){let r=e.getScrollElement(),i=r?.scrollTop??0,a=0,o=null,s,c=new Set,l=e=>Array.from(e.touches).find(e=>c.has(e.identifier))?.clientY,u=e=>{r&&Mu(r,e)},d=t=>{u({type:`input`,event:t,touching:e.state.touching})},f=(n,r,o)=>{let s=n-i;i=r,u({type:`offset`,delta:s,scrolling:t.isScrolling,touching:e.state.touching,programmatic:e.isProgrammaticScroll()}),!o&&(e.state.scrollCommand||e.state.pendingScrollOffset)?e.state.maintenanceScrollOffset=null:n!==r&&(e.state.maintenanceScrollOffset=r,a+=1)},p=(t,n,r)=>{r&&t!==n&&e.onLayoutCorrection(t,n),f(t,n,r)};e.state.recordProgrammaticScroll=p;let m=r?Wl(r,t=>{if(t.type===`composer-input`?e.endAnchor.invalidateComposerResize(e.canFollowEnd()):t.type===`composer-layout`?e.onComposerLayout(t.changed):t.type===`before-resize`&&e.onComposerLayout(!0),t.type===`resize`&&t.scrollCorrection){let{before:e,after:n}=t.scrollCorrection;f(e,n,!0)}}):void 0,h=(t,a)=>{a&&t!==i&&e.state.touchActive&&(e.state.touchScrolling=!0);let o=t-i;if(i=t,e.state.maintenanceScrollOffset!==null){let t=Math.min(e.state.maintenanceScrollOffset,bS(r)??0),n=r?.scrollTop;e.state.maintenanceScrollOffset=n===t?n:null}let s=e.isProgrammaticScroll();a&&o!==0&&!s&&(o>0&&e.canFollowEnd()?e.endAnchor.capture(r):e.endAnchor.clear(),e.prependAnchor.moveWithReader(o)),u({type:`offset`,delta:o,scrolling:a,touching:e.state.touching,programmatic:s}),n(t,a);let c=e.onOffset(),l=e.state.renderedScrollState,d=e.state.renderState(c);(d.atEnd!==l.atEnd||d.touchActive!==l.touchActive)&&e.requestUpdate()},g=()=>{if(!r||r!==e.getScrollElement()||t.scrollElement!==r)return;let n=r.scrollTop;n!==t.scrollOffset&&h(n,t.isScrolling)};e.state.syncNativeOffset=g;let _=n=>{let r=e.state.touchActive;for(let e of n.changedTouches)c.delete(e.identifier);if(e.state.touching=c.size>0,e.state.touching){s=l(n),d(n);return}s=void 0,t.isScrolling||(e.state.touchScrolling=!1),d(n),r!==e.state.touchActive&&e.requestUpdate()},v=()=>{!e.state.touching&&e.state.touchScrolling&&(e.state.touchScrolling=!1,e.requestUpdate())},y=t=>{e.endAnchor.clear(),e.onReaderScroll(t),t&&e.canFollowEnd()&&e.endAnchor.capture(r)},b=n=>{if(!r||r!==e.getScrollElement()||t.scrollElement!==r||n instanceof KeyboardEvent&&!af(n)||n instanceof PointerEvent&&n.target!==r)return;if(n.type===`touchstart`&&n instanceof TouchEvent){for(let e of n.changedTouches)e.target instanceof Node&&r.contains(e.target)&&c.add(e.identifier);e.state.touching=c.size>0,s=l(n)}e.endAnchor.cancelComposerResize(),e.state.pendingInteractionAnchor=null,e.state.maintenanceScrollOffset=null,d(n),(n.type!==`touchstart`||e.state.scrollCommand||e.state.pendingScrollOffset)&&e.cancelScroll(),g();let i=n instanceof WheelEvent&&n.deltaY>0||n instanceof KeyboardEvent&&([`ArrowDown`,`PageDown`,`End`].includes(n.key)||n.key===` `&&!n.shiftKey);y(i)},x=e=>{let t=l(e);s!==void 0&&t!==void 0&&t<s&&y(!0),s=t,d(e)},S=()=>e.onComposerLayout(!0),C=new AbortController,w={passive:!0,signal:C.signal};r?.addEventListener(`scroll`,S,{...w,capture:!0}),r?.addEventListener(`touchmove`,x,w);for(let e of[`wheel`,`touchstart`,`keydown`,`pointerdown`])r?.addEventListener(e,b,w);r?.addEventListener(`scrollend`,v,w),r?.addEventListener(`touchend`,_,w),r?.addEventListener(`touchcancel`,_,w);let T=Cr(t,(n,i)=>{if(r===e.getScrollElement()){if(h(n,i),i&&e.state.maintenanceScrollOffset!==null){let t=a;o!==null&&cancelAnimationFrame(o),o=requestAnimationFrame(()=>{o=null,t===a&&(e.state.maintenanceScrollOffset=null)})}i||v(),!i&&e.prependAnchor.hasPrepend&&e.requestUpdate(),Math.abs((bS(r)??0)-(r?.scrollTop??0))<=+!i&&r&&e.state.scrollCommand?.target===`end`&&(e.state.scrollCommand.behavior===`smooth`?e.cancelScroll():(e.state.scrollCommand=null,t.scrollToOffset(r.scrollTop,{behavior:`instant`})),e.endAnchor.capture(r))}});return()=>{o!==null&&cancelAnimationFrame(o),e.state.syncNativeOffset===g&&(e.state.syncNativeOffset=null),e.state.recordProgrammaticScroll===p&&(e.state.recordProgrammaticScroll=null,e.state.maintenanceScrollOffset=null),T?.(),m?.(),c.clear(),e.state.touching=!1,e.state.touchScrolling=!1,C.abort()}}function GS(){return(GS=e((()=>{Ar(),gf(),su(),wS(),Bl()})))()}function KS(e,t,n,r,i){if(!e||n.length===0)return null;let a=bS(e);if(a!==null&&Math.abs(a-e.scrollTop)<=1)return n.findLast(e=>r.has(e))??null;let o=t.getVirtualItemForOffset(e.scrollTop+e.clientHeight*.5);if(!o)return null;let s=null;for(let e of n){let t=r.get(e),n=t?i.get(t):void 0;if(n!==void 0){if(n>o.index)return s??e;s=e}}return s}function qS(){return(qS=e((()=>{wS()})))()}function JS(e,t,n){let r=br(e);for(let i of n){let n=i===null?void 0:t.get(i);n!==void 0&&n>=0&&n<e.count&&!r.includes(n)&&r.push(n)}return r.toSorted((e,t)=>e-t)}function YS(e,t,n){let r=new Map(t.map((e,t)=>[e,t])),i=new Pr({...e.options,initialMeasurementsCache:e.takeSnapshot(),initialOffset:e.scrollOffset??e.options.initialOffset,initialRect:e.scrollRect??e.options.initialRect,onChange:()=>void 0,rangeExtractor:e=>JS(e,r,[n])});return i.scrollElement=e.scrollElement,i.setOptions({...i.options,count:t.length,getItemKey:e=>t[e]??`missing:${e}`}),new Set(i.getVirtualIndexes().flatMap(e=>t[e]??[]))}function XS(e,t){if(!(t instanceof Element)||!e?.contains(t))return null;let n=t.closest(`.chat-virtual-row[data-virtual-row-key]`);return n&&e.contains(n)&&n.dataset.virtualRowKey||null}function ZS(){return(ZS=e((()=>{Ar()})))()}function QS(e,t){if(!e)return null;let n=e.getBoundingClientRect();for(let r of e.querySelectorAll(`.chat-bubble[data-message-id]`)){let e=r.dataset.messageId,i=r.getBoundingClientRect();if(e&&t.has(e)&&i.bottom>n.top&&i.top<n.bottom)return{messageKey:e,rowKey:r.closest(`.chat-virtual-row`)?.dataset.virtualRowKey??null,top:i.top}}return null}function $S(e,t,n){if(!e||!t)return!1;let r=[...t.querySelectorAll(`.chat-bubble[data-message-id]`)].find(t=>t.dataset.messageId===e.messageKey);if(!r)return!1;let i=r.getBoundingClientRect().top-e.top;if(Math.abs(i)<=1)return!1;let a=Math.max(0,t.scrollHeight-t.clientHeight),o=Math.max(0,Math.min(a,t.scrollTop+i));return Math.abs(o-t.scrollTop)<=1?!1:(n.scrollToOffset(o,{behavior:`instant`}),!0)}var eC;function tC(){return(tC=e((()=>{ZS(),eC=class{constructor(){this.messageKeys=new Set,this.committedMessageRows=new Map,this.pending=null}get messageKey(){return this.pending?.messageKey??null}get rowKey(){return this.pending?.rowKey??null}extractRange(e,t,n){let r=this.messageKey;return JS(e,t,[n,(r===null?null:this.committedMessageRows.get(r))??this.rowKey])}get hasPrepend(){return!!(this.firstMessageKey&&this.firstMessageKey!==this.messageKeys.keys().next().value&&this.messageKeys.has(this.firstMessageKey))}capture(e,t,n=!1){let r=this.pending&&this.messageKeys.has(this.pending.messageKey)?this.pending:null,i=!t&&(this.hasPrepend||n)?r??QS(e,this.messageKeys):null;i&&(this.pending={...i,measured:!1}),this.firstMessageKey=this.messageKeys.keys().next().value}update(e,t,n){let r=this.pending;if(!r)return!1;let i=n(),a=$S(r,e,t);return r.measured&&!i&&!a&&(this.pending=null),r.measured=!0,!0}moveWithReader(e){this.pending&&(this.pending.top-=e)}clear(){this.pending=null}reset(){this.clear(),this.firstMessageKey=void 0,this.messageKeys=new Set,this.committedMessageRows=new Map}}})))()}var nC;function rC(){return(rC=e((()=>{nC=class{constructor(e,t){this.virtualizer=e,this.callbacks=t,this.refs=new Map,this.pruneQueued=!1,this.pendingRows=new Map,this.measureQueued=!1}queueMountedRow(e,t){this.pendingRows.set(e,t),!this.measureQueued&&(this.measureQueued=!0,queueMicrotask(()=>{let e=this.pendingRows;this.pendingRows=new Map,this.measureQueued=!1;for(let[t,n]of e)t.isConnected&&t.dataset.virtualRowKey===n&&this.callbacks.isCurrentRow(t,n)&&this.virtualizer.measureElement(t)}))}forKey(e){let t=this.refs.get(e);return t||(t=t=>{if(t instanceof HTMLElement){this.callbacks.onMount(e),this.queueMountedRow(t,e);return}this.pruneQueued||(this.pruneQueued=!0,queueMicrotask(()=>{this.pruneQueued=!1,this.virtualizer.measureElement(null)}))},this.refs.set(e,t)),t}retainKeys(e){for(let t of this.refs.keys())e.has(t)||this.refs.delete(t)}clear(){this.refs.clear(),this.pendingRows.clear()}}})))()}var iC,aC;function oC(){return(oC=e((()=>{iC=2,aC=class{constructor(e,t,n,r){this.host=e,this.virtualizer=t,this.callbacks=n,this.measureConnectedRows=r,this.presented=!1,this.renderedRows=!1,this.overscanFrame=null,this.measureFrame=null,e.addController(this)}prepare(e=!1){let t=this.host.connected&&(this.callbacks.visuallyPresented?.()??!0);(t!==this.presented||e&&this.virtualizer.options.overscan!==6)&&(this.presented=t,this.overscanFrame!==null&&(cancelAnimationFrame(this.overscanFrame),this.overscanFrame=null),t&&this.virtualizer.setOptions({...this.virtualizer.options,overscan:e?6:iC}))}didRenderRows(e){this.renderedRows=e>0}hostUpdated(){this.prepare(this.renderedRows&&!this.presented);let e=this.renderedRows;this.renderedRows=!1;let t=this.host.scrollElement;e&&this.presented&&t&&this.virtualizer.options.overscan===iC&&this.overscanFrame===null&&(this.overscanFrame=requestAnimationFrame(()=>{this.overscanFrame=null,this.prepare(),this.presented&&t===this.host.scrollElement&&(this.virtualizer.setOptions({...this.virtualizer.options,overscan:6}),this.host.requestUpdate())}))}queueRowMeasure(){if(this.measureFrame!==null)return;let e=this.host.scrollElement;this.measureFrame=requestAnimationFrame(()=>{this.measureFrame=null,e===this.host.scrollElement&&this.measureConnectedRows()})}hostDisconnected(){this.overscanFrame!==null&&(cancelAnimationFrame(this.overscanFrame),this.overscanFrame=null),this.measureFrame!==null&&(cancelAnimationFrame(this.measureFrame),this.measureFrame=null),this.presented=!1,this.renderedRows=!1,this.virtualizer.setOptions({...this.virtualizer.options,overscan:6})}}})))()}function sC(e){let t=e.offsetState.pendingScrollOffset;if(!t||!e.isConnected())return;if(e.isContentReady()&&e.getRowCount()===0){lC(e,0);return}let n=bS(e.getScrollElement());if(n===null){t.observedMaxOffset=void 0,t.stableFrames=0,t.zeroMaxFrames=0;return}if(n===0&&t.offset>0){t.observedMaxOffset=void 0,t.stableFrames=0,e.isContentReady()&&(t.zeroMaxFrames>=60?lC(e,0):cC(e));return}if(t.zeroMaxFrames=0,n<t.offset&&(t.observedMaxOffset!==n&&(t.observedMaxOffset=n,t.stableFrames=0),t.stableFrames<=12)){cC(e);return}let r=Math.min(t.offset,n),i=e.getScrollElement();i&&(i.scrollTop=r),e.virtualizer.scrollToOffset(r);let a=e.getScrollElement()?.scrollTop;a==null?cC(e):lC(e,a)}function cC(e){e.isConnected()&&e.getPendingScrollFrame()===null&&e.setPendingScrollFrame(requestAnimationFrame(()=>{e.setPendingScrollFrame(null);let t=e.offsetState.pendingScrollOffset;if(e.isConnected()&&t){let n=bS(e.getScrollElement());n===0&&t.offset>0&&e.isContentReady()?t.zeroMaxFrames+=1:n!==null&&n>0&&n<t.offset&&n===t.observedMaxOffset&&(t.stableFrames+=1),e.requestUpdate()}}))}function lC(e,t){let n=e.offsetState.pendingScrollOffset;if(e.offsetState.pendingScrollOffset=null,!n)return;let r=bS(e.getScrollElement());n.onSettled?.({scrollTop:t,anchorToEnd:r===null?e.isContentReady()&&e.getRowCount()===0:r-t<=8}),e.onReaderScroll()}function uC(){return(uC=e((()=>{su(),wS(),oC()})))()}function dC(e,t){return e!=null&&Math.abs(e-t)<.5}var fC;function pC(){return(pC=e((()=>{Ar(),wS(),FS(),fC=class{constructor(e){this.owner=e,this.observedWidth=null,this.observedHeight=null,this.syncRect=null,this.observe=(e,t)=>{let n=!1,r=r=>{if(e.scrollElement!==this.owner.getScrollElement()||!r.width||!r.height)return;let i=hS(e.scrollElement,this.owner.getHeaderHeight());if(n&&i===e.options.scrollMargin&&dC(this.observedWidth,r.width)&&dC(this.observedHeight,r.height)&&dC(e.scrollRect?.width,r.width)&&dC(e.scrollRect?.height,r.height))return;n=!0;let a=this.owner.positionRail.read();this.owner.commitComposerResize();let o=this.observedWidth!==null&&!dC(this.observedWidth,r.width),s=this.observedHeight!==null&&!dC(this.observedHeight,r.height);this.observedWidth=r.width,this.observedHeight=r.height,gS(e,i),t(r),o&&(this.owner.measureConnectedRows(),this.owner.queueRowMeasure()),this.owner.positionRail.sync(a),(o||s)&&(this.owner.onViewportResize(),this.owner.requestUpdate())},i=()=>{let t=e.scrollElement;if(t?.getClientRects().length){let e=jS(t);r({width:Math.round(e.width),height:Math.round(e.height)})}};this.syncRect=i;let a=Sr(e,r);return()=>{a?.(),this.syncRect===i&&(this.syncRect=null)}}}recordMeasuredWidth(e){this.observedWidth=Math.round(e)}sync(){this.syncRect?.()}}})))()}var mC;function hC(){return(hC=e((()=>{Ar(),q(),pn(),ab(),nS(),iS(),dS(),ES(),wS(),OS(),FS(),LS(),GS(),qS(),tC(),ZS(),rC(),uC(),oC(),pC(),mC=class{get scrollElement(){let e=this.threadInnerElement?.parentElement;return this.connected&&e instanceof HTMLDivElement&&e.isConnected?e:null}queueScrollElementAttach(){this.scrollElementAttachQueued||(this.scrollElementAttachQueued=!0,queueMicrotask(()=>{this.scrollElementAttachQueued=!1;let e=this.virtualizer;this.connected&&e.scrollElement!==this.scrollElement&&(this.layout.connect(this.scrollElement),this.updateVirtualizer(),this.host.requestUpdate())}))}measureConnectedRows(){return this.offsetState.syncNativeOffset?.(),vS(this.scrollElement,this.virtualizer)}constructor(e,t=null,n,r={}){this.host=e,this.callbacks=r,this.offsetState=RS(),this.entryAnimations=new tS,this.expandedAssistantMessages=new Map,this.controllers=new Set,this.threadInnerElement=null,this.connected=!1,this.contentReady=!1,this.headerHeight=0,this.appliedHeaderHeight=0,this.endAnchor=new TS,this.recordEndLayoutCorrection=(e,t)=>{this.endAnchor.recordLayoutCorrection(e,t),this.scheduleEndReconcile()},this.layout=new MS(this.recordEndLayoutCorrection),this.followEnd=()=>this.scrollToEnd({source:`auto`,behavior:`auto`}),this.pendingScrollFrame=null,this.messageReveal=new rS,this.scrollElementRef=e=>{let t=e instanceof HTMLDivElement?e:null;t!==this.threadInnerElement&&(this.threadInnerElement=t,this.queueScrollElementAttach())},this.scrollElementAttachQueued=!1,this.captureInteractionResize=e=>{let t=kS(e);t&&(this.endAnchor.clear(),this.prependAnchor.clear(),this.offsetState.pendingInteractionAnchor=t,queueMicrotask(()=>this.offsetState.pendingInteractionAnchor===t&&this.host.requestUpdate()))},this.handleGeometryCommit=e=>{if(this.reconcileInteractionResize(e.target),this.positionRail.sync(),e instanceof CustomEvent&&e.detail?.widthChanged===!1)return;let t=this.scrollElement?.getBoundingClientRect();t&&t.width!==0&&t.height!==0&&(this.viewportRect.recordMeasuredWidth(t.width),this.measureConnectedRows())},this.rowKeys=[],this.rowIndexesByKey=new Map,this.messageRowKeysById=new Map,this.prependAnchor=new eC,this.candidateMessageRowKeysById=new Map,this.candidateMessageRowsByKey=new Map,this.renderPreviousRows=null,this.focusedRowKey=null,this.announcement=new uS,this.mcpAppUnmountGate=new sn(this),this.requestUpdate=()=>this.host.requestUpdate(),this.positionRail=new CS(this,()=>this.threadInnerElement),this.viewportRect=new fC({getScrollElement:()=>this.scrollElement,getHeaderHeight:()=>this.appliedHeaderHeight,positionRail:this.positionRail,commitComposerResize:()=>this.commitComposerResize(!0),measureConnectedRows:()=>this.measureConnectedRows(),queueRowMeasure:()=>this.presentation.queueRowMeasure(),onViewportResize:()=>this.callbacks.onViewportResize?.(),requestUpdate:()=>this.host.requestUpdate()}),this.implicitEndAnchorPending=t===null,this.virtualizer=new Pr({onChange:()=>this.host.requestUpdate(),count:0,getScrollElement:()=>this.scrollElement,estimateSize:()=>120,getItemKey:()=>``,initialRect:_S(),initialOffset:t??2**53-1,anchorTo:`end`,followOnAppend:!1,scrollToFn:(e,t,n)=>US(this.offsetState,e,t,n),observeElementRect:this.viewportRect.observe,observeElementOffset:(e,t)=>WS({state:this.offsetState,getScrollElement:()=>this.scrollElement,prependAnchor:this.prependAnchor,endAnchor:this.endAnchor,canFollowEnd:()=>this.canAutoFollow(),isProgrammaticScroll:()=>this.isProgrammaticScroll,cancelScroll:()=>this.cancelScroll(),onLayoutCorrection:this.recordEndLayoutCorrection,requestUpdate:()=>this.host.requestUpdate(),onOffset:()=>this.endAnchor.recordViewport(this.scrollElement),onComposerLayout:e=>this.commitComposerResize(e),onReaderScroll:e=>{this.implicitEndAnchorPending=!1,this.callbacks.onReaderScroll?.(e)}},e,t),measureElement:yS,rangeExtractor:e=>this.prependAnchor.extractRange(e,this.rowIndexesByKey,this.focusedRowKey),scrollEndThreshold:-1,overscan:6});let{_didMount:i,_willUpdate:a}=this.virtualizer;this.updateVirtualizer=a;let o;this.addController({hostConnected:()=>{o=i()},hostUpdated:this.updateVirtualizer,hostDisconnected:()=>o?.()}),this.presentation=new aC(this,this.virtualizer,r,()=>this.measureConnectedRows()),this.rowRefs=new nC(this.virtualizer,{isCurrentRow:(e,t)=>this.threadInnerElement?.contains(e)===!0&&this.rowIndexesByKey.has(t),onMount:e=>{this.offsetState.scrollCommand?.target===`message`&&this.messageRowKeysById.get(this.offsetState.scrollCommand.messageId)===e&&queueMicrotask(()=>this.completeMessageReveal())}}),this.scrollRestoreHost={offsetState:this.offsetState,virtualizer:this.virtualizer,getScrollElement:()=>this.scrollElement,isContentReady:()=>this.contentReady,getRowCount:()=>this.rowKeys.length,isConnected:()=>this.connected,getPendingScrollFrame:()=>this.pendingScrollFrame,setPendingScrollFrame:e=>{this.pendingScrollFrame=e},requestUpdate:this.requestUpdate,onReaderScroll:()=>this.callbacks.onReaderScroll?.()},t!==null&&(this.offsetState.pendingScrollOffset={offset:t,stableFrames:0,zeroMaxFrames:0,onSettled:n})}get updateComplete(){return this.host.updateComplete}get liveAnnouncementText(){return this.announcement.text}addController(e){this.controllers.add(e)}removeController(e){this.controllers.delete(e)}connect(){if(!this.connected){this.connected=!0,this.host instanceof HTMLElement&&this.host.addEventListener(ib,this.handleGeometryCommit);for(let e of this.controllers)e.hostConnected?.();this.offsetState.pendingScrollOffset&&this.host.requestUpdate()}}syncViewportGeometry(){this.layout.sync(),this.viewportRect.sync()}commitComposerResize(e){this.endAnchor.commitComposerResize(this.scrollElement,e,this.canAutoFollow(),this.offsetState.pendingScrollOffset!==null||this.offsetState.pendingInteractionAnchor!==null||this.offsetState.scrollCommand!==null&&this.offsetState.scrollCommand.target!==`end`||this.offsetState.touchActive)?.resumeFollow&&this.callbacks.onReaderScroll?.(!0)}update(){this.layout.connect(this.scrollElement),this.entryAnimations.didCommit();for(let e of this.controllers)e.hostUpdated?.();let e=this.offsetState.pendingInteractionAnchor!==null;this.reconcileInteractionResize(),!this.offsetState.touchActive&&this.prependAnchor.update(this.scrollElement,this.virtualizer,()=>this.measureConnectedRows())&&(this.offsetState.syncNativeOffset?.(),this.host.requestUpdate()),sC(this.scrollRestoreHost),e?this.endAnchor.cancelReconcile():this.scheduleEndReconcile()}scheduleEndReconcile(){this.connected&&this.endAnchor.scheduleReconcile(()=>this.reconcileEndAnchor())}reconcileEndAnchor(){this.connected&&!this.offsetState.pendingInteractionAnchor&&(this.commitComposerResize(!0),this.reconcileImplicitEndAnchor(),this.endAnchor.reconcile(this.scrollElement,this.canAutoFollow(),this.offsetState.pendingScrollOffset!==null||this.offsetState.touchActive,this.followEnd))}disconnect(){if(this.layout.disconnect(),this.endAnchor.disconnect(),this.entryAnimations.disconnect(),this.expandedAssistantMessages.clear(),this.expandedAssistantMessages=new Map,this.offsetState.scrollCommand=null,this.offsetState.maintenanceScrollOffset=null,this.prependAnchor.clear(),this.offsetState.touching=!1,this.offsetState.touchScrolling=!1,this.renderPreviousRows=null,this.messageReveal.clear(),this.pendingScrollFrame!==null&&(cancelAnimationFrame(this.pendingScrollFrame),this.pendingScrollFrame=null),this.threadInnerElement=null,this.connected){this.connected=!1,this.host instanceof HTMLElement&&this.host.removeEventListener(ib,this.handleGeometryCommit);for(let e of this.controllers)e.hostDisconnected?.()}}dispose(){this.disconnect(),this.rowRefs.clear(),this.rowKeys=[],this.rowIndexesByKey.clear(),this.messageRowKeysById=new Map,this.prependAnchor.reset(),this.focusedRowKey=null,this.offsetState.pendingScrollOffset=null}render(e,t,n,r,i=K,a=null,o=!1){this.presentation.prepare(o||this.focusedRowKey!==null||this.prependAnchor.messageKey!==null||this.offsetState.pendingInteractionAnchor!==null||this.offsetState.scrollCommand!==null),this.offsetState.renderedScrollState=this.offsetState.renderState(this.scrollElement!==null&&this.endAnchor.atEnd);let s=this.virtualizer;return this.prependAnchor.hasPrepend&&(this.offsetState.touchActive||s.isScrolling)&&!this.offsetState.scrollCommand&&!this.offsetState.pendingScrollOffset&&this.renderPreviousRows?this.renderPreviousRows():this.renderCommittedRows({rows:e,renderRow:t,announcement:n,announce:r,overlay:i,header:a,messageRows:this.candidateMessageRowKeysById,renderKeyRows:this.candidateMessageRowsByKey,entryKeys:this.entryAnimations.projectedKeys},!0)}renderCommittedRows(e,t){let{rows:n,renderRow:r,announcement:i,announce:a,overlay:o,header:s,messageRows:c,renderKeyRows:l}=e,u=n.length!==this.rowKeys.length||n.some((e,t)=>e.key!==this.rowKeys[t]),d=u?n.map(e=>e.key):this.rowKeys,f=this.virtualizer,p=u?d:f.getVirtualItems().flatMap(({index:e})=>n[e]?.key??[]);return this.mcpAppUnmountGate.render(u?d:JSON.stringify(p),()=>(this.presentation.didRenderRows(n.length),this.entryAnimations.sync(e.entryKeys,a&&!this.offsetState.pendingScrollOffset),this.messageRowKeysById=c,this.prependAnchor.committedMessageRows=l,this.renderPreviousRows=()=>this.renderCommittedRows(e,!1),t&&this.prependAnchor.capture(this.scrollElement,!!(this.offsetState.pendingScrollOffset||this.offsetState.scrollCommand||this.offsetState.pendingInteractionAnchor),u&&!this.canAutoFollow()),this.headerHeight=s?.height??0,u?this.syncRows(d):this.appliedHeaderHeight=DS(f,this.scrollElement,this.headerHeight,this.appliedHeaderHeight),this.announcement.sync(i,a),IS({layout:this.layout,headerHeight:this.headerHeight,rows:n,renderRow:r,virtualizer:f,overlay:o,header:s?.template??K,scrollElementRef:this.scrollElementRef,captureInteractionResize:this.captureInteractionResize,measureRowRefFor:e=>this.rowRefs.forKey(e),measureRows:this.prependAnchor.messageKey!==null||this.offsetState.scrollCommand?.target===`message`||this.offsetState.scrollCommand?.target===`index`})),()=>{let e=new Set([...this.threadInnerElement?.querySelectorAll(`mcp-app-view`)??[]].flatMap(e=>e.closest(`.chat-virtual-row`)??[]));if(e.size===0)return[];let t=u?YS(f,d,this.focusedRowKey):new Set(p);return[...e].filter(e=>!t.has(e.dataset.virtualRowKey??``))})}get isMaintenanceScroll(){return this.endAnchor.isResizeAnchor(this.scrollElement)&&this.canAutoFollow()||zS(this.offsetState,this.scrollElement)}get isProgrammaticScroll(){return BS(this.offsetState,this.scrollElement)}canAutoFollow(){let e=this.offsetState.scrollCommand;return(!e||e.target===`end`)&&(this.callbacks.canFollowEnd?.()??!0)}scrollToEnd({source:e=`manual`,behavior:t=`auto`}={}){return e===`auto`&&(this.offsetState.pendingScrollOffset||!this.canAutoFollow())?!1:(VS(this.offsetState,this.virtualizer,{source:e,behavior:t},()=>this.cancelScroll(),()=>this.presentation.queueRowMeasure()),(t!==`smooth`||this.endAnchor.recordViewport(this.scrollElement))&&this.endAnchor.capture(this.scrollElement),!0)}cancelScroll(){if(this.endAnchor.clear(),this.prependAnchor.clear(),this.offsetState.scrollCommand===null&&!this.offsetState.pendingScrollOffset)return;this.offsetState.scrollCommand?.behavior===`smooth`&&this.presentation.queueRowMeasure(),this.offsetState.scrollCommand=null,this.offsetState.pendingScrollOffset=null,this.pendingScrollFrame!==null&&(cancelAnimationFrame(this.pendingScrollFrame),this.pendingScrollFrame=null);let e=this.scrollElement;e&&this.virtualizer.scrollToOffset(e.scrollTop,{behavior:`instant`})}syncMessageRows(e,t){this.candidateMessageRowKeysById=e,this.candidateMessageRowsByKey=t,this.prependAnchor.messageKeys=t}activeMessageId(e){return KS(this.scrollElement,this.virtualizer,e,this.messageRowKeysById,this.rowIndexesByKey)}revealMessage(e){let t=this.messageRowKeysById.get(e),n=t?this.rowIndexesByKey.get(t):void 0;return n!==void 0&&(this.cancelScroll(),this.offsetState.scrollCommand={behavior:cl(),target:`message`,messageId:e},this.virtualizer.scrollToIndex(n,{align:`center`}),this.host.requestUpdate(),this.host.updateComplete.then(()=>this.completeMessageReveal()),!0)}completeMessageReveal(){let e=this.offsetState.scrollCommand;if(e?.target!==`message`)return;let t=this.virtualizer;if(this.messageReveal.reveal(this.threadInnerElement,e,t)){this.offsetState.scrollCommand={behavior:e.behavior,target:`index`};return}let n=this.messageRowKeysById.get(e.messageId),r=n?this.rowIndexesByKey.get(n):void 0;r!==void 0&&(t.scrollToIndex(r,{align:`center`}),this.host.requestUpdate())}setContentReady(e){this.contentReady=e}restoreScrollOffset(e,t){this.cancelScroll(),this.implicitEndAnchorPending=!1,this.offsetState.pendingScrollOffset={offset:e,stableFrames:0,zeroMaxFrames:0,onSettled:t},this.connected&&this.host.requestUpdate()}handleFocusIn(e){this.focusedRowKey=XS(this.scrollElement,e.target)}handleFocusOut(e){this.focusedRowKey=XS(this.scrollElement,e.relatedTarget)}reconcileInteractionResize(e){let t=this.virtualizer;AS(this.offsetState.pendingInteractionAnchor,e,this.scrollElement,t)&&(this.offsetState.pendingInteractionAnchor=null)}syncRows(e){let t=this.virtualizer,n=this.endAnchor.recordViewport(this.scrollElement);this.offsetState.pendingInteractionAnchor===null&&this.canAutoFollow()&&n&&this.endAnchor.scheduleRowModelReconcile(()=>{HS(this.offsetState,t,this.canAutoFollow(),e=>this.scrollToEnd({source:`auto`,behavior:e}))||this.reconcileEndAnchor()}),this.rowKeys=Object.freeze(e);let r=new Map(this.rowKeys.map((e,t)=>[e,t]));this.rowIndexesByKey=r,this.rowRefs.retainKeys(r),this.appliedHeaderHeight=this.headerHeight,t.setOptions({...t.options,count:e.length,getItemKey:t=>e[t]??`missing:${t}`,followOnAppend:!1,rangeExtractor:e=>this.prependAnchor.extractRange(e,r,this.focusedRowKey),scrollMargin:hS(this.scrollElement,this.headerHeight)})}reconcileImplicitEndAnchor(){if(!this.implicitEndAnchorPending||!this.connected||!this.contentReady)return;let e=xS(this.scrollElement,this.virtualizer);this.implicitEndAnchorPending=e===`pending`,e!==`pending`&&this.canAutoFollow()&&this.endAnchor.capture(this.scrollElement),e===`corrected`&&this.host.requestUpdate()}}})))()}var gC;function _C(){return(_C=e((()=>{I(),su(),hC(),gC=class{constructor(e,t,n={}){this.host=e,this.scrollPaneId=t,this.callbacks=n,this.activeSessionKey=null,this.sessionVirtualizer=null,this.connected=!1,e.addController(this)}get renderedSessionKey(){return this.activeSessionKey}renderSession(e,t){if(!this.sessionVirtualizer||this.activeSessionKey===null||!ye(this.activeSessionKey,e)){this.sessionVirtualizer?.dispose();let t=this.scrollPaneId(),n=Ql(t,e),r=n?.anchorToEnd?null:n?.scrollTop??null;this.activeSessionKey=e,this.sessionVirtualizer=new mC(this.host,r,n=>qu(t,e,n),this.callbacks),this.connected&&this.sessionVirtualizer.connect()}return t(this.sessionVirtualizer)}get isMaintenanceScroll(){return this.sessionVirtualizer?.isMaintenanceScroll??!1}get isProgrammaticScroll(){return this.sessionVirtualizer?.isProgrammaticScroll??!1}scrollToEnd(e={}){return this.sessionVirtualizer?.scrollToEnd(e)??!1}scrollToOffset(e,t){this.sessionVirtualizer?.restoreScrollOffset(e,t)}revealMessage(e){return this.sessionVirtualizer?.revealMessage(e)??!1}cancelScroll(){this.sessionVirtualizer?.cancelScroll()}get scrollElement(){return this.sessionVirtualizer?.scrollElement??null}syncViewportGeometry(){this.sessionVirtualizer?.syncViewportGeometry()}hostConnected(){this.connected=!0,this.sessionVirtualizer?.connect()}hostUpdated(){this.sessionVirtualizer?.update()}hostDisconnected(){this.connected=!1,this.sessionVirtualizer?.disconnect()}}})))()}function vC(e){return[`Selected text:\n${e.text}`,...e.comment.trim()?[`User comment:\n${e.comment}`]:[],[`Source session: ${e.sessionKey}`,...e.messageId?[`Source message: ${e.messageId}`]:[],...e.entryId?[`Source entry: ${e.entryId}`]:[],`Selected text UTF-16 length: ${e.text.length}`,`DOM text UTF-16 range: [${e.start}, ${e.end})`].join(`
`)].join(`

`)}function yC(e,t,n){let r={id:Vc(),mimeType:`text/plain`,fileName:`selection-comment.txt`,selectionAnnotation:{...e}};if(t.selectionContextOnly)return r;let i=vC(e),a=new File([i],r.fileName,{type:r.mimeType});return uc([a],t.attachmentLimits,n).length===0?null:pc({attachment:{...r,sizeBytes:a.size},dataUrl:ll(i),file:a})}function bC(){return(bC=e((()=>{$c(),Cu(),ic()})))()}function xC(e){return e===`draft`?V.pencil:e===`shared`?V.users:V.lock}function SC(){return U`
    <div
      class="chat-pane__sharing-members-loading"
      role="status"
      aria-busy="true"
      aria-label=${B(`common.loading`)}
    >
      ${Array.from({length:3},()=>U`
          <div class="chat-pane__sharing-member-skeleton" aria-hidden="true">
            <span class="skeleton chat-pane__sharing-member-skeleton-icon"></span>
            <span class="skeleton chat-pane__sharing-member-skeleton-label"></span>
          </div>
        `)}
    </div>
  `}function CC(e,t){if(t?.startsWith(`public:`)){if(!e.session||!wC(e.session)||e.state?.loading||!e.state?.result)return;t===`public:copy`&&e.state.result.publicShare?e.onCopyPublicLink?.():e.publicShareDisabledReason||(t===`public:enable`?e.onPublicShareChange?.(!0):t===`public:disable`&&e.onPublicShareChange?.(!1));return}let n=new Set(e.state?.result?.members.map(e=>e.identityId)??[]);if(t?.startsWith(`visibility:`)){let n=t.slice(11);!e.visibilityDisabledReason&&n!==(e.session?.visibility??`shared`)&&e.onVisibilityChange(n);return}if(!t?.startsWith(`member:`))return;let r=t.slice(7),i=!n.has(r);(i?e.memberAddDisabledReason:e.memberRemoveDisabledReason)||e.onMemberChange(r,i)}function wC(e){return e.sharingRole===`admin`||e.sharingRole===`owner`}function TC(e){if(!e.state?.result?.publicShare)return K;let t=B(`chat.sessionSharing.worldReadable`);return U`<span
    class="chat-pane__public-share-indicator"
    role="status"
    aria-label=${t}
    title=${t}
  >
    <span aria-hidden="true">${V.globe}</span>
    <span>${B(`chat.sessionSharing.publicIndicator`)}</span>
  </span>`}function EC(e,t=!1){let n=e.session;if(!n)return K;let r=n.visibility??`shared`,i=wC(n),a=e.state?.result,o=a?.publicShare,s=a?.owner??n.owner?.actor,c=Yo(s?.identity?.type===`profile`?s.identity.id:void 0,e.personActivity,s?.label);if(!i)return r===`draft`?U`${e.showOwner&&s?Ko(As(s,`header`,`owned`,e.ownerViewing),c):K}<span class="chat-pane__draft-indicator" title=${B(`chat.sessionSharing.draft`)}
            >${xC(`draft`)}</span
          >`:K;let l=new Set(a?.members.map(e=>e.identityId)??[]),u=a?.identities.filter(e=>e.id!==a.owner?.id)??[],d=a?.allowedVisibilities??e.allowedVisibilities??[r],f=r===`draft`&&d.includes(`shared`),p=e.membersAvailable!==!1,m=d.filter(e=>!f||e!==`shared`),h=p&&m.length+u.length+ +!!f+ +!!s>12,g=U`
    ${f?U`<wa-dropdown-item
              value="visibility:shared"
              class="session-menu__item chat-pane__publish-draft"
              ?disabled=${!!e.visibilityDisabledReason}
              title=${e.visibilityDisabledReason??K}
            >
              <span class="session-menu__text">${B(`chat.sessionSharing.publishDraft`)}</span>
              <span slot="details" aria-hidden="true">${V.users}</span>
            </wa-dropdown-item>
            <div class="session-menu__separator" role="separator"></div>`:K}
    <div class="chat-pane__sharing-title chat-pane__sharing-visibility-title">
      ${B(`chat.sessionSharing.visibility`)}
    </div>
    ${m.map(t=>{let n=t===r;return U`
        <wa-dropdown-item
          class="session-menu__item chat-pane__sharing-visibility-item"
          value=${`visibility:${t}`}
          role="menuitemradio"
          aria-checked=${String(n)}
          ${W(e=>Us(e,n))}
          ?disabled=${!!e.visibilityDisabledReason}
          title=${e.visibilityDisabledReason??K}
        >
          <span slot="icon" class="session-menu__icon" aria-hidden="true"
            >${xC(t)}</span
          >
          <span class="session-menu__text">${B(DC[t])}</span>
          ${n?U`<span slot="details" class="session-menu__check" aria-hidden="true"
                  >${V.check}</span
                >`:K}
        </wa-dropdown-item>
      `})}
    ${e.onPublicShareChange?U`
            <div class="session-menu__separator" role="separator"></div>
            <div class="chat-pane__sharing-title">${B(`chat.sessionSharing.publicAccess`)}</div>
            <div class="chat-pane__sharing-status">
              ${B(e.state?.loading||!a?`common.loading`:o?`chat.sessionSharing.worldReadable`:`chat.sessionSharing.notPublic`)}
            </div>
            ${o?U`<wa-dropdown-item
                    class="session-menu__item"
                    value="public:copy"
                    ?disabled=${!!e.state?.loading}
                    >${B(`chat.sessionSharing.copyPublicLink`)}</wa-dropdown-item
                  >`:K}
            <wa-dropdown-item
              class="session-menu__item"
              value=${o?`public:disable`:`public:enable`}
              ?disabled=${!!(e.publicShareDisabledReason||e.state?.loading||!a)}
              title=${e.publicShareDisabledReason??K}
            >
              ${B(o?`chat.sessionSharing.disablePublicAccess`:`chat.sessionSharing.enablePublicAccess`)}
            </wa-dropdown-item>
          `:K}
    ${s?U`
            <div class="chat-pane__sharing-title chat-pane__sharing-owner-title">
              ${B(`chat.sessionSharing.owner`)}
            </div>
            <div class="chat-pane__sharing-owner">
              <span class="chat-pane__sharing-member-icon" aria-hidden="true">
                ${s.type===`human`?zo(As(s,`header`,`owned`,e.ownerViewing),c):V.bot}
              </span>
              ${Uo(s.label??s.id??B(`chat.sessionSharing.owner`),c,`session-menu__text`)}
            </div>
          `:K}
    ${p?U`
            <div class="chat-pane__sharing-title chat-pane__sharing-members-title">
              ${B(`chat.sessionSharing.members`)}
            </div>
            ${e.state?.loading?SC():u.length>0?Rs(u.map(t=>({text:[t.label,t.id,t.type].join(` `),render:()=>{let n=l.has(t.id)?e.memberRemoveDisabledReason:e.memberAddDisabledReason;return U`
                            <wa-dropdown-item
                              class="session-menu__item chat-pane__sharing-member"
                              value=${`member:${t.id}`}
                              ?disabled=${!!n}
                              title=${n??K}
                            >
                              <span
                                slot="icon"
                                class="chat-pane__sharing-member-icon"
                                aria-hidden="true"
                              >
                                ${t.type===`human`?As(t,`header`):V.bot}
                              </span>
                              <span
                                class="session-menu__text chat-pane__sharing-member-label"
                                title=${n?K:t.label??t.id}
                                >${t.label??t.id}</span
                              >
                              ${l.has(t.id)?U`<span
                                      slot="details"
                                      class="session-menu__check"
                                      aria-label=${B(`chat.sessionSharing.selected`)}
                                      >${V.check}</span
                                    >`:K}
                            </wa-dropdown-item>
                          `}})),a):U`<div class="chat-pane__sharing-status">
                      ${B(`chat.sessionSharing.noPeople`)}
                    </div>`}
          `:K}
    ${e.state?.error?U`<div class="chat-pane__sharing-status chat-pane__sharing-status--error" role="alert">
            ${e.state.error}
          </div>`:K}
  `;return t?g:U`
    ${TC(e)}
    <wa-dropdown
      class="chat-pane__sharing-menu ${h?`chat-pane__sharing-menu--capped`:``}"
      placement="bottom-end"
      @keydown=${Oo}
      @wa-show=${()=>{e.openDisabledReason||e.onOpen()}}
      @wa-select=${t=>{CC(e,t.detail.item.value)}}
    >
      <button
        slot="trigger"
        class="btn btn--ghost btn--icon chat-icon-btn chat-pane__sharing-trigger"
        type="button"
        aria-label=${B(`chat.sessionSharing.menu`)}
        ?disabled=${!!e.openDisabledReason}
        title=${e.openDisabledReason??B(`chat.sessionSharing.current`,{visibility:B(DC[r])})}
      >
        ${xC(r)}
      </button>
      ${g}
    </wa-dropdown>
  `}var DC;function OC(){return(OC=e((()=>{q(),G(),H(),Jo(),Ss(),Fo(),gs(),m(),DC={shared:`chat.sessionSharing.shared`,"read-only":`chat.sessionSharing.readOnly`,suggest:`chat.sessionSharing.suggest`,draft:`chat.sessionSharing.draft`}})))()}function kC(e){if(e.status===`in_progress`)return`running`;switch(e.conclusion){case`success`:return`passed`;case`failure`:case`timed_out`:case`action_required`:case`startup_failure`:return`failed`;case`skipped`:case`neutral`:case`cancelled`:return`skipped`;default:return`queued`}}function AC(e){let[t,n]=FC[e],r=B(t);return U`<span
    class="chat-ci__status"
    data-state=${e}
    role="img"
    aria-label=${r}
    title=${r}
    >${n}</span
  >`}function jC(e,t){let n=e.startedAt?Date.parse(e.startedAt):NaN,r=e.completedAt?Date.parse(e.completedAt):t?Date.now():NaN;return Number.isFinite(n)&&Number.isFinite(r)&&r>=n?la(r-n)??``:``}var MC,NC,PC,FC,IC;function LC(){return(LC=e((()=>{q(),Rn(),Pn(),Qt(),H(),m(),Ff(),oa(),Ge(),Te(),R(),Tf(),MC=3e4,NC=Wt(Un`<circle cx="12" cy="12" r="10" /><path d="M8 12h8" />`),PC={failed:0,running:1,passed:2,skipped:3},FC={passed:[`chat.pullRequests.checksPassed`,V.check],failed:[`chat.pullRequests.checksFailed`,V.circleX],running:[`chat.pullRequests.checksRunning`,V.loader],skipped:[`chat.pullRequests.checksSkipped`,NC],queued:[`chat.pullRequests.checksQueued`,V.clock]},IC=class extends s{constructor(...e){super(...e),this.sessionKey=``,this.presented=!0,this.loading=!1,this.error=null,this.disclosure=null,this.connection=n({client:null,phase:`stopped`}),this.target=``,this.requestGeneration=0,this.retryAt=0,this.expandedJobs=new Map,this.expansionInitialized=!1,this.handleToggle=e=>{e.target===this.disclosure&&this.handleVisibility()},this.handleVisibility=()=>{this.visible?this.load():this.cancelRequest()}}connectedCallback(){super.connectedCallback(),this.disclosure=this.closest(`.chat-pr__checks`),this.disclosure?.addEventListener(`toggle`,this.handleToggle),this.ownerDocument.addEventListener(`visibilitychange`,this.handleVisibility),this.requestUpdate()}disconnectedCallback(){this.disclosure?.removeEventListener(`toggle`,this.handleToggle),this.ownerDocument.removeEventListener(`visibilitychange`,this.handleVisibility),this.stopGateway?.(),this.stopGateway=void 0,this.boundGateway=void 0,this.connection.transition({client:null,phase:`stopped`}),this.reset(),super.disconnectedCallback()}targetKey(){let e=this.pullRequest;return JSON.stringify([this.sessionKey,e?.owner,e?.repo,e?.number,e?.headSha])}get visible(){return this.isConnected&&this.presented&&this.disclosure?.open===!0&&this.ownerDocument.visibilityState!==`hidden`}willUpdate(e){let t=this.targetKey();t!==this.target&&(e.has(`sessionKey`)&&e.get(`sessionKey`)&&this.disclosure&&(this.disclosure.open=!1),this.target=t,this.reset()),this.boundGateway!==this.gateway&&(this.stopGateway?.(),this.boundGateway=this.gateway,this.connection.transition(this.gateway?.snapshot??{client:null,phase:`stopped`}),this.reset(),this.stopGateway=this.gateway?.subscribe(e=>{this.connection.transition(e)&&(this.reset(),this.load())})),this.visible||this.cancelRequest()}updated(e){(e.has(`pullRequest`)||e.has(`gateway`)||e.has(`sessionKey`)||e.has(`presented`))&&this.visible&&!this.loading&&(e.has(`presented`)||!this.result&&!this.error)&&this.load()}cancelRequest(){this.requestGeneration+=1,this.requestController?.abort(),this.requestController=void 0,clearTimeout(this.refreshTimer),this.refreshTimer=void 0,this.loading=!1}reset(){this.cancelRequest(),this.result=void 0,this.error=null,this.retryAt=0,this.expandedJobs.clear(),this.expansionInitialized=!1}async load(){if(!this.visible||this.loading)return;if(Date.now()<this.retryAt){this.scheduleRetryAvailability();return}let e=this.pullRequest,t=this.gateway,n=this.connection.capture();if(!n||!t||!e?.headSha||!this.sessionKey){this.error=B(`chat.pullRequests.checksUnavailable`);return}clearTimeout(this.refreshTimer);let r=++this.requestGeneration,i=this.targetKey(),a=n.client.connectionGeneration,o=t.connectionRevision,s=new AbortController;this.requestController=s,this.loading=!0,this.error=null;let c=()=>this.visible&&r===this.requestGeneration&&i===this.targetKey()&&t===this.gateway&&t.connectionRevision===o&&t.snapshot.client===n.client&&t.snapshot.phase===`connected`&&this.connection.isCurrent(n)&&n.client.connectionGeneration===a;try{let t=await n.client.request(`controlUi.sessionPullRequests.checks`,{sessionKey:this.sessionKey,owner:e.owner,repo:e.repo,number:e.number,headSha:e.headSha},{signal:s.signal});if(!c())return;if(t.owner.toLowerCase()!==e.owner.toLowerCase()||t.repo.toLowerCase()!==e.repo.toLowerCase()||t.number!==e.number||t.headSha!==e.headSha){this.result=void 0,this.error=B(`chat.pullRequests.checksUnavailable`);return}if(this.result=t,this.retryAt=Date.now()+Math.max(0,t.retryAfterMs??(t.rateLimited?6e4:0)),!this.expansionInitialized&&t.checks.length>0){this.expansionInitialized=!0;let e=t.checks.toSorted((e,t)=>PC[e.state]-PC[t.state]).find(e=>e.state===`failed`||e.state===`running`);e&&this.expandedJobs.set(e.id,!0)}let r=new Set(t.checks.map(e=>e.id));for(let e of this.expandedJobs.keys())r.has(e)||this.expandedJobs.delete(e);this.retryAt>Date.now()?this.scheduleRetryAvailability():t.status===`ready`&&(this.refreshTimer=setTimeout(()=>void this.load(),MC))}catch(e){c()&&(this.result=void 0,this.error=z(e,B(`chat.pullRequests.checksUnavailable`)))}finally{c()&&(this.loading=!1,this.requestController=void 0)}}scheduleRetryAvailability(){clearTimeout(this.refreshTimer),this.refreshTimer=setTimeout(()=>this.requestUpdate(),Math.min(2147483647,Math.max(0,this.retryAt-Date.now())))}renderNotice(){let e=this.result,t=e?.rateLimited,n=e?.status===`stale`,r=this.error||e?.status===`unavailable`,i=!!e?.error;if(this.loading&&!e)return U`<div class="chat-ci__notice" role="status">
        ${B(`chat.pullRequests.checksLoading`)}
      </div>`;if(!t&&!n&&!r&&!i)return K;let a=Math.max(0,this.retryAt-Date.now());return U`<div
      class="chat-ci__notice"
      role="status"
      data-state=${t?`rate-limited`:`unavailable`}
    >
      <span
        >${this.error??B(t?`chat.pullRequests.checksRateLimited`:n?`chat.pullRequests.checksStale`:`chat.pullRequests.checksUnavailable`)}
        ${a>0?B(`chat.pullRequests.checksRetryAfter`,{duration:la(a)??``}):K}
      </span>
      <button
        class="chat-ci__retry"
        type="button"
        ?disabled=${this.loading||a>0}
        @click=${()=>void this.load()}
      >
        ${B(`common.retry`)}
      </button>
    </div>`}renderJob(e){let t=e.detailsUrl?Ve(e.detailsUrl,this.ownerDocument.baseURI):null,n=e.state===`running`&&e.status!==`in_progress`?`queued`:e.state;return U`<details
      class="chat-ci__job"
      data-state=${e.state}
      data-check-id=${e.id}
      .open=${this.expandedJobs.get(e.id)??!1}
      @toggle=${t=>{t.target instanceof HTMLDetailsElement&&t.target===t.currentTarget&&(this.expandedJobs.set(e.id,t.target.open),this.requestUpdate())}}
    >
      <summary class="chat-ci__job-summary">
        ${AC(n)}
        <span class="chat-ci__name">${e.name}</span>
        <span class="chat-ci__duration">${jC(e,n===`running`)}</span>
        <span class="chat-ci__chevron" aria-hidden="true">${V.chevronDown}</span>
      </summary>
      <div class="chat-ci__job-detail">
        ${e.steps?.length?U`<ol class="chat-ci__steps" role="list">
                ${J(e.steps.toSorted((e,t)=>e.number-t.number),e=>e.number,e=>{let t=kC(e);return U`<li class="chat-ci__step" data-state=${t} value=${e.number}>
                      ${AC(t)}<span class="chat-ci__name">${e.name}</span>
                      <span class="chat-ci__duration">${jC(e,t===`running`)}</span>
                    </li>`})}
              </ol>`:U`<div class="chat-ci__empty-steps">
                ${e.source===`check`?B(`chat.pullRequests.checksNoSteps`):B(`chat.pullRequests.checksStepsUnavailable`)}
              </div>`}
        ${t?U`<a
                class="chat-ci__job-link"
                href=${t}
                target="_blank"
                rel="noopener noreferrer"
                >${e.source===`actions`?B(`chat.pullRequests.openJob`):B(`chat.pullRequests.openCheck`)}${V.externalLink}</a
              >`:K}
      </div>
    </details>`}render(){let e=this.result?.checks??[],t=e.filter(e=>e.state!==`skipped`).toSorted((e,t)=>PC[e.state]-PC[t.state]),n=e.filter(e=>e.state===`skipped`);return U`${this.renderNotice()}
      <div class="chat-ci__jobs" aria-busy=${this.loading?`true`:`false`}>
        ${J(t,e=>e.id,e=>this.renderJob(e))}
        ${n.length?U`<details class="chat-ci__skipped">
                <summary>
                  ${AC(`skipped`)}<span
                    >${B(`chat.pullRequests.checksSkippedCount`,{count:String(n.length)})}</span
                  >
                  <span class="chat-ci__chevron" aria-hidden="true">${V.chevronDown}</span>
                </summary>
                ${J(n,e=>e.id,e=>this.renderJob(e))}
              </details>`:K}
        ${this.result?.status===`ready`&&!e.length&&!this.result.rateLimited&&!this.result.error?U`<div class="chat-ci__notice">${B(`chat.pullRequests.checksEmpty`)}</div>`:K}
      </div>`}},Q([X({attribute:!1})],IC.prototype,`pullRequest`,void 0),Q([X({attribute:!1})],IC.prototype,`gateway`,void 0),Q([X({attribute:!1})],IC.prototype,`sessionKey`,void 0),Q([X({type:Boolean})],IC.prototype,`presented`,void 0),Q([Y()],IC.prototype,`loading`,void 0),Q([Y()],IC.prototype,`result`,void 0),Q([Y()],IC.prototype,`error`,void 0),customElements.get(`openclaw-chat-ci-details`)||customElements.define(`openclaw-chat-ci-details`,IC)})))()}function RC(e,t){if(!e)return K;let n=Hi(e),r=e.state.autoDisabled,i=e.enabled&&!n&&t.schedulerEnabled&&e.state.nextRunAtMs;return U`
    <div class="chat-ci__automation-job">
      <div class="chat-ci__automation-job-status">
        <span>
          ${n?B(e.enabled?`chat.pullRequests.automationRunning`:`chat.pullRequests.automationStopping`):r?B(r.reason===`schedule-errors`?`chat.pullRequests.automationScheduleDisabled`:`chat.pullRequests.automationFailureDisabled`,{count:String(r.consecutiveErrors)}):i?B(`chat.pullRequests.automationNextCheck`,{time:N(i)}):B(e.enabled?`chat.pullRequests.automationEnabled`:`chat.pullRequests.automationOff`)}
        </span>
        <a href=${jt(`cron`,t.basePath)+`?job=`+encodeURIComponent(e.id)}
          >${B(`chat.pullRequests.automationOpenJob`)}</a
        >
      </div>
      ${e.state.lastError?U`<div class="chat-ci__automation-job-error">
              ${B(`chat.pullRequests.automationLastError`,{error:e.state.lastError})}
            </div>`:K}
    </div>
  `}function zC(e){let t=e.disabled||e.loading||e.saving,n=e.loading?B(`chat.pullRequests.automationLoading`):e.saving?B(`chat.pullRequests.automationSaving`):e.disabled?e.disabledReason??B(`chat.pullRequests.automationUnavailable`):``;return U`
    <div class="chat-ci__automation">
      <fieldset
        class="chat-ci__automation-options"
        aria-label=${B(`chat.pullRequests.automationLabel`)}
        ?disabled=${t}
      >
        ${BC.map(([t,n])=>U`
            <div class="chat-ci__automation-row">
              <label class="chat-ci__automation-option">
                <input
                  class="chat-ci__automation-checkbox"
                  type="checkbox"
                  name=${t}
                  .checked=${Nn(e.options[t])}
                  @change=${n=>{if(n.currentTarget instanceof HTMLInputElement){let r=n.currentTarget.checked;n.currentTarget.checked=e.options[t],e.onChange(t,r)}}}
                />
                <span class="chat-ci__automation-label">${B(n)}</span>
              </label>
              ${RC(e.jobs?.[t],e)}
            </div>
          `)}
      </fieldset>
      ${e.schedulerEnabled===!1?U`<p class="chat-ci__automation-warning" role="status">
              ${B(`chat.pullRequests.automationSchedulerDisabled`)}
            </p>`:K}
      <div class="chat-ci__automation-status" role="status">${n}</div>
      ${e.error?U`
              <div class="chat-ci__automation-error">
                <span role="alert">${e.error}</span>
                <button
                  class="chat-ci__automation-retry"
                  type="button"
                  ?disabled=${e.loading||e.saving||e.retryDisabled}
                  @click=${e.onRetry}
                >
                  ${B(`chat.pullRequests.automationRetry`)}
                </button>
              </div>
            `:K}
    </div>
  `}var BC;function VC(){return(VC=e((()=>{q(),zn(),on(),m(),Ff(),de(),Tf(),BC=[[`autoFix`,`chat.pullRequests.automationAutoFix`],[`autoMerge`,`chat.pullRequests.automationAutoMerge`],[`autoArchive`,`chat.pullRequests.automationAutoArchive`]]})))()}var HC;function UC(){return(UC=e((()=>{za(),Rn(),m(),Ge(),Br(),Bd(),R(),VC(),HC=class extends s{constructor(...e){super(...e),this.sessionKey=``,this.sessionId=``,this.basePath=``,this.presented=!0,this.jobs={},this.loading=!1,this.saving=!1,this.loaded=!1,this.error=null,this.disclosure=null,this.connection=n({client:null,phase:`stopped`}),this.connectionRevision=-1,this.connectionGeneration=-1,this.authKey=``,this.targetKey=``,this.version=0,this.readGeneration=0,this.refreshPending=!0,this.handleToggle=e=>{e.target===this.disclosure&&this.handleVisibility()},this.handleVisibility=()=>{this.visible||this.cancelRead(),this.invalidate()}}connectedCallback(){super.connectedCallback(),this.disclosure=this.closest(`.chat-pr__checks`),this.disclosure?.addEventListener(`toggle`,this.handleToggle),this.ownerDocument.addEventListener(`visibilitychange`,this.handleVisibility),this.requestUpdate()}disconnectedCallback(){this.disclosure?.removeEventListener(`toggle`,this.handleToggle),this.ownerDocument.removeEventListener(`visibilitychange`,this.handleVisibility),this.stopGateway?.(),this.stopEvents?.(),this.stopGateway=void 0,this.stopEvents=void 0,this.boundGateway=void 0,this.connection.transition({client:null,phase:`stopped`}),this.reset(),super.disconnectedCallback()}get visible(){return this.isConnected&&this.presented&&this.disclosure?.open===!0&&this.ownerDocument.visibilityState!==`hidden`}automationTarget(){let e=this.pullRequest,t=$a(this.sessionKey)?.agentId;return!e||!t||!this.sessionId.trim()?null:{sessionKey:this.sessionKey,sessionId:this.sessionId,agentId:t,owner:e.owner.toLowerCase(),repo:e.repo.toLowerCase(),number:e.number}}currentTargetKey(){return JSON.stringify([this.sessionKey,this.sessionId,this.automationTarget()])}canRead(){return[`cron.list`,`cron.status`].every(e=>Rr(this.gateway?.snapshot,e,`operator.read`,{requireAdvertisement:!1}))}canManage(){return[`cron.add`,`cron.update`].every(e=>Rr(this.gateway?.snapshot,e,`operator.admin`,{requireAdvertisement:!1}))}willUpdate(e){let t=this.currentTargetKey();if(t!==this.targetKey&&((e.get(`sessionKey`)||e.get(`sessionId`))&&this.disclosure&&(this.disclosure.open=!1),this.targetKey=t,this.reset()),this.boundGateway!==this.gateway){this.stopGateway?.(),this.stopEvents?.(),this.boundGateway=this.gateway,this.reset();let e=this.gateway;this.stopGateway=e?.subscribe(()=>{this.gateway===e&&this.boundGateway===e&&(this.syncConnection(),this.requestUpdate())}),this.stopEvents=e?.subscribeEvents(t=>{this.gateway===e&&this.boundGateway===e&&(t.event===`cron`||t.event===`config.changed`)&&this.invalidate()})}this.syncConnection(),e.has(`presented`)&&(this.refreshPending=!0),this.visible||this.cancelRead()}updated(){this.refreshPending&&this.visible&&!this.loading&&!this.saving&&this.load()}syncConnection(){let e=this.gateway,t=e?.snapshot??{client:null,phase:`stopped`},n=this.connection.transition(t),r=e?.connectionRevision??-1,i=t.client?.connectionGeneration??-1,a=JSON.stringify(e?.snapshot.hello?.auth??null);(n||r!==this.connectionRevision||i!==this.connectionGeneration||a!==this.authKey)&&(this.connectionRevision=r,this.connectionGeneration=i,this.authKey=a,this.connection.invalidate(),this.reset())}cancelRead(){this.readController&&(this.readGeneration+=1,this.readController.abort(),this.readController=void 0,this.loading=!1,this.refreshPending=!0)}reset(){this.version+=1,this.cancelRead(),this.jobs={},this.loaded=!1,this.saving=!1,this.schedulerEnabled=void 0,this.error=null,this.refreshPending=!0}invalidate(){this.refreshPending=!0,this.requestUpdate()}capture(){let e=this.gateway,t=this.connection.capture(),n=this.automationTarget();if(!e||!t||!n)return null;let r=this.version,i=this.currentTargetKey(),a=e.connectionRevision,o=t.client.connectionGeneration,s=JSON.stringify(e.snapshot.hello?.auth??null);return{client:t.client,target:n,current:()=>this.isConnected&&r===this.version&&i===this.currentTargetKey()&&i===this.targetKey&&e===this.gateway&&e===this.boundGateway&&a===this.connectionRevision&&o===this.connectionGeneration&&s===this.authKey&&e.connectionRevision===a&&e.snapshot.client===t.client&&e.snapshot.phase===`connected`&&this.connection.isCurrent(t)&&t.client.connectionGeneration===o&&JSON.stringify(e.snapshot.hello?.auth??null)===s}}async load(){if(!this.visible||this.loading||this.saving)return;this.refreshPending=!1;let e=this.capture();if(!e||!e.current()||!this.canRead()){this.requestUpdate();return}let t=new AbortController,n=++this.readGeneration;this.readController=t,this.loading=!0,this.error=null;let r=()=>e.current()&&this.visible&&n===this.readGeneration;try{let[n,i]=await Promise.all([Fd(e.client,e.target,t.signal),e.client.request(`cron.status`,{},{signal:t.signal})]);r()&&(this.jobs=n,this.schedulerEnabled=i.enabled,this.loaded=!0)}catch(e){r()&&(this.loaded=!1,this.error=z(e,B(`chat.pullRequests.automationLoadFailed`)))}finally{r()&&(this.loading=!1,this.readController=void 0,this.requestUpdate())}}async setEnabled(e,t){if(!this.visible||!this.loaded||this.loading||this.saving||this.refreshPending||!this.canRead()||!this.canManage())return;let n=this.capture();if(n&&n.current()){this.saving=!0,this.error=null;try{let r=await Id(n.client,n.target,e,t,this.jobs[e]);if(!n.current())return;this.visible&&(this.jobs={...this.jobs,[e]:r}),this.refreshPending=!0}catch(e){n.current()&&(this.loaded=!1,this.error=z(e,B(`chat.pullRequests.automationSaveFailed`)))}finally{n.current()&&(this.saving=!1,this.requestUpdate())}}}render(){let e=this.automationTarget()?this.canRead()?this.canManage()?this.loaded?void 0:B(`chat.pullRequests.automationRefreshRequired`):B(`chat.pullRequests.automationAdminRequired`):B(`chat.pullRequests.automationReadRequired`):B(`chat.pullRequests.automationSessionRequired`);return zC({options:{autoFix:this.jobs.autoFix?.enabled===!0,autoMerge:this.jobs.autoMerge?.enabled===!0,autoArchive:this.jobs.autoArchive?.enabled===!0},jobs:this.jobs,basePath:this.basePath,schedulerEnabled:this.schedulerEnabled,loading:this.loading,saving:this.saving,error:this.error,disabled:!!e||this.refreshPending,disabledReason:e,retryDisabled:!this.automationTarget()||!this.canRead(),onChange:(e,t)=>void this.setEnabled(e,t),onRetry:()=>this.invalidate()})}},Q([X({attribute:!1})],HC.prototype,`gateway`,void 0),Q([X({attribute:!1})],HC.prototype,`pullRequest`,void 0),Q([X({attribute:!1})],HC.prototype,`sessionKey`,void 0),Q([X({attribute:!1})],HC.prototype,`sessionId`,void 0),Q([X({attribute:!1})],HC.prototype,`basePath`,void 0),Q([X({type:Boolean})],HC.prototype,`presented`,void 0),Q([Y()],HC.prototype,`jobs`,void 0),Q([Y()],HC.prototype,`loading`,void 0),Q([Y()],HC.prototype,`saving`,void 0),Q([Y()],HC.prototype,`loaded`,void 0),Q([Y()],HC.prototype,`schedulerEnabled`,void 0),Q([Y()],HC.prototype,`error`,void 0),customElements.get(`openclaw-chat-ci-automation`)||customElements.define(`openclaw-chat-ci-automation`,HC)})))()}function WC(e){return B(e===`personal`?`githubPublication.personal`:e===`agent-override`?`githubPublication.agent`:`githubPublication.system`)}function GC(e){if(e.result?.status===`published`)return U`<a
        class="chat-pr__create"
        href=${e.result.url}
        target="_blank"
        rel="noopener noreferrer"
      >
        ${B(`chat.pullRequests.openPublishedPr`)}
      </a>
      ${e.onNewAction?U`<button
              class="chat-pr__dismiss"
              type="button"
              aria-label=${B(`common.dismiss`)}
              ?disabled=${e.activity!==null}
              @click=${e.onNewAction}
            >
              ${V.x}
            </button>`:K}`;let t=Ld(e.options),n=e.options?.shared;if(e.result||e.locked||!e.onSelect||!n||!t)return qC(e);let r=[{source:`shared`,account:n,label:WC(n.source)},{source:`personal`,account:t.account,label:WC(`personal`)}];return U`
    ${qC(e)}
    <wa-dropdown
      class="chat-pr__accounts"
      placement="top-end"
      aria-label=${B(`githubPublication.account`)}
      @wa-select=${t=>{let n=t.detail.item.value;(n===`shared`||n===`personal`)&&e.onSelect?.(n)}}
    >
      <button
        slot="trigger"
        class="btn btn--ghost btn--icon chat-icon-btn"
        type="button"
        aria-label=${B(`githubPublication.account`)}
        ?disabled=${e.activity!==null}
      >
        ${V.chevronDown}
      </button>
      ${r.map(({source:r,account:i,label:a})=>{let o=e.selection?.source===r;return U`
          <wa-dropdown-item
            class="session-menu__item"
            value=${r}
            role="menuitemradio"
            aria-checked=${String(o)}
            ?disabled=${e.activity!==null}
            ${W(e=>Us(e,o))}
          >
            <span class="session-menu__text"
              >@${i.login}${n.login===t.account.login?U` · ${a}`:K}</span
            >
            <span slot="details" class="session-menu__icon" aria-hidden="true">
              ${o?V.check:K}
            </span>
          </wa-dropdown-item>
        `})}
    </wa-dropdown>
  `}function KC(e){return e.selection??(e.options?.shared?null:Ld(e.options))}function qC(e){let{result:t,activity:n}=e,r=KC(e),i=n!==null,a=B(n===`read`?`common.loading`:`chat.pullRequests.publishing`),o;return o=t?.status===`failed`?{click:e.onNewAction,label:B(e.canPublishShared||e.canPublishPersonal?`githubPublication.newAction`:`common.dismiss`),disabled:i}:t?.status===`needs_confirmation`?{click:e.onConfirm,label:B(`githubPublication.confirm`),disabled:i||!e.personalReady}:t?.status===`publishing`||t?.status===`requested`?{click:e.onRefresh,label:i?a:B(`githubPublication.check`),disabled:i}:{click:e.onPublish,disabled:i||!r||r.source===`personal`&&!e.personalReady,label:i?a:e.locked?B(`chat.pullRequests.retryPublication`):!e.selection&&r?.source===`personal`?B(`githubPublication.publishAs`,{account:r.account.login}):B(`chat.pullRequests.publishPr`)},o.click||t?.status===`publishing`||t?.status===`requested`?U`<button
        class="chat-pr__create"
        type="button"
        ?disabled=${o.disabled}
        @click=${o.click}
      >
        ${o.label}
      </button>`:K}function JC(e){let{selection:t,result:n}=e,r=n?n.publisher:Cd(t);return r?U`<span data-publication-account>
        ${B(`githubPublication.publishAs`,{account:r.login})} ·
        ${WC(r.source)}
      </span>`:K}function YC(e){return U`<button class="btn btn--sm" type="button" @click=${e.onRefresh}>
    ${B(`githubPublication.refresh`)}
  </button>`}function XC(e){let{result:t,confirmation:n,activity:r,locked:i,error:a,options:o}=e,s=KC(e);if(t?.status===`published`&&!a)return K;let c=r!==null,l=s?.source===`personal`&&!e.personalReady,u=o&&!o.shared&&!Ld(o)&&!s&&!t&&!i&&!c&&(e.canPublishShared||e.canPublishPersonal);return!t&&!n&&!a&&!i&&!l&&!u?K:U`<div class="chat-pr__publication-outcome" data-state=${t?.status??`selection`}>
    ${t||i||a?JC(e):K}
    ${u?U`<span>${B(o.personal===null?`githubPublication.unidentified`:`githubPublication.connectHelp`)}</span>`:K}
    ${t&&t.status!==`published`?U`<span role="status">${t.message}</span>`:K}
    ${t?.status===`failed`?U`<span>${t.nextAction}</span>`:K}
    ${a?U`<span role="alert">${a}</span>`:K}
    ${i&&!t&&!c?U`<span>${B(`githubPublication.unknown`)}</span>`:K}
    ${n?U`<div>
            <div>
              ${B(`githubPublication.target`,{repository:n.repository,base:n.baseBranch})}
            </div>
            <div>
              ${B(`githubPublication.pushTarget`,{repository:n.pushRepository,branch:n.branch})}
            </div>
            <details>
              <summary>${B(`githubPublication.snapshot`)}</summary>
              <div>
                ${B(`githubPublication.head`)}: <code>${n.sourceHeadCommit}</code>
              </div>
              <div>
                ${B(`githubPublication.index`)}: <code>${n.sourceIndexTree}</code>
              </div>
              <div>
                ${B(`githubPublication.workspace`)}: <code>${n.workspaceTree}</code>
              </div>
            </details>
          </div>`:K}
    ${t?.effect?U`<span
            >${B(t.effect.status===`dispatched`?`githubPublication.dispatched`:`githubPublication.observed`,{kind:B(t.effect.kind===`push`?`githubPublication.effectPush`:`githubPublication.effectPullRequest`)})}
            ${t.effect.headCommit?U`<code>${t.effect.headCommit}</code>`:K}
            ${t.effect.url?U`<a href=${t.effect.url} target="_blank" rel="noopener noreferrer"
                    >${B(`githubPublication.effectLink`)}</a
                  >`:K}
          </span>`:K}
    ${l?U`<span>${B(`githubPublication.personalWorkspace`)}</span>`:K}
    ${!c&&(a||t&&!e.onConfirm&&t.status!==`published`)?YC(e):K}
  </div>`}function ZC(){return(ZC=e((()=>{uo(),q(),G(),H(),gs(),m(),jd()})))()}function QC(e){return`${e.owner}/${e.repo}#${e.number}`.toLowerCase()}function $C(e){try{let t=JSON.parse(e.getItem(uw)??`{}`);if(!Xa(t))return{};let n={};for(let[e,r]of Object.entries(t))Array.isArray(r)&&(n[e]=r.filter(e=>typeof e==`string`));return n}catch{return{}}}function ew(e){let t=P();return!t||!e?new Set:new Set($C(t)[e]??[])}function tw(e,t){let n=P();if(!n||!e)return new Set([QC(t)]);let r=$C(n),i=new Set(r[e]??[]);i.add(QC(t)),delete r[e],r[e]=[...i];let a=Object.keys(r).slice(0,-20);for(let e of a)delete r[e];try{n.setItem(uw,JSON.stringify(r))}catch{}return i}function nw(e,t,n){return t===0?K:U`
    <div class="chat-pr__checks-row chat-pr__checks-row--${n}">
      <span class="chat-pr__checks-row-dot" aria-hidden="true"></span>
      <span class="chat-pr__checks-row-label">${e}</span>
      <span class="chat-pr__checks-row-count">${t}</span>
    </div>
  `}function rw(e,t){let n=e.checks,r=B(n?fw[n.state]:`chat.pullRequests.ciMonitoring`),i,a=t.presented??!0,o=()=>typeof a==`boolean`?a:a.isPresented(),s=e=>{if(!(e instanceof HTMLDetailsElement))return;i=e,ms(e,`top`,{alignment:`end`});let t=e.querySelector(`:scope > wa-popup[data-anchored-overlay]`);t&&!o()&&(t.active=!1)};return U`
    <details
      class="chat-pr__checks"
      data-checks=${n?.state??`none`}
      ${W(s)}
      @toggle=${e=>s(e.currentTarget)}
    >
      <summary class="chat-pr__checks-pill" aria-label=${r} title=${r}>
        <span class="chat-pr__checks-dot" aria-hidden="true"></span>
        ${B(`chat.pullRequests.checks`)}
        <span class="chat-pr__checks-chevron" aria-hidden="true">${V.chevronDown}</span>
      </summary>
      <wa-popup
        data-anchored-overlay
        .active=${typeof a==`boolean`?Tn:Ce({owner:a.owner,isPresented:()=>o()&&!!i?.open})}
      >
        <div
          class="chat-pr__checks-menu"
          role="group"
          aria-label=${B(`chat.pullRequests.ciMonitoring`)}
        >
          <div class="chat-pr__checks-menu-header">
            <span>${B(`chat.pullRequests.ciMonitoring`)}</span>
            <a
              href=${e.checksUrl??e.url}
              target="_blank"
              rel="noopener noreferrer"
              aria-label=${B(`chat.pullRequests.openChecks`)}
            >
              ${V.externalLink}
            </a>
          </div>
          <div class="chat-pr__checks-counts">
            ${nw(B(`chat.pullRequests.checksFailed`),n?.failed??0,`failed`)}
            ${nw(B(`chat.pullRequests.checksPassed`),n?.passed??0,`passed`)}
            ${nw(B(`chat.pullRequests.checksRunning`),n?.running??0,`running`)}
            ${nw(B(`chat.pullRequests.checksSkipped`),n?.skipped??0,`skipped`)}
            ${n?K:B(`chat.pullRequests.automationNoChecks`)}
          </div>
          <openclaw-chat-ci-automation
            .pullRequest=${e}
            .gateway=${t.gateway}
            .sessionKey=${t.sessionKey??``}
            .sessionId=${t.sessionId??``}
            .basePath=${t.basePath??``}
            .presented=${Ce(a)}
          ></openclaw-chat-ci-automation>
          ${n?U`<openclaw-chat-ci-details
                  .pullRequest=${e}
                  .gateway=${t.gateway}
                  .sessionKey=${t.sessionKey??``}
                  .presented=${Ce(a)}
                ></openclaw-chat-ci-details>`:K}
        </div>
      </wa-popup>
    </details>
  `}function iw(e,t){if(typeof e.additions!=`number`&&typeof e.deletions!=`number`)return K;let n=U`<span class="chat-pr__additions"
    >+${(e.additions??0).toLocaleString()}</span
  >`,r=U`<span class="chat-pr__deletions"
    >−${(e.deletions??0).toLocaleString()}</span
  >`;return t?U`
      <button
        class="chat-pr__diff"
        type="button"
        aria-label=${B(`chat.sessionDiff.show`)}
        @click=${t}
      >
        ${n} ${r}
      </button>
    `:U` <span class="chat-pr__diff">${n} ${r}</span> `}function aw(e){if(e===`ready`)return K;let t=B(e===`rate-limited`?`chat.pullRequests.rateLimited`:`chat.pullRequests.unavailable`);return U`
    <openclaw-tooltip content=${t}>
      <span class="chat-pr__warning" role="img" aria-label=${t}>
        ${V.alertTriangle}
      </span>
    </openclaw-tooltip>
  `}function ow(e){return e.createUrl?U`
        <a
          class="chat-pr__create"
          href=${e.createUrl}
          target="_blank"
          rel="noopener noreferrer"
          aria-label=${B(`chat.pullRequests.createPrLabel`,{branch:e.branch})}
        >
          ${B(`chat.pullRequests.createPr`)}
        </a>
      `:K}function sw(e,t,n,r){let i=!e&&r?.result?.status===`published`?r.result:void 0;return U`
    <article
      class="chat-pr"
      data-state=${i?`published`:e?`branch`:`publication`}
    >
      <span class="chat-pr__link chat-pr__link--static">
        <span class="chat-pr__icon" aria-hidden="true"
          >${i||!e?V.gitPullRequest:V.gitBranch}</span
        >
        <span class="chat-pr__identity">
          <span class="chat-pr__repo"
            >${i?.repository??e?.repo??B(`chat.pullRequests.publishPr`)}</span
          >
          <span class="chat-pr__branch">${i?.branch??e?.branch}</span>
        </span>
      </span>
      <span class="chat-pr__meta">
        ${e&&!i?iw(e,n):K}
        ${aw(t)}
        ${r?GC(r):e?ow(e):K}
      </span>
      ${r?XC(r):K}
    </article>
  `}function cw(e){let{publication:t}=e,n=t?.result?.status===`published`?t.result:void 0,r=t?.result||t?.locked||t?.error,i=t?.canPublishShared&&!t.canPublishPersonal&&t.options?.shared;if(e.branch||e.pullRequests.length===0&&(r||i))return U`<div class="chat-prs" aria-live="polite">
      ${sw(e.branch,e.status,e.onOpenSessionDiff,t)}
    </div>`;if(e.pullRequests.length===0)return K;let a=r&&(!n||t?.error)?t:void 0,o=[...e.pullRequests.filter(e=>e.state===`open`||e.state===`draft`),...e.pullRequests.filter(e=>e.state!==`open`&&e.state!==`draft`)];return U`
    <div class="chat-prs" aria-live="polite">
      ${J(o,QC,r=>{let i=r.state===`merged`;return U`
          <article class="chat-pr" data-state=${r.state}>
            <a
              class="chat-pr__link"
              href=${r.url}
              target="_blank"
              rel="noopener noreferrer"
              aria-label=${B(`chat.pullRequests.linkLabel`,{number:String(r.number),title:r.title})}
            >
              <span class="chat-pr__icon" aria-hidden="true">
                ${i?V.gitMerge:V.gitPullRequest}
              </span>
              <span class="chat-pr__number">#${r.number}</span>
              <span class="chat-pr__identity">
                <span class="chat-pr__repo">${r.repo}</span>
                <span class="chat-pr__branch">${r.branch}</span>
              </span>
            </a>
            <span class="chat-pr__meta">
              ${iw(r)} ${rw(r,e)}
              ${r.state===`open`?K:U`<span class="chat-pr__state"
                      >${B(dw[r.state])}</span
                    >`}
              ${!i||e.status===`unavailable`?aw(e.status):K}
              <button
                class="chat-pr__dismiss"
                type="button"
                ?disabled=${!!n&&t?.activity!==null}
                aria-label=${B(`chat.pullRequests.dismiss`,{number:String(r.number)})}
                @click=${()=>{n&&t?.onNewAction?.(),e.onDismiss(r)}}
              >
                ${V.x}
              </button>
            </span>
          </article>
        `})}
      ${a?lw(a):K}
    </div>
  `}function lw(e){let t=U`<div class="chat-pr__publication-recovery">
    ${XC(e)}
    ${e.result?.status===`published`?K:U`<div>${GC(e)}</div>`}
  </div>`;return e.result?.status===`failed`?U`<details class="chat-pr__publication-history">
        <summary>${B(`githubPublication.failedAttempt`)}</summary>
        ${t}
      </details>`:t}var uw,dw,fw;function pw(){return(pw=e((()=>{q(),G(),Pn(),LC(),UC(),Ts(),H(),m(),Je(),ht(),ZC(),uw=`openclaw.chat.dismissedPullRequests`,dw={merged:`chat.pullRequests.merged`,draft:`chat.pullRequests.draft`,closed:`chat.pullRequests.closed`,open:`chat.pullRequests.open`},fw={passing:`chat.pullRequests.checksPassing`,failing:`chat.pullRequests.checksFailing`,pending:`chat.pullRequests.checksPending`}})))()}function mw(e){return B(e===`darwin`?`chat.sessionHeader.revealFinder`:e===`win32`?`chat.sessionHeader.revealFileExplorer`:`chat.sessionHeader.revealFileManager`)}function hw(e,t){let n=y(e);if(!n||e&&ye(n,e.key))return null;let r=t.find(e=>ye(e.key,n));return r?{key:r.key,title:re(r.key,r)}:null}function gw(e,t,n,r){let i=yw(e,t,n,r),a=_w(e);return U`
    <div class="chat-pane__crumbs">
      ${i?U`<div class="chat-pane__project-row">${i}</div>`:K}
      <div class="chat-pane__session-trail">
        ${i?U`<span class="chat-pane__crumb-sep" aria-hidden="true">/</span>`:K}
        ${a?U`${a}<span class="chat-pane__crumb-sep" aria-hidden="true">/</span>`:K}
        ${vw(e)}
      </div>
    </div>
  `}function _w(e){let t=e.parentSession;if(!t)return null;let n=B(`chat.sessionHeader.openParent`,{title:t.title});return U`<button
    class="chat-pane__parent-session"
    type="button"
    title=${n}
    aria-label=${n}
    @click=${()=>e.onOpenParentSession(t.key)}
  >
    <span class="chat-pane__parent-session-text">${t.title}</span>
  </button>`}function vw(e){if(e.editing)return U`<input
      class="chat-pane__session-title-input"
      .value=${e.renameValue}
      aria-label=${B(`chat.sessionHeader.renameInputAria`)}
      placeholder=${B(`chat.sessionHeader.renameInputPlaceholder`)}
      @input=${t=>e.onRenameInput(t.currentTarget.value)}
      @compositionend=${Cp}
      @keyup=${Df}
      @keydown=${t=>{Lf(t)||(t.key===`Enter`?(t.preventDefault(),e.onCommitRename()):t.key===`Escape`&&(t.preventDefault(),e.onCancelRename()))}}
      @blur=${t=>{Df(t),e.onCommitRename()}}
    />`;let t=U`${Nf(e.catalog?e.catalogColor:e.session?.color)}<span
      class="chat-pane__session-title-text"
      >${e.title}</span
    >`;return e.catalog||!e.session||e.renameDisabledReason?U`<span class="chat-pane__session-title" title=${e.renameDisabledReason??e.title}
        >${t}</span
      >`:U`<button
        class="chat-pane__session-title chat-pane__session-title-button"
        type="button"
        title=${B(`chat.sessionHeader.renameTooltip`)}
        aria-label=${B(`chat.sessionHeader.renameAria`,{title:e.title})}
        @click=${e.onBeginRename}
      >
        ${t}
      </button>`}function yw(e,t,n,r){return e.catalog||!e.workspaceLabel?null:U`
    <wa-dropdown
      class="chat-pane__workspace-menu"
      placement="bottom-start"
      @wa-select=${t=>{let n=t.detail.item.value;(n===`reveal`||n===`copy-path`||n===`copy-branch`)&&e.onMenuAction(n)}}
      @wa-show=${()=>e.onMenuOpenChange(!0)}
      @wa-hide=${()=>e.onMenuOpenChange(!1)}
    >
      <button
        slot="trigger"
        class=${`chat-pane__workspace-chip${!t&&!e.workspaceIcon?` chat-pane__workspace-chip--fallback-icon`:``}`}
        type="button"
        title=${e.workspaceRoot??e.workspaceLabel}
        aria-label=${B(`chat.sessionHeader.workspaceAria`,{workspace:e.workspaceLabel})}
      >
        ${t?V.check:bw(e.workspaceIcon)}<span
          >${t?B(`chat.sessionHeader.copied`):e.workspaceLabel}</span
        >
      </button>
      ${e.canReveal&&e.workspaceRoot?U`<wa-dropdown-item value="reveal">${mw(e.platform)}</wa-dropdown-item>`:K}
      ${e.workspaceRoot?U`<wa-dropdown-item value="copy-path">${n}</wa-dropdown-item>`:K}
      ${e.branch?U`<wa-dropdown-item value="copy-branch">${r}</wa-dropdown-item>`:K}
    </wa-dropdown>
  `}function bw(e){return e?U`<openclaw-workspace-icon
        .routeUrl=${e.routeUrl}
        .authTokens=${e.authTokens}
        .authReady=${e.authReady}
        .connectionId=${e.connectionId}
      ></openclaw-workspace-icon>`:V.folder}function xw(e){return!!(e.workspaceRoot&&e.methodAdvertised&&e.hasAdminAccess&&!e.session?.execNode&&!Jn(e.session?.placement?.state))}function Sw(e){let t=e.copiedAction===`copy-path`?B(`chat.sessionHeader.copied`):B(`chat.sessionHeader.copyPath`),n=e.copiedAction===`copy-branch`?B(`chat.sessionHeader.copied`):B(`chat.sessionHeader.copyBranch`),r=e.copiedAction===`copy-path`||e.copiedAction===`copy-branch`,i=e.navDrawerOpen?B(`nav.collapse`):B(`nav.expand`),a=e.narrow&&e.sessionMenuAction!==K,o=e.sharingControl!==void 0&&e.sharingControl!==K;return U`
    <div
      class=${`chat-pane__header${e.onClosePane?` chat-pane__header--closable`:``}`}
      role="group"
      aria-label=${e.title}
      tabindex="-1"
      @mousedown=${rn}
    >
      <div class="chat-pane__header-leading">
        ${e.mergedChrome?U`<openclaw-tooltip .content=${i}>
                <button
                  class="btn btn--ghost btn--icon chat-icon-btn chat-pane__nav-toggle"
                  type="button"
                  aria-label=${i}
                  aria-expanded=${String(!!e.navDrawerOpen)}
                  @click=${e=>{window.dispatchEvent(new CustomEvent(wt,{detail:{trigger:e.currentTarget}}))}}
                >
                  ${V.menu}
                </button>
              </openclaw-tooltip>`:K}
        ${e.session?.incognito?U`<span
                class="chat-pane__incognito"
                role="img"
                aria-label=${B(`chat.sessionHeader.incognito`)}
                title=${B(`chat.sessionHeader.incognito`)}
                >${V.lock}</span
              >`:K}
        ${gw(e,r,t,n)}
        ${e.publicAccessIndicator??K}
        ${o?e.sharingControl:Ko(As(e.showOwnerChip?e.session?.owner?.actor:void 0,`header`,e.session?.owner?.assignedAt===void 0?`created`:`owned`,e.ownerViewing),e.showOwnerChip?Yo(e.session?.owner?.actor.identity?.type===`profile`?e.session.owner.actor.identity.id:void 0,e.personActivity,e.session?.owner?.actor.label):null)}
        ${e.showOwnerChip&&e.session?.participants?.length?U`<openclaw-viewer-facepile
                class="chat-pane__participants"
                .staticParticipants=${e.session.participants}
                .totalCount=${e.session.participantCount}
                .maxVisible=${4}
                .personActivity=${e.personActivity}
                variant="session"
              ></openclaw-viewer-facepile>`:K}
        ${e.placementControl??K} ${e.presence??K}
      </div>
      <div class="chat-pane__header-trailing">
        ${!e.catalog&&e.branches.length>1?U`
                <wa-dropdown
                  class="chat-pane__branches-menu"
                  placement="bottom-end"
                  @wa-select=${t=>{let n=t.detail.item.value,r=e.branches.find(e=>e.leafEntryId===n);n&&r&&!r.active&&!e.branchSwitchDisabledReason&&e.onBranchSelect(n)}}
                >
                  <button
                    slot="trigger"
                    class="btn btn--ghost btn--icon chat-icon-btn chat-pane__branches-trigger"
                    type="button"
                    ?disabled=${!!e.branchSwitchDisabledReason}
                    title=${e.branchSwitchDisabledReason??B(`chat.sessionHeader.branches`)}
                    aria-label=${B(`chat.sessionHeader.branches`)}
                  >
                    ${V.gitBranch}
                  </button>
                  ${e.branches.map(t=>{let n=Date.parse(t.updatedAt??``),r=ot(n,{fallback:``});return U`
                      <wa-dropdown-item
                        class="chat-pane__branch-item"
                        value=${t.leafEntryId}
                        ?disabled=${t.active||!!e.branchSwitchDisabledReason}
                        data-active=${t.active?`true`:`false`}
                      >
                        <span class="chat-pane__branch-copy">
                          <span class="chat-pane__branch-headline"
                            >${t.headline||B(`chat.sessionHeader.untitledBranch`)}</span
                          >
                          <span class="chat-pane__branch-meta"
                            >${B(t.messageCount===1?`chat.sessionHeader.oneMessage`:`chat.sessionHeader.messages`,{count:String(t.messageCount)})}${r?` · ${r}`:``}</span
                          >
                        </span>
                        ${t.active?U`<span
                                class="chat-pane__branch-active"
                                aria-label=${B(`chat.sessionHeader.activeBranch`)}
                                >${V.check}</span
                              >`:K}
                      </wa-dropdown-item>
                    `})}
                </wa-dropdown>
              `:K}
        <div class="chat-pane__actions">
          ${e.panelLayoutActions}
          <fieldset class="chat-pane__actions" ?disabled=${e.actionsDisabled}>
            ${a?K:e.panelActions}
            ${[[e.onOpenSplitView&&!a,`chat-open-split-view`,`chat.splitView.open`,V.columns2,e.onOpenSplitView],[!e.narrow&&e.onSplitDown,`chat-pane__split-down`,`chat.splitView.splitDown`,V.panelBottomOpen,()=>e.onSplitDown?.(e.paneId)],[!e.narrow&&e.onSplitRight,`chat-pane__split-right`,`chat.splitView.splitRight`,V.panelRightOpen,()=>e.onSplitRight?.(e.paneId)],[e.onClosePane,`chat-pane__close-pane`,`chat.splitView.closePane`,V.x,()=>e.onClosePane?.(e.paneId)],[e.mergedChrome&&!a,`chat-pane__palette-open`,`chat.openCommandPalette`,V.search,()=>window.dispatchEvent(new Event(It))]].map(([e,t,n,r,i])=>e?U`<openclaw-tooltip .content=${B(n)}>
                    <button
                      class=${`btn btn--ghost btn--icon chat-icon-btn ${t}`}
                      type="button"
                      aria-label=${B(n)}
                      @click=${i}
                    >
                      ${r}
                    </button>
                  </openclaw-tooltip>`:K)}
            ${e.sessionMenuAction}
          </fieldset>
        </div>
      </div>
    </div>
  `}function Cw(e,t,n,i){if(!e)return K;let a=ne(e),o=Ee(e)?.slot??`conversation`,s=t.find(e=>e.slot===o),c=t.find(e=>e.slot===a?.slot),l=e.open===!0&&!e.expanded,u=B(e.expanded?`chat.sidePanel.restore`:`chat.sidePanel.expand`),d=s&&c?B(`chat.sidePanel.swap`,{main:s.label,side:c.label}):``;return U`${s?.headerAction?U`<span class="side-panel__action-group side-panel__action-group--content"
          >${s.headerAction}</span
        >`:K}
  ${l||e.expanded?U`<openclaw-tooltip .content=${u}>
          <button
            class="btn btn--ghost btn--icon chat-icon-btn chat-panel-focus"
            type="button"
            aria-pressed=${String(e.expanded===!0)}
            aria-label=${u}
            @click=${()=>i(Qy(Gy(e),e.expanded!==!0),{dashboardPresentation:`personal`})}
          >
            ${e.expanded?V.minimize:V.maximize}
          </button>
        </openclaw-tooltip>`:K}
  ${l&&a&&d?U`<openclaw-tooltip .content=${d}>
          <button
            class="btn btn--ghost btn--icon chat-icon-btn chat-panel-swap"
            type="button"
            aria-label=${d}
            @click=${()=>i(Ky(e,a.id))}
          >
            ${V.arrowLeftRight}
          </button>
        </openclaw-tooltip>`:K}
  ${n||!l?K:U`<wa-dropdown
          class="chat-panel-layout-menu"
          placement="bottom-end"
          @wa-select=${t=>{let n=t.detail.item.value;(n===`left`||n===`right`||n===`bottom`)&&i(eb(e,n),{geometryOnly:!0})}}
        >
          <button
            slot="trigger"
            class="btn btn--ghost btn--icon chat-icon-btn"
            type="button"
            aria-label=${B(`chat.sidePanel.layout`)}
            title=${B(`chat.sidePanel.layout`)}
          >
            ${V.columns2}
          </button>
          ${[[`left`,`dockLeft`,V.panelLeftOpen],[`right`,`dockRight`,V.panelRightOpen],[`bottom`,`dockBottom`,V.panelBottomOpen]].map(([t,n,i])=>U`<wa-dropdown-item
              value=${t}
              type="checkbox"
              ?checked=${r(e)===t}
              ><span slot="icon">${i}</span>${B(`chat.sidePanel.${n}`)}</wa-dropdown-item
            >`)}
        </wa-dropdown>`}`}function ww(e,t){if(!t)return null;let n=e.gateway,r=kt({hello:n.snapshot.hello,settings:{token:n.connection.token},password:n.connection.password});return{routeUrl:qa(`workspaceIcon`,e.resourceBasePath,t),authTokens:r,authReady:!!(n.snapshot.hello||r.length),connectionId:n.snapshot.hello?.server?.connId}}function Tw(){return(Tw=e((()=>{q(),Ua(),Vt(),Xt(),fn(),H(),Jo(),jf(),Fo(),Es(),ht(),tp(),m(),de(),kf(),_e(),I(),ab()})))()}function Ew(e){if(ki(e))return null;let t=Z(e),n=vd(e),r=typeof t?.stopReason==`string`?t.stopReason.trim().toLowerCase():``,i=Z(t?.__openclaw);if(n===`commentary`||(!r||r===`tooluse`)&&i?.runTerminal!==!0)return null;let a=Oi(e);if(typeof a==`string`&&Ri(a))return null;let o=(bl(e)?.content??[]).filter(e=>e.type===`text`?typeof e.text==`string`&&e.text.trim().length>0:!pt(e.type)&&!ut(e.type));if(o.length===0)return null;try{return JSON.stringify(o)??null}catch{return null}}function Dw(e,t){let n=dl(e),r=Rl(e,n),i=r.runs[t],a=i?.message===void 0?[]:[i.message];for(let e of r.messages)tr(e)?.role===`assistant`&&Dl(e)===t&&a.push(e);let o=new Set;for(let e of a){let t=Ew(e);t&&o.add(t)}return{acceptedFinal:(i?.acceptedFinalMessageIdentities?.length??0)>0,terminalReplySignatures:o}}function Ow(){return(Ow=e((()=>{ar(),ct(),gd(),Ai(),Zi(),bc(),il(),Zu()})))()}function kw(e,t,n){let r=fx(e),i=()=>t.composerDraftScopeKey===r&&t.goalComposer?.key===r?t.goalComposer:null;if(e.goalDraftMode!==void 0){let n=e.goalDraftMode,a=i();a&&n&&a.action===n.action&&a.sessionId===n.sessionId&&(a.action!==`edit`||n.action===`edit`&&a.goalId===n.goalId&&a.previousDraft===n.previousDraft)||(t.goalComposer=n?{...n,key:r,pending:!1}:null)}let a=n=>{px(e,n);let r=t.composerTextarea;r&&(r.value=n,jc(r))},o=()=>queueMicrotask(()=>t.composerTextarea?.focus({preventScroll:!0})),s=()=>{let r=i();r&&!r.pending&&(t.goalComposer=null,e.onGoalDraftModeChange?.(null),r.action===`edit`&&a(r.previousDraft),n(),o())},c=s=>{if(!e.onGoalSubmit||i()?.pending)return;let c=t.composerTextarea?.value??e.getDraft?.()??e.draft,l={...e.currentSessionId?{sessionId:e.currentSessionId}:{},...s?{action:`edit`,goalId:s.id,previousDraft:c}:{action:`start`}};t.goalComposer={...l,key:r,pending:!1},e.onGoalDraftModeChange?.(l),Ul(t),sc(t),a(s?.objective??``),n(),o()},l=(t,n=!1)=>{if(i()||!e.connected||!e.canSend||!e.onGoalSubmit)return!1;let r=/^\s*\/goal(?:\s+(start|set|create))?\s*$/iu.exec(t);return!r||!n&&(!r[1]||!/\s$/u.test(t))?!1:(c(),!0)};return{get active(){return i()!==null},get pending(){return i()?.pending===!0},get submissionLabel(){let e=i();return e?B(e.action===`edit`?`chat.goals.save`:`chat.goals.start`):void 0},begin:c,activateDraft:l,submitCommand:()=>{l(e.getDraft?.()??e.draft,!0)||e.onSend()},activateCommand:n=>n.key!==`goal`||n.source!==`native`||t.slashMenuCompletion?.inline||!e.onGoalSubmit?!1:(c(),!0),cancel:s,async submit(r){let o=i(),s=t.composerTextarea?.value??e.getDraft?.()??e.draft;if(o&&!o.pending&&e.onGoalSubmit&&s.trim()){a(s),o.pending=!0,n();try{await e.onGoalSubmit({...o.sessionId?{sessionId:o.sessionId}:{},...o.action===`start`?{action:`start`,objective:s}:{action:`edit`,goalId:o.goalId,objective:s}},r)&&i()===o&&(t.goalComposer=null,e.onGoalDraftModeChange?.(null),o.action===`edit`&&a(o.previousDraft))}finally{o.pending=!1,n()}}},render(){let e=i();return e?U`<div
            class="agent-chat__goal-mode composer-context-strip"
            role="group"
            aria-label=${B(`chat.goals.composerMode`)}
          >
            <span class="agent-chat__goal-mode-label composer-context-strip__label">
              <span class="composer-context-strip__icon">${V.flag}</span>
              <span class="composer-context-strip__label-text"
                >${B(e.action===`edit`?`chat.goals.edit`:`chat.goals.composerMode`)}</span
              >
            </span>
            <span class="agent-chat__goal-mode-hint composer-context-strip__text"
              >${B(e.action===`edit`?`chat.goals.editHint`:`chat.goals.startHint`)}</span
            >
            <button
              type="button"
              class="composer-context-strip__dismiss"
              aria-label=${B(`chat.goals.cancel`)}
              ?disabled=${e.pending}
              @click=${s}
            >
              ${V.x}
            </button>
          </div>`:K}}}function Aw(){return(Aw=e((()=>{q(),H(),m(),ii(),nl(),$u(),Xu(),Sx(),oi()})))()}function jw({state:e,props:t,skillMenuHost:n,slashMenuHost:r,mentionMenuHost:i,requestUpdate:a,sendShortcut:o,canSubmitDraft:s,commitDraft:c,syncDraftAfterSend:l,showAbortableUi:u,alternateFollowUpMode:d,goalComposer:f}){return p=>{let m=p.target;if(!(m instanceof HTMLTextAreaElement)||e.composerComposing||Lf(p)||e.emojiMenu.handleKeydown(p,t.paneId,a)||e.mentionMenu.handleKeydown(p,i,a))return;if(f.active){p.key===`Escape`?(p.preventDefault(),f.cancel()):p.key===`Enter`&&!p.shiftKey&&(o===`enter`||p.metaKey||p.ctrlKey)&&s(m.value)&&(p.preventDefault(),c(m.value),f.submit(p));return}if(t.connected&&ac(p,e,n,a)||t.connected&&au(p,e,r,a,o)||t.connected&&Ll(p,e,r,a))return;if((p.key===`ArrowUp`||p.key===`ArrowDown`)&&t.onHistoryKeydown){c(m.value);let n=t.onHistoryKeydown({key:p.key,selectionStart:m.selectionStart,selectionEnd:m.selectionEnd,altKey:p.altKey,ctrlKey:p.ctrlKey,metaKey:p.metaKey,shiftKey:p.shiftKey,isComposing:p.isComposing,keyCode:p.keyCode});if(n.handled){e.editRevision+=1,n.preventDefault&&p.preventDefault(),a(),n.restoreCaret&&Ru(m,n.restoreCaret);return}}if(p.key===`Escape`&&!e.skillMenuOpen&&!e.slashMenuOpen&&!e.mentionMenu.open&&!t.replyTarget&&!e.dictation?.active&&u&&t.onAbort){p.preventDefault(),t.onAbort();return}let h=o===`enter`||p.metaKey||p.ctrlKey;if(p.key===`Enter`&&!p.shiftKey&&h){if(p.repeat){p.preventDefault();return}let e=t.getAttachments?.()??t.attachments??[];if(!(m.value.trim()||e.length)){let e=u&&t.connected&&t.canSend&&!t.submitDisabledReason&&t.onQueueSteer?Ou(t.displayQueue??t.queue):void 0;if(e){p.preventDefault(),t.onQueueSteer?.(e.id);return}s(m.value)&&p.preventDefault();return}if(!s(m.value)||(p.preventDefault(),c(m.value),f.activateDraft(m.value,!0)))return;let n=(p.metaKey||p.ctrlKey)&&!p.altKey?d:void 0;t.onSend(n,p),l(m)}}}function Mw(){return(Mw=e((()=>{kf(),El(),nl(),$u(),Xu()})))()}function Nw(e){return e?U`<div class="agent-chat__question-dock">
        <openclaw-chat-question-card .props=${e}></openclaw-chat-question-card>
      </div>`:K}function Pw(e,t,n){let r=e.gatewayQuestionPrompts?.filter(e=>e.status===`pending`)??[],i=e.asyncQuestions,a=t=>JSON.stringify([e.sessionKey,e.currentAgentId,t]),o=e.disabledBanner?.kind===`composer-replacement`?[]:[...r.map(t=>({key:`gateway:${t.id}`,asyncIdentity:null,compactOnArrival:!1,panel:n=>P_(t,{...n,onChange:e.onGatewayQuestionChange,onSubmit:e.onGatewayQuestionSubmit?n=>e.onGatewayQuestionSubmit?.(t.id,n):void 0,onSkip:e.onGatewayQuestionSkip?()=>e.onGatewayQuestionSkip?.(t.id):void 0})})),...i?.submit?i.pending.map(e=>({key:JSON.stringify([i.scope,e.itemId]),asyncIdentity:a(e.itemId),compactOnArrival:!t.asyncQuestionIds.has(a(e.itemId)),panel:t=>Tg(e,i,t)})):[]];t.asyncQuestionIds=new Set(i?.pending.map(e=>a(e.itemId)).filter(e=>t.asyncQuestionIds.has(e)));let s=r.find(e=>!t.gatewayQuestionIds.has(e.id));t.gatewayQuestionIds=new Set(r.map(e=>e.id));let c=r.some(e=>t.activeQuestionKey===`gateway:${e.id}`);s&&!c&&(t.activeQuestionKey=`gateway:${s.id}`,t.questionCollapsed=!1);let l=o.findIndex(e=>e.key===t.activeQuestionKey);if(l<0){l=0,t.activeQuestionKey=o[0]?.key??null;let n=o[l];n&&(t.questionCollapsed=n.asyncIdentity===null?!1:n.compactOnArrival?!!e.draft.trim()||t.composerTextarea!==null&&document.activeElement===t.composerTextarea:t.questionCollapsed)}let u=o[l];if(!u)return null;u.asyncIdentity!==null&&t.asyncQuestionIds.add(u.asyncIdentity);let d=e=>{t.activeQuestionKey=o[e].key,t.questionCollapsed=!1,n()};return u.panel({collapsed:t.questionCollapsed,onCollapsedChange:e=>{t.questionCollapsed=e,t.restoreComposerFocus=e,n(),e&&queueMicrotask(()=>{t.restoreComposerFocus&&t.composerTextarea?.isConnected&&(t.restoreComposerFocus=!1,t.composerTextarea.focus({preventScroll:!0}))})},requestPosition:o.length>1?{current:l+1,total:o.length}:void 0,onPreviousRequest:()=>d((l-1+o.length)%o.length),onNextRequest:()=>d((l+1)%o.length)})}function Fw(){return(Fw=e((()=>{q(),Dg(),z_()})))()}function Iw(e){for(let t=(e?.length??0)-1;t>=0;--t){let n=Qa(e?.[t]);if(n?.role===`user`)return null;if(n?.role!==`assistant`||Er(n))continue;let r=Qa(n.cost),i=Qa(Qa(n.usage)?.cost),a={};for(let e of[`input`,`output`,`cacheRead`,`cacheWrite`]){let t=Ba(r?.[e])??Ba(i?.[e]);t!==void 0&&(a[e]=t)}if(Object.keys(a).length>0)return a}return null}function Lw(e){for(let t=(e?.length??0)-1;t>=0;--t){let n=Qa(e?.[t]);if(!(n?.role!==`assistant`||Er(n)))return typeof n.provider==`string`&&n.provider.trim()||null}return null}function Rw(e,t){let n=Ba(e?.totalTokens),{tokens:r,fromLastPrompt:i}=ju(e,t);if(n===void 0||!r)return null;let a=e?.totalTokensFresh===!1,o=n/r,s=Math.min(Math.round(o*100),100),c=!a&&o>=Kw,l=Number.isFinite(e?.inputTokens)?e?.inputTokens??null:null,u=Number.isFinite(e?.outputTokens)?e?.outputTokens??null:null,d=Ba(e?.estimatedCostUsd)??null,f=`var(--muted)`,p=`color-mix(in srgb, var(--muted) 8%, transparent)`;if(c){let e=Math.min(Math.max((o-Kw)/.1,0),1);f=`color-mix(in srgb, var(--warn), var(--danger) ${e*100}%)`,p=`color-mix(in srgb, ${f} ${8+8*e}%, transparent)`}return{pct:s,fromLastPrompt:i,used:n,limit:r,input:l,output:u,cost:d,detail:`${a?`~`:``}${Me(n)} / ${Me(r)}`,color:f,bg:p,warning:c,approximate:a}}function zw(e){if(e===`5h`)return B(`chat.composer.contextUsage.limitFiveHour`);if(e===`Week`)return B(`chat.composer.contextUsage.limitWeekly`);if(e===`Day`)return B(`chat.composer.contextUsage.limitDaily`);let t=/^(\d+)h$/.exec(e);return t?B(`chat.composer.contextUsage.limitHours`,{hours:t[1]??``}):e}function Bw(e,t){if(/^[A-Za-z]{3}$/.test(t))try{return new Intl.NumberFormat(void 0,{style:`currency`,currency:t.toUpperCase(),maximumFractionDigits:2}).format(e)}catch{}return`${e.toFixed(2)} ${t}`}function Vw(e,t){let n=e>=90?`danger`:e>=75?`warn`:null;return U`
    <div
      class="context-usage__limit-bar"
      role="progressbar"
      aria-label=${t}
      aria-valuemin="0"
      aria-valuemax="100"
      aria-valuenow=${e}
    >
      <span
        class=${n?`context-usage__limit-fill--${n}`:``}
        style="width: ${e}%"
      ></span>
    </div>
  `}function Hw(e){let t=zw(e.label),n=Pd(e.resetAt);return U`
    <div class="context-usage__limit">
      <div class="context-usage__limit-head">
        <span class="context-usage__limit-label">${t}</span>
        <span class="context-usage__limit-meta">
          ${n?U`<span class="context-usage__limit-reset"
                  >${B(`chat.composer.contextUsage.resets`,{time:n})}</span
                >`:K}
          <strong>${e.usedPercent}%</strong>
        </span>
      </div>
      ${Vw(e.usedPercent,t)}
    </div>
  `}function Uw(e){let t=e.label||B(`chat.composer.contextUsage.usageCredits`),n=Math.max(0,Math.min(100,Math.round(e.used/e.limit*100))),r=B(`chat.composer.contextUsage.budgetValue`,{used:Bw(e.used,e.unit),limit:Bw(e.limit,e.unit)});return U`
    <div class="context-usage__limit">
      <div class="context-usage__limit-head">
        <span class="context-usage__limit-label">${t}</span>
        <span class="context-usage__limit-meta"><strong>${r}</strong></span>
      </div>
      ${Vw(n,t)}
    </div>
  `}function Ww(e,t){return U`
    <div class="context-usage__section-label context-usage__plan-header">
      <span>${B(`chat.composer.contextUsage.planUsage`)}</span>
      <a
        class="context-usage__plan-link"
        href=${t}
        data-chat-provider-usage="true"
        aria-label=${B(`chat.composer.contextUsage.openUsage`)}
      >
        ${e.plan?U`<span class="context-usage__plan-badge">${e.plan}</span>`:K}
        ${V.externalLink}
      </a>
    </div>
    ${e.accountEmail?U`<div class="context-usage__account" data-chat-usage-account="true">
            ${e.accountEmail}
          </div>`:K}
    <div class="context-usage__limits">
      ${e.windows.map(e=>Hw(e))}
      ${e.budgets.map(e=>Uw(e))}
    </div>
    <div class="context-usage__provenance" data-chat-usage-provider="true">
      <span>${B(`sessionsView.provider`)}:</span>
      <strong>${e.displayName}</strong>
    </div>
  `}function Gw(e,t,n={}){let r=Rw(e,t),i=n.providerUsage?zd(n.providerUsage.modelAuthStatusResult??null,ai):[],a=(e?.modelProvider?.trim()||Lw(n.messages))?.toLowerCase(),o=a?i.find(e=>e.providers.some(e=>e.trim().toLowerCase()===a)):void 0;if(!r&&!o)return K;let s=r?B(`chat.composer.contextUsage.summary`,{used:`${r.approximate?`~`:``}${Me(r.used)}`,limit:Me(r.limit),pct:`${r.approximate?`~`:``}${r.pct}`}):B(`chat.usageRemaining`),c=r?`${r.approximate?`~`:``}${r.pct}%`:null,l=r?Jw*(1-r.pct/100):Jw,u=r?Iw(n.messages):null,d=!o,f=`${no(n.providerUsage?.basePath??``)}/usage`,p=e=>e===null?B(`usage.common.emptyValue`):Me(e),m=(e,t)=>t===void 0||t<=0?K:U`
          <div>
            <dt>${e}</dt>
            <dd>${A(t)}</dd>
          </div>
        `,h=u&&Object.values(u).some(e=>e>0);return U`
    <div
      class="context-usage"
      style=${r?`--ctx-color:${r.color};--ctx-bg:${r.bg}`:``}
    >
      <details
        @toggle=${e=>{Gl(e);let t=e.currentTarget;t instanceof HTMLDetailsElement&&Du(t)}}
      >
        <summary
          class="context-ring ${r?.warning?`context-ring--warning`:``}"
          aria-label=${s}
          title=${B(`chat.composer.contextUsage.open`)}
        >
          <svg
            class="context-ring__dial"
            viewBox="0 0 16 16"
            width="16"
            height="16"
            aria-hidden="true"
          >
            <circle class="context-ring__track" cx="8" cy="8" r=${qw} />
            <circle
              class="context-ring__fill"
              cx="8"
              cy="8"
              r=${qw}
              stroke-dasharray=${Jw.toFixed(2)}
              stroke-dashoffset=${l.toFixed(2)}
            />
          </svg>
        </summary>
        <wa-popup data-anchored-overlay>
          <section
            class="context-usage__popover"
            aria-label=${B(`chat.composer.contextUsage.title`)}
          >
            ${r?U`
                    <div class="context-usage__header">
                      <span class="context-usage__title"
                        >${B(r.fromLastPrompt?`chat.composer.contextUsage.promptBudget`:`chat.composer.contextUsage.contextWindow`)}</span
                      >
                      <strong class="context-usage__context-value"
                        >${r.detail} · ${c}</strong
                      >
                    </div>
                    <div
                      class="context-usage__bar"
                      role="progressbar"
                      aria-label=${s}
                      aria-valuemin="0"
                      aria-valuemax="100"
                      aria-valuenow=${r.pct}
                    >
                      <span style="width: ${r.pct}%"></span>
                    </div>
                  `:K}
            ${r?U`
                    <div class="context-usage__section-label">
                      ${B(`chat.composer.contextUsage.latestRunTokens`)}
                    </div>
                    <dl class="context-usage__stats">
                      <div>
                        <dt>${B(`usage.breakdown.input`)}</dt>
                        <dd>${p(r.input)}</dd>
                      </div>
                      <div>
                        <dt>${B(`usage.breakdown.output`)}</dt>
                        <dd>${p(r.output)}</dd>
                      </div>
                      ${!d||r.cost===null?K:U`
                              <div>
                                <dt>${B(`chat.composer.contextUsage.estimatedCost`)}</dt>
                                <dd>${A(r.cost)}</dd>
                              </div>
                            `}
                    </dl>
                  `:K}
            ${d&&u&&h?U`
                    <div class="context-usage__section-label">
                      ${B(`usage.breakdown.costByType`)}
                    </div>
                    <dl class="context-usage__stats">
                      ${m(B(`usage.breakdown.input`),u.input)}
                      ${m(B(`usage.breakdown.output`),u.output)}
                      ${m(B(`usage.breakdown.cacheRead`),u.cacheRead)}
                      ${m(B(`usage.breakdown.cacheWrite`),u.cacheWrite)}
                    </dl>
                  `:K}
            ${o?Ww(o,f):K}
          </section>
        </wa-popup>
      </details>
    </div>
  `}var Kw,qw,Jw;function Yw(){return(Yw=e((()=>{Da(),q(),yr(),on(),H(),m(),de(),ni(),Rd(),Gu(),Kw=.85,qw=6.5,Jw=2*Math.PI*qw})))()}function Xw(){hT?.frame!=null&&cancelAnimationFrame(hT.frame),hT=void 0}function Zw(){let e=hT;if(!e||e.velocity===0)return;let t=e.container.scrollTop;if(e.container.scrollTop+=e.velocity,e.container.scrollTop===t){Xw();return}e.frame=requestAnimationFrame(Zw)}function Qw(e,t){let n=e.getBoundingClientRect(),r=Math.min(uT,Math.max(0,uT-(t-n.top))),i=Math.min(uT,Math.max(0,uT-(n.bottom-t))),a=(i>0?i:-r)/uT*dT;if(a===0){Xw();return}if(hT?.container===e){hT.velocity=a,hT.frame??(hT.frame=requestAnimationFrame(Zw));return}Xw(),hT={container:e,velocity:a,frame:requestAnimationFrame(Zw)}}function $w(e,t){e?.toggleAttribute(cT,t)}function eT(e){e.style.height=`auto`;let t=Number.parseFloat(getComputedStyle(e).maxHeight)||101;e.style.height=`${Math.min(e.scrollHeight,t)}px`,e.style.overflowY=e.scrollHeight>t?`auto`:`hidden`}function tT(e,t){e instanceof HTMLTextAreaElement&&!fT.has(e)&&(fT.add(e),e.value=t,queueMicrotask(()=>{e.isConnected&&(eT(e),e.focus(),e.setSelectionRange(t.length,t.length))}))}function nT(e,t){if(t&&e.sendState!==`failed`&&e.sendState!==`unconfirmed`&&e.sendState!==`held`)return B(`chat.queue.states.waitingForReconnect`);switch(e.sendState){case`waiting-model`:case`waiting-idle`:return null;case`executing-command`:return B(`chat.queue.states.runningCommand`);case`waiting-reconnect`:return B(`chat.queue.states.waitingForReconnect`);case`unconfirmed`:case`held`:return B(`chat.queue.states.needsReview`);case`failed`:return B(`common.failed`);default:return null}}function rT(e){let t=e.queuedEdit,n=(e.displayQueue??e.queue).filter(e=>e.sendState!==`submitting`&&e.sendState!==`sending`&&!Jc(e));if(t?.source&&t.editingId===t.source.id&&!n.some(e=>e.id===t.editingId)&&n.push(t.source),!n.length)return K;let r=new Set(n.map(e=>e.id)),i={segments:$r(e.queue,e=>r.has(e.id)&&Gr(e)&&e.id!==t?.editingId).map(e=>e.map(e=>e.id)),offered:n.filter(Gr).length>1},a=e.queue.find(e=>e.sendState!==`failed`||e.localCommandName),o=(a?.sendState===`unconfirmed`||a?.sendState===`held`)&&Jc(a)?{label:B(`chat.queue.states.blockedByUnconfirmed`),tone:`warn`}:n.some(e=>e.sendState===`waiting-model`)&&!e.offline?{label:B(`chat.queue.states.applyingSettings`),tone:`settings`}:null;return U`
    <div class="chat-queue" role="status" aria-live="polite">
      ${o?U`<div
              class="chat-queue__global-state"
              data-chat-queue-global-state=${o.tone}
            >
              ${o.label}
            </div>`:K}
      <div
        class="chat-queue__scroll"
        data-scrollable=${n.length>3?`true`:`false`}
        data-at-start="true"
        data-at-end=${n.length>3?`false`:`true`}
        @dragover=${e=>{if(!e.dataTransfer?.types.includes(oT))return;let t=e.currentTarget;t instanceof HTMLElement&&Qw(t,e.clientY)}}
        @dragleave=${e=>{let t=e.currentTarget;t instanceof HTMLElement&&e.relatedTarget instanceof Node&&t.contains(e.relatedTarget)||Xw()}}
        @drop=${Xw}
        @scroll=${e=>{let t=e.currentTarget;t instanceof HTMLElement&&(t.dataset.atStart=String(t.scrollTop<=1),t.dataset.atEnd=String(t.scrollTop+t.clientHeight>=t.scrollHeight-1))}}
      >
        ${J(n,e=>e.id,t=>aT(t,e,i))}
      </div>
    </div>
  `}function iT(e,t){let n=e.currentTarget;n instanceof HTMLElement&&n.classList.toggle(sT,t)}function aT(e,t,n){let r=t.queuedEdit,i=vl(e.sender),a=i!==K,o=e.attachments?.filter(e=>e.mimeType.startsWith(`image/`)),s=o?.[0]?Gc(o[0]):null,c=e.sendState===`failed`||e.sendState===`unconfirmed`||e.sendState===`held`,l=!e.serverQueued&&!c&&(t.offline||e.sendState===`waiting-reconnect`),u=nT(e,!e.serverQueued&&t.offline===!0),d=e.queueMode===`steer`&&u===null,f=e.sendState===`executing-command`,p=r?.editingId===e.id,m=p?r?.editingText??e.text:e.text,h=p?r?.editingMentions:e.mentions,g=!!(t.canAbort&&t.onQueueSteer)&&Ml(e)&&!p,_=!!(t.canAbort&&t.onQueueSteer)&&!p&&!e.localCommandName&&!e.intent&&(Ml(e)||e.sendState===`waiting-model`),v=n.segments.find(t=>t.includes(e.id))??[],y=v.indexOf(e.id),b=t.onQueueMove,x=!!b&&n.offered,S=x&&y>=0&&v.length>1,C=!!r?.onEdit&&Gr(e)&&!e.localCommandName,w=C&&!r?.editingId,T=e.text||(e.attachments?.length?B(`chat.queue.imageCount`,{count:String(e.attachments.length)}):``),E=mT;return U`
    <div
      class=${`chat-queue__item${a?``:` chat-queue__item--no-avatar`}${s?` chat-queue__item--with-images`:``}${d?` chat-queue__item--steered`:``}${c?` chat-queue__item--failed`:``}${l?` chat-queue__item--reconnect`:``}${p?` chat-queue__item--editing`:``}`}
      data-chat-queue-item=${e.id}
      @click=${e=>{let t=e.currentTarget,n=e.target;t instanceof Element&&n instanceof Element&&(!w||n.closest(lT)?gT.delete(t):e.detail===1&&gT.add(t))}}
      @dblclick=${w?t=>{let n=t.currentTarget;n instanceof Element&&gT.has(n)&&(gT.delete(n),t.stopPropagation(),$w(n,!1),r?.onEdit?.(e.id))}:void 0}
      @dragover=${S?e=>{e.dataTransfer?.types.includes(oT)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,iT(e,!0))}:void 0}
      @dragleave=${S?e=>iT(e,!1):void 0}
      @drop=${S?t=>{let n=t.dataTransfer?.getData(oT);iT(t,!1),n&&n!==e.id&&v.includes(n)&&(t.preventDefault(),b?.(n,e.id))}:void 0}
    >
      ${x?U`<button
              class="chat-queue__leading chat-queue__grip"
              type="button"
              draggable=${S?`true`:`false`}
              ?disabled=${!S}
              aria-label=${B(S?`chat.queue.reorderQueuedMessage`:`chat.queue.reorderUnavailable`)}
              aria-keyshortcuts=${Dn(S?`ArrowUp ArrowDown`:void 0)}
              @dragstart=${S?t=>{t.dataTransfer?.setData(oT,e.id),t.dataTransfer&&(t.dataTransfer.effectAllowed=`move`)}:void 0}
              @dragend=${Xw}
              @keydown=${t=>{if(!S)return;let n=t.key===`ArrowUp`?-1:+(t.key===`ArrowDown`);if(n===0)return;t.preventDefault();let r=v[y+n];r&&b?.(e.id,r)}}
            >
              <span class="chat-queue__grip-state chat-queue__grip-state--idle" aria-hidden="true"
                >${E}</span
              >
              ${S?U`<span
                      class="chat-queue__grip-state chat-queue__grip-state--active"
                      aria-hidden="true"
                      >${V.gripVertical}</span
                    >`:K}
            </button>`:U`<span class="chat-queue__leading chat-queue__icon" aria-hidden="true"
              >${E}</span
            >`}
      ${i}
      ${s&&o?U`<img
              class="chat-queue__images"
              src=${s}
              alt=${B(`chat.queue.imageCount`,{count:String(o.length)})}
              draggable="false"
              width="24"
              height="24"
              loading="lazy"
              decoding="async"
            />`:K}
      ${p?U`<textarea
              class="chat-queue__edit-input"
              rows="1"
              ${W(t=>tT(t,r?.editingText??e.text))}
              aria-label=${B(`chat.queue.editQueuedMessage`)}
              @beforeinput=${e=>{e.currentTarget instanceof HTMLTextAreaElement&&pT.set(e.currentTarget,{value:e.currentTarget.value,start:e.currentTarget.selectionStart,end:e.currentTarget.selectionEnd,inputType:e.inputType})}}
              @input=${e=>{if(e.currentTarget instanceof HTMLTextAreaElement){let t=e.currentTarget;eT(t),h?.length?r?.onEditChange?.(t.value,si(m,t.value,h,pT.get(t))):r?.onEditChange?.(t.value),pT.delete(t)}}}
              @keydown=${e=>{Lf(e)||(e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),r?.onCancel()):e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),r?.onEditSubmit?.()))}}
              @compositionend=${Cp}
              @keyup=${Df}
              @blur=${Df}
            ></textarea>`:U`<span class="chat-queue__copy">
              <span class="chat-queue__text" title=${T}>${T}</span>
              ${d&&!g?U`<span class="chat-queue__badge chat-queue__badge--steered"
                      >${B(`chat.queue.steer`)}</span
                    >`:K}
              ${u&&(!c||!e.sendError)?U`<span
                      class=${c?`chat-queue__badge`:l?`chat-queue__badge chat-queue__badge--reconnect`:`chat-queue__state`}
                      title=${Dn(l?e.sendError:void 0)}
                      >${u}</span
                    >`:K}
            </span>`}
      <span class="chat-queue__actions">
        ${c&&!p&&t.onQueueRetry?U`
                <button
                  class="chat-queue__action chat-queue__retry"
                  type="button"
                  aria-label=${B(`chat.queue.retryQueuedMessage`)}
                  @click=${()=>t.onQueueRetry?.(e.id)}
                >
                  ${V.refresh}
                  <span>${B(`chat.queue.retry`)}</span>
                </button>
              `:K}
        ${_?U`
                <button
                  class="chat-queue__action chat-queue__steer"
                  type="button"
                  ?disabled=${!g}
                  aria-label=${B(`chat.queue.steerQueuedMessage`)}
                  @click=${()=>t.onQueueSteer?.(e.id)}
                >
                  ${V.arrowUp}
                  <span>${B(`chat.queue.steer`)}</span>
                </button>
              `:K}
        ${p?U`
                <button
                  class="chat-queue__edit-submit"
                  type="button"
                  aria-label=${B(`chat.runControls.sendMessage`)}
                  @click=${()=>r?.onEditSubmit?.()}
                >
                  ${V.check}
                </button>
                <button
                  class="chat-queue__edit-cancel"
                  type="button"
                  aria-label=${B(`chat.queue.cancelEdit`)}
                  @click=${()=>r?.onCancel()}
                >
                  ${V.x}
                </button>
              `:K}
        ${f||p?K:U`
                <openclaw-tooltip .content=${B(`chat.queue.removeQueuedMessage`)}>
                  <button
                    class="chat-queue__remove"
                    type="button"
                    ?disabled=${p||e.serverQueued&&!t.canRemoveServerQueued}
                    aria-label=${B(`chat.queue.removeQueuedMessage`)}
                    @click=${n=>{n.detail<=1&&t.onQueueRemove(e.id)}}
                    @dblclick=${e=>e.stopPropagation()}
                  >
                    ${V.trash}
                  </button>
                </openclaw-tooltip>
              `}
        ${p||!C?K:U`
                <wa-dropdown
                  class="chat-queue__overflow"
                  placement="top-end"
                  @wa-select=${t=>{let n=t.detail.item;if(n.value===`edit`&&w){let i=t.currentTarget;$w(i instanceof Element?i.closest(`.chat-queue__item`):null,n.matches(`:focus-visible`)),r?.onEdit?.(e.id)}}}
                >
                  <button
                    slot="trigger"
                    class="chat-queue__more"
                    type="button"
                    ?disabled=${!w}
                    aria-label=${B(`chat.queue.moreActions`)}
                    @dblclick=${e=>e.stopPropagation()}
                  >
                    ${V.moreHorizontal}
                  </button>
                  <wa-dropdown-item value="edit" ?disabled=${!w}>
                    <span slot="icon" aria-hidden="true">${V.pencil}</span>
                    ${B(`chat.queue.editQueuedMessage`)}
                  </wa-dropdown-item>
                </wa-dropdown>
              `}
      </span>
      ${h?.length?U`<span class="chat-queue__mentions">
              ${B(`chat.mentions.selected`,{names:h.map(({start:e,end:t})=>m.slice(e,t)).join(`, `)})}
              ${p?U`<button
                      class="chat-queue__remove"
                      type="button"
                      aria-label=${B(`chat.mentions.remove`)}
                      @click=${()=>r?.onEditChange?.(m,[])}
                    >
                      ${V.x}
                    </button>`:K}
            </span>`:K}
      ${e.sendError&&!l?U`<span class="chat-queue__error">
              ${c&&u?U`<span class="chat-queue__badge">${u}</span>`:K}
              <span class="chat-queue__error-text">${e.sendError}</span>
            </span>`:K}
    </div>
  `}var oT,sT,cT,lT,uT,dT,fT,pT,mT,hT,gT;function _T(){return(_T=e((()=>{q(),Cn(),G(),Pn(),Qt(),H(),m(),Bi(),kf(),$c(),vu(),El(),wc(),oT=`application/x-openclaw-queued-message`,sT=`chat-queue__item--drop-target`,cT=`data-edit-keyboard-focus`,lT=`a, button, input, select, textarea, wa-dropdown, wa-dropdown-item`,uT=24,dT=12,fT=new WeakSet,pT=new WeakMap,mT=Wt(Un` <path d="M16 5H3" />
  <path d="M16 12H3" />
  <path d="M9 19H3" />
  <path d="m16 16-3 3 3 3" />
  <path d="M21 5v12a2 2 0 0 1-2 2h-6" />`),gT=new WeakSet})))()}function vT(e){if(e?.phase!==`interrupted`||Date.now()-e.occurredAt>=5e3)return K;let t=B(`chat.composer.runInterrupted`);return U`
    <span
      class="agent-chat__run-status agent-chat__run-status--interrupted"
      aria-label=${B(`chat.composer.runStatus`,{status:t})}
    >
      ${V.square}<span class="agent-chat__run-status-label">${t}</span>
    </span>
  `}function yT(e){if(!e)return K;let t=e.phase??`active`;if(Date.now()-e.occurredAt>=bT)return K;let n=[B(`chat.composer.fallbackSelected`,{model:e.selected}),B(`chat.composer.fallbackCurrent`,{model:t===`cleared`?e.selected:e.active}),t===`cleared`&&e.previous?B(`chat.composer.fallbackPrevious`,{model:e.previous}):null,e.reason?B(`chat.composer.fallbackReason`,{reason:e.reason}):null,e.attempts.length>0?B(`chat.composer.fallbackAttempts`,{attempts:e.attempts.slice(0,3).join(` | `)}):null].filter(Boolean).join(` • `),r=t===`cleared`?B(`chat.composer.fallbackCleared`,{model:e.selected}):B(`chat.composer.fallbackActive`,{model:e.active}),i=t===`cleared`?`compaction-indicator compaction-indicator--fallback-cleared`:`compaction-indicator compaction-indicator--fallback`,a=t===`cleared`?V.check:V.brain;return U`
    <openclaw-tooltip .content=${n}>
      <div class=${i} role="status" aria-live="polite" aria-label=${n}>
        ${a} ${r}
      </div>
    </openclaw-tooltip>
  `}var bT;function xT(){return(xT=e((()=>{q(),H(),m(),Zl(),bT=8e3})))()}function ST(e,t){let n=e.connected&&e.canSend&&!e.submitDisabledReason;return rT({queue:e.queue,displayQueue:e.displayQueue,offline:e.offline,canAbort:t,canRemoveServerQueued:n,onQueueRetry:n?e.onQueueRetry:void 0,onQueueSteer:n?e.onQueueSteer:void 0,onQueueMove:e.onQueueMove,queuedEdit:e.queuedEdit,onQueueRemove:e.onQueueRemove})}function CT(e){let{props:t,state:n,canCompose:r,showAbortableUi:i,visibleDraft:a,runStatusAnnouncement:o,composerRunStatus:s,requestUpdate:c,sendShortcut:l,questionPanelProps:u,showComposer:d,handleKeyDown:f,handleBeforeInput:p,handleInput:m,handleSelect:h,draftKey:g,handleCompositionEnd:_,handleBlur:v,dictation:y,runControlsProps:b,menus:x,mentionMenuHost:S,mentionError:C,skillMenuHost:w,slashMenuHost:T,goalComposer:E}=e,{slashMenuVisible:D,skillMenuVisible:O,mentionMenuVisible:k,menuVisible:A,activeMenuOptionId:ee,activeMenuOptionLabel:te,menuListboxId:j}=x,M=t.selectedSession,ne=Gw(M,t.sessions?.defaults?.contextTokens??null,{messages:t.messages,providerUsage:t.providerUsage}),re=t.composerControls??K,N=t.permissionPicker?Js(t.permissionPicker):K,ie=E.active?B(`chat.goals.objectivePlaceholder`):(t.attachments??[]).some(e=>!ec(e))?B(`chat.composer.placeholderWithAttachments`):B(`chat.composer.placeholder`,{name:t.assistantName||`agent`}),ae=t.realtimeTalkVideoStream?.getVideoTracks?.()[0]?.getSettings?.().facingMode!==`environment`,P=Yl(t.paneId,`slash-active-announcement`),F=t.disabledBanner?U`
        <div
          class="agent-chat__disabled-banner ${t.disabledBanner.kind===`composer-replacement`?`agent-chat__disabled-banner--replacement`:``} callout ${t.disabledBanner.tone===`neutral`?`agent-chat__disabled-banner--neutral`:`info`} callout--action"
          role="status"
        >
          ${t.disabledBanner.icon?U`<span
                  class="agent-chat__disabled-banner-icon agent-chat__disabled-banner-icon--${t.disabledBanner.icon}"
                  aria-hidden="true"
                  >${t.disabledBanner.icon===`archive`?V.archive:V.alertTriangle}</span
                >`:K}
          <div class="callout__content">
            ${t.disabledBanner.title?U`<div class="agent-chat__disabled-banner-title">
                    ${t.disabledBanner.title}
                  </div>`:K}
            <div class="agent-chat__disabled-banner-detail">${t.disabledBanner.text}</div>
          </div>
          ${t.disabledBanner.onAction?U`<button
                  type="button"
                  class="btn btn--sm ${t.disabledBanner.actionStyle??``}"
                  ?disabled=${!!t.disabledBanner.disabledReason||t.disabledBanner.busy}
                  aria-busy=${t.disabledBanner.busy?`true`:`false`}
                  title=${t.disabledBanner.disabledReason??K}
                  @click=${t.disabledBanner.onAction}
                >
                  ${t.disabledBanner.busy?U`<span class="btn__spinner" aria-hidden="true"></span>${t.disabledBanner.busyLabel??t.disabledBanner.actionLabel}`:t.disabledBanner.actionLabel}
                </button>`:K}
          ${t.disabledBanner.kind===`composer-replacement`&&i?xc(b):K}
        </div>
      `:K,I=d&&t.disabledBanner?.kind!==`composer-replacement`;t.capabilityMenu||(n.capabilityMenuView=`root`);let oe=Yl(t.paneId,`disabled-reason`),se=I?U`
        ${Ol({status:t.realtimeTalkCameraError?`error`:t.realtimeTalkStatus,detail:t.realtimeTalkDetail,onUseSystemDefaultMicrophone:t.onUseSystemDefaultMicrophone,onDismissError:t.realtimeTalkCameraError?void 0:t.onDismissRealtimeTalkError})}
        ${t.realtimeTalkInputNotice?Ol({status:`error`,detail:t.realtimeTalkInputNotice,onDismissError:t.onDismissRealtimeTalkInputNotice}):K}
      `:K,L=t.offline&&t.queuedOutboxCount?B(`chat.composer.offlineQueuedHint`,{count:String(t.queuedOutboxCount)}):null,R=t.disabledReason?{text:t.disabledReason,tone:t.disabledReasonTone??`danger`,icon:t.disabledReasonBusy?U`<span class="btn__spinner" aria-hidden="true"></span>`:(t.disabledReasonTone??`danger`)===`danger`?V.alertTriangle:V.shieldQuestion}:C?{text:C,tone:`danger`,icon:V.alertTriangle}:n.dictationError?{text:n.dictationError,tone:`danger`,icon:V.alertTriangle}:L?{text:L,tone:`info`,icon:V.inbox}:null,ce=I&&R?U`<div class="agent-chat__composer-status" data-tone=${R.tone}>
          <div
            id=${t.disabledReason?oe:K}
            class="agent-chat__composer-status-band"
            role=${R.tone===`danger`?`alert`:`status`}
            aria-live="polite"
            aria-busy=${t.disabledReasonBusy?`true`:`false`}
          >
            <span class="agent-chat__composer-status-icon" aria-hidden="true"
              >${R.icon}</span
            >
            <span class="agent-chat__composer-status-text">${R.text}</span>
          </div>
        </div>`:K,le=y?.active?Xl(n.dictationSelection?.value??a,y.transcript,n.dictationSelection?.start??a.length,n.dictationSelection?.end??a.length).value:a,ue=Pc(le),de=t.runError?K:vT(s),fe=yT(t.fallbackStatus),pe=t.progressCard?U`<div class="agent-chat__progress-float" ?hidden=${!d}>
        ${Gf(t.progressCard,`composer`,t.onDismissProgressCard,M?.status,M?.startedAt,M?.endedAt,t.runActive,t.collapseTaskProgress,{presented:d,gatewayScope:t.gatewayScope,sessionIdentity:t.progressCardIdentity,cardLifetime:t.progressCardLifetime,readingHistory:t.readingHistory,onManipulate:t.onProgressManipulate},t.connected&&t.canSend?t.progressCardRefresh:void 0,t.onClearSavedProgressCard)}
      </div>`:t.progressCardInitialLoading?U`<div
          class="agent-chat__progress-float agent-chat__progress-float--loading"
          ?hidden=${!d}
          aria-hidden="true"
        ></div>`:K,me=ST(t,i),he=M?.goal?U`<div class="agent-chat__goal-float">
        ${tx(n,M.goal,{canAct:t.connected&&t.canSend&&!t.submitDisabledReason&&!!t.currentSessionId&&!t.goalRecovery,onGoalAction:t.onGoalAction,onGoalEdit:t.onGoalSubmit?e=>E.begin(e):void 0,requestUpdate:c})}
      </div>`:K;return U`
    <div class="agent-chat__composer-shell">
      <div class="chat-footer__context">
        ${t.footerContent??K}
        <div class="agent-chat__composer-notices">
          ${t.notices??K} ${ce} ${se} ${fe}
          ${de===K?K:U`<div class="agent-chat__composer-run-status">${de}</div>`}
        </div>
        ${Nw(u)}
        ${t.disabledBanner?.kind===`above-composer`?F:K}
        ${Re(t.progressCardVisibility??!0,pe)} ${me}
        ${rx(t.goalRecovery,t.connected)} ${he}
        ${t.composerRecovery??K}
      </div>
      ${I?U`<div
              class="agent-chat__input agent-chat__input--chat agent-chat__input--mobile-toolbar ${t.offline?`agent-chat__input--offline`:``}${y?.active?` agent-chat__input--dictating`:``}${r?``:` agent-chat__input--disabled`}"
              aria-busy=${t.disabledReasonBusy?`true`:`false`}
              @wa-show=${Tu}
              @wa-after-show=${Pu}
              @openclaw-composer-dismiss-invocations=${()=>{Ul(n),sc(n),n.mentionMenu.close(),n.emojiMenu.dismiss(n.composerTextarea),c()}}
              @click=${e=>jl(e,r)}
              @pointerdown=${e=>{eu(e),jl(e,r)}}
              ${W(n.composerInputRef??void 0)}
            >
              ${D?ud(n,T,a,c):K}
              ${O?dc(n,w,c):K}
              ${n.emojiMenu.render(t.paneId,n.composerTextarea,c)}
              ${k?n.mentionMenu.render(S,c):K}
              <div class="agent-chat__composer-lede">
                <openclaw-mcp-app-catalog
                  surface="thread"
                  .sessionKey=${t.sessionKey}
                  .agentId=${t.currentAgentId}
                ></openclaw-mcp-app-catalog>
                <openclaw-mcp-app-resources
                  .sessionKey=${t.sessionKey}
                  .agentId=${t.currentAgentId}
                ></openclaw-mcp-app-resources>
                ${E.render()}
                ${Bc(a,t.mentions,()=>{px(t,t.getDraft?.()??t.draft,[]),c()},n.mentionMenu.selectedAvatarUrls)}
                ${t.replyTarget?U`
                        <div class="chat-reply-preview composer-context-strip">
                          <span class="chat-reply-preview__label composer-context-strip__label">
                            <span class="chat-reply-preview__icon composer-context-strip__icon"
                              >${V.messageSquare}</span
                            >
                            <span class="composer-context-strip__label-text"
                              >${B(`chat.messages.replyingTo`,{name:t.replyTarget.senderLabel??B(`chat.messages.message`)})}</span
                            >
                          </span>
                          <span class="chat-reply-preview__text composer-context-strip__text"
                            >${oo(t.replyTarget.text,120)}${t.replyTarget.text.length>120?`...`:``}</span
                          >
                          <button
                            type="button"
                            class="chat-reply-preview__dismiss composer-context-strip__dismiss"
                            @click=${()=>t.onClearReply?.()}
                            aria-label=${B(`chat.composer.cancelReply`)}
                            title=${B(`chat.composer.cancelReply`)}
                          >
                            ${V.x}
                          </button>
                        </div>
                      `:K}
                <openclaw-mcp-app-context-strip
                  .sessionKey=${t.sessionKey}
                  .agentId=${t.currentAgentId}
                ></openclaw-mcp-app-context-strip>
                ${Fl(t)}
                ${Ju(t.getPendingAttachmentReads?.()??t.pendingAttachmentReads??0)}
                ${_c(y)}
                ${Tc({...t,disabled:!r,cameraActive:d&&t.cameraActive!==!1})}
                ${t.realtimeTalkVideoStream?U`
                        <div class="agent-chat__video-preview">
                          <video
                            class=${ae?`agent-chat__video-preview-mirrored`:K}
                            autoplay
                            .muted=${!0}
                            playsinline
                            aria-label=${B(`chat.composer.cameraPreview`)}
                            .srcObject=${Nn(t.realtimeTalkVideoStream)}
                          ></video>
                          ${t.realtimeTalkCameraDevices&&t.realtimeTalkCameraDevices.length>=2&&t.onSwitchRealtimeCamera?U`
                                  <openclaw-tooltip
                                    class="agent-chat__video-preview-switch-tooltip"
                                    .content=${B(`chat.composer.switchCamera`)}
                                  >
                                    <button
                                      type="button"
                                      class="agent-chat__video-preview-switch"
                                      aria-label=${B(`chat.composer.switchCamera`)}
                                      ?disabled=${t.realtimeTalkVideoPending}
                                      @click=${t.onSwitchRealtimeCamera}
                                    >
                                      ${V.switchCamera}
                                    </button>
                                  </openclaw-tooltip>
                                `:K}
                        </div>
                      `:K}
              </div>

              <div class="agent-chat__composer-input-row">
                <div class="agent-chat__composer-combobox">
                  <textarea
                    ${W(n.textareaRef??void 0)}
                    .value=${kn([le],()=>Nn(le))}
                    dir=${ue}
                    ?disabled=${!r}
                    ?readonly=${y?.locksComposer===!0||E.pending}
                    aria-autocomplete="list"
                    aria-controls=${Dn(A?j:void 0)}
                    aria-haspopup=${Dn(A?`listbox`:void 0)}
                    aria-activedescendant=${Dn(ee??void 0)}
                    aria-describedby=${`${P}${t.disabledReason?` ${oe}`:``}`}
                    aria-keyshortcuts=${l===`enter`?`Enter`:`Control+Enter Meta+Enter`}
                    @keydown=${f}
                    @beforeinput=${p}
                    @input=${m}
                    @select=${h}
                    @focus=${h}
                    @pointerup=${h}
                    @keyup=${e=>{Df(e),n.emojiMenu.handleKeyup(e),(e.key.startsWith(`Arrow`)||e.key===`Home`||e.key===`End`)&&h(e)}}
                    @compositionstart=${e=>{let t=n.emojiMenu.open;n.mentionMenu.close(),n.emojiMenu.close(),n.editRevision+=1,n.composerComposing=!0,n.composingDraft={key:g,value:e.target.value},t&&c()}}
                    @compositionend=${_}
                    @blur=${v}
                    @paste=${e=>{r&&!t.suggestionComposer&&cu(e,t)}}
                    aria-label=${B(`chat.composer.composerInput`)}
                    placeholder=${y?.active?``:ie}
                    rows="1"
                  ></textarea>
                  <span class="agent-chat__composer-placeholder" aria-hidden="true"
                    >${y?.active?``:ie}</span
                  >
                  <span
                    id=${P}
                    class="sr-only"
                    role="status"
                    aria-live="polite"
                    aria-atomic="true"
                    >${te}</span
                  >
                  <span
                    class="agent-chat__run-status-announcement sr-only"
                    role="status"
                    aria-live="polite"
                    aria-atomic="true"
                    >${o}</span
                  >
                </div>
              </div>

              <div class="agent-chat__composer-footer">
                <div class="agent-chat__composer-lead agent-chat__composer-meta">
                  ${Qc({attachments:t,capabilityMenu:t.capabilityMenu,disabled:!r||t.suggestionComposer===!0,open:n.capabilityMenuOpen,view:n.capabilityMenuView,toolOverrides:t.toolOverrides,onOpenChange:e=>{n.capabilityMenuOpen=e,e||(n.capabilityMenuView=`root`),c()},onViewChange:e=>{n.capabilityMenuView=e,c()}})}
                  ${N}
                </div>
                <div class="agent-chat__composer-trail">
                  <div class="agent-chat__composer-meta agent-chat__composer-context">
                    ${ne}
                  </div>
                  ${re===K?K:U` <div class="agent-chat__composer-controls">${re}</div> `}
                  <div class="agent-chat__composer-actions">
                    ${hl(b)}
                  </div>
                </div>
              </div>
            </div> `:t.disabledBanner?.kind===`composer-replacement`?F:K}
    </div>
  `}function wT(){return(wT=e((()=>{_s(),yp(),Sp(),q(),Vn(),Cn(),zn(),G(),H(),Hf(),m(),kf(),Iu(),Je(),Ks(),fc(),ru(),Yw(),yl(),nl(),ox(),Wc(),Fw(),_T(),pu(),$u(),Xu(),Sx(),xT(),md(),yu(),Gu(),Ac()})))()}function TT(e){let t=cx(e.paneId);t.slashCommandDispatchConnected=e.connected;let n=e.canCompose??e.canSend,r=e.sending||e.stream!==null,i=!!(e.canAbort&&e.onAbort)&&!lx(e.runStatus),a=e.queue.find(t=>ux(t,e.sessionKey,e.runStatus)),o=e.queue.some(e=>!e.pendingRunId&&(e.sendState===`submitting`||e.sendState===`sending`||e.sendState===`waiting-model`)),s=e.sending&&(!o||a!==void 0),c=dx(e),l=s||c?{phase:`in-progress`}:e.runStatus,u=fx(e);t.composerDraftScopeKey!==null&&t.composerDraftScopeKey!==u&&(t.emojiMenu.close(),t.dictation?.dispose(),t.dictation=null,t.dictationSelection=null),t.composerDraftScopeKey=u;let d=t.composingDraft?.key===u?t.composingDraft.value:e.draft;t.composerInputRef??=e=>{t.composerInput=ku(t.composerInput,e)},t.textareaRef??=e=>{let n=e instanceof HTMLTextAreaElement?e:null,r=t.composerTextarea;r&&r!==n&&Tl(r),t.composerTextarea=n,n&&(qs(n),fu(n),t.restoreComposerFocus&&(t.restoreComposerFocus=!1,queueMicrotask(()=>t.composerTextarea?.focus({preventScroll:!0}))))},t.composerTextarea?.isConnected&&t.composerTextarea.value!==d&&fu(t.composerTextarea);let f=e.assistantName||`OpenClaw`,p=e.waitingApproval?B(`chat.waitingForApproval`):a?.sendState===`waiting-model`?B(`chat.composer.preparingModel`):e.stream===null?s||a?B(`chat.composer.sendingMessage`):B(`chat.composer.working`,{name:f}):B(`chat.composer.responding`,{name:f}),m=l==null?``:l.phase===`in-progress`?p:l.phase===`done`?B(`chat.composer.runDone`):B(`chat.composer.runInterrupted`),h=e.onRequestUpdate??(()=>{}),g=kw(e,t,h),_=e.mentionsUnsupported||g.active;t.mentionMenu.syncDirectory(e.connected&&n&&!_?e.mentionDirectory:void 0);let v=()=>e.getMentions?.()??e.mentions??[],y=v().length>0&&(_||d.trimStart().startsWith(`/`))?B(`chat.mentions.unsupported`):null,b=(t,n)=>{px(e,t,n),e.onTypingChange?.(!!t.trim(),t)},x={paneId:e.paneId,getDraft:()=>t.composerTextarea?.value??e.getDraft?.()??e.draft,commitDraft:b,getTextarea:()=>t.composerTextarea,refreshCommands:e.onSlashIntent},S={...x,resolveArgOptions:t=>rl(t,e),runCommand:g.submitCommand,canRun:(n,r,i=``)=>e.canSend&&t.slashCommandDispatchConnected&&!(n&&!e.onSlashCommand)&&(!e.modelRequiredReason||ua(r?`/${r.name} ${i}`:x.getDraft()))&&(!e.submitDisabledReason||Ei(r?`/${r.name} ${i}`:x.getDraft())),runInlineCommand:e.connected?e.onSlashCommand:void 0,activateComposerMode:g.activateCommand},C={paneId:e.paneId,getDraft:x.getDraft,getMentions:v,getTextarea:x.getTextarea,commitDraft:b},w=bn(e.sendShortcut),T=e.connected&&w===`enter`&&i&&!e.suggestionComposer&&e.followUpMode!==void 0&&e.followUpMode!==`interrupt`?e.followUpMode===`steer`?`queue`:`steer`:void 0,E=Pw(e,t,h),D=!(!E||E.model.nonBlocking||t.questionCollapsed);!t.questionTakeoverActive&&D&&(t.composingDraft?.key===u&&(px(e,t.composingDraft.value),t.composingDraft=null),t.composerComposing=!1),t.questionTakeoverActive&&!D&&(t.restoreComposerFocus=!0),t.questionTakeoverActive=D;let O=!D,k=n=>e.canSend&&(!e.modelRequiredReason||!g.active&&(e.getAttachments?.()??e.attachments??[]).length===0&&ua(n))&&(!e.submitDisabledReason||!g.active&&ra(n))&&!(v().length>0&&(_||n.trimStart().startsWith(`/`)))&&!g.pending&&t.dictation?.locksComposer!==!0&&!(t.skillMenuOpen&&t.skillCommandRefreshPending)&&(e.getPendingAttachmentReads?.()??e.pendingAttachmentReads??0)===0&&(e.connected||!n.trimStart().startsWith(`/`)),A=k(d),ee=n=>{t.emojiMenu.close(),t.mentionMenu.close();let r=n?.value??e.getDraft?.()??e.draft,i=e.getDraft?.()??e.draft;i===``&&r!==``&&n?.value===r?t.pendingClearedSubmittedDraft={key:u,value:r}:gx(t,u),n&&n.value!==i&&(n.value=i,jc(n))},te=jw({state:t,props:e,skillMenuHost:x,slashMenuHost:S,mentionMenuHost:C,requestUpdate:h,sendShortcut:w,canSubmitDraft:k,commitDraft:t=>px(e,t),syncDraftAfterSend:ee,showAbortableUi:i,alternateFollowUpMode:T,goalComposer:g}),j=e=>t.emojiMenu.update(e,h,!t.composerComposing&&!t.skillMenuOpen&&!t.slashMenuOpen&&!t.mentionMenu.open),M=(n,r=!1)=>{jc(n,{nativeInput:!0}),n.dir=Pc(n.value);let i=v();if(px(e,n.value,i.length?si(e.getDraft?.()??e.draft,n.value,i,t.mentionInput):void 0),t.mentionInput=void 0,g.activateDraft(n.value),!g.active){id(n.value,t,S,h),Zc(n.value,n.selectionStart,t,x,h);let e=r?`trigger`:`input`;t.mentionMenu.update(n,h,e)}j(n),(!!n.value.trim()!=!!d.trim()||k(n.value)!==A)&&h()},ne=r=>{let i=r.target;i instanceof HTMLTextAreaElement&&(t.mentionInput={value:i.value,start:i.selectionStart,end:i.selectionEnd,inputType:r.inputType},!t.composerComposing&&!r.isComposing&&(mx(t,fx(e)),t.emojiMenu.complete(r,h,n)))},re=n=>{let r=n.target,i=hx(t,u);if(t.composerComposing||n.isComposing){t.composingDraft={key:u,value:r.value},h();return}if(t.composingDraft?.key===u&&(t.composingDraft=null),vx(r,n,e.getDraft?.()??e.draft,i,t))return;let a=n.inputType===`insertText`&&n.data?.includes(`@`)===!0;(n.inputType===`insertFromPaste`||n.inputType===`insertFromDrop`)&&t.mentionMenu.close(),M(r,a),e.onTypingChange?.(!!r.value.trim(),r.value)},N=e=>{let n=e.target;j(n),!g.active&&(t.mentionMenu.update(n,h),e.type!==`keyup`&&(id(n.value,t,S,h),Zc(n.value,n.selectionStart,t,x,h)))},ie=n=>{Cp(n),t.composerComposing=!1,t.composingDraft?.key===u&&(t.composingDraft=null),M(n.target);let r=n.target.value;e.onTypingChange?.(!!r.trim(),r)},ae=n=>{Df(n);let r=t.emojiMenu.open;t.emojiMenu.close(),r&&h();let i=n.target;if(t.composerComposing=!1,t.composingDraft?.key===u&&(t.composingDraft=null),!t.dictation?.locksComposer){let t=Xs(i.value);i.value!==t&&(i.value=t,jc(i)),px(e,t)}e.onTypingChange?.(!1)},P=n=>{let r=t.composerTextarea?.value??e.draft;if(k(r)&&(t.composerComposing=!1,t.composingDraft=null,px(e,r),e.onTypingChange?.(!1),!g.activateDraft(r,!0))){if(g.active){g.submit(n);return}e.onSend(void 0,n),ee(t.composerTextarea)}};t.microphonePicker??=new wl(h);let F=t.microphonePicker;F.syncCatalog(e.gatewayClient??null,e.connected);let I=()=>{if(F.realtimeStatus!==`ready`){F.handleOpen();return}e.submitDisabledReason||e.onToggleRealtimeTalk?.()},oe=()=>{if(e.realtimeTalkActive){e.onToggleRealtimeTalk?.();return}if((t.composerTextarea?.value??d).trim()||e.attachments?.length){P();return}I()},se=e.realtimeTalkInputDeviceId?.trim()??``,L=e.onToggleRealtimeTalk?Fu({devices:F.devices,loading:F.loading,open:F.open,selectedDeviceId:se,voiceActive:!!e.realtimeTalkActive,issue:F.issue,holdToDictate:e.composerHoldToRecord!==!1,realtimeStatus:F.realtimeStatus,dictationStatus:F.dictationStatus,onOpen:F.handleOpen,onClose:F.handleClose,onSelect:e=>{_t({realtimeTalkInputDeviceId:e.trim()||void 0}),F.handleClose()},onHoldToDictateChange:t=>{e.onComposerHoldToRecordChange?e.onComposerHoldToRecordChange(t):_t({composerHoldToRecord:t}),h()},onOpenTalkSettings:e.onOpenTalkSettings,onOpenDictationSettings:e.onOpenDictationSettings}):K,R={client:e.gatewayClient??null,connected:e.connected,enabled:e.composerHoldToRecord!==!1,dictationAvailable:F.dictationStatus===`ready`,realtimeTalkActive:e.realtimeTalkActive===!0,onCommit:(n,r)=>{let i=t.composerTextarea,a=t.dictationSelection,o=i?.value??e.getDraft?.()??e.draft,s=a&&(!r||a.value===o)?a:{start:i?.selectionStart??o.length,end:i?.selectionEnd??o.length,value:o},c=Xl(s.value,n,s.start,s.end);i&&(i.value=c.value,jc(i)),px(e,c.value),t.dictationSelection=null,h(),queueMicrotask(()=>{let e=t.composerTextarea;e&&(e.focus({preventScroll:!0}),e.selectionStart=c.caret,e.selectionEnd=c.caret)})},onError:(e,n)=>{let r=n.kind===`interrupted`&&n.preservesText?B(`chat.composer.dictationInterruptedRecovery`):B(`chat.composer.dictationStartRecovery`);t.dictationError=`${e} ${r}`,h()},onStateChange:()=>{t.dictation?.locksComposer&&(t.editRevision+=1,e.onDismissRealtimeTalkError?.()),h()},onDictationUnavailable:F.handleOpen,onTap:d.trim()||e.attachments?.length?I:oe};t.dictation??=new tl(R),t.dictation.update(R);let ce=e.onToggleRealtimeTalk&&e.composerHoldToRecord!==!1?t.dictation:void 0,le={canAbort:i,canSend:k(d),submitDisabledReason:e.submitDisabledReason,submitPending:e.submitPending,connected:e.connected,draft:d,hasAttachments:!e.suggestionComposer&&!!e.attachments?.length,preparingAttachments:(e.getPendingAttachmentReads?.()??e.pendingAttachmentReads??0)>0,isBusy:r,followUpMode:e.followUpMode,alternateFollowUpMode:T,suggestionComposer:e.suggestionComposer,submissionLabel:g.submissionLabel,sending:e.sending,voiceActive:e.realtimeTalkActive,voiceStatus:e.realtimeTalkStatus,voiceDetail:e.realtimeTalkDetail,voiceInputLevel:e.realtimeTalkInputLevel,voiceVideoCapable:e.realtimeTalkVideoCapable,voiceVideoEnabled:!!e.realtimeTalkVideoStream,voiceVideoPending:e.realtimeTalkVideoPending,onAbort:e.onAbort,onSend:P,onToggleVoice:e.onToggleRealtimeTalk?oe:void 0,onToggleCamera:e.onToggleRealtimeCamera,microphonePicker:L,dictation:ce,onDictationPointerDown:e=>{t.dictationError&&(t.dictationError=null,h());let n=t.composerTextarea,r={start:n?.selectionStart??d.length,end:n?.selectionEnd??d.length,value:n?.value??d};ce?.handlePointerDown(e)&&(t.dictationSelection=r,n&&(n.readOnly=!0))},onPrimaryActionPointerDown:e=>Uu(e,t.composerTextarea)};e.modelSwitching&&t.slashMenuCommand?.key===`think`&&Ul(t),(!n||t.composerComposing||t.dictation?.locksComposer||g.pending)&&t.emojiMenu.close();let ue=e.connected&&n;return!(ue&&ml(t))&&t.skillMenuOpen&&!t.skillCommandRefreshPending&&sc(t),CT({props:e,state:t,canCompose:n,showAbortableUi:i,visibleDraft:d,runStatusAnnouncement:m,composerRunStatus:l,requestUpdate:h,sendShortcut:w,questionPanelProps:E,showComposer:O,handleKeyDown:te,handleBeforeInput:ne,handleInput:re,handleSelect:N,draftKey:u,handleCompositionEnd:ie,handleBlur:ae,dictation:ce,runControlsProps:le,menus:dd(e.paneId,ue,t,t,t.mentionMenu,t.emojiMenu),mentionMenuHost:C,mentionError:y,skillMenuHost:x,slashMenuHost:S,goalComposer:g})}function ET(){return(ET=e((()=>{q(),an(),ht(),m(),ii(),ma(),Bi(),kf(),Iu(),Ks(),Al(),yl(),nl(),Aw(),Mw(),Ic(),Fw(),$u(),Xu(),Sx(),wT(),oi()})))()}function DT(e,t){try{let n=e.getItem(t);if(!n)return!1;let r=JSON.parse(n);return Xa(r)&&r.open===!0}catch{return!1}}function OT(e){try{e.setItem(jT,`1`)}catch{}}function kT(e){try{return e.getItem(jT)===`1`}catch{return!1}}function AT(e){let t=e.sessionKey.trim(),n=e.storage===void 0?P():e.storage;if(!t||!n||kT(n))return e.settings;if(e.settings.sidebarSessionLayouts?.[t]!==void 0)return OT(n),e.settings;let r=new Set([...e.browserAvailable?[`browser`]:[],...e.desktopAvailable?[`desktop`]:[]]),i={columns:[]};for(let e of MT)r.has(e.slot)&&DT(n,e.storageKey)&&(i=qy(i,e.slot));let a=i.columns.length>0?_t({sidebarSessionLayouts:le(e.settings.sidebarSessionLayouts,t,i)}):e.settings;return OT(n),a}var jT,MT;function NT(){return(NT=e((()=>{eo(),an(),st(),ab(),jT=`openclaw.chat.sidePanel.legacyDockVisibility.v1`,MT=[{storageKey:`openclaw.browser.panel.v1`,slot:`browser`},{storageKey:`openclaw.desktopPanel`,slot:`desktop`}]})))()}function PT(e){let{gatewayUrl:t,sessionKey:n}=e,r;try{r=new URL(t)}catch{return{ok:!1,reason:`unavailable`}}if(r.hash)return{ok:!1,reason:`unavailable`};if((r.protocol===`ws:`||r.protocol===`wss:`)&&r.search)return{ok:!1,reason:`query-routed`};let i=n;if(!Pe(n)){let t=e.rowAgentId||e.selectedAgentId;if(!t)return{ok:!1,reason:`unavailable`};i=`agent:${t}:${n}`}try{return{ok:!0,command:`openclaw resume --handoff ${kr({sessionKey:i,gatewayUrl:t})}`,qualifiedSessionKey:i}}catch{return{ok:!1,reason:`unavailable`}}}function FT(){return(FT=e((()=>{Mr(),I()})))()}var IT,LT,$;function RT(){return(RT=e((()=>{q(),Rn(),rp(),up(),H(),ps(),Lo(),Ws(),m(),R(),OC(),IT={},LT={"compact:open-layout":`layout`,"compact:open-panels":`panels`,"compact:open-sharing":`sharing`,"compact:open-view":`view`},$=class extends s{constructor(...e){super(...e),this.session=Hs,this.worktreePath=null,this.onboarding=!1,this.preferencesBrowserOnly=!1,this.compact=!1,this.navigationAllowed=!1,this.copyMarkdownAllowed=!1,this.splitAllowed=!1,this.settings=IT,this.panelActions=[],this.layoutActions=[],this.sessionActions=[],this.sharing=null,this.groups=[],this.currentOwner=null,this.actionDisabledReasons={},this.forkDisabled=!1,this.forkFromLastCompleted=!1,this.archiveAllowed=!1,this.archiveShortcut=!1,this.deleteAllowed=!1,this.onOpen=()=>{},this.onOpenCommandPalette=()=>{},this.onSettingsChange=()=>{},this.onAction=()=>{},this.compactView=`root`,this.managementActions=new rs(this,()=>({session:this.session,selectionCount:1,compact:this.compact,navigationAllowed:this.navigationAllowed,copyMarkdownAllowed:this.copyMarkdownAllowed,splitAllowed:this.splitAllowed,renderOpenInExtra:e=>this.renderTerminalAction(e),disabled:!1,actionDisabledReasons:this.actionDisabledReasons,forkDisabled:this.forkDisabled,forkFromLastCompleted:this.forkFromLastCompleted,archiveAllowed:this.archiveAllowed,archiveShortcut:this.archiveShortcut,deleteAllowed:this.deleteAllowed,groups:this.groups,currentOwner:this.currentOwner,worktreePath:this.worktreePath}),e=>this.onAction(e),()=>{let e=this.querySelector(`wa-dropdown`);e&&(e.open=!1)}),this.handleSelect=e=>{let t=e.detail.item.value;if(!t)return;if(t.startsWith(`board-widget:`)){this.boardWidgetMenu?.onSelect(t.slice(13));return}let n=es(t),r=n??LT[t];if(r){e.preventDefault(),this.compactView=r,n?this.managementActions.prepareCompactView(n):r===`sharing`&&!this.sharing?.openDisabledReason&&this.sharing?.onOpen(),this.managementActions.focusCurrentView();return}if(t===`open-command-palette`){this.onOpenCommandPalette();return}if(t.startsWith(`quick:`)){let[,e,n]=t.split(`:`),r=(e===`panels`?this.panelActions:e===`session`?this.sessionActions:this.layoutActions).find(e=>e.id===n);r&&r.kind!==`status`&&!r.disabled&&r.onActivate();return}if(t.startsWith(`view:`)){if(e.preventDefault(),this.onboarding)return;let n=t.slice(5);n===`reasoning`?this.onSettingsChange({chatShowThinking:!this.settings.chatShowThinking}):n===`tool-calls`?this.onSettingsChange({chatShowToolCalls:!this.settings.chatShowToolCalls}):n===`commentary`&&this.onSettingsChange({chatPersistCommentary:this.settings.chatPersistCommentary===!1});return}if(t.startsWith(`visibility:`)||t.startsWith(`member:`)||t.startsWith(`public:`)){this.sharing&&CC(this.sharing,t);return}if(this.managementActions.handleSelect(t)){e.preventDefault();return}t===`continue-in-terminal`&&!this.actionDisabledReasons[t]&&(e.currentTarget.open=!1,this.onAction({kind:t}))},this.handleShow=()=>{this.compactView=`root`,this.managementActions.loadOwners(),this.onOpen()}}renderQuickActionItems(e,t,n=!1){return t.map(t=>{let r=U`<span class="session-menu__text"
        >${t.label}${t.description?U`<span class="session-menu__description">${t.description}</span>`:K}</span
      >`;if(t.kind===`status`)return U`<div
          slot=${n?K:`submenu`}
          class="session-menu__status"
          data-menu-status=${t.id}
          role="note"
        >
          <span class="session-menu__check" aria-hidden="true">${t.icon}</span>
          ${r}
        </div>`;let i=typeof t.badge==`number`&&t.badge>0?U`<span slot="details" class="session-menu__sub">${t.badge}</span>`:K;return U`
        <wa-dropdown-item
          slot=${n?K:`submenu`}
          class="session-menu__item"
          value=${`quick:${e}:${t.id}`}
          type=${t.active===void 0?K:`checkbox`}
          .checked=${t.active??!1}
          ?disabled=${t.disabled}
          variant=${t.variant??K}
        >
          <span slot="icon" class="session-menu__icon" aria-hidden="true">${t.icon}</span>
          ${r} ${i}
        </wa-dropdown-item>
      `})}renderQuickActions(e,t){if(t.length===0)return K;let n=B(e===`panels`?`chat.sessionHeader.panels`:`chat.sessionHeader.layout`),r=e===`panels`?V.panelRightOpen:V.columns2;return this.compact?ss({value:`compact:open-${e}`,label:n,icon:r}):U`
      <wa-dropdown-item class="session-menu__item">
        <span slot="icon" class="session-menu__icon" aria-hidden="true">${r}</span>
        <span class="session-menu__text">${n}</span>
        ${this.renderQuickActionItems(e,t)}
      </wa-dropdown-item>
    `}renderViewSubmenu(e=!1){let t=!this.onboarding&&this.settings.chatShowThinking,n=this.onboarding?!0:this.settings.chatShowToolCalls,r=this.settings.chatPersistCommentary!==!1,i=this.onboarding?B(`chat.onboardingDisabled`):K,a=(t,n,r)=>U`
      <wa-dropdown-item
        slot=${e?K:`submenu`}
        class="session-menu__item"
        type="checkbox"
        value=${`view:${t}`}
        .checked=${r}
        ?disabled=${this.onboarding}
        title=${i}
      >
        <span class="session-menu__text">${n}</span>
      </wa-dropdown-item>
    `;return U`
      ${a(`reasoning`,B(`chat.view.reasoning`),t)}
      ${a(`tool-calls`,B(`chat.view.toolCalls`),n)}
      ${a(`commentary`,B(`chat.view.commentary`),r)}
      ${this.preferencesBrowserOnly?U`<div slot=${e?K:`submenu`} class="session-menu__info" role="note">
              ${B(`quickSettings.personal.browserOnly`)}
            </div>`:K}
    `}renderCompactView(){if(this.compactView===`root`||this.compactView===`open-in`||this.compactView===`copy`||this.compactView===`assign-owner`||this.compactView===`icon`||this.compactView===`group`)return this.managementActions.renderCompactView(this.compactView);let e=U`${this.compactView===`panels`?this.renderQuickActionItems(`panels`,this.panelActions,!0):this.compactView===`layout`?this.renderQuickActionItems(`layout`,this.layoutActions,!0):this.compactView===`sharing`&&this.sharing?EC(this.sharing,!0):this.renderViewSubmenu(!0)}`;return Mo(e)}renderRootView(){return U`
      ${this.compact?U`<wa-dropdown-item class="session-menu__item" value="open-command-palette">
                <span slot="icon" class="session-menu__icon" aria-hidden="true"
                  >${V.search}</span
                >
                <span class="session-menu__text">${B(`chat.openCommandPalette`)}</span>
              </wa-dropdown-item>
              <div class="session-menu__separator" role="separator"></div>`:K}
      ${this.boardWidgetMenu?U`
              <div class="board-widget__page-menu-heading">
                <strong
                  >${this.boardWidgetMenu.widget.title||this.boardWidgetMenu.widget.name}</strong
                >
              </div>
              ${Zf(this.boardWidgetMenu.widget,`details`)}
              ${this.boardWidgetMenu.canMutate?Yf({widget:this.boardWidgetMenu.widget,tabs:this.boardWidgetMenu.tabs,disabled:!1,prefix:`board-widget:`}):K}
              <div class="session-menu__separator" role="separator"></div>
            `:K}
      ${this.renderQuickActions(`panels`,this.panelActions)}
      ${this.renderQuickActions(`layout`,this.layoutActions)}
      ${this.compact&&this.sharing?.session&&wC(this.sharing.session)?ss({value:`compact:open-sharing`,label:B(`chat.sessionSharing.menu`),icon:V.users,disabled:!!this.sharing.openDisabledReason}):K}
      ${this.compact?ss({value:`compact:open-view`,label:B(`chat.view.menu`),icon:V.eye}):U`<wa-dropdown-item class="session-menu__item">
              <span slot="icon" class="session-menu__icon" aria-hidden="true">${V.eye}</span>
              <span class="session-menu__text">${B(`chat.view.menu`)}</span>
              ${this.renderViewSubmenu()}
            </wa-dropdown-item>`}
      <div class="session-menu__separator" role="separator"></div>
      ${this.managementActions.renderPrimaryActions()}
      <div class="session-menu__separator" role="separator"></div>
      ${this.managementActions.renderOrganizationActions()}
      ${this.renderQuickActionItems(`session`,this.sessionActions,!0)}
      <div class="session-menu__separator" role="separator"></div>
      ${this.managementActions.renderTransferActions()}
      <div class="session-menu__separator" role="separator"></div>
      ${this.managementActions.renderDeleteAction()}
    `}renderTerminalAction(e){return U`<wa-dropdown-item
      slot=${e?K:`submenu`}
      class="session-menu__item"
      value="continue-in-terminal"
      ?disabled=${!!this.actionDisabledReasons[`continue-in-terminal`]}
      title=${this.actionDisabledReasons[`continue-in-terminal`]??K}
    >
      <span slot="icon" class="session-menu__icon" aria-hidden="true">${V.terminal}</span>
      <span class="session-menu__text">${B(`chat.sessionHeader.continueInTerminal.action`)}</span>
    </wa-dropdown-item>`}render(){let e=B(`chat.sidebar.sessionMenu`,{session:this.session.label});return U`
      <wa-dropdown
        class=${`session-menu chat-header-session-menu${this.compact?` chat-header-session-menu--compact`:``}${this.compact&&this.compactView===`sharing`?` chat-header-session-menu--compact-sharing`:``}`}
        placement="bottom-end"
        aria-label=${e}
        @keydown=${e=>{this.managementActions.handleKeydown(e)||us(this,e)}}
        @wa-show=${this.handleShow}
        @wa-select=${this.handleSelect}
      >
        <button
          slot="trigger"
          class="btn btn--ghost btn--icon chat-icon-btn chat-header-session-menu__trigger"
          type="button"
          aria-label=${e}
          aria-haspopup="menu"
        >
          ${V.moreHorizontal}
        </button>
        ${this.compact&&this.compactView!==`root`?this.renderCompactView():this.renderRootView()}
      </wa-dropdown>
    `}},Q([X({attribute:!1})],$.prototype,`session`,void 0),Q([X({attribute:!1})],$.prototype,`worktreePath`,void 0),Q([X({attribute:!1})],$.prototype,`onboarding`,void 0),Q([X({attribute:!1})],$.prototype,`preferencesBrowserOnly`,void 0),Q([X({attribute:!1})],$.prototype,`compact`,void 0),Q([X({attribute:!1})],$.prototype,`navigationAllowed`,void 0),Q([X({attribute:!1})],$.prototype,`copyMarkdownAllowed`,void 0),Q([X({attribute:!1})],$.prototype,`splitAllowed`,void 0),Q([X({attribute:!1,hasChanged:(e,t)=>e?.chatShowThinking!==t?.chatShowThinking||e?.chatShowToolCalls!==t?.chatShowToolCalls||e?.chatPersistCommentary!==t?.chatPersistCommentary})],$.prototype,`settings`,void 0),Q([X({attribute:!1})],$.prototype,`panelActions`,void 0),Q([X({attribute:!1})],$.prototype,`layoutActions`,void 0),Q([X({attribute:!1})],$.prototype,`sessionActions`,void 0),Q([X({attribute:!1})],$.prototype,`boardWidgetMenu`,void 0),Q([X({attribute:!1})],$.prototype,`sharing`,void 0),Q([X({attribute:!1,hasChanged:(e,t)=>e.length!==t?.length||e.some((e,n)=>e!==t?.[n])})],$.prototype,`groups`,void 0),Q([X({attribute:!1})],$.prototype,`currentOwner`,void 0),Q([X({attribute:!1})],$.prototype,`actionDisabledReasons`,void 0),Q([X({attribute:!1})],$.prototype,`forkDisabled`,void 0),Q([X({attribute:!1})],$.prototype,`forkFromLastCompleted`,void 0),Q([X({attribute:!1})],$.prototype,`archiveAllowed`,void 0),Q([X({attribute:!1})],$.prototype,`archiveShortcut`,void 0),Q([X({attribute:!1})],$.prototype,`deleteAllowed`,void 0),Q([X({attribute:!1})],$.prototype,`onOpen`,void 0),Q([X({attribute:!1})],$.prototype,`onOpenCommandPalette`,void 0),Q([X({attribute:!1})],$.prototype,`onSettingsChange`,void 0),Q([X({attribute:!1})],$.prototype,`onAction`,void 0),Q([Y()],$.prototype,`compactView`,void 0),customElements.get(`openclaw-chat-header-session-menu`)||customElements.define(`openclaw-chat-header-session-menu`,$)})))()}function zT(e){let t=e.session,n=t?.placement,r=n?.state,i=pf(t);if(!t||!Jn(r)&&!i)return K;let a=t.placementMove,o=n&&n.state!==`local`&&n.state!==`requested`?n:void 0,s=o?.providerId,c=o?.profileId,l=o?.environmentId,u=!!(s||c||l),d=n?.state===`active`?n.runner:void 0,f=d?.kind===`device`&&d.status===`offline`,p=(n?.state===`active`||n?.state===`draining`)&&n.workspaceResultReconciling===!0,m=n?.state===`failed`&&n.recoveryAction===`restart`,h=Bo(n),g=cf(t,e.placementStartupStatus),_=a?.target.kind===`gateway`?B(`sessionsView.moveSessionGatewayTarget`):a?.target.kind===`profile`?a.target.profileId:a?.target.kind===`device`?a.target.deviceId:void 0,v=a?.error?B(`sessionsView.moveSessionFailed`):a&&_?B(`sessionsView.movingSession`,{target:_}):e.placementRestarting?B(t.repositoryWorkspaceId&&r!==`failed`?`sessionsView.dispatchingSession`:`sessionsView.restartingSession`):e.placementMoving?B(`sessionsView.movingSessionGeneric`):f?B(`sessionsView.deviceOffline`):p||r===`draining`||r===`reconciling`?B(`sessionsView.syncingCloudFiles`):i?B(`sessionsView.repositoryWorkerRequiredLabel`):g.label,y=e.placementMoveDisabledReason,b=e.placementReclaimDisabledReason,x=e.placementRecoveryDisabledReason,S=ot(n?.stateChangedAtMs,{fallback:``}),C=a?.error?a.error:i||r===`active`||u?K:`${r}${S?` · ${S}`:``}`;return U`
    <div class="chat-pane__placement-control">
      <wa-dropdown class="chat-pane__placement-menu" placement="bottom-start">
        <button slot="trigger" class="chat-pane__placement-chip" type="button">${v}</button>
        ${C===K?K:U`<div class="chat-pane__placement-state">${C}</div>`}
        ${u?U`<dl class="chat-pane__placement-facts">
                ${s?U`<dt>${B(`sessionsView.placementFactService`)}</dt>
                        <dd>${s}</dd>`:K}
                ${c?U`<dt>${B(`sessionsView.placementFactProfile`)}</dt>
                        <dd>${c}</dd>`:K}
                ${l?U`<dt>${B(`sessionsView.placementFactMachine`)}</dt>
                        <dd>…${l.slice(-6)}</dd>`:K}
                <dt>${B(`sessionsView.placementFactState`)}</dt>
                <dd>${r}${S?` · ${S}`:``}</dd>
                ${n?.state===`active`&&n.diskSpace?U`<dt>${B(`sessionsView.placementFactDisk`)}</dt>
                        <dd>
                          ${B(`sessionsView.placementDiskFree`,{free:Ye(n.diskSpace.availableBytes)})}
                        </dd>`:K}
              </dl>`:K}
        ${[[r===`active`,`chat-pane__placement-move ${f?`session-menu__item--destructive`:``}`,f,y,V.monitor,f?`sessionsView.continueOnGatewayMenu`:`sessionsView.moveSession`,e.onPlacementMove],[i||m,`chat-pane__placement-recovery`,!1,x,V.monitor,i?`sessionsView.chooseWorker`:`sessionsView.restartSession`,e.onPlacementRecover],[h,`session-menu__item--destructive chat-pane__placement-reclaim`,!0,b,V.stop,null,e.onPlacementReclaim]].map(([e,t,n,r,i,a,o])=>e?U`<wa-dropdown-item
                class=${`session-menu__item ${t}`}
                variant=${n?`danger`:K}
                ?disabled=${!!r}
                title=${r??K}
                @click=${()=>!r&&o?.()}
              >
                <span slot="icon" class="session-menu__icon" aria-hidden="true">${i}</span>
                <span class="session-menu__text">${a?B(a):g.stopLabel}</span>
              </wa-dropdown-item>`:K)}
      </wa-dropdown>
      ${f?U`<div class="chat-pane__placement-note" role="status">
              ${B(`sessionsView.waitingForDevice`)}
            </div>`:p?U`<div class="chat-pane__placement-note" role="status">
                ${B(`sessionsView.syncingCloudFilesDetail`)}
              </div>`:n&&(n.state===`draining`||n.state===`reconciling`)?U`<div class="chat-pane__placement-note" role="status">
                  ${B(`sessionsView.syncingCloudFilesDetail`)} ·
                  <openclaw-elapsed-time
                    .startMs=${n.stateChangedAtMs}
                  ></openclaw-elapsed-time>
                </div>`:K}
    </div>
  `}function BT(){return(BT=e((()=>{q(),Os(),ls(),H(),Es(),m(),We(),de(),of()})))()}function VT(e){let t=B(`chat.sessionHeader.continueInTerminal.title`),n=B(`chat.sessionHeader.continueInTerminal.description`);return U`
    <openclaw-modal-dialog
      class="continue-in-terminal-dialog"
      label=${t}
      description=${n}
      @modal-cancel=${e.onClose}
    >
      <section class="exec-approval-card continue-in-terminal-dialog__card">
        <header class="continue-in-terminal-dialog__header">
          <h2>${t}</h2>
          <p>${n}</p>
        </header>
        ${ts(e.command)}
        <p class="continue-in-terminal-dialog__note">
          ${B(`chat.sessionHeader.continueInTerminal.authNote`)}
        </p>
        <footer class="exec-approval-actions">
          <button type="button" class="btn primary" @click=${e.onClose}>
            ${B(`common.close`)}
          </button>
        </footer>
      </section>
    </openclaw-modal-dialog>
  `}function HT(){return(HT=e((()=>{q(),Vs(),Lt(),m()})))()}function UT(e,t){let n=Array.from(e.querySelectorAll(`.chat-bubble`)).find(e=>t.entryId?e.dataset.entryId===t.entryId:!!t.messageId&&e.dataset.messageId===t.messageId);if(!n)return null;let r=n.ownerDocument.createTreeWalker(n,NodeFilter.SHOW_TEXT),i=[];for(;r.nextNode();)r.currentNode instanceof Text&&i.push(r.currentNode);let a=n.ownerDocument.createRange(),o=0,s=!1,c=!1;for(let e of i){let n=o+e.length;if(!s&&t.start>=o&&t.start<=n&&(a.setStart(e,t.start-o),s=!0),s&&t.end>=o&&t.end<=n){a.setEnd(e,t.end-o),c=!0;break}o=n}return!c||a.toString().replace(/\s/gu,``)!==t.text.replace(/\s/gu,``)?null:{bubble:n,range:a,nodes:i}}function WT(e){let t=Array.from(e.range.getClientRects()).findLast(e=>e.width&&e.height);if(!t)return null;let n=t.right,r=e.bubble.ownerDocument.createRange();for(let i of e.nodes)if(i.textContent?.trim()){r.selectNodeContents(i);for(let e of r.getClientRects())Math.abs(e.top-t.top)<Math.min(e.height,t.height)/2&&(n=Math.max(n,e.right))}return{right:n,top:t.top,height:t.height}}function GT(){return(GT=e((()=>{})))()}function KT(e,t){return e.filter(e=>!!(e.selectionAnnotation&&ye(e.selectionAnnotation.sessionKey,t)))}var qT;function JT(){return(JT=e((()=>{q(),Rn(),ht(),I(),R(),$c(),ru(),bC(),Lx(),qT=class extends oe{constructor(...e){super(...e),this.disabled=!1,this.sessionKey=``,this.paneId=``,this.presented=!0,this.root=null,this.retireEditor=()=>{this.editorOwner?.abort(),this.editorOwner=void 0,this.editingId=void 0,this.editorAnchor=void 0,this.positionEditor=void 0,this.editorObserver?.disconnect(),this.focusFrame!==void 0&&(cancelAnimationFrame(this.focusFrame),this.focusFrame=void 0)},this.handleCommentAction=e=>{if(!(e instanceof CustomEvent)||!this.canChange(this.props.readSignal))return;if(e.detail?.action===`delete-all`){e.stopPropagation(),this.clearComments();return}let t=KT(this.currentAttachments(),this.sessionKey).find(t=>t.id===e.detail?.id);if(t){if(e.stopPropagation(),e.detail.action===`delete`){let n=e.target instanceof HTMLElement?e.target.closest(`.chat-comment-preview--editable`):null;this.deleteComment(t.id,n)}else if(e.detail.action===`edit`&&e.target instanceof HTMLElement){let n=e.target.closest(`openclaw-tooltip`)?.querySelector(`.chat-selection-annotations__trigger`);this.editComment(t,this.visiblePin(t.id)??n??e.target)}}},this.syncEditorAnchor=()=>{!this.editorAnchor?.isConnected||this.editorAnchor.hidden?this.retireEditor():this.positionEditor?.()}}connectedCallback(){super.connectedCallback(),this.requestUpdate(`props`)}currentAttachments(){return this.props.getAttachments?.()??this.props.attachments??[]}willUpdate(e){let t=e.get(`props`);e.has(`props`)&&t?.readSignal!==this.props.readSignal&&(t?.readSignal?.removeEventListener(`abort`,this.retireEditor),this.props.readSignal?.addEventListener(`abort`,this.retireEditor,{once:!0}),this.retireEditor()),(e.has(`sessionKey`)||!this.presented||this.disabled||this.editingId&&!KT(this.currentAttachments(),this.sessionKey).some(e=>e.id===this.editingId))&&this.retireEditor()}updated(){this.root||(this.root=this.closest(`.chat-session-rail`)??this.closest(`.chat`),this.root?.addEventListener(`openclaw-comment-action`,this.handleCommentAction))}disconnectedCallback(){this.root?.removeEventListener(`openclaw-comment-action`,this.handleCommentAction),this.root=null,this.retireEditor(),this.props.readSignal?.removeEventListener(`abort`,this.retireEditor),super.disconnectedCallback()}canChange(e){return this.isConnected&&this.presented&&!this.disabled&&!e?.aborted&&this.props.readSignal===e&&!!this.props.onAttachmentsChange}changeAttachments(e,t){return this.props.onAttachmentsChange?.(t)===!1?(Dc(t,[e]),!1):(Dc(e,[t]),this.props.onRequestUpdate?.(),!0)}visiblePin(e){return Array.from(this.root?.querySelectorAll(`.chat-comment-pin`)??[]).find(t=>{if(t.dataset.attachmentId!==e||t.hidden)return!1;let n=t.getBoundingClientRect(),r=t.closest(`.chat-thread`)?.getBoundingClientRect();return n.width>0&&n.height>0&&r&&n.top>=Math.max(r.top,0)&&n.bottom<=Math.min(r.bottom,window.innerHeight)&&n.left>=Math.max(r.left,0)&&n.right<=Math.min(r.right,window.innerWidth)})}focusComposer(){this.root?.querySelector(`openclaw-plugin-view[data-plugin-composer], .agent-chat__composer-combobox > textarea`)?.focus({preventScroll:!0})}clearComments(){this.retireEditor();let e=KT(this.currentAttachments(),this.sessionKey);if(e.length===0)return;let t=new Set(e.map(e=>e.id)),n=this.currentAttachments();this.changeAttachments(n,n.filter(e=>!t.has(e.id))),this.focusComposer()}deleteComment(e,t=null){this.retireEditor();let n=this.props.readSignal,r=this.sessionKey,i=KT(this.currentAttachments(),r),a=i.findIndex(t=>t.id===e),o=i[a+1]??i[a-1],s=this.currentAttachments();if(this.changeAttachments(s,s.filter(t=>t.id!==e)),!t||!o){this.focusComposer();return}this.focusFrame=requestAnimationFrame(()=>{this.focusFrame=void 0,this.canChange(n)&&this.sessionKey===r&&t.isConnected&&t.hasAttribute(`open`)&&t.querySelector(`[data-comment-delete="${CSS.escape(o.id)}"]`)?.focus({preventScroll:!0})})}editComment(e,t){let n=this.props.readSignal;this.canChange(n)&&(this.retireEditor(),this.editorOwner=new AbortController,this.editingId=e.id,this.editorAnchor=t,this.positionEditor=Nx({paneId:this.paneId,anchorRect:t.getBoundingClientRect(),anchorElement:t,sourceRange:this.root?UT(this.root,e.selectionAnnotation)?.range:void 0,comment:e.selectionAnnotation.comment,expanded:!0,readSignal:this.editorOwner.signal,onSave:r=>{if(!this.canChange(n))return!0;let i=this.currentAttachments(),a=i.find(t=>t.id===e.id);if(!a?.selectionAnnotation)return!0;let o=yC({...a.selectionAnnotation,comment:r},this.props,cd(this.props,i.filter(t=>t.id!==e.id)));return!o||!this.changeAttachments(i,i.map(t=>t.id===e.id?o:t))?!1:(this.retireEditor(),this.focusFrame=requestAnimationFrame(()=>{if(this.focusFrame=void 0,this.canChange(n)){let e=this.visiblePin(o.id)??(t.isConnected?t:null);e?tn(e):this.focusComposer()}}),!0)},onDelete:()=>{this.canChange(n)&&this.deleteComment(e.id)},onCancel:()=>{this.retireEditor(),tn(t)}}),this.root&&(this.editorObserver??=new MutationObserver(this.syncEditorAnchor),this.editorObserver.observe(this.root,{childList:!0,subtree:!0,attributes:!0})))}render(){return K}},Q([X({attribute:!1,hasChanged:(e,t)=>e.readSignal!==t?.readSignal||e.attachments!==t?.attachments})],qT.prototype,`props`,void 0),Q([X({type:Boolean})],qT.prototype,`disabled`,void 0),Q([X()],qT.prototype,`sessionKey`,void 0),Q([X()],qT.prototype,`paneId`,void 0),Q([X({type:Boolean})],qT.prototype,`presented`,void 0),customElements.define(`openclaw-chat-comment-controller`,qT)})))()}function YT(e){if(e.suggestions.length===0)return K;let t=e.canResolve&&(e.role===`owner`||e.role===`admin`);return U`
    <div class="session-suggestions" aria-live="polite">
      ${e.suggestions.map(n=>{let r=e.busyIds.has(n.id),i=n.author.label??n.author.id;return U`
          <article class="session-suggestion" data-suggestion-id=${n.id}>
            <span class="session-suggestion__author">${i}</span>
            <span class="session-suggestion__text">${n.text}</span>
            ${t&&n.state===`pending`?U`
                    <div class="session-suggestion__actions">
                      ${[[`send`,`sendNow`,V.arrowUp],[`queue`,`queue`,V.check],[`edit`,`edit`,V.edit],[`dismiss`,`dismiss`,V.trash]].map(([t,a,o])=>e.archived&&t!==`dismiss`?K:U`
                              <button
                                class="btn btn--ghost btn--icon session-suggestion__action"
                                type="button"
                                ?disabled=${r}
                                aria-label=${B(`chat.sessionSuggestions.${a}`,{author:i})}
                                title=${B(`chat.sessionSuggestions.${a}`,{author:i})}
                                @click=${()=>e.onResolve(n,t)}
                              >
                                ${o}
                              </button>
                            `)}
                    </div>
                  `:U`<span class="session-suggestion__state"
                    >${B(`chat.sessionSuggestions.state.${n.state}`)}</span
                  >`}
          </article>
        `})}
    </div>
  `}function XT(){return(XT=e((()=>{q(),H(),m()})))()}function ZT(e,t){if(t===`queued`)return`—`;let n=e.runtimeMs;if(n!=null&&t===`running`&&e.runtimeSampledAt!=null)n+=Math.max(0,Date.now()-e.runtimeSampledAt);else if(n==null&&e.startedAt!=null){let r=e.endedAt??(t===`running`?Date.now():void 0);r!=null&&(n=Math.max(0,r-e.startedAt))}return la(n)??`—`}function QT(e,t){let n=new Map,r=new Map(t.map(e=>[e.groupId,new Map((e.children??[]).map(e=>[e.sessionKey,e.status]))]));for(let t of e){let e=t.swarmGroupId?.trim(),i=e?r.get(e)?.get(t.key):void 0;if(!i||!e)continue;let a=n.get(e)??[];a.push({phaseRank:t.swarmPhaseRank??2**53-1,dot:{key:t.key,label:re(t.key,t),status:i,duration:ZT(t,i)}}),n.set(e,a)}return new Map([...n].map(([e,t])=>[e,t.toSorted((e,t)=>e.phaseRank-t.phaseRank).map(e=>e.dot)]))}function $T({sessions:e,sessionKey:t,agentId:n}){let r=e.find(e=>ye(e.key,t)&&(t!==`global`&&t!==`unknown`||!!(n&&e.agentId===n))),i=r?.swarm;if(!i?.groups.length)return K;let a=r?Za(r):!1,o=QT(e,i.groups);return U` <aside
    class="chat-swarm"
    data-test-id="chat-swarm"
    role="status"
    aria-live="off"
    aria-label=${B(`labsPage.swarm.title`)}
  >
    ${J(i.groups,e=>e.groupId,e=>{let t=o.get(e.groupId)??[],n=e.queued+e.running+e.done+e.failed,r=e.done+e.failed,i=r===n,s=i&&n>0&&e.failed===0,c=n===1&&t[0]?t[0].label:B(`labsPage.swarm.groupTitle`),l=B(i?`labsPage.swarm.finished`:`labsPage.swarm.active`,{running:String(e.running),queued:String(e.queued),done:String(e.done),failed:String(e.failed)}),u=[`running`,`queued`,`failed`,`done`].flatMap(t=>Array.from({length:Math.min(e[t],64)},()=>t)).slice(0,64);return U` <details
          class="chat-swarm__group ${e.failed>0?`chat-swarm__group--failed`:``} ${s?`chat-swarm__group--completed`:``}"
          data-swarm-group=${e.groupId}
        >
          <summary class="chat-swarm__summary">
            ${s?U`
                    <span
                      class="chat-swarm__task-icon chat-swarm__task-icon--done"
                      aria-hidden="true"
                      >${V.check}</span
                    >
                    <div class="chat-swarm__header"><strong title=${c}>${c}</strong></div>
                    <span class="chat-swarm__counts"
                      >${B(`labsPage.swarm.completed`,{done:String(e.done)})}</span
                    >
                    <span class="chat-swarm__disclosure"
                      ><span class="sr-only">${B(`labsPage.swarm.details`)}</span
                      >${V.chevronDown}</span
                    >
                  `:U`
                    <div class="chat-swarm__header">
                      <strong title=${c}>${c}</strong>
                      <span
                        >${B(`labsPage.swarm.progress`,{complete:String(r),total:String(n)})}</span
                      >
                    </div>
                    <div class="chat-swarm__markers" role="img" aria-label=${l}>
                      ${u.map(e=>U`<span class=${`chat-swarm__marker chat-swarm__marker--${e}`} aria-hidden="true"></span>`)}
                      ${n>u.length?U`<span>+${n-u.length}</span>`:K}
                    </div>
                    <div class="chat-swarm__counts">${l}</div>
                    ${i?U`<div class="chat-swarm__outcome">${B(a?`labsPage.swarm.childOutcomeProcessing`:`labsPage.swarm.childOutcome`)}</div>`:K}
                    <span class="chat-swarm__disclosure"
                      >${B(`labsPage.swarm.details`)} ${V.chevronDown}</span
                    >
                  `}
          </summary>
          ${s?U`<div class="chat-swarm__outcome">${B(a?`labsPage.swarm.childOutcomeProcessing`:`labsPage.swarm.childOutcome`)}</div>`:K}
          <div class="chat-swarm__tasks" role="list">
            ${t.length===0?U`<div class="chat-swarm__outcome">${B(`labsPage.swarm.detailsUnavailable`)}</div>`:K}
            ${t.map(e=>U` <div class="chat-swarm__task" role="listitem">
                <span
                  class=${`chat-swarm__task-icon chat-swarm__task-icon--${e.status}`}
                  role="img"
                  aria-label=${B(eE[e.status])}
                >
                  ${e.status===`done`?V.check:e.status===`failed`?V.alertTriangle:e.status===`running`?V.loader:V.clock}
                </span>
                <span class="chat-swarm__task-name">${e.label}</span>
                <span class="chat-swarm__task-duration">${e.duration}</span>
              </div>`)}
          </div>
        </details>`})}
    ${i.otherActiveGroups>0?U`<div class="chat-swarm__outcome">${B(`labsPage.swarm.otherGroups`,{count:String(i.otherActiveGroups)})}</div>`:K}
  </aside>`}var eE;function tE(){return(tE=e((()=>{q(),Pn(),H(),m(),oa(),_e(),I(),eE={queued:`common.queued`,running:`common.running`,done:`common.completed`,failed:`labsPage.swarm.failedOrStopped`}})))()}function nE(e){return e.replace(/[\u061c\u200e\u200f\u202a-\u202e\u2066-\u2069]/g,``)}function rE(e){if(!(e instanceof HTMLElement))return;let t=e.scrollLeft+e.clientWidth<e.scrollWidth-1;e.toggleAttribute(`data-overflow-right`,t)}function iE(e){let t=e.taskSuggestions??[],n=e.canAcceptTaskSuggestions===!0,r=e.canDismissTaskSuggestions===!0,i=e.canOpenTaskSuggestions===!0,a=e.onOpenTaskSuggestion;if(t.length===0)return K;let o=t.length>1,s=t.some(t=>t.id===e.activeTaskSuggestionId)?e.activeTaskSuggestionId:t[0]?.id;return U`
    <div class="task-suggestions ${o?`task-suggestions--stack`:``}" aria-live="polite">
      ${t.map((c,l)=>{let u=e.taskSuggestionBusyIds?.has(c.id)??!1,d=e.taskSuggestionAcceptance?.(c.id),f=d?.phase===`failed`?d.repository:void 0,p=nE(c.title),m=nE(c.tldr),h=nE(c.cwd),g=nE(c.prompt),v=nE(Ue(h)),y=e.taskSuggestionCopiedIds?.has(c.id)??!1,b=B(y?`chat.taskSuggestions.promptCopied`:`chat.taskSuggestions.copyPrompt`),x=t=>{!u&&n&&e.onAcceptTaskSuggestion?.(c,t,void 0)},S=c.id===s,C=U`
          <article
            class="task-suggestion"
            data-task-id=${c.id}
            data-swap-direction=${S&&e.taskSuggestionSwapDirection?e.taskSuggestionSwapDirection:K}
            ?hidden=${!S}
          >
            <header class="task-suggestion__header">
              <div class="task-suggestion__eyebrow" title=${h}>
                ${B(`chat.taskSuggestions.eyebrow`,{repo:v})}
                ${o?U`<span class="task-suggestion__position"
                        >${l+1} / ${t.length}</span
                      >`:K}
              </div>
              <div class="task-suggestion__header-actions">
                <button
                  class="task-suggestion__header-action task-suggestion__copy"
                  type="button"
                  aria-label=${b}
                  title=${b}
                  @click=${()=>e.onCopyTaskSuggestionPrompt?.(c)}
                >
                  ${y?V.check:V.copy}
                </button>
                ${o?U`
                        ${[`previous`,`next`].map(t=>U`
                            <button
                              class="task-suggestion__header-action"
                              type="button"
                              aria-label=${B(t===`previous`?`chat.taskSuggestions.previous`:`chat.taskSuggestions.next`)}
                              ?data-task-prev=${t===`previous`}
                              ?data-task-next=${t===`next`}
                              @click=${()=>e.onNavigateTaskSuggestion?.(c.id,t)}
                            >
                              ${t===`previous`?V.chevronLeft:V.chevronRight}
                            </button>
                          `)}
                      `:K}
                ${r||d?.phase===`started`?U`
                        <button
                          class="task-suggestion__header-action task-suggestion__dismiss"
                          type="button"
                          ?disabled=${u||d?.phase===`started`&&!i}
                          aria-label=${B(`chat.taskSuggestions.dismiss`,{title:p})}
                          @click=${()=>e.onDismissTaskSuggestion?.(c)}
                        >
                          ${V.x}
                        </button>
                      `:K}
              </div>
            </header>
            <div class="task-suggestion__body">
              <div class="task-suggestion__title">${p}</div>
              <div class="task-suggestion__summary">${m}</div>
              <details class="task-suggestion__instructions" ?open=${!!d||u}>
                <summary>
                  <span class="task-suggestion__instructions-chevron" aria-hidden="true"
                    >${V.chevronRight}</span
                  >
                  <span class="task-suggestion__show"
                    >${B(`chat.taskSuggestions.showInstructions`)}</span
                  >
                  <span class="task-suggestion__hide"
                    >${B(`chat.taskSuggestions.hideInstructions`)}</span
                  >
                </summary>
                <div class="task-suggestion__instruction-body">
                  <code
                    ${W(e=>{e&&requestAnimationFrame(()=>rE(e))})}
                    @scroll=${e=>rE(e.currentTarget)}
                    >${h}</code
                  >
                  <pre>${g}</pre>
                </div>
              </details>
              ${d?.phase===`started`?U`<p class="task-suggestion__summary" role="status">
                      ${B(`chat.taskSuggestions.started`)}
                    </p>`:d?.phase===`failed`?U`<div class="callout danger" role="alert">
                        <span
                          >${f?K:B(`chat.taskSuggestions.startUnconfirmed`)}
                          ${d.error}</span
                        >
                      </div>`:K}
              ${f?.open?U`
                      <div class="task-suggestion__repository">
                        <p>${B(`chat.taskSuggestions.chooseRepositoryHelp`)}</p>
                        <label>
                          <span>${B(`chat.taskSuggestions.repositoryFolder`)}</span>
                          <input
                            type="text"
                            class="task-suggestion__repository-path"
                            .value=${f.cwd}
                            ?disabled=${!n}
                            @input=${t=>{let n=t.currentTarget;e.onChangeTaskRepository?.(c,{cwd:n.value})}}
                          />
                        </label>
                        ${f.projects.map(t=>U`
                            <button
                              type="button"
                              class="btn task-suggestion__repository-choice"
                              ?disabled=${!n}
                              title=${t.repoRoot??``}
                              @click=${()=>e.onChangeTaskRepository?.(c,{cwd:t.repoRoot??``})}
                            >
                              ${t.displayName}<small>${t.repoRoot}</small>
                            </button>
                          `)}
                        <button
                          type="button"
                          class="btn"
                          @click=${()=>e.onChangeTaskRepository?.(c,{open:!1})}
                        >
                          ${B(`common.cancel`)}
                        </button>
                      </div>
                    `:K}
            </div>
            <div class="task-suggestion__actions">
              ${d?.phase===`started`?U`<a
                      class="btn task-suggestion__start task-suggestion__open"
                      href=${i?d.href:K}
                      aria-disabled=${i?K:`true`}
                      tabindex=${i?0:-1}
                      @click=${e=>{i?a&&_(e)&&(e.preventDefault(),a(c)):e.preventDefault()}}
                      >${B(`sessionsView.openSession`)}</a
                    >`:d?.phase===`failed`?U`<button
                        class="btn task-suggestion__start task-suggestion__retry"
                        type="button"
                        ?disabled=${!n||!(!f?.open||ed(f.cwd.trim()))}
                        @click=${()=>{f?f.open?n&&ed(f.cwd.trim())&&e.onAcceptTaskSuggestion?.(c,`worktree`,f.cwd.trim()):e.onChangeTaskRepository?.(c,{open:!0}):x(`local`)}}
                      >
                        ${B(f?f.open?`chat.taskSuggestions.startWorktree`:`chat.taskSuggestions.chooseRepository`:`common.retry`)}
                      </button>`:U`
                        <button
                          class="btn task-suggestion__start task-suggestion__start--primary"
                          type="button"
                          ?disabled=${u||!n}
                          title=${n?``:B(`chat.taskSuggestions.adminRequired`)}
                          @click=${()=>x(`local`)}
                        >
                          ${V.play}
                          ${B(u?`chat.taskSuggestions.starting`:`chat.taskSuggestions.startSession`)}
                        </button>
                        <wa-dropdown
                          placement="bottom-end"
                          ?disabled=${u||!n}
                          @wa-select=${e=>{let t=e.detail.item.value;(t===`local`||t===`worktree`||t===`session`)&&x(t)}}
                        >
                          <button
                            slot="trigger"
                            class="btn task-suggestion__start task-suggestion__start--options"
                            type="button"
                            ?disabled=${u||!n}
                            aria-label=${B(`chat.taskSuggestions.startOptions`)}
                            title=${n?``:B(`chat.taskSuggestions.adminRequired`)}
                          >
                            ${V.chevronDown}
                          </button>
                          <wa-dropdown-item value="local" ?disabled=${u||!n}>
                            ${B(`chat.taskSuggestions.startSession`)}
                          </wa-dropdown-item>
                          <wa-dropdown-item value="worktree" ?disabled=${u||!n}>
                            ${B(`chat.taskSuggestions.startWorktree`)}
                          </wa-dropdown-item>
                          <wa-dropdown-item value="session" ?disabled=${u||!n}>
                            ${B(`chat.taskSuggestions.startCurrentSession`)}
                          </wa-dropdown-item>
                        </wa-dropdown>
                      `}
            </div>
          </article>
        `;return An(S?`${c.id}:${e.taskSuggestionSwapGeneration??0}`:`${c.id}:inactive`,C)})}
    </div>
  `}function aE(){return(aE=e((()=>{q(),Wn(),G(),H(),gs(),m(),Vl()})))()}function oE(e,t,n){let r=sE.get(t);r||(r={favicons:new Map,inFlight:new Map},sE.set(t,r));let{favicons:i,inFlight:a}=r,o=i.get(e);if(o!==void 0)return o;let s=a.get(e);if(s){s.add(n);return}let c=new Set([n]);a.set(e,c);let l=new AbortController,u=window.setTimeout(()=>l.abort(),15e3);t(e,l.signal).then(t=>i.set(e,t),()=>i.set(e,null)).finally(()=>{window.clearTimeout(u),a.delete(e);for(let e of c)e()})}var sE;function cE(){return(cE=e((()=>{sE=new WeakMap})))()}function lE(e){if(fE?.resourceBasePath===e.resourceBasePath&&fE.gatewayUrl===e.gatewayUrl&&fE.authCandidates.length===e.authCandidates.length&&fE.authCandidates.every((t,n)=>t===e.authCandidates[n]))return fE.fetcher;let t=(t,n)=>Vu({...e,auth:{},hostname:t,signal:n});return fE={...e,fetcher:t},t}function uE(e){let t=e.client?.gatewayUrl??e.settings.gatewayUrl;return e.automaticallyFetchFavicons&&Rt(t)?lE({authCandidates:kt(e),resourceBasePath:e.resourceBasePath,gatewayUrl:t}):void 0}function dE(e,t){if(t)for(let n of e.querySelectorAll(`img.markdown-link-favicon[data-link-favicon-host]`)){if(n.dataset.linkFaviconState)continue;let e=n.dataset.linkFaviconHost?.trim();if(!e){n.dataset.linkFaviconState=`failed`;continue}n.dataset.linkFaviconState=`loading`;let r=()=>{let i=oE(e,t,r);if(i!==void 0){if(!i){n.dataset.linkFaviconState=`failed`;return}n.isConnected&&(n.addEventListener(`load`,()=>{n.naturalWidth>0&&(n.classList.add(`is-loaded`),n.dataset.linkFaviconState=`loaded`)},{once:!0}),n.addEventListener(`error`,()=>{n.dataset.linkFaviconState=`failed`},{once:!0}),n.src=i)}};r()}}var fE;function pE(){return(pE=e((()=>{Vt(),$l(),cE()})))()}var mE;function hE(){return(hE=e((()=>{q(),Rn(),Pn(),H(),m(),Ci(),R(),JT(),Ji(),mE=class extends s{constructor(...e){super(...e),this.attachments=[],this.sessionKey=``,this.disabled=!1,this.root=null,this.anchors=null,this.scheduleLayout=()=>{this.frame===void 0&&this.isConnected&&(this.frame=requestAnimationFrame(()=>{this.frame=void 0,this.layoutPins()}))}}updated(e){let t=e.has(`attachments`)||e.has(`sessionKey`);this.root||(this.root=this.closest(`.chat-thread`),this.root&&(t=!0,this.resizeObserver=new ResizeObserver(this.scheduleLayout),this.resizeObserver.observe(this.root),this.mutationObserver=new MutationObserver(e=>{e.some(e=>this.canMovePins(e.target))&&this.scheduleLayout()}),this.mutationObserver.observe(this.root,{childList:!0,subtree:!0,characterData:!0,attributes:!0}),this.root.addEventListener(`scroll`,this.scheduleLayout,{passive:!0}))),t&&this.scheduleLayout()}disconnectedCallback(){this.resizeObserver?.disconnect(),this.mutationObserver?.disconnect(),this.root?.removeEventListener(`scroll`,this.scheduleLayout),this.root=null,this.observedInner=void 0,this.anchors=null,this.frame!==void 0&&(cancelAnimationFrame(this.frame),this.frame=void 0),super.disconnectedCallback()}canMovePins(e){return!this.contains(e)&&!this.anchors?.every(t=>{let n=t.compareDocumentPosition(e);return(n&Node.DOCUMENT_POSITION_FOLLOWING)!==0&&(n&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_DISCONNECTED))===0})}layoutPins(){if(!this.root)return;let e=this.root.querySelector(`.chat-thread-inner`);e&&e!==this.observedInner&&(this.observedInner&&this.resizeObserver?.unobserve(this.observedInner),this.resizeObserver?.observe(e),this.observedInner=e);let t=this.getBoundingClientRect(),n=this.root.getBoundingClientRect().right-28,r=[],i=[],a=!0;for(let e of KT(this.attachments,this.sessionKey)){let o=Array.from(this.querySelectorAll(`button`)).find(t=>t.dataset.attachmentId===e.id);if(!o){a=!1;continue}let s=UT(this.root,e.selectionAnnotation),c=s?WT(s):null;if(o.hidden=!c,!s||!c){a=!1;continue}i.push(s.bubble);let l=Math.min(c.right+4,n)-t.left,u=c.top+(c.height-24)/2-t.top;for(;r.some(e=>Math.abs(e.left-l)<24&&Math.abs(e.top-u)<24);)l+48<=n-t.left?l+=24:u+=24;r.push({left:l,top:u}),o.style.left=`${l}px`,o.style.top=`${u}px`}this.anchors=a?i:null}render(){return J(KT(this.attachments,this.sessionKey),e=>e.id,(e,t)=>U` <button
        type="button"
        class="btn primary chat-comment-pin"
        data-attachment-id=${e.id}
        aria-label=${B(`chat.messages.editAnnotation`,{number:String(t+1)})}
        title=${e.selectionAnnotation.comment||e.selectionAnnotation.text}
        ?disabled=${this.disabled}
        @pointerup=${e=>e.stopPropagation()}
        @click=${t=>{t.stopPropagation(),t.currentTarget instanceof HTMLElement&&t.currentTarget.dispatchEvent(new CustomEvent(`openclaw-comment-action`,{bubbles:!0,composed:!0,detail:{id:e.id,action:`edit`}}))}}
      >
        ${V.messageSquare}
      </button>`)}},Q([X({attribute:!1})],mE.prototype,`attachments`,void 0),Q([X()],mE.prototype,`sessionKey`,void 0),Q([X({attribute:!1})],mE.prototype,`disabled`,void 0),customElements.define(`openclaw-chat-comment-pins`,mE)})))()}function gE(e,t){let n=e?.querySelector(`[tabindex="0"]`);t&&t!==n&&(n&&(n.tabIndex=-1),t.tabIndex=0)}function _E(e,t,n,r){if(!e||!t)return;let i=e.querySelector(`.chat-position-rail__preview-label`)?.textContent?.trim(),a=e.querySelector(`.chat-position-rail__preview-copy`)?.textContent?.trim(),o=`${i??``} ${a??``}. ${B(`chat.thread.positionMarkerHint`)}`;t.getAttribute(`aria-description`)!==o&&t.setAttribute(`aria-description`,o),e.style.setProperty(`--chat-position-preview`,`${n}px`),e.style.visibility=n<0||n>r?`hidden`:``}function vE({transcript:e,assistant:t,markers:n,renderedIndexes:r,markerHeight:i,activeId:a,visibleIds:o,rovingId:s,previewId:c,hoveredId:l,bindScroller:u,bindPreview:d,onScroll:f,stopScrollInput:p,onPointerLeave:m,onMarkerHover:h,onMarkerFocus:g,onMarkerBlur:_,onMarkerKeyDown:v,onMarkerSelect:y}){let b=n.length,x=B(`chat.thread.positionUserMessage`),S=t?.name.trim()||B(`chat.thread.positionAssistantMessage`),C=e=>e.role===`user`?x:S,w=c==null?void 0:n.find(e=>e.id===c),T=w?Zr(w.message):void 0,E=T?.role===`user`?T.sender:void 0,D=(E?T?.senderLabel:null)??(w?C(w):void 0),O=w&&T?oo(Mi(w.message,T).trim(),yE):``;return U`
    <aside
      class="chat-position-rail"
      style=${`--chat-position-rail-count: ${b}`}
      aria-label=${B(`chat.thread.positionRail`)}
      @pointerleave=${m}
    >
      <div class="chat-position-rail__track">
        <div
          ${W(u)}
          class="chat-position-rail__marks"
          role="list"
          aria-label=${B(`chat.thread.positionRail`)}
          @scroll=${f}
          @wheel=${p}
          @touchstart=${p}
          @touchmove=${p}
        >
          <div class="chat-position-rail__virtual-space">
            ${kn([e,b,l,...r.flatMap(e=>[e,n[e].id,C(n[e]),n[e].anchorId])],()=>J(r,e=>n[e].id,(e,t)=>{let c=n[e],u=r[t-1];return U`
                      ${u!==void 0&&e>u+1?U`<div aria-hidden="true"></div>`:K}
                      <div
                        class="chat-position-rail__item"
                        ?data-hovered=${c.id===l}
                        role="listitem"
                        aria-posinset=${e+1}
                        aria-setsize=${b}
                      >
                        <button
                          class="chat-position-rail__marker"
                          style=${`top: ${e*i}px`}
                          type="button"
                          data-position-marker-id=${c.id}
                          tabindex=${c.id===s?`0`:`-1`}
                          aria-label=${B(`chat.thread.positionMarker`,{position:String(e+1),count:String(b),label:C(c)})}
                          aria-description=${B(`chat.thread.positionMarkerHint`)}
                          aria-current=${String(c.id===a)}
                          ?data-visible=${o.has(c.id)}
                          @pointerenter=${()=>h(c.id)}
                          @focus=${e=>g(c.id,e)}
                          @blur=${_}
                          @keydown=${t=>v(e,t)}
                          @click=${()=>y(c.anchorId)}
                        >
                          <span class="chat-position-rail__tick" aria-hidden="true"></span>
                        </button>
                      </div>
                    `}))}
          </div>
        </div>
        ${w?U`
                <div ${W(d)} class="chat-position-rail__preview" aria-hidden="true">
                  <div class="chat-position-rail__preview-header">
                    ${w.role===`assistant`&&t?U`<span
                            class="chat-author-avatar"
                            role="img"
                            aria-label=${S}
                          >
                            ${ns(t)}
                          </span>`:vl(E)}
                    <span class="chat-position-rail__preview-label">${D}</span>
                  </div>
                  <!-- Preview links remain non-interactive; the marker owns keyboard navigation. -->
                  <div class="chat-position-rail__preview-copy" inert>
                    ${O?Bn(vs(O,{codeBlockChrome:`none`})):B(`chat.attachments.previewUnavailable`)}
                  </div>
                </div>
              `:K}
      </div>
    </aside>
  `}var yE;function bE(){return(bE=e((()=>{q(),Vn(),G(),Pn(),Hn(),Po(),Bs(),m(),na(),mi(),wc(),yE=140})))()}function xE(){return{hoveredId:null,focusedId:null,dismissed:!1}}var SE,CE,wE,TE;function EE(){return(EE=e((()=>{q(),jn(),Sn(),bE(),wS(),Bl(),SE=`.chat-bubble[data-entry-id]`,CE=`.chat-bubble[data-message-id]:not([data-entry-id])`,wE=class extends wn{constructor(...e){super(...e),this.session=null,this.interaction=xE(),this.observationPending=!1,this.refreshingWindow=!1,this.markerIds=[],this.markerIndexes=new Map,this.renderedIndexes=[],this.viewportVisible=!1,this.viewportOffset=0,this.viewportInset=0,this.reservedOffset=0,this.viewportResizePending=!1,this.restoringFocus=!1,this.projectionChanged=!1,this.mountedMarkersChanged=!0,this.markerIdsByMessageId=new Map,this.positionMessageIds=[],this.markersChanged=!0,this.markerElements=new Map,this.observedMessages=new Map,this.visibleIds=new Set,this.initialVisibilityPending=!0,this.targetsChanged=!0,this.layoutVisible=!1,this.reader={followingResize:!1,followActive:!1},this.stopScrollInput={handleEvent:e=>{this.reader.followActive=!1,e.stopPropagation()},passive:!0},this.scheduleLayout=()=>{this.layoutFrame===void 0&&this.scrollElement&&(this.layoutFrame=requestAnimationFrame(()=>{this.layoutFrame=void 0,this.syncLayout()}))},this.observeLayout=()=>{let e=this.scrollElement;if(!e)return;let t=e.clientHeight;if(this.viewportVisible=t>0,!this.viewportVisible){this.layoutVisible=!1;return}this.viewportHeight=t,this.viewportOffset=e.scrollTop,this.viewportInset=Number.parseFloat(getComputedStyle(e).scrollPaddingTop)||0,this.viewportResizePending=this.session?.layout.viewportResizePending??!1;let n=this.transcriptElement??e.closest(`.chat-thread`);n&&this.syncReaderViewport(Bu(n));let r=new Set([...this.observedMessages.values()].filter(e=>e.visible).map(e=>e.messageId)),i=this.positionMessageIds.filter(e=>r.has(e)),a=this.session?.activeMessageId(i.length?i:this.positionMessageIds);this.observedActiveId=a?this.markerIdsByMessageId.get(a):void 0,this.scheduleLayout()},this.bindScroller=e=>{this.resizeObserver?.disconnect(),this.observationPending=!1,this.disconnectVisibility(),this.markersChanged=!0,this.mountedMarkersChanged=!0,this.layoutVisible=!1,this.viewportHeight=void 0,this.viewportVisible=!1,this.viewportOffset=0,this.viewportInset=0,this.reservedOffset=0,this.viewportResizePending=!1,this.layoutFrame!==void 0&&(cancelAnimationFrame(this.layoutFrame),this.layoutFrame=void 0),this.scrollElement=e instanceof HTMLElement?e:void 0,this.scrollElement&&(this.reader.followActive=!0,this.observationPending=!0,this.resizeObserver=new ResizeObserver((e,t)=>{t===this.resizeObserver&&(this.observationPending=!1,this.observeLayout())}),this.resizeObserver.observe(this.scrollElement),this.scheduleLayout())},this.dismissPreview=e=>{let t=this.scrollElement?.closest(`.chat-position-rail`);e.key!==`Escape`||e.defaultPrevented||this.interaction.dismissed||!t||t.ownerDocument.defaultView?.getComputedStyle(t).display===`none`||(e.preventDefault(),e.stopImmediatePropagation(),this.interaction.hoveredId=null,this.interaction.dismissed=!0,t.contains(t.ownerDocument.activeElement)&&t.closest(`.chat-thread`)?.focus({preventScroll:!0}),this.requestUpdate?.())},this.bindPreview=e=>{this.previewElement?.ownerDocument.defaultView?.removeEventListener(`keydown`,this.dismissPreview),this.previewElement=e instanceof HTMLElement?e:void 0,this.scheduleLayout(),e?.ownerDocument.defaultView?.addEventListener(`keydown`,this.dismissPreview)}}requestObservation(){this.scrollElement&&this.resizeObserver&&!this.observationPending&&(this.observationPending=!0,this.resizeObserver.unobserve(this.scrollElement),this.resizeObserver.observe(this.scrollElement))}revealMarker(e){let t=this.scrollElement,n=this.markerIndexes.get(e),r=this.viewportHeight??0;if(!t||!this.viewportVisible||n===void 0)return;let i=n*12,a=i+12;if(i<this.viewportOffset+this.viewportInset||a>this.viewportOffset+r-this.viewportInset){let e=Math.max(this.markerIds.length*12-r,this.reservedOffset);this.viewportOffset=Math.max(0,Math.min((i+a-r)/2,e)),t.scrollTop=this.viewportOffset}}windowIndexes(){return fS(this.markerIds.length,this.markerIndexes,this.viewportOffset,this.viewportHeight??window.innerHeight,this.activeId??this.markerIds[0],this.interaction.focusedId,this.interaction.hoveredId,this.pendingFocusId)}refreshWindow(){let e=this.renderParams;if(this.isConnected&&e){let t=this.scrollElement,n=this.session,r=t?.ownerDocument.activeElement,i=r instanceof HTMLElement?r.dataset.positionMarkerId:void 0;this.refreshingWindow=!0;try{this.setValue(this.render(e))}finally{this.refreshingWindow=!1}if(!this.pendingFocusId&&i&&r instanceof HTMLElement&&this.isConnected&&this.session===n&&this.scrollElement===t&&t?.contains(r)&&t.ownerDocument.activeElement===t.ownerDocument.body){this.interaction.focusedId=i,this.restoringFocus=!0;try{r.focus({preventScroll:!0})}finally{this.restoringFocus=!1}}}}syncMountedMarkers(){if(this.mountedMarkersChanged){this.mountedMarkersChanged=!1,this.markerElements.clear();for(let e of this.scrollElement?.querySelectorAll(`.chat-position-rail__marker`)??[])this.markerElements.set(e.dataset.positionMarkerId,e)}}focusMarker(e){let t=this.session,n=this.scrollElement;if(this.pendingFocusId=e,this.revealMarker(e),this.refreshWindow(),!this.isConnected||this.session!==t||this.scrollElement!==n){this.pendingFocusId=void 0;return}this.syncMountedMarkers(),this.markerElements.get(e)?.focus({preventScroll:!0}),this.pendingFocusId=void 0}disconnectVisibility(){this.stopTranscriptScroll?.(),this.stopTranscriptScroll=void 0,this.intersectionObserver?.disconnect(),this.mutationObserver?.disconnect(),this.transcriptElement?.removeEventListener(`scroll`,this.observeLayout),this.intersectionObserver=void 0,this.mutationObserver=void 0,this.transcriptElement=void 0,this.reader={followingResize:!1,followActive:this.reader.followActive},this.observedMessages.clear();for(let e of this.visibleIds)this.markerElements.get(e)?.removeAttribute(`data-visible`);this.scrollElement?.querySelector(`[aria-current="true"]`)?.setAttribute(`aria-current`,`false`),this.visibleIds.clear(),this.initialVisibilityPending=!0,this.activeId=void 0,this.observedActiveId=void 0}syncVisibilityTargets(){let e=this.scrollElement?.closest(`.chat-thread`);if(!e)return;if(e!==this.transcriptElement){this.transcriptElement&&this.disconnectVisibility(),this.transcriptElement=e,e.addEventListener(`scroll`,this.observeLayout,{passive:!0}),this.stopTranscriptScroll=Wl(e,e=>{e.type===`offset`?this.requestObservation():e.type===`input`?(this.reader.followingResize&&(this.reader.followActive=!0,this.scheduleLayout()),this.reader.followingResize=!1,this.reader.resizeTarget=void 0):e.type===`resize`&&this.layoutVisible&&this.viewportHeight&&(this.syncReaderViewport(e.viewport),this.requestObservation())}),this.intersectionObserver=new IntersectionObserver((e,t)=>{if(t===this.intersectionObserver){for(let t of e){let e=this.observedMessages.get(t.target);e&&(e.visible=t.isIntersecting&&t.intersectionRatio>0)}this.observeLayout()}},{root:e,threshold:[0,2**-52,1]});let t=e=>e.matches(SE)||e.matches(CE)&&this.markerIdsByMessageId.has(e.getAttribute(`data-message-id`));this.mutationObserver=new MutationObserver((e,n)=>{n===this.mutationObserver&&e.some(e=>e.target instanceof Element&&e.target.closest(`.chat-position-rail`)?!1:e.type===`attributes`||[...e.addedNodes,...e.removedNodes].some(e=>e instanceof Element&&(t(e)||[...e.querySelectorAll(`${SE}, ${CE}`)].some(t))))&&(this.targetsChanged=!0,this.scheduleLayout())}),this.mutationObserver.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`data-entry-id`,`data-message-id`]}),this.targetsChanged=!0}if(!this.targetsChanged)return;this.targetsChanged=!1;let t=new Set([...e.querySelectorAll(SE),...e.querySelectorAll(CE)]),n=e=>e.getAttribute(`data-entry-id`)??e.getAttribute(`data-message-id`);for(let[e,r]of this.observedMessages)(!t.has(e)||n(e)!==r.messageId||this.markerIdsByMessageId.get(r.messageId)!==r.id)&&(this.intersectionObserver?.unobserve(e),this.observedMessages.delete(e));for(let e of t){let t=n(e),r=t?this.markerIdsByMessageId.get(t):void 0;t&&r&&!this.observedMessages.has(e)&&(this.observedMessages.set(e,{id:r,messageId:t,visible:!1}),this.intersectionObserver?.observe(e))}}syncReaderViewport(e){let{state:t,scheduleLayout:n}=pS(this.reader,e,this.markerElements.get(this.interaction.focusedId??``)?.matches(`:focus-visible`)??!1);this.reader=t,n&&this.scheduleLayout()}syncVisibleMarks(){let e=new Set;for(let t of this.observedMessages.values())t.visible&&e.add(t.id);for(let t of this.visibleIds)e.has(t)||this.markerElements.get(t)?.removeAttribute(`data-visible`);for(let t of e)this.visibleIds.has(t)||this.markerElements.get(t)?.setAttribute(`data-visible`,``);this.visibleIds=e,this.initialVisibilityPending&&e.size>0&&(this.reader.followActive=!0,this.scheduleLayout());let t=this.observedActiveId??this.markerIds[0];t!==this.activeId&&(this.markerElements.get(this.activeId??``)?.setAttribute(`aria-current`,`false`),this.activeId=t,this.markerElements.get(t??``)?.setAttribute(`aria-current`,`true`),this.syncTabStop(),this.reader.followingResize||(this.reader.followActive=!0),this.scheduleLayout())}syncLayout(){let e=this.scrollElement,t=this.viewportHeight??0;if(!e||!this.viewportVisible||t===0){this.layoutVisible=!1;return}this.syncMountedMarkers(),this.syncVisibilityTargets();let n=this.projectionChanged;this.projectionChanged=!1;let r=!this.layoutVisible||n;if(this.layoutVisible=!0,r&&(this.reader.resizeTarget=void 0,this.reader.followingResize=!1),this.markersChanged&&(n&&(e.style.removeProperty(`--chat-position-scroll-top`),this.reservedOffset=0),this.markersChanged=!1,this.targetsChanged=!0),this.syncVisibleMarks(),this.syncTabStop(),r||this.reader.followActive){this.reader.followActive=this.viewportResizePending;let e=this.markerElements.get(this.interaction.focusedId??``),t=(r||e?.matches(`:focus-visible`)?this.interaction.focusedId:void 0)??this.activeId;t&&(this.revealMarker(t),this.visibleIds.size>0&&(this.initialVisibilityPending=!1))}let i=this.windowIndexes();(i.length!==this.renderedIndexes.length||i.some((e,t)=>e!==this.renderedIndexes[t]))&&(this.refreshWindow(),this.syncMountedMarkers(),this.syncTabStop()),this.reservedOffset=this.viewportOffset,e.style.setProperty(`--chat-position-scroll-top`,`${this.viewportOffset}px`);let a=this.markerIds.length*12;e.toggleAttribute(`data-overflow-top`,this.viewportOffset>1),e.toggleAttribute(`data-overflow-bottom`,a-t-this.viewportOffset>1);let o=this.interaction.hoveredId??this.interaction.focusedId;_E(this.previewElement,this.markerElements.get(o??``),((this.markerIndexes.get(o??``)??0)+.5)*12-this.viewportOffset,t)}syncTabStop(){let e=this.interaction.focusedId??this.activeId??this.markerIds[0];gE(this.scrollElement,this.markerElements.get(e??``))}disconnected(){this.pendingFocusId=void 0,this.bindPreview(),this.bindScroller(),this.interaction.hoveredId=null,this.interaction.focusedId=null,this.interaction.dismissed=!1}reconnected(){this.requestUpdate?.()}render(e){this.renderParams=e;let{positions:t,transcript:n,assistant:r,requestUpdate:i}=e;this.requestUpdate=i,this.session!==n&&(this.session=n,this.interaction=xE(),this.pendingFocusId=void 0,this.viewportOffset=0,this.viewportHeight=void 0,this.viewportVisible=!1,this.layoutVisible=!1,this.disconnectVisibility(),this.markersChanged=!0);let a=t.markers;t.markerIdsByMessageId!==this.markerIdsByMessageId&&((this.markerIdsByMessageId.size!==t.markerIdsByMessageId.size||[...t.markerIdsByMessageId].some(([e,t])=>this.markerIdsByMessageId.get(e)!==t))&&(this.targetsChanged=!0),this.markerIdsByMessageId=t.markerIdsByMessageId,this.positionMessageIds=[...t.markerIdsByMessageId.keys()]);let o=a.length;if(o===0)return this.disconnected(),K;let s=this.interaction;a.some(e=>e.id===s.focusedId)||(s.focusedId=null),a.some(e=>e.id===s.hoveredId)||(s.hoveredId=null);let c=a.map(e=>e.id);(c.length!==this.markerIds.length||c.some((e,t)=>e!==this.markerIds[t]))&&(this.projectionChanged||=this.markerIds.some((e,t)=>e!==c[t]),this.markerIds=c,this.markerIndexes=new Map(c.map((e,t)=>[e,t])),this.activeId&&!this.markerIndexes.has(this.activeId)&&(this.activeId=void 0),this.markersChanged=!0),this.refreshingWindow||this.requestObservation();let l=this.windowIndexes();(l.length!==this.renderedIndexes.length||l.some((e,t)=>e!==this.renderedIndexes[t])||this.markersChanged)&&(this.renderedIndexes=l,this.mountedMarkersChanged=!0),this.scheduleLayout();let u=s.focusedId??this.activeId??a[0].id,d=(e,t)=>{let n=e.key===`Home`?0:e.key===`End`?o-1:Math.max(0,Math.min(o-1,t+(e.key===`ArrowUp`||e.key===`ArrowLeft`?-1:1)));e.preventDefault(),e.stopPropagation(),e.currentTarget instanceof HTMLButtonElement&&this.focusMarker(a[n].id)};return vE({transcript:n,assistant:r,markers:a,renderedIndexes:this.renderedIndexes,markerHeight:12,activeId:this.activeId,visibleIds:this.visibleIds,rovingId:u,hoveredId:s.hoveredId,previewId:s.dismissed?void 0:s.hoveredId??s.focusedId,bindScroller:this.bindScroller,bindPreview:this.bindPreview,onScroll:this.observeLayout,stopScrollInput:this.stopScrollInput,onPointerLeave:()=>{s.hoveredId=null,this.requestUpdate?.()},onMarkerHover:e=>{s.hoveredId=e,s.dismissed=!1,this.requestUpdate?.()},onMarkerFocus:(e,t)=>{this.restoringFocus||(t.currentTarget instanceof HTMLElement&&t.currentTarget.matches(`:focus-visible`)&&this.revealMarker(e),s.focusedId=e,s.dismissed=!1,this.refreshWindow(),this.syncMountedMarkers(),this.syncTabStop(),this.requestUpdate?.())},onMarkerBlur:()=>{s.focusedId=null,this.syncTabStop(),this.requestUpdate?.()},onMarkerKeyDown:(e,t)=>{[`ArrowDown`,`ArrowLeft`,`ArrowRight`,`ArrowUp`,`End`,`Home`].includes(t.key)?d(t,e):t.key===`Escape`?this.dismissPreview(t):(t.key===`PageUp`||t.key===`PageDown`)&&t.stopPropagation()},onMarkerSelect:e=>n.revealMessage(e)})}},TE=En(wE)})))()}function DE(e){let t=e?.previousElementSibling;e instanceof mo&&t instanceof HTMLButtonElement&&(t.id||=`chat-source-${La()}`,e.id||=`${t.id}-preview`,e.for=t.id,t.setAttribute(`aria-controls`,e.id),zs(e))}function OE(e){let t=e.currentTarget;t instanceof mo&&t.anchor?.setAttribute(`aria-expanded`,String(t.open))}function kE(e){let t=e.currentTarget,n=t instanceof Element?t.closest(`wa-popover`):null;n instanceof mo&&(n.open=!1,n.anchor instanceof HTMLElement&&n.anchor.focus({preventScroll:!0}))}function AE(e,t){return e.length>0?U`<openclaw-chat-sources
        .sources=${e}
        .fetchFavicon=${t}
      ></openclaw-chat-sources>`:K}var jE;function ME(){return(ME=e((()=>{go(),q(),G(),Pn(),H(),ys(),m(),Ci(),Aa(),R(),cE(),Ji(),jE=class extends s{constructor(...e){super(...e),this.sources=[],this.failedFavicons=new Set,this.refreshFavicons=()=>{this.isConnected&&this.requestUpdate()}}static{this.properties={sources:{attribute:!1},fetchFavicon:{attribute:!1}}}renderFavicon(e){let t=this.fetchFavicon?oE(new URL(e.url).hostname,this.fetchFavicon,this.refreshFavicons):null;return t&&!this.failedFavicons.has(t)?U`<img
          src=${t}
          alt=""
          @error=${()=>{this.failedFavicons.add(t),this.requestUpdate()}}
        />`:V.globe}disconnectedCallback(){for(let e of this.querySelectorAll(`wa-popover`))e.open=!1;super.disconnectedCallback()}willUpdate(){let e=new Set(this.sources.map(e=>e.url));for(let t of this.querySelectorAll(`wa-popover`))e.has(t.dataset.sourceUrl??``)||(t.open=!1)}render(){return U`<div
      class="chat-source-strip"
      role="group"
      aria-label=${B(`chat.messages.sourcePreviews.label`)}
    >
      <div class="chat-source-strip__label">${B(`chat.messages.sourcePreviews.label`)}</div>
      <div class="chat-source-strip__cards">
        ${J(this.sources,e=>e.url,e=>U`
            <div class="chat-source-strip__item">
              <button
                class="chat-source-card"
                type="button"
                aria-haspopup="dialog"
                aria-expanded="false"
              >
                <span class="chat-source-card__title">${e.title}</span>
                <span class="chat-source-card__domain"
                  ><span class="chat-source-card__icon" aria-hidden="true"
                    >${this.renderFavicon(e)}</span
                  >${e.domain}</span
                >
              </button>
              <wa-popover
                ${W(DE)}
                class="chat-source-popover"
                data-source-url=${e.url}
                placement="bottom-start"
                without-arrow
                @wa-show=${OE}
                @wa-hide=${OE}
              >
                <section aria-label=${e.title}>
                  <div class="chat-source-popover__header">
                    <span class="chat-source-card__domain">${e.domain}</span>
                    <button
                      class="chat-source-popover__close"
                      type="button"
                      aria-label=${B(`common.close`)}
                      @click=${kE}
                    >
                      ${V.x}
                    </button>
                  </div>
                  ${e.excerpt?U`
                          <div class="chat-source-popover__kind">
                            ${B(e.excerptKind===`page`?`chat.messages.sourcePreviews.pageExcerpt`:`chat.messages.sourcePreviews.searchSnippet`)}
                          </div>
                          <p class="chat-source-popover__excerpt">${e.excerpt}</p>
                        `:U`<p class="chat-source-popover__unavailable">
                          ${B(`chat.messages.sourcePreviews.unavailable`)}
                        </p>`}
                  <a
                    class="chat-source-popover__open"
                    href=${e.url}
                    target="_blank"
                    rel="noopener noreferrer"
                    >${B(`chat.messages.sourcePreviews.open`)}<span aria-hidden="true"
                      >${V.externalLink}</span
                    ></a
                  >
                </section>
              </wa-popover>
            </div>
          `)}
      </div>
    </div>`}},customElements.get(`openclaw-chat-sources`)||customElements.define(`openclaw-chat-sources`,jE)})))()}function NE(e,t){let n=df(e);if(n)return H_(n,t.streamOptions);let r=Vd(e),i=r.find(e=>e.role===`assistant`),a=e.outcome.kind===`completed`?e.outcome.actionOwner:null,o=i??r[0],s=e.parts.flatMap(e=>e.kind===`stream-run`?e.parts.map(e=>e.startedAt):[]),c=e.parts.find(e=>e.kind===`stream-run`),l={key:e.key,kind:`group`,role:`assistant`,senderLabel:i?.senderLabel,replyToSender:i?.replyToSender??c?.replyToSender,replyToMessage:i?.replyToMessage??c?.replyToMessage,replyShared:i?.replyShared,replyTurnSource:i?.replyTurnSource,replyCurrentSource:i?.replyCurrentSource,messages:o?.messages??[],visibleContent:o?.visibleContent??`none`,timestamp:(a?nc(a.message):null)??Math.min(...r.map(e=>e.timestamp),...s,Date.now()),isStreaming:e.outcome.kind===`active`,runId:e.runId},u=e_(a&&r.find(e=>e.messages.includes(a))||l,t.renderGroupOptions(l).resolveReplyPreview,r.flatMap(e=>e.messages)),d=e=>nv(e,t.renderGroupOptions(e)),f=e.parts.flatMap(e=>e.kind===`stream-run`?e.parts:[e]),p=Oh(e.parts.flatMap(e=>e.kind===`work-group`&&!t.isWorkExpanded(e.key)?[e]:[]),t.renderGroupOptions(l)),m=[J(f,e=>e.kind+`:`+e.key,e=>{if(e.kind===`stream`||e.kind===`reading-indicator`||e.kind===`question`)return V_(e,t.streamOptions,`standalone`);if(e.kind===`work-group`){let n=t.isWorkExpanded(e.key);return U`
            ${U_(e,{expanded:n,onToggle:()=>t.onToggleWork(e.key,n),presentation:`continuation`,browserTabPreviews:p.get(e.key)})}
            ${n?e.groups.map(d):K}
          `}if(e.kind===`activity-run`){let n=e.groups[0];return n?$_(e.groups,t.renderGroupOptions(n),`continuation`):K}return U`${d(e)}${p.get(e.key)??K}`}),a?AE(fp({groups:r,answer:a.message,runId:e.runId,basePath:t.basePath,sessionPublicOrigin:t.sessionPublicOrigin}),t.streamOptions.fetchLinkFavicon):K];return rv(l,{...t.renderGroupOptions(l),frameContent:m,frameReplyLine:u,frameActionOwner:a,turnRecap:t.turnRecap})}function PE(){return(PE=e((()=>{q(),Pn(),ap(),Jd(),nu(),iv(),G_(),i_(),ME(),qh()})))()}function FE(e){let t=e.realtimeTalkConversation??[];return t.length===0?K:U`
    <div
      class="agent-chat__voice-turns"
      role="log"
      aria-label=${B(`chat.composer.voiceTranscript`)}
    >
      ${J(t,e=>e.id,t=>{let n=t.role===`user`?e.userName?.trim()||`You`:e.assistantName;return U`
            <div
              class="agent-chat__voice-turn agent-chat__voice-turn--${t.role}"
              data-role=${t.role}
            >
              <span class="agent-chat__voice-turn-speaker">${n}</span>
              <span class="agent-chat__voice-turn-text">${t.text}</span>
              ${t.isStreaming?U`<span
                      class="agent-chat__voice-turn-stream"
                      aria-label=${B(`chat.composer.stillListening`)}
                    ></span>`:K}
            </div>
          `})}
    </div>
  `}function IE(){return(IE=e((()=>{q(),Pn(),m()})))()}function LE(e,t,n,r){let{normalizedMessage:i,displayMarkdown:a}=zg(e),o=Bg(e,i,a),s=nd(e);if(!o&&!s)return;let c={...i,messages:[{message:e}]},l=s??t,u=ti(i.role)===`assistant`,d=i.senderSession?.agentId??n.currentAgentId??`main`,f=d===(n.currentAgentId??`main`),p=u&&!f?i.senderLabel?.trim()||n.agents?.find(e=>e.id===d)?.identity?.name?.trim()||null:r?.senderLabel??M_(c,n);return{messageId:r?.messageId??l,sourceMessageId:r?t:l,senderLabel:p,sender:u?{...i.sender,...p?{name:p}:{},identity:i.sender?.identity??{type:`agent`,id:d}}:i.sender,...u?{agentAvatar:Pl({currentAgentId:d,agents:n.agents,assistantAvatar:f?n.assistantAvatar??null:null,assistantAvatarUrl:f?n.assistantAvatarUrl:n.senderAgentAvatars?.get(d)})}:{turnRunId:Ys(e)??void 0},text:o}}function RE(e,t){let n=new Map;return r=>{if(n.has(r))return n.get(r);let i=e.get(r),a=i?.message??t.replyMessageAccess?.read(r),o=a?void 0:t.replyMessageAccess?.status?.(r),s=a?LE(a,r,t,i):o&&zE[o];return n.set(r,s),s}}var zE;function BE(){return(BE=e((()=>{mi(),I(),nu(),vf(),Gg(),N_(),ou(),zE={pending:{pending:!0},missing:{missing:!0},oversized:{oversized:!0}}})))()}function VE(){let e=new WeakMap;return(t,n,r)=>{let i=e.get(t);if(i?.key.length===n.length&&i.key.every((e,t)=>Object.is(e,n[t])))return i.value;let a=r();return e.set(t,{key:n,value:a}),a}}function HE(e,t){let n=rf(e),r=UE(e,[n],()=>e.find(e=>e.kind===`reading-indicator`)),i=r?.runId??t.runId;return{workingIndicator:r,activityRunId:i,activityGroupKey:WE(e,[n,i,t.runActive],()=>t.runActive&&i?e.findLast(e=>e.kind===`group`&&e.messages.some(({message:e})=>Dl(e)===i&&pi(e).some(e=>!e.hideFromChannelProgress&&!e.suppressChannelProgress)))?.key:void 0),runOutputTokens:r?.runId?t.runUsageById?.get(r.runId)?.outputTokens??null:null}}var UE,WE;function GE(){return(GE=e((()=>{aa(),bc(),vf(),UE=VE(),WE=VE()})))()}function KE(e){let t=e.selectedSession;return YE(e.messages,[e.userId,t?.expandedParticipants??t?.participants,t?.owner?.actor.identity,...e.pendingInputs??[]],()=>({showOwnSenderName:(t?.expandedParticipants??t?.participants??[]).some(({identity:t})=>t.type!==`agent`&&(t.type!==`profile`||t.id!==e.userId))||[...e.messages,...(e.pendingInputs??[]).map(e=>e.message)].some(t=>{if(ti(xi(t))!==`user`)return!1;let n=yi(ro(ro(t)?.__openclaw));return!(!n||n.identity?.type===`profile`&&n.identity.id===e.userId)}),sessionPeople:new Set([t?.owner?.actor.identity,...(t?.expandedParticipants??t?.participants??[]).map(({identity:e})=>e)].flatMap(e=>e&&e.type!==`agent`?[Ki(e)]:[]))}))}function qE(e){let t=e.sessionHost??null;return Pe(e.sessionKey)?.rest===`global`||t!==null&&f(t)&&ie(t,e.sessionKey)!==null}function JE(e,t,n){let r=e.selectedSession,i=r?.kind,a=i&&i!==`unknown`?i:n?`global`:wr(e.sessionKey),o=XE(t,[rf(t)],()=>t.some(e=>e.kind===`group`&&Lc(e))),s=yc((a===`direct`||a===`cron`||a===`spawn-child`)&&!o,e.userId);return{isDirectThread:s===`footer`,avatarPlacement:r?.classification===`subagent`||se(e.sessionKey)?`none`:s}}var YE,XE;function ZE(){return(ZE=e((()=>{vr(),mi(),Vr(),I(),vf(),il(),wc(),YE=VE(),XE=VE()})))()}function QE(e,t,n,r=!1){let i=new Map,a=new Map,o=(e,t,r,o,s)=>{let c=i.get(e);c?c.message=o:i.set(e,{id:e,role:t,anchorId:r,message:o}),a.set(r,e),n.set(r,s)},s=(e,n)=>{if((!fd(e)||r||t.get(`inter-session:`+e.key))&&!(e.role!==`user`&&e.role!==`assistant`||e.visibleContent===`none`))for(let t of e.messages){if(!t.hasVisibleContent)continue;let r=nd(t.message)??t.key,i=e.role===`user`?r:e.runId?`run:${e.runId}`:nd(e.messages[0]?.message)??e.key;o(i,e.role,r,t.message,n)}},c=(e,n)=>{if(e.kind===`group`)s(e,n);else if(e.kind===`agent-run-frame`)for(let t of e.parts)c(t,n);else if(e.kind===`activity-run`)for(let t of e.groups)s(t,n);else if(e.kind===`work-group`&&t.get(e.key))for(let t of e.groups)s(t,n===e.key?`${e.key}:${t.key}`:n);else if(e.kind===`stream-run`)for(let t of e.parts){if(t.kind!==`stream`)continue;let r={role:`assistant`,content:[{type:`text`,text:t.text}],timestamp:t.startedAt},{normalizedMessage:i,displayMarkdown:a}=zg(r);(Qi(r,i)===`non-text`||a.trim())&&o(e.runId?`run:${e.runId}`:e.key,`assistant`,t.key,r,n)}};for(let t of e)c(t,t.key);return{markers:[...i.values()],markerIdsByMessageId:a}}function $E(){return($E=e((()=>{Zi(),nu(),il(),Gg()})))()}function eD(e){let t=[],n=[],r=()=>{let e=n[0];e&&t.push(n.length===1?e:{...e,runId:void 0,messages:n.flatMap(e=>e.messages),visibleContent:n.some(e=>e.visibleContent===`non-text`)?`non-text`:n.some(e=>e.visibleContent===`text`)?`text`:`none`}),n=[]};for(let i of e){if(i.kind!==`group`||!fd(i)||!i.senderSession?.sessionKey||i.messages.some(({message:e})=>Zr(e).replyTarget)){r(),t.push(i);continue}let e=n[0];e&&(e.senderSession?.sessionKey!==i.senderSession.sessionKey||e.senderSession?.agentId!==i.senderSession.agentId||e.senderSession?.label!==i.senderSession.label)&&r(),n.push(i)}return r(),t}function tD(e,t){return e.kind===`stream-run`?e.parts.includes(t):e.kind===`agent-run-frame`&&e.parts.some(e=>e.kind===`stream-run`&&e.parts.includes(t))}function nD(e,t){let n=Reflect.ownKeys(e).filter(e=>e!==`text`);return n.length===Reflect.ownKeys(t).filter(e=>e!==`text`).length&&n.every(n=>Object.hasOwn(t,n)&&Object.is(Reflect.get(e,n),Reflect.get(t,n)))}function rD(e,t,n){let r=e=>({...e,parts:e.parts.map(e=>e===t?n:e)});return e.kind===`stream-run`?r(e):{...e,parts:e.parts.map(e=>e.kind===`stream-run`&&e.parts.includes(t)?r(e):e)}}function iD(e,t){let{session:n}=t,r=[rf(e),t.sessionKey,t.runWorking,t.searchActive,n?.key,n?.lastRunId,n?.status,n?.runtimeMs,du()],i=lD.get(e);if(i?.key.every((e,t)=>Object.is(e,r[t]))){let t=i.live;if(!t||e[t.index]===t.item)return i.value;let n=e[t.index];if(t.owner&&n?.kind===`stream`&&nD(t.item,n)){let r=rD(t.owner.item,t.item,n),a=i.value.collapsedItems.slice(),o=i.value.transcriptItems.slice();a[t.owner.collapsedIndex]=r,o[t.owner.transcriptIndex]=r;let s={collapsedItems:a,transcriptItems:o,workGroups:i.value.workGroups,continuations:i.value.continuations,searchActive:i.value.searchActive},c={...t.owner,item:r},l={...t,item:n,owner:c};return uD.set(s,{item:n,owner:c,structuralChain:i.structuralChain}),lD.set(e,{...i,value:s,live:l}),s}}let a=(()=>{let n=uf(Zd(qd(Kd(e),t),t),t),r=t.searchActive?n:eD(n),i=new Map,a=r.filter((e,t)=>{let n=r[t-1],a=e.kind===`stream-run`&&e.parts.every(e=>e.kind===`reading-indicator`)?e.parts:e.kind===`agent-run-frame`?df(e):void 0,o=e.kind===`stream-run`||e.kind===`agent-run-frame`?e.runId:void 0;return n?.kind!==`group`||!a||!Yd(n)||n.runId!==void 0&&o!==void 0&&n.runId!==o||(i.set(n.key,a),!1)});return{collapsedItems:r,transcriptItems:a,workGroups:a.filter(e=>e.kind===`work-group`),continuations:i,searchActive:t.searchActive}})(),o=bf(e),s=e[o],c;if(s?.kind===`stream`){let e=a.collapsedItems.findLast(e=>tD(e,s)),t=e?a.transcriptItems.lastIndexOf(e):-1,n=e&&t>=0?{item:e,collapsedIndex:a.collapsedItems.lastIndexOf(e),transcriptIndex:t}:void 0;c={index:o,item:s,owner:n},n&&uD.set(a,{item:s,owner:n,structuralChain:a})}return lD.set(e,{key:r,value:a,structuralChain:a,live:c}),a}function aD(e,t,n){let r=[t,Ud(t),n.assistantName,n.userId,n.userName];return dD(e,r,()=>{let i=uD.get(e);if(!i)return oD(e,t,n);let a=QE(e.transcriptItems.slice(i.owner.transcriptIndex),t,new Map,e.searchActive),o=a.markerIdsByMessageId.has(i.item.key),s=fD(i.structuralChain,[...r,o],()=>{let r=oD(e,t,n),a=r.rows.findLastIndex(e=>e.key===i.owner.item.key);if(a<0)throw Error(`Missing live stream owner row`);return{chain:e,index:r,ownerRowIndex:a}});if(s.chain===e)return s.index;let c=s.index.rows.slice();c[s.ownerRowIndex]={kind:`item`,key:i.owner.item.key,item:i.owner.item};let l=s.index.positionIndex.markers;for(let e of a.markers){let t=s.index.positionIndex.markers.findLastIndex(t=>t.id===e.id);if(t<0)continue;let n=s.index.positionIndex.markers[t];e.message!==n.message&&(l===s.index.positionIndex.markers&&(l=l.slice()),l[t]={...n,message:e.message})}return{...s.index,rows:c,positionIndex:{...s.index.positionIndex,markers:l}}})}function oD(e,t,n){let r=new Map,{messageRowKeysById:i,transcriptMessageKeys:a}=cD(e.transcriptItems,t,n,r),o=QE(e.transcriptItems,t,i,e.searchActive),s=[];for(let n of e.transcriptItems)if(s.push({kind:`item`,key:n.key,item:n}),n.kind===`work-group`&&t.get(n.key))for(let e of n.groups)s.push({kind:`item`,key:`${n.key}:${e.key}`,item:e});return{messageRowKeysById:i,transcriptMessageKeys:a,loadedReplySources:r,positionIndex:o,rows:s}}function sD(e,t,n){for(let r of e){let e=r.kind===`agent-run-frame`?r.parts:[r];for(let r of e)r.kind===`group`&&fd(r)&&r.messages.some(e=>nd(e.message)===n)&&Wd(t,`inter-session:`+r.key,!0),r.kind===`work-group`&&r.groups.some(e=>e.messages.some(e=>nd(e.message)===n))&&Wd(t,r.key,!0)}}function cD(e,t,n,r){let i=new Map,a=new Map;for(let o of e){let e=o.kind===`agent-run-frame`?o.parts:[o],s=Vd(o),c=s.find(e=>e.role===`assistant`)??s[0];for(let s of e){if(s.kind===`stream-run`)for(let e of s.parts)e.kind===`stream`&&a.set(e.key,o.key);else s.kind===`stream`&&a.set(s.key,o.key);for(let e of Vd(s)){let s=M_(c??e,n),l=o.kind===`work-group`&&t.get(o.key)?o.key+`:`+e.key:o.key;for(let t of e.messages){a.set(t.key,l);let e=nd(t.message);e&&(i.set(e,l),r.set(e,{message:t.message,messageId:t.key,senderLabel:s}))}}}}return{messageRowKeysById:i,transcriptMessageKeys:a}}var lD,uD,dD,fD;function pD(){return(pD=e((()=>{mi(),Jd(),vf(),il(),ql(),N_(),$E(),lD=new WeakMap,uD=new WeakMap,dD=VE(),fD=VE()})))()}function mD(e,t){e.size>0&&hD(e,[t.fullMessageAgentId,t.messages,t.toolMessages,Ud(e),...t.pendingInputs??[]],()=>ef(e,t.fullMessageAgentId,[...t.messages,...t.toolMessages,...(t.pendingInputs??[]).map(e=>e.message)]))}var hD;function gD(){return(gD=e((()=>{vf(),hD=VE()})))()}function _D(e){if(e.kind===`stream-run`)return[e.key,...e.parts];if(e.kind===`work-group`){let t=Array.from(e.previewAfterGroup??[]).flat();return[e.key,e.durationMs,...e.groups,...t]}if(e.kind===`activity-run`)return[e.key,...e.groups];if(e.kind===`agent-run-frame`){let t=e.outcome;return[e.key,t.kind,t.kind===`completed`?t.actionOwner:null,...e.parts.flatMap(_D)]}return[e]}function vD(e,t){let n=e.transcriptRenderDependencies;(n.length!==t.length||t.some((e,t)=>!Object.is(n[t],e)))&&(e.transcriptRenderDependencies=t,e.transcriptRenderContext={})}function yD(e,t,n){return r=>kn([..._D(r),e.transcriptRenderContext,...t(r)],()=>n(r))}function bD(){return(bD=e((()=>{Vn()})))()}function xD(e){return{key:e.key,message:{role:`assistant`,content:[{type:`text`,text:e.text}]}}}function SD(e){let t=rf(e),n=CD.get(e);if(n?.generation===t){let t=n.live,r=t?e[t.index]:void 0;return t&&r?.kind===`stream`&&t.text!==r.text&&(t.turn[t.slot]=xD(r),t.text=r.text),n.byMessage}let r=new Map,i={generation:t,byMessage:r},a=[];for(let[t,n]of e.entries())if((n.kind===`divider`||Ec(n)||n.kind===`group`&&Lc(n))&&(a=[]),n.kind===`group`){if(ti(n.role)!==`assistant`||Lc(n))continue;for(let e of n.messages)a.push(e),r.set(e.key,a)}else n.kind===`stream`&&(n.isStreaming&&(i.live={index:t,turn:a,slot:a.length,text:n.text}),a.push(xD(n)),r.set(n.key,a));return CD.set(e,i),r}var CD;function wD(){return(wD=e((()=>{mi(),vf(),il(),CD=new WeakMap})))()}function TD(e){let t=Le.getLocale();(!DD||OD!==t)&&(OD=t,DD=new Intl.ListFormat(t,{type:`conjunction`,style:`long`}));let n=e.length>3?e.slice(0,2):e,r=[...n];e.length>3&&r.push(B(`chat.sessionSuggestions.typingOthers`,{count:String(e.length-2)}));let i=0,a=DD.formatToParts(r).map(e=>e.type===`element`&&i++<n.length?U`<bdi class="agent-chat__typing-name" title=${e.value}>${e.value}</bdi>`:e.value),o=e.length===1?`chat.sessionSuggestions.typing`:`chat.sessionSuggestions.typingMany`,s=B(o,{name:``,names:``});return{text:B(o,{name:DD.format(r),names:DD.format(r)}),content:s.split(``).map((e,t)=>t?U`${a}${e}`:e)}}function ED(e,t=`gutter`,n){if(!e?.length)return null;let r=e.filter(e=>!e.paused),i=e.slice(2,7),a=i.map(e=>e.label),o=n?.several?{text:B(`chat.sessionSuggestions.typingSeveral`),content:B(`chat.sessionSuggestions.typingSeveral`)}:a.length?TD(a):void 0,s=t===`none`&&i.length?i.map(e=>`${e.label} — ${B(`chat.sessionSuggestions.typingDraftState`)}`).join(`; `):void 0,c=n?.several?o?.text??``:r.length===0?``:r.length===1?B(`chat.sessionSuggestions.typing`,{name:r[0]?.label??``}):B(`chat.sessionSuggestions.typingMany`,{names:r.map(e=>e.label).join(`, `)});return U`<div class="agent-chat__typing-indicator agent-chat__typing-indicator--outside">
    ${J(e.slice(0,2),e=>e.id,e=>{let n={id:e.id,name:e.label,identity:{type:`profile`,id:e.id}},r=e.preview?.trim()?e.preview:void 0;return U`<div
          class="agent-chat__typing-row"
          ?data-exiting=${e.exitDurationMs!==void 0}
          style=${e.exitDurationMs===void 0?K:`--chat-typing-exit-duration: ${e.exitDurationMs}ms`}
        >
          <div class="agent-chat__typing-row-content">
            <div
              class="chat-group user chat-group--peer chat-group--sender-tint chat-group--with-footer chat-group--typing"
              style=${`--chat-sender-hue: ${qi(n)}`}
              aria-live="off"
            >
              <div class="chat-group-messages">
                <div class="chat-bubble ${r?`agent-chat__typing-preview-bubble`:``}">
                  <div class="chat-message-avatar-anchor">
                    ${r?U`<span
                            class="chat-text agent-chat__typing-preview-text"
                            dir="auto"
                            ?data-paused=${e.paused}
                            >${r}</span
                          >`:U`<span class="agent-chat__typing-bubble" aria-hidden="true"
                            ><span></span><span></span><span></span
                          ></span>`}
                    ${t===`gutter`?hd(`user`,void 0,void 0,n):null}
                  </div>
                </div>
              </div>
              <div class="chat-group-footer chat-group-footer--persistent-identity">
                <div class="chat-group-footer__meta">
                  ${t===`footer`?vl(n):null}
                  <span class="chat-sender-name agent-chat__typing-preview-label"
                    >${e.label}</span
                  >
                  <span
                    class="agent-chat__typing-state agent-chat__typing-text"
                    ?data-typing=${!e.paused}
                    >${B(e.paused?`chat.sessionSuggestions.pausedDraftState`:`chat.sessionSuggestions.typingDraftState`)}</span
                  >
                </div>
              </div>
            </div>
          </div>
        </div>`})}
    ${i.length?U`<div class="agent-chat__typing-row agent-chat__typing-group">
            <div class="agent-chat__typing-row-content">
              <div
                class="agent-chat__typing-overflow ${t===`none`?`agent-chat__typing-overflow--no-avatars`:``}"
                role="group"
                aria-label=${s?`${B(`chat.sessionSuggestions.otherCollaborators`)}: ${s}`:B(`chat.sessionSuggestions.otherCollaborators`)}
                title=${s??K}
                aria-live="off"
              >
                ${t===`none`?K:U`<span class="agent-chat__typing-identities">
                        ${J(i,e=>e.id,e=>U`<span class="agent-chat__typing-person">
                            ${vl({id:e.id,name:e.label,identity:{type:`profile`,id:e.id}})}
                          </span>`)}
                      </span>`}
                <span class="agent-chat__typing-summary"
                  ><span class="agent-chat__typing-text" data-typing
                    >${o?.content}</span
                  ></span
                >
              </div>
            </div>
          </div>`:K}
    <span class="sr-only" role="status">${c}</span>
  </div>`}var DD,OD;function kD(){return(kD=e((()=>{q(),Pn(),m(),Xi(),gc(),wc()})))()}function AD(e,t){let n=zx(e.paneId),r=e.asyncQuestions,i=e.onRequestUpdate??(()=>{}),a=e.selectedSession,{showOwnSenderName:o,sessionPeople:s}=KE(e),c=lu(a,e.mediaPolicyEpoch),l=qE(e),u=e.showThinking&&a?.reasoningLevel===`on`,d=e.currentAgentId??e.fullMessageAgentId,f=Pl({currentAgentId:d,agents:e.agents,assistantAvatar:e.assistantAvatar,assistantAvatarUrl:e.assistantAvatarUrl}),p={agentId:d,name:e.assistantName,avatar:f.avatar,textAvatar:f.textAvatar},m=Le.getLocale(),h=n.searchOpen&&!!n.searchQuery.trim(),g=t.expandedAssistantMessages,_=t=>_l(e.fullMessageAgentId,t);mD(g,e);let v={paneId:e.paneId,sessionKey:e.sessionKey,archiveNotice:zp(a),runId:e.runId??null,compactionStatus:e.compactionStatus,locale:m,messages:e.messages,toolMessages:e.toolMessages,guardianNotices:e.guardianNotices,streamSegments:e.streamSegments,stream:e.stream??null,streamStartedAt:e.streamStartedAt,queue:e.queue,initialTurnId:e.initialTurnId,pendingInputs:e.pendingInputs,workerSetupPending:[`requested`,`provisioning`,`syncing`,`starting`].includes(a?.placement?.state??``),workspaceSyncPendingRunIds:(a?.placement?.state===`active`||a?.placement?.state===`draining`)&&a.placement.workspaceResultReconciling===!0?a.activeRunIds:void 0,showToolCalls:e.showToolCalls,persistCommentary:e.persistCommentary,runWorking:!!e.runWorking,runActive:!!e.runActive,questionPrompts:e.questionPrompts,loading:e.loading,replyPeople:[...s].toSorted(),replyLocalPerson:Ni(e.userId),searchOpen:n.searchOpen,searchQuery:n.searchQuery,messageRecovery:h&&e.loadFullAssistantMessage?{messages:g,revision:Ud(g),agentId:e.fullMessageAgentId}:void 0},y=_f(v),{workingIndicator:b,activityRunId:x,activityGroupKey:S,runOutputTokens:C}=HE(y,e),w=e.latestBrowserTabs;Xd(e.sessionKey,y,!!e.autoExpandToolCalls,h||!e.showToolCalls);let T=yf(e.sessionKey),E=$d(e.sessionKey),D=iD(y,{sessionKey:e.sessionKey,runWorking:!!e.runWorking,searchActive:h,session:a}),{collapsedItems:O,transcriptItems:k,continuations:A}=D,ee=e.replyMessageAccess?.navigationId;ee&&sD(k,T,ee);let{messageRowKeysById:te,transcriptMessageKeys:j,loadedReplySources:M,positionIndex:ne,rows:re}=aD(D,T,e),N=JSON.stringify([...w??[]]),ie=jD(D.workGroups,[T,Ud(T),e.sessionKey,N],()=>Oh(D.workGroups.filter(e=>!T.get(e.key)),{sessionKey:e.sessionKey,latestBrowserTabs:w})),ae=new Map((e.questionPrompts??[]).map(e=>[e.id,e])),P=(e,t)=>{Wd(T,e,!(t??T.get(e)??!1)),n.transcriptRenderContext.onRequestUpdate?.()},F=t=>{let n=_(t),r=g.get(n),a=e.loadFullAssistantMessage;if(!a||r?.status===`loading`)return;let o=(r?.revision??0)+1,s={status:`loading`,revision:o};Wd(g,n,s),i();let c=e=>{if(g.get(n)!==s)return;let t=e?.ok&&e.message&&typeof e.message==`object`?Ui(e.message):null;Wd(g,n,t===null?{status:`error`,revision:o+1}:{status:`loaded`,markdown:t,message:e?.message,revision:o+1}),i()};a({sessionKey:e.sessionKey,...e.fullMessageAgentId?{agentId:e.fullMessageAgentId}:{},messageId:t}).then(c,()=>c(null))},I=(e.realtimeTalkConversation?.length??0)>0,oe=(e.typingActors?.length??0)>0,se=lf(e),L=!!(se||oe||I),R=y.length===0&&!e.loading&&!L;t.setContentReady(!e.loading);let{isDirectThread:ce,avatarPlacement:le}=JE(e,y,l),ue=e.loading&&y.length===0&&!oe,de=typeof e.presented==`object`?e.presented.isPresented():e.presented??!0,fe=a?.contextTokens??e.sessions?.defaults?.contextTokens??null,pe=new Map,me=RE(M,e),he={entryRefFor:t.entryAnimations.refFor,presented:de,onReply:e.onSetReply?e=>n.transcriptRenderContext.onSetReply?.(e):void 0,resolveReplyPreview:me,onResolveReply:e.replyMessageAccess?.request,onOpenReply:e=>n.transcriptRenderContext.onOpenReply?.(e),replyNavigationId:e.replyMessageAccess?.navigationId,onOpenSidebar:e.onOpenSidebar,sessionKey:e.sessionKey,boardProvider:e.boardProvider,agentId:d,runActive:e.runActive,asyncQuestions:r,onOpenWorkspaceFile:e.onOpenWorkspaceFile,onRequestUpdate:i,resourceBasePath:e.resourceBasePath,mediaPolicyKey:c,connectionEpoch:e.connectionEpoch,assistantAttachmentAuthToken:e.assistantAttachmentAuthToken??null,resolveArtifactDownload:e.resolveArtifactDownload,getTurnVideoMessages:e=>n.transcriptRenderContext.turnVideoMessages?.get(e),onRequestOpenImage:e.onRequestOpenImage,onOpenImage:e.onOpenImage,onAssistantAttachmentLoaded:e.onAssistantAttachmentLoaded,canvasPluginSurfaceUrl:e.canvasPluginSurfaceUrl,embedSandboxMode:e.embedSandboxMode??`scripts`,allowExternalEmbedUrls:e.allowExternalEmbedUrls??!1,fetchLinkFavicon:e.fetchLinkFavicon,pluginToolIcons:e.pluginToolIcons,githubRepo:e.githubRepo,githubRepositories:e.githubRepositories,showAssistantAvatar:le===`gutter`},ge={...he,branding:e.branding,assistant:p,startupLabel:e.startupLabel,waitingApproval:e.waitingApproval,runOutputTokens:C,questionPrompts:ae},_e=null,ve=t=>{let n=A.get(t.key),r=t.messages.at(-1)?.message,a=t.role.toLowerCase()===`user`&&r?nd(r):null;return{...he,messageReactions:e.messageReactions,onReact:e.onReact,transcriptVisible:e.transcriptVisible,latestBrowserTabs:w,showReasoning:u,showToolCalls:e.showToolCalls,activityRunId:x,activityGroupKey:S,autoExpandToolCalls:!!e.autoExpandToolCalls,isToolMessageExpanded:e=>T.get(e),onToggleToolMessageExpanded:P,isUserMessageExpanded:e=>E.get(e)??!1,onToggleUserMessageExpanded:e=>{Wd(E,e,!E.get(e)),i()},loadFullAssistantMessage:e.loadFullAssistantMessage??void 0,getAssistantMessageExpansion:e=>g.get(_(e)),onToggleAssistantMessageExpanded:F,isToolExpanded:e=>T.get(e)??!1,onToggleToolExpanded:P,assistantName:e.assistantName,assistantAvatar:p.avatar,assistantTextAvatar:p.textAvatar,agents:e.agents,senderAgentAvatars:e.senderAgentAvatars,mainKey:e.mainKey,basePath:e.basePath,userId:e.userId??null,userName:e.userName??null,showOwnSenderName:o,userAvatar:e.userAvatar??null,onRetryQueuedMessage:e.onRetryQueuedMessage,onDiscardQueuedMessage:e.onDiscardQueuedMessage,queuedMessageAction:e.queuedMessageAction,personActivity:e.personActivity,avatarPlacement:le,contextWindow:fe,onRewind:a&&e.onRewindMessage?()=>{Promise.resolve(e.onRewindMessage?.(a)).then(t=>{t&&e.onFocusComposer?.()})}:void 0,rewindDisabled:!!(e.runActive||e.runWorking),activeContinuation:n?{parts:n,options:ge}:void 0,turnRecap:pe.get(t.key),latestAssistant:t.key===_e,searchResult:h}},ye=JSON.stringify([C]),be=e=>{if(e.kind===`agent-run-frame`){let t=e.parts.some(e=>e.kind===`stream-run`&&e.parts.some(e=>e.kind===`reading-indicator`)),n=pe.get(e.key);return`${t?ye:``}|${n?`${n.runtimeMs}:${n.outputTokens??``}`:``}|${e.key===_e?`latest-assistant`:``}`}if(e.kind===`stream-run`)return e.parts.some(e=>e.kind===`reading-indicator`)?ye:``;if(e.kind!==`group`)return``;let t=A.get(e.key),n=pe.get(e.key);return`${t?`${t.map(e=>e.key).join(` `)}${ye}`:``}|${n?`${n.runtimeMs}:${n.outputTokens??``}`:``}|${e.key===_e?`latest-assistant`:``}|${h?`search-result`:``}`},xe=yD(n,e=>{let t=[be(e)];for(let n of Vd(e))for(let e of n.messages)if(e.replyTarget?.kind===`id`){let n=M.get(e.replyTarget.id);t.push(e.replyTarget.id,n?.message,n?.senderLabel)}return t},t=>{if(t.kind===`divider`)return Vp(t);if(t.kind===`notice`)return Hp(t);if(t.kind===`stream-run`)return H_(t.parts,ge);if(t.kind===`work-group`){let e=T.get(t.key)??!1;return U_(t,{expanded:e,browserTabPreviews:ie.get(t.key),onToggle:()=>P(t.key,e)})}if(t.kind===`activity-run`){let e=t.groups[0];return e?t.groups.length===1?rv(e,ve(e)):$_(t.groups,ve(e)):K}return t.kind===`agent-run-frame`?NE(t,{basePath:e.basePath,sessionPublicOrigin:e.sessionPublicOrigin,streamOptions:ge,renderGroupOptions:ve,isWorkExpanded:e=>T.get(e)??!1,onToggleWork:P,turnRecap:pe.get(t.key)}):t.kind===`group`?rv(t,ve(t)):t.kind===`question`?H_([t],{questionPrompts:ae}):K}),Se=kc(n,{sessionKey:e.sessionKey,agentId:e.currentAgentId,gatewayClient:e.gatewayClient,indicator:b,row:a,usageByRun:e.runUsageById}),Ce=k.at(-1),we=Ce?.kind===`agent-run-frame`&&Ce.outcome.kind===`completed`&&Ce.outcome.actionOwner!==null||Ce?.kind===`group`&&Yd(Ce)?Ce:null,Te=Se&&(!we?.runId||we.runId===Se.runId)?Se:null;_e=!e.runActive&&!e.runWorking&&!h&&we&&(we.kind!==`group`||!we.isStreaming)?we.key:null,t.entryAnimations.project(y),t.syncMessageRows(te,j),Te!==null&&we?.runId===Te.runId&&pe.set(we.key,Te);let z=ie.size?[]:re.slice();for(let e of ie.size?re:[]){z.push(e);let t=ie.get(e.key);t&&(e.kind!==`item`||e.item.kind!==`work-group`)&&z.push({kind:`content`,key:`work-previews:${e.key}`,content:U`<div class="chat-group tool chat-group--turn-block">
          <div class="chat-group-messages">${t}</div>
        </div>`})}let Ee=FE({...e,realtimeTalkConversation:e.realtimeTalkConversation?.filter(t=>!t.transcriptId||!MD(e.messages,[],()=>new Set(e.messages.map(nd))).has(t.transcriptId))});Ee!==K&&z.push({kind:`content`,key:`realtime-talk`,content:Ee}),Te!==null&&pe.size===0&&!R&&!ue&&z.push({kind:`content`,key:`turn-recap`,content:pl(Te)}),se&&!h&&z.push({kind:`content`,key:`waiting-subagents`,content:Qu({kind:`reading-indicator`,key:`waiting-subagents:${e.sessionKey}`,startedAt:se.startedAt},{mascot:e.branding?.mascot,waitingSubagents:se,onOpenSession:e.onOpenSession})});let De=ED(e.typingActors,le,e.typingOverflow);De&&z.push({kind:`content`,key:`presence:typing`,content:De});let Oe=_n();vD(n,[m,e.branding?.mascot,e.branding?.avatarHat,e.branding?.artwork,e.branding?.workingPhrases,Oe.mascot,Oe.avatarHat,T,Ud(T),E,Ud(E),g,Ud(g),Il(),Math.floor(Date.now()/6e4),N,e.sessionKey,de,typeof e.transcriptVisible==`object`?e.transcriptVisible.isPresented():e.transcriptVisible??!0,le,e.boardProvider,e.boardProvider?.canPinWidgets,e.boardProvider?.canPinMcpApps,e.boardProvider?.snapshot$.value.revision,e.fullMessageAgentId,!!e.loadFullAssistantMessage,u,e.showToolCalls,!!e.runActive,x,S,!!e.runWorking,e.startupLabel,!!e.waitingApproval,e.questionPrompts,n.asyncQuestionRevision,e.asyncQuestions?.historyKey,!!e.autoExpandToolCalls,e.assistantName,p.avatar,p.textAvatar,e.currentAgentId,e.agents,e.senderAgentAvatars,e.mainKey,e.userId,e.userName,o,e.userAvatar,e.resourceBasePath,e.basePath,e.sessionPublicOrigin,c,e.assistantAttachmentAuthToken,e.connectionEpoch,e.canvasPluginSurfaceUrl,e.embedSandboxMode??`scripts`,e.allowExternalEmbedUrls??!1,!!e.fetchLinkFavicon,e.pluginToolIcons,e.githubRepo?.owner,e.githubRepo?.repo,Gs(e.githubRepositories,e.githubRepo),fe,!!e.onSetReply,e.messageReactions,!!e.onReact,!!e.asyncQuestions?.submit,!!e.onRetryQueuedMessage,!!e.onDiscardQueuedMessage,e.queuedMessageAction?.id,e.queuedMessageAction?.label,e.queuedMessageAction?.onAction,e.replyMessageAccess?.revision??0,e.replyMessageAccess?.navigationId??``,Te===null?``:`${Te.runtimeMs}:${Te.outputTokens??``}`]),n.transcriptRenderContext.onRequestUpdate=e.onRequestUpdate;let ke=()=>_f({...v,searchOpen:!1,searchQuery:``,messageRecovery:void 0},`unfiltered`);return n.transcriptRenderContext.turnVideoMessages=SD(h?ke():y),n.transcriptRenderContext.onSetReply=e.onSetReply,n.transcriptRenderContext.onOpenReply=r=>{let o=h?iD(_f({...v,searchOpen:!1,searchQuery:``}),{sessionKey:e.sessionKey,runWorking:!!e.runWorking,searchActive:!1,session:a}):D,s=(o===D?M:aD(o,T,e).loadedReplySources).has(r);if(s&&sD(o.transcriptItems,T,r),h&&Gx(n,i),s){h?queueMicrotask(()=>t.revealMessage(r)):t.revealMessage(r);return}e.replyMessageAccess?.open(r)},{isDirectThread:ce,positionIndex:ue?{markers:[],markerIdsByMessageId:new Map}:ne,isEmpty:R,showLoadingSkeleton:ue,searchOpen:n.searchOpen,renderRows:(r=K,i=null)=>t.render(z,e=>e.kind===`item`?xe(e.item):e.content,cS(O),e.announceTranscript!==!1&&!n.searchOpen&&!e.loading,r,i,!!ee)}}var jD,MD;function ND(){return(ND=e((()=>{q(),mn(),m(),Ai(),Vr(),Jd(),Cc(),vu(),mf(),vf(),PE(),Up(),iv(),Yu(),G_(),IE(),BE(),eS(),qh(),GE(),dS(),ZE(),pD(),gD(),bD(),wD(),kD(),ou(),rc(),jD=VE(),MD=VE()})))()}function PD(e,t){let n=Fe(e);return!t.onNavigate||!n?.hasAttribute(`data-cron-run-link`)?!1:(e.preventDefault(),t.onNavigate(`cron`,{search:n.search}),!0)}function FD(e,t){return t.renderSession(e.sessionKey,t=>ID(e,t))}function ID(e,t){let n=AD(e,t);(n.isEmpty||n.showLoadingSkeleton)&&t.entryAnimations.sync(LD,e.announceTranscript!==!1&&!n.searchOpen&&!e.loading);let r=e.historyPagination?U`<div class="chat-history-sentinel"></div>`:K,i=e.historyPagination?{template:ad(e.historyPagination),height:44}:null,a=e.routeLoadingSkeleton&&n.showLoadingSkeleton,o=e.commentAttachments?.some(e=>e.selectionAnnotation),s=a?vn():n.showLoadingSkeleton||n.isEmpty?U`
          <div class="chat-thread-inner" ${W(t.scrollElementRef)}>
            ${r}
            ${n.isEmpty&&!n.showLoadingSkeleton&&i?i.template:K}
            ${n.showLoadingSkeleton?Qf(`chat`,B(`chat.thread.loading`)):K}
            ${n.isEmpty&&!n.searchOpen?tu({...e,onModelSetup:void 0}):K}
            ${n.isEmpty&&n.searchOpen?U` <div class="agent-chat__empty">${B(`chat.thread.noMatches`)}</div> `:K}
          </div>
        `:n.renderRows(r,i);return U`
    <div class="chat-thread-viewport">
      <div
        class="chat-thread ${n.isDirectThread?`chat-thread--direct`:``} ${a?`chat-thread--route-loading`:``} ${o?`chat-thread--comment-pins`:``}"
        ${Af(e.transcriptVisible??!0)}
        ${$f(e.sessionKey,n.showLoadingSkeleton?!1:e.transcriptVisible??!0,!!e.gatewayClient?.connected)}
        ${W(t=>{t instanceof HTMLElement&&dE(t,e.fetchLinkFavicon)})}
        role="log"
        aria-live="off"
        aria-relevant="additions"
        tabindex="0"
        @focusin=${e=>t.handleFocusIn(e)}
        @focusout=${e=>t.handleFocusOut(e)}
        @scroll=${e.onChatScroll}
        @wheel=${e.onHistoryIntent?{handleEvent:e.onHistoryIntent,passive:!0}:null}
        @keydown=${t=>{if(!t.defaultPrevented&&!t.isComposing&&(t.key===`Enter`||t.key===` `)&&PD(t,e))return;let n=Ho(t);if(n){e.onOpenWorkspaceFile?.(n);return}let r=ks(t,e.basePath);if(r){e.onOpenSessionLink?.(r);return}e.onHistoryIntent?.(t)}}
        @touchstart=${e.onHistoryIntent?{handleEvent:e.onHistoryIntent,passive:!0}:null}
        @touchmove=${e.onHistoryIntent?{handleEvent:e.onHistoryIntent,passive:!0}:null}
        @touchend=${e.onHistoryIntent}
        @touchcancel=${e.onHistoryIntent}
        @click=${t=>{if(os(t),is(t),_(t)&&PD(t,e))return;let n=cs(t);if(n){e.onOpenWorkspaceFile?.(n);return}let r=jo(t,e.basePath);r&&_(t)&&(t.preventDefault(),e.onOpenSessionLink?.(r))}}
        @contextmenu=${t=>Zx(t,e)}
        @pointerup=${t=>Yx(t,e)}
      >
        <span
          class="chat-transcript-announcement sr-only"
          role="status"
          aria-live=${e.announceTranscript===!1?`off`:`polite`}
          aria-atomic="true"
          >${t.liveAnnouncementText}</span
        >
        ${TE({positions:n.positionIndex,transcript:t,assistant:{...Pl(e),name:e.assistantName},requestUpdate:e.onRequestUpdate??(()=>{})})}
        ${s}
        ${o?U`<openclaw-chat-comment-pins
                .attachments=${e.commentAttachments}
                .sessionKey=${e.sessionKey}
                .disabled=${e.commentsDisabled??!1}
              ></openclaw-chat-comment-pins>`:K}
      </div>
    </div>
  `}var LD;function RD(){return(RD=e((()=>{q(),G(),cp(),nn(),Of(),Go(),No(),js(),Ro(),ip(),m(),pE(),Ku(),hE(),EE(),eS(),_C(),ND(),ou(),LD=new Map})))()}var zD;function BD(){return(BD=e((()=>{q(),Rn(),Ds(),m(),Fi(),Kf(),R(),jm(),zD=class extends s{constructor(...e){super(...e),this.content=null,this.loadFullMessage=null,this.resolvedCard=null,this.loadState=`idle`,this.downloadFailed=!1,this.requestVersion=0,this.loadOutput=async()=>{let e=this.content;if(!this.isConnected||!e||this.loadState===`loading`)return;let{card:t,sessionKey:n,agentId:r}=e;if(bp(t)){this.loadState=`unavailable`;return}if(!n||!t.resultMessageId||!t.callId||!this.loadFullMessage){t.outputTruncated&&(this.loadState=`unavailable`);return}let i=++this.requestVersion;this.loadState=`loading`;try{let a=await this.loadFullMessage({sessionKey:n,agentId:r,messageId:t.resultMessageId,maxChars:2e6});if(i!==this.requestVersion||this.content!==e||!this.isConnected)return;let o=a?.ok&&a.message?ji(a.message).filter(e=>e.callId===t.callId&&e.completed):[],s=o.length===1?o[0]:void 0;if(!s||s.outputText===void 0){this.loadState=`unavailable`;return}this.resolvedCard={...t,...s},this.loadState=s.outputTruncated||bp(s)?`unavailable`:`loaded`}catch{i===this.requestVersion&&this.content===e&&this.isConnected&&(this.loadState=`error`)}}}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.loadState===`idle`&&this.loadOutput()}disconnectedCallback(){this.requestVersion+=1,this.loadState===`loading`&&(this.loadState=`idle`),super.disconnectedCallback()}willUpdate(e){e.has(`loadFullMessage`)&&!this.loadFullMessage&&(this.requestVersion+=1,this.loadState=`idle`),(e.has(`content`)||e.has(`connectionEpoch`))&&(this.requestVersion+=1,this.resolvedCard=null,this.loadState=`idle`,this.downloadFailed=!1),(e.has(`content`)||e.has(`connectionEpoch`)||e.has(`loadFullMessage`)&&!e.get(`loadFullMessage`)&&this.loadFullMessage)&&this.loadOutput()}downloadOutput(e){this.downloadFailed=!1;let t;try{t=URL.createObjectURL(new Blob([e.outputText??``],{type:`text/plain;charset=utf-8`}));let n=document.createElement(`a`);n.href=t,n.download=`tool-output.txt`,n.click()}catch{this.downloadFailed=!0}finally{t&&URL.revokeObjectURL(t)}}render(){let e=this.resolvedCard??this.content?.card;if(!e)return K;let t=e.outputText??``,n=xp(e)??``;return U`<section class="chat-tool-output" aria-busy=${this.loadState===`loading`}>
      <div class="sidebar-header">
        <div class="sidebar-title">${zf(e)}</div>
      </div>
      ${this.loadState===`loading`?U`<p role="status">${B(`common.loading`)}</p>`:K}
      ${this.loadState===`unavailable`?U`<p role="status">${B(`chat.toolCards.fullOutputUnavailable`)}</p>`:K}
      ${this.loadState===`error`?U`<p role="alert">${B(`chat.toolCards.outputLoadFailed`)} <button class="btn btn--sm" @click=${this.loadOutput}>${B(`common.retry`)}</button></p>`:K}
      ${e.inputText===void 0?K:U`<details>
              <summary>${B(`chat.toolCards.toolInput`)}</summary>
              <pre>${e.inputText}</pre>
            </details>`}
      ${this.loadState===`loading`?K:U`<div class="chat-tool-output__actions">
              ${Ps(t,B(`chat.toolCards.copyOutput`))}
              <button class="btn btn--sm" type="button" @click=${()=>this.downloadOutput(e)}>
                ${B(`chat.toolCards.downloadOutput`)}
              </button>
            </div>`}
      ${this.downloadFailed?U`<p role="alert">${B(`chat.toolCards.outputDownloadFailed`)}</p>`:K}
      <pre class="chat-tool-output__text"><code>${n}</code></pre>
      ${n===t?K:hm(t)}
    </section>`}},Q([X({attribute:!1})],zD.prototype,`content`,void 0),Q([X({attribute:!1})],zD.prototype,`loadFullMessage`,void 0),Q([X()],zD.prototype,`connectionEpoch`,void 0),Q([Y()],zD.prototype,`resolvedCard`,void 0),Q([Y()],zD.prototype,`loadState`,void 0),Q([Y()],zD.prototype,`downloadFailed`,void 0),customElements.get(`openclaw-chat-tool-output`)||customElements.define(`openclaw-chat-tool-output`,zD)})))()}function VD(e){let{content:t,host:n}=e;if(t.kind===`tool-output`)return U`<openclaw-chat-tool-output
      class="chat-sidebar"
      .content=${t}
      .loadFullMessage=${e.chat.loadFullAssistantMessage??null}
      .connectionEpoch=${e.chat.connectionEpoch}
    ></openclaw-chat-tool-output>`;let r=nf(`detail-panel`,e.requestUpdate);return r===void 0?U`<openclaw-chat-detail-panel
    class="chat-sidebar"
    .content=${t}
    .fileNavigation=${t.kind===`file`?t.navigation??null:null}
    .execNode=${tf(n)?.execNode??null}
    .attachmentRuntime=${{sessionKey:e.chat.sessionKey,agentId:e.chat.currentAgentId??e.chat.fullMessageAgentId,policyKey:lu(e.chat.selectedSession,e.chat.mediaPolicyEpoch),authToken:e.chat.assistantAttachmentAuthToken,connectionEpoch:e.chat.connectionEpoch,resourceBasePath:e.chat.resourceBasePath,resolveArtifactDownload:e.chat.resolveArtifactDownload}}
    .basePath=${e.chat.basePath??``}
    .canvasPluginSurfaceUrl=${n.canvasPluginSurfaceUrl}
    .embedSandboxMode=${n.embedSandboxMode}
    .allowExternalEmbedUrls=${n.allowExternalEmbedUrls}
    .githubContext=${{githubRepo:e.chat.githubRepo,githubRepositories:e.chat.githubRepositories}}
    .onOpenWorkspaceFile=${e=>Py(n,e)}
    .onOpenSessionLink=${e.chat.onOpenSessionLink}
    .onRevealInWorkspace=${e=>{Fy(n,e),Bv(n,null),n.updateSidebarLayout(qy(n.sidebarLayout,`workspace`))}}
    .onOpenImage=${e=>n.handleOpenImage(e,n.beginImageOpen())}
    .embedded=${!0}
    @chat-detail-panel-close=${()=>n.handleCloseSidebar(t.kind===`attachment`?`workspace`:`detail`)}
  ></openclaw-chat-detail-panel>`:r??Qf(`review`,B(`common.loading`))}function HD(){return(HD=e((()=>{q(),ip(),m(),ff(),sf(),ab(),BD(),Yu(),Wv(),zy()})))()}function UD(e){let t=Pe(e)?.rest.match(ka)?.[1];return t?t.toLowerCase().replaceAll(`-`,``):null}function WD(e,t,n=`main`){let r=e.filter(e=>Pe(e.key)?.agentId===so(t.agentId));if(t.kind!==`short`){let e=t.kind===`main`?Wa({agentId:t.agentId,mainKey:n}):t.sessionKey,i=r.find(t=>ye(t.key,e));if(i||t.kind===`main`||!t.slugCandidate)return i}let i=r.filter(e=>{let n=UD(e.key);return n&&(t.kind!==`short`||n.startsWith(t.shortId.toLowerCase().replaceAll(`-`,``)))}),a=t.kind===`short`?t.slugHint:t.slugCandidate,o=a?i.filter(e=>Na(e.displayName)===a):[],s=o.length||t.kind!==`short`?o:i;return s.length===1?s[0]:void 0}function GD(e,t,n){let r=new URLSearchParams(t.search).get(j)?.trim(),i=od(e.gateway,t.pathname),a=r??i,o=!!(i&&i===a);if(a){let i=()=>{r&&td(e.gateway,t.pathname,r)},s=x(e,a,n.agentId);if(s&&WD([s],n))return i(),{sessionKey:s.key,row:s};let c=UD(a),l=Pe(a)?.agentId;if(o&&c?.startsWith(n.shortId.toLowerCase().replaceAll(`-`,``))&&l&&so(l)===so(n.agentId))return i(),{sessionKey:a}}}function KD(){return(KD=e((()=>{za(),Hl(),D(),I()})))()}function qD(e,t={}){let n=new URLSearchParams(e.search);for(let[e,r]of new URLSearchParams(t.search))n.set(e,r);n.delete(`draft`),n.delete(Ne);let r=n.toString();return{...e,...t,search:r?`?${r}`:``}}function JD(e){let t=new URLSearchParams(e.search),n=t.get(Ne)===`1`;return{draft:t.get(`draft`)||void 0,...n?{focusComposer:!0}:{}}}function YD(e){let t=new URLSearchParams,{draft:n,focusComposer:r}=JD(e);return n&&t.set(`draft`,n),r&&t.set(Ne,`1`),t.size>0?`?`+t.toString():``}function XD(e,t,n=e?.sessionKey){return!e||!ye(n,e.sessionKey)||t===e?void 0:e.draft}function ZD(){return(ZD=e((()=>{D(),I()})))()}function QD(e,t,n){let r=(t-e.left)/e.width,i=(n-e.top)/e.height,a=r<=eO?{edge:`left`,distance:r}:1-r<=eO?{edge:`right`,distance:1-r}:null,o=i<=eO?{edge:`up`,distance:i}:1-i<=eO?{edge:`down`,distance:1-i}:null,s=a&&o?a.distance<=o.distance?a:o:a??o;return s?{kind:`edge`,edge:s.edge}:{kind:`center`}}function $D(e,t){let n={left:e.left,top:e.top,width:e.width,height:e.height};return t.kind===`center`?n:t.edge===`left`?{...n,width:e.width/2}:t.edge===`right`?{...n,left:e.left+e.width/2,width:e.width/2}:t.edge===`up`?{...n,height:e.height/2}:{...n,top:e.top+e.height/2,height:e.height/2}}var eO;function tO(){return(tO=e((()=>{eO=.3})))()}function nO(e,t){return sO?sO.expiresAt<=Date.now()?(sO=void 0,!1):sO.sourceData!==t&&ye(sO.sessionKey,e):!1}var rO,iO,aO,oO,sO,cO;function lO(){return(lO=e((()=>{I(),rO=3e4,iO=15e3,aO=250,oO=`.agent-chat__composer-combobox textarea`,cO=class{constructor(e){this.host=e}rendered(e,t,n){let r=!!(e&&(t===void 0||t!==null&&ye(t,e.sessionKey)));return e&&!e.draft&&r&&nO(e.sessionKey,e)&&(sO=void 0,this.maintain(e.sessionKey)),!!(e&&n!==e&&r&&(e.draft!==void 0||e.focusComposer))}shouldFocusPane(e,t,n,r){return!!(e&&r&&(t&&r.focusComposer||!t&&nO(n,r)))}beforeDraftCleanup(e){e.focusComposer&&(sO={expiresAt:Date.now()+rO,sessionKey:e.sessionKey,sourceData:e})}maintain(e){this.timer!==void 0&&(window.clearTimeout(this.timer),this.timer=void 0);let t=Date.now()+iO,n,r=()=>{if(!this.host.isConnected){this.timer=void 0;return}let i=[...this.host.querySelectorAll(`openclaw-chat-pane`)].find(t=>t.active&&t.sessionKey!==void 0&&ye(t.sessionKey,e))?.querySelector(oO),a=document.activeElement,o=a===n||a===document.body||a instanceof HTMLElement&&!a.isConnected;if(i&&(!n||o))i.focus({preventScroll:!0}),n=i;else if(n&&!o){this.timer=void 0;return}this.timer=Date.now()<t?window.setTimeout(r,aO):void 0};r()}}})))()}function uO(e,t){return e?.presentedTranscriptsReady===!0&&(e.automaticPrefetchAllowed||!(!e.intentSessionKey||t&&e.intentSessionKey!==t))}function dO(e){return e.lastActivityAt??e.updatedAt??0}function fO(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}var pO,mO,hO,gO,_O,vO,yO;function bO(){return(bO=e((()=>{te(),cc(),ol(),Kc(),we(),pO=2,mO=250,hO=75,gO=3e4,_O=`openclaw-chat-prefetch`,vO=class{constructor(e,t){this.cache=e,this.snapshotStore=t,this.connected=!1,this.snapshot=null,this.lastAttemptAt=new Map,this.delayTimer=null,this.delayDeadline=null,this.pendingIntent=!1,this.idleTimer=null,this.idleCallback=null,this.running=!1,this.rescheduleDelayMs=null,this.rescheduleIntent=!1,this.handleVisibilityChange=()=>{document.visibilityState===`visible`&&this.schedule()}}connect(){this.connected||(this.connected=!0,document.addEventListener(`visibilitychange`,this.handleVisibilityChange),this.schedule())}disconnect(){this.connected=!1,this.rescheduleDelayMs=null,this.rescheduleIntent=!1,document.removeEventListener(`visibilitychange`,this.handleVisibilityChange),this.cancelScheduledWork()}update(e){let t=this.snapshot;if(this.snapshot=e,!t||t.client!==e.client||t.listRevision!==e.listRevision||t.intentSessionKey!==e.intentSessionKey||t.automaticPrefetchAllowed!==e.automaticPrefetchAllowed||t.presentedTranscriptsReady!==e.presentedTranscriptsReady||!fO(t.openSessionKeys,e.openSessionKeys)){let n=e.intentSessionKey!==null&&t?.intentSessionKey!==e.intentSessionKey;this.schedule(n?hO:mO,n)}}schedule(e=mO,t=!1){if(!this.connected)return;if(this.running){this.rescheduleDelayMs=this.rescheduleDelayMs===null?e:Math.min(this.rescheduleDelayMs,e),this.rescheduleIntent||=t;return}this.pendingIntent||=t;let n=Date.now()+e;if(this.delayDeadline!==null&&this.delayDeadline<=n||!t&&(this.idleTimer!==null||this.idleCallback!==null))return;let r=this.pendingIntent;this.cancelScheduledWork(),this.pendingIntent=r,this.delayDeadline=n,this.delayTimer=globalThis.setTimeout(()=>{this.delayTimer=null,this.delayDeadline=null;let e=this.pendingIntent;this.pendingIntent=!1,e?this.runCycle():this.scheduleIdleCycle()},e)}scheduleIdleCycle(){if(this.connected){if(typeof window.requestIdleCallback==`function`){this.idleCallback=window.requestIdleCallback(()=>{this.idleCallback=null,this.runCycle()});return}this.idleTimer=globalThis.setTimeout(()=>{this.idleTimer=null,this.runCycle()},0)}}async runCycle(){if(this.connected&&!this.running&&document.visibilityState!==`hidden`){this.running=!0;try{let e=typeof navigator>`u`?void 0:navigator.locks;e?await e.request(_O,{ifAvailable:!0},async e=>{e&&await this.prefetchEligibleSessions()}):await this.prefetchEligibleSessions()}catch(e){console.debug(`[chat-session-prefetch] cycle failed`,e)}finally{if(this.running=!1,this.rescheduleDelayMs!==null){let e=this.rescheduleDelayMs,t=this.rescheduleIntent;this.rescheduleDelayMs=null,this.rescheduleIntent=!1,this.schedule(e,t)}}}}async prefetchEligibleSessions(){let e=this.snapshot;if(!e?.client||!e.rows||!uO(e)||document.visibilityState===`hidden`||!this.connected)return;let{client:t}=e;if(await this.snapshotStore.loadSavedAtIndex(),!this.isCurrent(e))return;for(let t of e.openSessionKeys){let n=mc(this.cache,e.snapshotHost,{sessionKey:t});n&&this.cache.size===20&&this.snapshotStore.write(ze(e.snapshotHost,{sessionKey:t}),n)}let n=this.selectCandidates(e);n.deferMs!==null&&this.schedule(n.deferMs);for(let r of n.candidates){if(!uO(this.snapshot,r.sessionKey))return;await this.prefetchCandidate(e,t,r)}}async prefetchCandidate(e,t,n){let r=this.snapshotStore.captureReadScope(n.snapshotKey),i=()=>this.isCurrent(e,n)&&r(),a=()=>i()&&uO(this.snapshot,n.sessionKey);if(a()&&!this.isOpen(n.snapshotKey,this.snapshot))try{let o=mc(this.cache,e.snapshotHost,{sessionKey:n.canonicalSessionKey});if(!o&&this.snapshotStore.readSavedAt(n.snapshotKey)!==null){if(o=await this.snapshotStore.read(n.snapshotKey),!a())return;o&&(mu(this.cache,e.snapshotHost,{sessionKey:n.canonicalSessionKey},o),r=this.snapshotStore.captureReadScope(n.snapshotKey))}this.lastAttemptAt.set(n.snapshotKey,Date.now());let s=await bu(t,n.canonicalSessionKey,this,a,o?.deltaCursor);if(!i())return;if(s.kind===`reset`){if(o?.deltaCursor!==void 0){let{deltaCursor:t,...i}=o;mu(this.cache,e.snapshotHost,{sessionKey:n.canonicalSessionKey},i),o=i,r=this.snapshotStore.captureReadScope(n.snapshotKey)}if(!a()||(s=await bu(t,n.canonicalSessionKey,this,a),!i()))return}if(this.isOpen(n.snapshotKey,this.snapshot))return;let c;if(s.kind===`delta`){for(let t of s.messages){let r=ro(t);r&&Object.hasOwn(r,`message`)&&xu(this.cache,e.snapshotHost,{sessionKey:n.canonicalSessionKey},r.message,r)}let t=mc(this.cache,e.snapshotHost,{sessionKey:n.canonicalSessionKey});if(!t)return;c={...t,...s.inFlightRun?{}:{deltaCursor:s.deltaCursor},...Object.hasOwn(s.sessionInfo,`activeLeafEntryId`)?{displayedLeafEntryId:s.sessionInfo.activeLeafEntryId?.trim()||null}:{},sessionId:s.sessionInfo.sessionId?.trim()||t.sessionId}}else if(s.kind===`snapshot`)c=s.snapshot;else throw Error(`chat history page request returned a cursor reset`);mu(this.cache,e.snapshotHost,{sessionKey:n.canonicalSessionKey},c)}catch(e){console.debug(`[chat-session-prefetch] history fetch failed for ${n.canonicalSessionKey}`,e)}}selectCandidates(e){let t=new Set(e.openSessionKeys.map(t=>ze(e.snapshotHost,{sessionKey:t}))),n=Math.max(0,20-t.size),r=(e.rows??[]).toSorted((t,n)=>Number(n.key===e.intentSessionKey)-Number(t.key===e.intentSessionKey)||dO(n)-dO(t)),i=[],a=new Set,o=null;for(let s of r){if(!uO(e,s.key)||Za(s))continue;let r=ze(e.snapshotHost,{sessionKey:s.key,agentId:s.agentId});if(t.has(r)||a.has(r))continue;if(a.add(r),a.size>n)break;let c=dO(s),l=this.snapshotStore.readSavedAt(r);if(l!==null&&l>=c)continue;let u=Date.now()-(this.lastAttemptAt.get(r)??0);if(u<gO){let e=gO-u;o=o===null?e:Math.min(o,e);continue}if(i.push({activityAt:c,sessionKey:s.key,canonicalSessionKey:Ze(e.snapshotHost,{sessionKey:s.key,agentId:s.agentId}),snapshotKey:r,sessionId:s.sessionId,activeLeafEntryId:s.activeLeafEntryId,updatedAt:s.updatedAt}),i.length===pO)break}return{candidates:i,deferMs:o}}isCurrent(e,t){let n=this.snapshot;if(!this.connected||document.visibilityState===`hidden`||!e.isCurrent()||!n||n.client!==e.client)return!1;if(!t)return!0;let r=!1;for(let e of n.rows??[]){if(ze(n.snapshotHost,{sessionKey:e.key,agentId:e.agentId})!==t.snapshotKey)continue;let i=dO(e);if(e.sessionId!==t.sessionId||e.activeLeafEntryId!==t.activeLeafEntryId||(e.updatedAt??0)>(t.updatedAt??0)||i>t.activityAt||Za(e))return!1;r||=e.updatedAt===t.updatedAt&&i===t.activityAt}return r}isOpen(e,t){return!!t?.openSessionKeys.some(n=>ze(t.snapshotHost,{sessionKey:n})===e)}cancelScheduledWork(){this.delayDeadline=null,this.pendingIntent=!1,this.delayTimer!==null&&(globalThis.clearTimeout(this.delayTimer),this.delayTimer=null),this.idleTimer!==null&&(globalThis.clearTimeout(this.idleTimer),this.idleTimer=null),this.idleCallback!==null&&(window.cancelIdleCallback(this.idleCallback),this.idleCallback=null)}},yO=class{constructor(e,t,n,r){this.host=e,this.readContext=r,this.subscriptions=[],this.intentSessionKey=null,this.handleNavigationIntent=e=>{let t=e.composedPath().find(e=>e instanceof HTMLElement&&e.hasAttribute(`data-session-key`));if(t&&t.closest(`openclaw-app-shell`)!==this.paneRoot.closest(`openclaw-app-shell`))return;let n=t?.dataset.sessionKey??null;n!==this.intentSessionKey&&(this.intentSessionKey=n,this.sync())},this.sync=()=>{let e=this.readContext();if(e!==this.context&&(this.clearSubscriptions(),this.context=e,e&&(this.subscriptions=[e.gateway.subscribe(this.sync),e.sessions.subscribe(this.sync)])),!e)return;let t=[...this.paneRoot.querySelectorAll(`openclaw-chat-pane`)].filter(e=>e.closest(`openclaw-app-shell`)===this.paneRoot.closest(`openclaw-app-shell`)),n=t.flatMap(e=>e.sessionKey?[e.sessionKey]:[]),r=e.sessions,i=r.captureConnectionScope();this.prefetcher.update({client:i?.client??null,isCurrent:()=>this.context===e&&e.sessions===r&&i!==null&&r.isConnectionScopeCurrent(i),listRevision:e.sessions.canonicalListRevision,openSessionKeys:n,intentSessionKey:this.intentSessionKey,automaticPrefetchAllowed:t.some(e=>this.host.contains(e)&&e.conversationPresented===!0),presentedTranscriptsReady:!t.some(e=>e.presented!==!1&&e.transcriptLoading===!0),rows:e.sessions.state.result?.sessions??null,snapshotHost:{settings:e.gateway.connection,client:e.gateway.snapshot.client,assistantAgentId:e.gateway.snapshot.assistantAgentId,agentsList:e.agents.state.agentsList,hello:e.gateway.snapshot.hello}})},this.paneRoot=e,this.prefetcher=new vO(t,n)}hostConnected(){this.paneRoot=this.host.closest(`openclaw-app-shell`)??this.host,this.paneRoot.addEventListener(c,this.sync),this.paneRoot.addEventListener(et,this.sync),this.paneRoot.addEventListener(`pointerover`,this.handleNavigationIntent),this.paneRoot.addEventListener(`focusin`,this.handleNavigationIntent),this.prefetcher.connect(),this.sync()}hostUpdated(){this.sync()}hostDisconnected(){this.paneRoot.removeEventListener(c,this.sync),this.paneRoot.removeEventListener(et,this.sync),this.paneRoot.removeEventListener(`pointerover`,this.handleNavigationIntent),this.paneRoot.removeEventListener(`focusin`,this.handleNavigationIntent),this.clearSubscriptions(),this.prefetcher.disconnect()}clearSubscriptions(){for(let e of this.subscriptions)e();this.subscriptions=[],this.context=void 0}}})))()}function xO(e){try{let t=JSON.stringify(e);return t?{snapshot:JSON.parse(t),weight:t.length}:null}catch{return null}}function SO(e,t){let n=jO.safeParse(e);return n.success&&(!t||n.data.sessionKey===t)?n.data:null}function CO(e,t){let n=xO(t.snapshot);if(!n)return null;let r={cursorMatchesSnapshot:!0,savedAt:t.savedAt,sessionId:t.snapshot.sessionId,sessionKey:e},i=SO({...r,snapshot:n.snapshot});return i?{record:i,metadata:{savedAt:i.savedAt,sessionKey:e,weight:n.weight+JSON.stringify(r).length}}:null}async function wO(){let e=await ga();if(!e)return[];try{let t=e.transaction(Sa,`readonly`),n=await Xr(t.objectStore(Sa).getAll());await ei(t);let r=[];for(let t of n){let n=MO.safeParse(t);if(!n.success)return ba(`resetting cache after metadata shape mismatch`),await Ca(e),null;r.push(n.data)}return r}catch(t){return ba(`IndexedDB read failed`,t),await Ca(e),null}finally{e.close()}}async function TO(e,t){if(e.length===0||t!==p)return[];let n=await ga();if(!n)return[];try{if(t!==p)return[];let r=n.transaction([va,Sa],`readwrite`),i=r.objectStore(va),a=r.objectStore(Sa),o=await Xr(a.getAll()),s=new Map;for(let e of o){let t=MO.safeParse(e);if(!t.success)throw r.abort(),Error(`IndexedDB metadata shape mismatch`);s.set(t.data.sessionKey,t.data)}for(let{record:t,metadata:n}of e)s.set(t.sessionKey,n),i.put(t),a.put(n);let c=[...s.values()].toSorted((e,t)=>e.savedAt-t.savedAt),l=c.reduce((e,t)=>e+t.weight,0),u=[];for(;c.length>20||l>25165824;){let e=c.shift();if(!e)break;l-=e.weight,i.delete(e.sessionKey),a.delete(e.sessionKey),u.push(e.sessionKey)}return await ei(r),u}catch(e){return ba(`resetting cache after IndexedDB write failure`,e),await Ca(n),null}finally{n.close()}}function EO(){for(let e of NO)e.flush()}var DO,OO,kO,AO,jO,MO,NO,PO;function FO(){return(FO=e((()=>{xo(),_i(),ol(),Kc(),ya(),L(),tt(),be(),DO=500,OO=1e3,kO=Co(`hasMore`,[Eo({completeSnapshot:So(!0).optional(),hasMore:So(!1),totalMessages:bo().finite().nonnegative().optional()}).strict(),Eo({hasMore:So(!0),nextOffset:bo().finite().nonnegative(),totalMessages:bo().finite().nonnegative().optional()}).strict()]),AO=Eo({deltaCursor:wo().optional(),displayedLeafEntryId:wo().nullable().optional(),messages:To(Array.isArray),pagination:kO,sessionId:wo().nullable()}).strict(),jO=Eo({cursorMatchesSnapshot:So(!0).optional(),savedAt:bo().finite().nonnegative(),sessionId:wo().nullable(),sessionKey:wo().min(1),snapshot:AO}).strict().refine(e=>e.sessionId===e.snapshot.sessionId),MO=Eo({savedAt:bo().finite().nonnegative(),sessionKey:wo().min(1),weight:bo().finite().nonnegative()}).strict(),NO=new Set,PO=class{constructor(e){this.memoryCache=e,this.connected=!1,this.pending=new Map,this.hydratedSnapshots=new Map,this.revisions=new Map,this.savedAtBySession=new Map,this.savedAtSeed=null,this.savedAtSeedRetirements=null,this.cancelScheduledWrite=null,this.writeChain=Promise.resolve()}connect(){this.connected=!0,NO.add(this)}disconnect(){this.connected=!1,this.flush().finally(()=>{this.connected||NO.delete(this)})}captureReadScope(e){let t=p,n=this.revisions.get(e)??0;return this.revisions.set(e,n),()=>t===p&&n===(this.revisions.get(e)??0)}async read(e,t){let n=this.captureReadScope(e),r=Ae(e);r&&t?.(r.readyAt);let i=await(r?.promise??_a(e));if(i===void 0||!n()||!xa(e))return null;let a=SO(i,e);return a?(a.cursorMatchesSnapshot||delete a.snapshot.deltaCursor,pd(this.hydratedSnapshots,e,new WeakRef(a.snapshot)),a.snapshot):(ba(`resetting cache after record shape mismatch`),await Ca(),null)}async loadSavedAtIndex(){this.savedAtSeed??=this.seedSavedAtIndex(),await this.savedAtSeed}readSavedAt(e){return this.pending.get(e)?.savedAt??this.savedAtBySession.get(e)??null}write(e,t){xa(e)&&(Oe(e),this.revisions.set(e,(this.revisions.get(e)??0)+1),Rc(this.hydratedSnapshots,e)?.deref()!==t&&(this.hydratedSnapshots.delete(e),this.schedule(e,t)))}async delete(e,t){this.forget(e),await o(e,t)}forget(e){Oe(e),this.revisions.set(e,(this.revisions.get(e)??0)+1),this.pending.delete(e),this.hydratedSnapshots.delete(e),this.savedAtBySession.delete(e),this.memoryCache?.delete(e)}async flush(){this.cancelScheduledWrite?.(),this.cancelScheduledWrite=null;let e=[...this.pending.entries()],t=new Map(e.map(([e])=>[e,this.revisions.get(e)??0]));this.pending.clear();let n=[];for(let[t,r]of e){let e=CO(t,r);e?n.push(e):await this.delete(t,`cache-eviction`)}let r=p;this.writeChain=this.writeChain.then(async()=>{let e=await TO(n.filter(({record:{sessionKey:e}})=>t.get(e)===(this.revisions.get(e)??0)),r);if(e===null){this.resetSavedAtIndex();return}for(let t of e)this.pending.has(t)||this.savedAtBySession.delete(t)}),await this.writeChain}forgetScope(e){this.savedAtSeedRetirements?.add(e);for(let t of new Set([...this.revisions.keys(),...this.pending.keys(),...this.hydratedSnapshots.keys(),...this.savedAtBySession.keys(),...this.memoryCache?.keys()??[]]))t.startsWith(e)&&this.forget(t)}clearMemory(){this.cancelScheduledWrite?.(),this.cancelScheduledWrite=null,this.pending.clear(),this.hydratedSnapshots.clear(),this.revisions.clear(),this.savedAtBySession.clear(),this.memoryCache?.clear()}async whenIdle(){await this.writeChain}schedule(e,t){let n={savedAt:Date.now(),snapshot:t};this.pending.set(e,n),this.savedAtBySession.set(e,n.savedAt),this.cancelScheduledWrite?.(),this.cancelScheduledWrite=null;let r=globalThis.setTimeout(()=>{if(this.cancelScheduledWrite=null,typeof globalThis.requestIdleCallback==`function`){let e=globalThis.requestIdleCallback(()=>void this.flush(),{timeout:OO});this.cancelScheduledWrite=()=>globalThis.cancelIdleCallback(e)}else this.flush()},DO);this.cancelScheduledWrite=()=>globalThis.clearTimeout(r)}async seedSavedAtIndex(){let e=new Set;this.savedAtSeedRetirements=e;let t=p,n=new Map(this.revisions);try{let r=await wO();if(t!==p)return;if(!r){this.resetSavedAtIndex();return}for(let t of r){if([...e].some(e=>t.sessionKey.startsWith(e))||(n.get(t.sessionKey)??0)!==(this.revisions.get(t.sessionKey)??0))continue;let r=this.savedAtBySession.get(t.sessionKey)??0;this.savedAtBySession.set(t.sessionKey,Math.max(r,t.savedAt))}}finally{this.savedAtSeedRetirements=null}}resetSavedAtIndex(){this.savedAtBySession.clear();for(let[e,t]of this.pending)this.savedAtBySession.set(e,t.savedAt)}},u(async({sessionKey:e,scopePrefix:t})=>{for(let n of NO)t?n.forgetScope(t):e?n.forget(e):n.clearMemory();await Promise.all([...NO].map(e=>e.whenIdle()))}),typeof window<`u`&&(window.addEventListener(`pagehide`,EO),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&EO()}))})))()}function IO(e){window.history.pushState({},``,e),window.dispatchEvent(new PopStateEvent(`popstate`))}function LO(e){return U`
    <section class="card">
      <h2>${B(`chat.sessionRoute.chooseTitle`)}</h2>
      <p>
        ${e.candidates.length>1?B(`chat.sessionRoute.multipleMatches`,{shortId:e.shortId}):B(`chat.sessionRoute.additionalMatches`)}
      </p>
      ${e.candidates.map(e=>U`
          <p>
            <a href=${e.href}>${e.displayName}</a><br />
            <small>${e.agentId} · ${e.idPrefix}</small>
          </p>
        `)}
      ${e.truncated&&e.candidates.length>1?U`<p><small>${B(`chat.sessionRoute.additionalMatches`)}</small></p>`:null}
    </section>
  `}function RO(e){return Jt({className:`session-route-not-found`,role:`status`,title:B(`chat.sessionRoute.notFoundTitle`),subtitle:B(`chat.sessionRoute.notFoundExplanation`),actions:U`
      <button class="btn primary" type="button" @click=${()=>IO(e.currentSessionHref)}>
        ${B(`chat.sessionRoute.goToMain`)}
      </button>
      <button class="btn" type="button" @click=${()=>IO(e.sessionsHref)}>
        ${B(`chat.sessionRoute.viewSessions`)}
      </button>
    `})}function zO(e,t=!1,n=!0){let r=e;return r?r.kind===`ambiguous`?LO(r):r.kind===`route-error`?U`<section class="card"><p role="alert">${r.message}</p></section>`:r.kind===`missing-session`?RO(r):U`<openclaw-chat-page .data=${r} .presented=${n}></openclaw-chat-page>`:K}function BO(e,t){return(e.data??t?.data)?.kind===`session`?VO:void 0}var VO;function HO(){return(HO=e((()=>{q(),un(),m(),VO=`chat-page`})))()}var UO=t({header:()=>!0,render:()=>GO,renderOwnerKey:()=>WO,retainOnNavigate:()=>!0}),WO,GO;function KO(){return(KO=e((()=>{hf(),HO(),WO=BO,GO=zO})))()}async function qO(e,t,n,r){let i=await Ft(e.gateway,r);r.throwIfAborted();let{gateway:a,sessions:o}=e,{hello:s}=a.snapshot,c=a.snapshot.selfUser?.id,l=a.connectionRevision,u=e.lifecycleAbortSignal,d=!1,f=()=>!d&&!r.aborted&&!u?.aborted&&e.sessions===o&&a.connectionRevision===l&&a.snapshot.phase===`connected`&&a.snapshot.client===i&&a.snapshot.hello===s&&a.snapshot.selfUser?.id===c,p=Promise.resolve().then(async()=>{r.throwIfAborted();let e=await i.request(`sessions.resolve`,{shortId:t.shortId,...t.slugHint?{slugHint:t.slugHint}:{},agentId:t.agentId,allowMissing:!0});return r.throwIfAborted(),{...JO(e),isCurrent:f}});if(t.namespace!==`chat`||n.search||n.hash||!s)return p;let m=Va(),h=!1,g=()=>{},_=()=>{},v=()=>{g(),_(),r.removeEventListener(`abort`,b),u?.removeEventListener(`abort`,b)},y=()=>{d=!0,v()},b=()=>{y(),m.reject(r.aborted?r.reason:u?.reason)};g=a.subscribeEvents(e=>{if(e.event!==`models.snapshot`||!f())return;let n=e.payload,r=n.target,i=n.scope;`shortId`in r&&r.agentId===t.agentId&&r.shortId===t.shortId&&r.slugHint===t.slugHint&&i.sessionKey&&i.agentId&&so(i.agentId)===so(t.agentId)&&Pe(i.sessionKey)?.agentId===so(t.agentId)&&UD(i.sessionKey)?.startsWith(t.shortId.toLowerCase())&&m.resolve({kind:`prepared`,session:{key:i.sessionKey,agentId:i.agentId},resolution:p,isCurrent:f})}),_=a.subscribe(()=>{f()||y()}),r.addEventListener(`abort`,b,{once:!0}),u?.addEventListener(`abort`,b,{once:!0});try{r.throwIfAborted(),u?.throwIfAborted(),f()||y();let e=await Promise.race([p,m.promise]);if(e.kind===`prepared`){if(!f())return await p;h=!0,p.then(v,v)}return e}finally{g(),h||v()}}function JO(e){return e.ok?{kind:`unique`,session:e}:e.candidates?.length?{kind:`ambiguous`,sessions:e.candidates,truncated:e.candidates.length===10}:{kind:`not-found`}}function YO(){return(YO=e((()=>{Oa(),xt(),I(),KD()})))()}var XO=t({querySessionReference:()=>$O});function ZO(e,t,n){let r=h({agentsList:e.agents.state.agentsList,hello:e.gateway.snapshot.hello}),i=Wa({agentId:n,mainKey:r});return{kind:`missing-session`,face:t,currentSessionHref:ce({context:e,face:t,sessionKey:i,agentId:n}).href,sessionsHref:jt(`sessions`,e.basePath)}}function QO(e,t,n){let r=e.toLowerCase().replaceAll(`-`,``);if(!ja.test(r))return null;if(n)return r;let i=t.map(e=>e.toLowerCase().replaceAll(`-`,``));for(let e=8;e<=r.length;e+=1){let t=r.slice(0,e);if(i.filter(e=>e.startsWith(t)).length===1)return t}return r}async function $O(e,t,n){let r=await Ft(e.gateway,n);n.throwIfAborted();let i=ek.get(r)??new Map;ek.set(r,i);let a=JSON.stringify([so(t.agentId),t.key,t.slug]),o=i.get(a);if(!o||o.controller.signal.aborted){let n=new AbortController,{hello:s}=e.gateway.snapshot,c=()=>e.gateway.snapshot.phase===`connected`&&e.gateway.snapshot.client===r&&e.gateway.snapshot.hello===s;o={controller:n,promise:Promise.resolve().then(async()=>{if(n.signal.throwIfAborted(),!c())return null;try{let e=await r.request(`sessions.resolve`,{reference:{key:t.key,...t.slug?{slug:t.slug}:{}},agentId:t.agentId,includeGlobal:!0,includeUnknown:!0,allowMissing:!0});return c()?JO(e):null}catch(e){if(!c())return null;throw e}}),subscribers:new Set},i.set(a,o)}let s=o;return await $s(s,n,n,()=>{s.subscribers.size===0&&i.get(a)===s&&i.delete(a)})}var ek;function tk(){return(tk=e((()=>{za(),on(),xt(),D(),I(),YO(),ek=new WeakMap})))()}function nk(e,t){let n=new URLSearchParams(t.search),r=n.get(gn),i=r||t.pathname,a=Ha({pathname:i,basePath:e.basePath});if(!a||!r)return a?{target:a,location:t}:null;n.delete(gn);let o=n.toString();return{target:a,location:{...t,pathname:i,search:o?`?${o}`:``}}}function rk(e){return{kind:`route-error`,message:e,face:`chat`}}async function ik(e,t,n){let r=nk(e,t);if(!r)return null;let{target:i,location:a}=r;try{let t=await Ft(e.gateway,n);n.throwIfAborted();let r=O({agentsList:e.agents.state.agentsList,hello:e.gateway.snapshot.hello}),o=await t.request(`sessions.catalog.list`,{agentId:r,search:i.shortId,limitPerHost:2});n.throwIfAborted();let s=o.catalogs.filter(e=>e.shareRoute?.routeSegment===i.routeSegment),c=s.length===1?s[0]:void 0;if(!c?.shareRoute)return rk(B(`chat.sessionRoute.catalogShareUnavailable`));let l=c.shareRoute;if(!jr(l,i.shortId))return rk(B(`chat.sessionRoute.catalogShareInvalid`,{catalog:c.label}));if(c.error)return rk(c.error.message);let u=c.hosts.filter(e=>e.hostId===l.hostId),d=u.length===1?u[0]:void 0;if(!d)return rk(B(`chat.sessionRoute.catalogShareUnavailable`));if(d?.error)return rk(d.error.message);let f=d.sessions.filter(e=>jr(l,e.threadId)&&e.threadId.length===l.fullLength&&e.threadId.startsWith(i.shortId));if(f.length>1||d.nextCursor){let t=f.flatMap(t=>{let n=Nr({shareRoute:l,threadId:t.threadId,displayName:t.name,basePath:e.basePath,prefixLength:l.fullLength});return n?[{agentId:c.label,displayName:t.name?.trim()||t.threadId,href:n,idPrefix:t.threadId}]:[]});return{kind:`ambiguous`,shortId:i.shortId,candidates:t,truncated:!!d.nextCursor,face:`chat`}}let p=f[0];if(!p)return ZO(e,`chat`,r);let m=Nr({shareRoute:l,threadId:p.threadId,displayName:p.name,basePath:e.basePath,prefixLength:i.shortId.length});return m?{kind:`session`,sessionKey:w({catalogId:c.id,hostId:l.hostId,threadId:p.threadId},r),agentId:r,draft:void 0,face:`chat`,...m===a.pathname?{}:{canonicalLocation:{...a,pathname:m},canonicalLocationSource:a}}:rk(B(`chat.sessionRoute.catalogShareUnavailable`))}catch(e){return n.throwIfAborted(),rk(z(e,B(`chat.sessionRoute.catalogShareUnavailable`)))}}function ak(){return(ak=e((()=>{io(),Or(),on(),xt(),m(),Ge(),me(),I(),tk()})))()}var ok=t({loadChatRoute:()=>bk,loadSessionPage:()=>xk,sessionRouteTargetFromLocation:()=>hk});function sk(e){return{...JD(e),...new URLSearchParams(e.search).get(`dashboard`)===`expanded`?{dashboardExpanded:!0}:{}}}function ck(e){return new URLSearchParams(e.search).get(ee)===`1`}function lk(e,t){let n=new URLSearchParams(e.search);n.delete(t);let r=n.toString();return{...e,search:r?`?${r}`:``}}function uk(e){return lk(lk(e,ee),j)}function dk(e){return!fk(e)&&e.sessions.cachedRoutingDefaults?e.sessions.cachedRoutingDefaults.mainKey:e.offlineSessionDefaults?.mainKey??h({agentsList:e.agents.state.agentsList,hello:e.gateway.snapshot.hello})}function fk(e){return!!(e.offlineSessionDefaults?.mainKey.trim()||e.agents.state.agentsList?.mainKey?.trim()||e.gateway.snapshot.phase===`connected`&&e.gateway.snapshot.hello)}function pk(e,t,n,r){let i=Pe(r);if(!i)return null;let a=dk(e).toLowerCase();if(i.rest.toLowerCase()!==a)return null;let o=gt(n,i.agentId,r,e.basePath,{mainKey:a});return o&&o!==t.pathname?{...uk(t),pathname:o}:null}function mk(e){let t=e.face,n=M(e.row.key),r=gt(t,n,e.row.key,e.context.basePath,{displayName:e.row.displayName,mainKey:dk(e.context),shortIdLength:e.shortIdLength});if(!r)return;let i=uk(e.location);return r!==e.location.pathname||i.search!==e.location.search?{...i,pathname:r}:null}function hk(e,t){let n=dk(e),r=to(t.pathname,e.basePath,n);if(r)return{target:r,location:t};let i=new URLSearchParams(t.search).get(gn);if(!i)return null;let a=to(i,e.basePath,n);return a?{target:a,location:{...lk(t,gn),pathname:i}}:null}function gk(e,t){return Wa({agentId:t.agentId,mainKey:dk(e)})}function _k(e,t,n,r,i,a){let o=n.sessions.flatMap(e=>{let t=UD(e.key);return t?[{row:e,uuid:t}]:[]}),s=o.map(({uuid:e})=>e);return{kind:`ambiguous`,shortId:a,candidates:o.flatMap(({row:a,uuid:o})=>{let c=QO(o,s,n.truncated);if(!c)return[];let l=M(a.key),u=i?ue(a):t,d=gt(u,l,a.key,e.basePath,{displayName:a.displayName,mainKey:dk(e),shortIdLength:c.length});return d?[{agentId:l,displayName:a.displayName?.trim()||a.key,href:`${d}${YD(r)}`,idPrefix:c}]:[]}),truncated:n.truncated,face:t}}function vk(e){let t=e.preferenceDerived?ue(e.row):e.face,n=mk({context:e.context,location:e.location,face:t,row:e.row,...e.shortId?{shortIdLength:e.shortId.length}:{}});return n===void 0?null:(n&&e.isResolutionSourceCurrent()&&td(e.context.gateway,n.pathname,e.row.key),{kind:`session`,sessionKey:e.row.key,...e.row.agentId?{agentId:e.row.agentId}:{},...sk(e.location),face:t,...e.shortId&&e.shortId.length>8?{shortId:e.shortId}:{},...n?{canonicalLocation:n,canonicalLocationSource:e.location}:{}})}function yk(e){if(!l(e.row.key))return vk(e);let t=e.preferenceDerived?ue(e.row):e.face,n=gt(t,e.target.agentId,gk(e.context,e.target),e.context.basePath,{mainKey:dk(e.context)});if(!n)return null;let r=uk(e.location),i=n!==e.location.pathname||r.search!==e.location.search?{...r,pathname:n}:void 0;return{kind:`session`,sessionKey:e.row.key,agentId:e.target.agentId,...sk(e.location),face:t,...i?{canonicalLocation:i,canonicalLocationSource:e.location}:{}}}async function bk(e,t,n,r,i){let{client:a,hello:o}=e.gateway.snapshot,s=()=>e.gateway.snapshot.phase===`connected`&&e.gateway.snapshot.client===a&&e.gateway.snapshot.hello===o,c=n===`chat`&&await ik(e,t,r);if(c)return c;let l=hk(e,t);if(!l||l.target.namespace!==n)return Ia({routeId:n});let{target:u}=l,d=l.location,f=ck(d),p=i?.sessionKey&&(u.kind===`short`||u.kind===`literal`&&u.slugCandidate)?await $O(e,{key:i.sessionKey,agentId:u.agentId},r):void 0;if(p===null)throw Error(`The Gateway connection changed while resolving the session.`);let m=fk(e)&&(e.offlineSessionDefaults?.scope??e.agents.state.agentsList?.scope)!==`global`,h=Ke(d.search);if(u.kind===`main`&&h){let t=w(h),i=f?uk(d):null,a=n;if(f){let n=await $O(e,{key:t,agentId:u.agentId},r);if(n?.kind===`unique`){a=ue(n.session);let t=gt(a,u.agentId,gk(e,u),e.basePath,{mainKey:dk(e)});t&&(i={...uk(d),pathname:t})}}return{kind:`session`,sessionKey:w(h,u.agentId),agentId:u.agentId,...sk(d),face:a,...i?{canonicalLocation:i,canonicalLocationSource:d}:{}}}if(u.kind===`main`){(f||!m)&&await Ft(e.gateway,r);let t=gk(e,u);if(f){let i=await $O(e,{key:t,agentId:u.agentId},r);if(i?.kind===`unique`)return yk({context:e,isResolutionSourceCurrent:s,location:d,face:n,row:i.session,target:u,preferenceDerived:f})??Ia({routeId:n})}let i=f?uk(d):null;return{kind:`session`,sessionKey:t,...sk(d),face:n,...i&&i.search!==d.search?{canonicalLocation:i,canonicalLocationSource:d}:{}}}if(u.kind===`literal`){let t=m||e.gateway.snapshot.phase===`connected`&&fk(e),a=f||!!u.slugCandidate;if(!t&&a&&(await Ft(e.gateway,r),t=fk(e),t))return await bk(e,d,n,r,i);if(a){let a=t&&!i?x(e,u.sessionKey,u.agentId):void 0,o=p??(a?{kind:`unique`,session:a}:await $O(e,{key:u.sessionKey,agentId:u.agentId,...u.slugCandidate?{slug:u.slugCandidate}:{}},r));if(o?.kind===`unique`){let t=vk({context:e,isResolutionSourceCurrent:s,location:d,face:n,row:o.session,preferenceDerived:f});return t?{...t,...a?{sessionResolutionFromCache:!0}:{}}:Ia({routeId:n})}if(u.slugCandidate){if(o?.kind===`not-found`)return ZO(e,n,u.agentId);if(o?.kind===`ambiguous`)return _k(e,n,o,d,f,u.slugCandidate)}}let o=t?pk(e,d,n,u.sessionKey):null,c=Pe(u.sessionKey),l=!t&&c?Ft(e.gateway,r).then(()=>pk(e,d,n,u.sessionKey)).catch(()=>null):void 0,h=f?uk(d):null;return{kind:`session`,sessionKey:u.sessionKey,...sk(d),face:n,...o?{canonicalLocation:o,canonicalLocationSource:d}:h&&h.search!==d.search?{canonicalLocation:h,canonicalLocationSource:d}:{},...l?{canonicalLocationReady:l,canonicalLocationSource:d}:{}}}let g=i?void 0:GD(e,d,u);if(g&&!g.row){let e=uk(d),t=e.search!==d.search;return{kind:`session`,sessionKey:g.sessionKey,agentId:u.agentId,...sk(d),face:n,...u.shortId.length>8?{shortId:u.shortId}:{},...t?{canonicalLocation:e,canonicalLocationSource:d}:{}}}let _=g?.row;!g&&!f&&!i&&(await e.sessions.whenCachedRosterSettled(),r.throwIfAborted(),e.gateway.snapshot.phase!==`connected`&&(m||e.sessions.cachedRoutingDefaults?.scope===`per-sender`)&&e.sessions.state.resultCached&&(_=WD(e.sessions.state.result?.sessions??[],u,dk(e))));let v=p?{...p,isCurrent:s}:_?{kind:`unique`,session:_,isCurrent:s}:await qO(e,u,d,r);if(v.kind===`prepared`){let t=v.resolution.then(t=>!v.isCurrent()||t.kind!==`unique`||t.session.key!==v.session.key||(t.session.agentId??M(t.session.key))!==v.session.agentId?null:vk({context:e,isResolutionSourceCurrent:v.isCurrent,location:d,face:n,row:t.session,preferenceDerived:!1,shortId:u.shortId})?.canonicalLocation??null).catch(()=>null);return{kind:`session`,sessionKey:v.session.key,agentId:v.session.agentId,face:n,routeLoadingSkeleton:!0,...u.shortId.length>8?{shortId:u.shortId}:{},canonicalLocationReady:t,canonicalLocationSource:d}}if(v.kind===`not-found`){if(p)return ZO(e,n,u.agentId);let t=await $O(e,{key:u.literalSessionKey,agentId:u.agentId},r);return t?.kind===`unique`?vk({context:e,isResolutionSourceCurrent:s,location:d,face:n,row:t.session,preferenceDerived:f})??Ia({routeId:n}):t?.kind===`not-found`?ZO(e,n,u.agentId):Ia({routeId:n})}if(v.kind===`ambiguous`)return _k(e,n,v,d,f,u.shortId);let y=vk({context:e,isResolutionSourceCurrent:v.isCurrent,location:d,face:n,row:v.session,preferenceDerived:f,shortId:u.shortId});return y?{...y,..._?{sessionResolutionFromCache:!0}:{routeLoadingSkeleton:!0}}:Ia({routeId:n})}async function xk(e,t,{location:n,signal:r,cause:i,deps:a}){let o=(i===`revalidate`?e.router.getState().matches.find(e=>e.routeId===t&&e.deps===a):void 0)?.data,s=await bk(e,n,t,r,i===`revalidate`?{sessionKey:o?.kind===`session`?o.sessionKey:void 0}:void 0),c=e.chatSubmissions.creation;return`kind`in s&&s.kind===`session`&&(c?.sessionKey===s.sessionKey&&(s.creation=c),(s.creation||e.placementStartup.get(s.sessionKey)?.initialTurn)&&(await ao(()=>import(`./pending-session-create-Bsi_vbEZ.js`),__vite__mapDeps([23,5,6,7,24,9,25,3,11,12,13,14,26,27]),import.meta.url),r.throwIfAborted())),s}function Sk(){return(Sk=e((()=>{wa(),on(),At(),cn(),xt(),me(),Hl(),D(),I(),ZD(),ak(),tk(),KD(),YO(),co()})))()}export{Pw as $,g_ as $n,Hy as $t,iE as A,Rv as An,Lx as At,BT as B,yv as Bn,Yb as Bt,RD as C,Zv as Cn,zx as Ct,cE as D,Nv as Dn,Ux as Dt,uE as E,Vv as En,Wx as Et,JT as F,Tv as Fn,dx as Ft,NT as G,lv as Gn,fb as Gt,RT as H,uv as Hn,lb as Ht,GT as I,gv as In,bx as It,TT as J,iv as Jn,sb as Jt,AT as K,sv as Kn,ub as Kt,UT as L,mv as Ln,Zb as Lt,$T as M,bv as Mn,cx as Mt,XT as N,_v as Nn,lx as Nt,oE as O,Wv as On,Hx as Ot,YT as P,pv as Pn,Sx as Pt,Nw as Q,I_ as Qn,ab as Qt,HT as R,Sv as Rn,Qb as Rt,VD as S,Yv as Sn,Vx as St,pE as T,Dv as Tn,Bx as Tt,PT as U,dv as Un,cb as Ut,zT as V,vv as Vn,Kb as Vt,FT as W,hv as Wn,Ab as Wt,ST as X,P_ as Xn,Yy as Xt,wT as Y,rv as Yn,ib as Yt,Fw as Z,z_ as Zn,Jy as Zt,qD as _,fy as _n,qp as _r,yC as _t,KO as a,Zy as an,fg as ar,Cw as at,KD as b,Xv as bn,gC as bt,FO as c,Ly as cn,dg as cr,QC as ct,cO as d,My as dn,fm as dr,ew as dt,qy as en,D_ as er,Ow as et,lO as f,Ry as fn,dm as fr,cw as ft,ZD as g,by as gn,tm as gr,EC as gt,$D as h,hy as hn,cm as hr,TC as ht,XO as i,eb as in,Dg as ir,Sw as it,tE as j,Bv as jn,Nx as jt,aE as k,zv as kn,Kx as kt,yO as l,zy as ln,lg as lr,tw as lt,QD as m,Cy as mn,lm as mr,OC as mt,ok as n,Xy as nn,o_ as nr,xw as nt,UO as o,Vy as on,ug as or,hw as ot,tO as p,Ty as pn,um as pr,wC as pt,ET as q,cv as qn,ob as qt,tk as r,tb as rn,xg as rr,Tw as rt,PO as s,$y as sn,og as sr,ww as st,Sk as t,Ky as tn,c_ as tr,Dw as tt,bO as u,Py as un,sg as ur,pw as ut,XD as v,vy as vn,Up as vr,vC as vt,FD as w,Hv as wn,eS as wt,HD as x,ny as xn,_C as xt,WD as y,py as yn,Vp as yr,bC as yt,VT as z,Cv as zn,Jb as zt};