openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
4,122 lines • 523 kB
JavaScript
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./chat-diff-highlight.runtime-Clf1hqFV.js","./dist-BVfGhkDR.js","./code-language-CpyNAFNt.js","./control-ui-core-DI-Q_yCI.css","./mcp-app-view-registration-B3yat5MI.js","./plugin-contracts-runtime-ByiEPbv_.js","./markdown-runtime-ORQpioyT.js","./sidebar-update-runtime-DQZboSgD.js","./mcp-app-routing-DFzELUUu.js","./chat-transcript-styles-BN-TorbW.js","./mcp-app-confirm-BOrRV_eo.js","./sandbox-host-Dm6XHU23.js","./control-ui-boot-shared-styles-DUf4zEvn.css","./control-ui-boot-shared-DIWJGbGi.css","./sidebar-update-runtime-Bpn2ByHA.css","./chat-transcript-styles-B0IJwY9P.css","./control-ui-boot-chat-styles-SRk09zDG.css","./control-ui-boot-chat-C2DT0d4M.css","./canvas-widget-view-CFQXp3xJ.js","./control-ui-boot-new-styles-cChqenO3.js","./widget-sandbox-host-COBvR0Ux.js","./control-ui-boot-new-styles-BS7lzENV.css","./control-ui-boot-new-D-SpiTTi.css","./youtube-video-card-DcLJ5WUJ.js","./chat-question-panel-Whh_yjZq.js","./transport.runtime-Cfond1RX.js","./response-body-Cs9VotSw.js","./pending-session-create-BhgyPcx_.js"])))=>i.map(i=>d[i]);
import{n as e,r as t}from"./rolldown-runtime-8BhlS34s.js";import{$c as n,$n as r,Au as i,B as a,Bc as o,Ci as s,Cn as c,En as l,Fa as u,Fc as d,Fl as f,Ft as p,Gl as m,Gn as h,Hl as g,Hn as _,Hs as v,Ic as y,In as b,Jc as x,Jn as S,Jo as C,Jr as w,Kl as T,Kn as E,Ku as D,La as O,Lc as k,Ln as ee,Lu as te,Mu as A,N as j,Nl as ne,Nu as M,Ou as re,Pc as ie,Pl as ae,Pn as N,Ps as oe,Pt as P,Pu as F,Qn as se,Rc as ce,Rn as le,Rs as ue,Sn as I,Tn as L,Tu as de,Uc as fe,Ul as pe,Un as me,Vc as he,W as ge,Wc as _e,Xc as ve,Xl as ye,Xn as be,Yr as xe,Zl as Se,Zn as Ce,_u as we,ac as Te,ba as Ee,br as De,c as Oe,cl as ke,cr as Ae,dn as je,ea as Me,el as Ne,er as Pe,gn as Fe,gt as Ie,hn as Le,i as Re,j as ze,jc as Be,ju as Ve,kl as R,ku as He,l as Ue,lc as We,ll as Ge,lr as Ke,mn as qe,n as Je,nc as Ye,nl as Xe,pn as Ze,qr as Qe,s as $e,sr as et,un as tt,vt as nt,vu as rt,wl as it,wn as at,xu as ot,yu as st,z as ct,zl as lt,zu as z}from"./control-ui-core-CBJ5efDh.js";import{A as ut,E as dt,N as ft,Q as pt,Y as mt,j as ht}from"./control-ui-boot-shared-gZIpWrfw.js";import{$n as gt,$r as _t,$t as vt,Ai as yt,Bi as bt,Ca as xt,Ct as St,Di as Ct,En as wt,Fi as Tt,G as Et,Gn as Dt,Hi as Ot,J as kt,Kn as At,Oi as jt,Pi as Mt,Qa as Nt,Sn as Pt,So as Ft,Vi as It,Xi as Lt,Zi as Rt,Zt as zt,an as Bt,ar as Vt,at as Ht,ca as B,da as Ut,di as Wt,en as Gt,er as Kt,fa as qt,fi as Jt,go as Yt,hi as Xt,hn as Zt,ki as Qt,kn as $t,la as en,lo as tn,ma as nn,mi as rn,n as an,na as on,on as sn,pi as cn,q as ln,qr as un,r as dn,sa as V,st as fn,ta as pn,ua as mn,ui as hn,wn as gn,wo as _n,wr as vn,wt as yn,xa as bn,yr as xn,zi as Sn}from"./control-ui-core-DtLivg_r.js";import{A as Cn,C as wn,E as H,G as U,J as W,K as Tn,M as En,N as Dn,P as On,T as kn,W as G,X as An,Z as jn,_ as Mn,at as K,c as Nn,dt as Pn,i as Fn,k as q,l as In,lt as Ln,n as J,o as Rn,q as zn,rt as Y,s as Bn,t as X,y as Vn}from"./lit-runtime-IOnANfcZ.js";import{$t as Hn,A as Un,Ft as Wn,Ht as Gn,Lt as Kn,Mt as qn,O as Jn,Qt as Yn,Rt as Xn,Vt as Zn,bn as Qn,c as $n,en as er,gr as tr,l as nr,ln as rr,mr as ir,s as ar,u as or,un as sr,vn as cr,yn as lr,zt as ur}from"./control-ui-boot-shared-CkXlyZBY.js";import{A as dr,C as fr,M as pr,O as mr,_ as hr,a as gr,b as _r,c as vr,f as yr,g as br,h as xr,i as Sr,j as Cr,k as wr,l as Tr,m as Er,n as Dr,o as Or,p as kr,r as Ar,s as jr,t as Mr,v as Nr,w as Pr,x as Fr,y as Ir}from"./control-ui-boot-chat-Ye5j4vAg.js";import{c as Lr,d as Rr,l as zr}from"./gateway-runtime-C77LeWZN.js";import{$i as Br,$n as Vr,An as Hr,Ar as Ur,Bi as Wr,Br as Gr,Ci as Kr,D as qr,Di as Jr,Dt as Yr,Ea as Xr,Ei as Zr,F as Qr,Fa as $r,Ft as ei,It as ti,Jr as ni,Kr as ri,Lr as ii,M as ai,Ma as oi,Mn as si,Na as ci,Nn as li,Ot as ui,P as di,Pr as fi,Pt as pi,Rr as mi,Rt as hi,Si as gi,Tt as _i,Ur as vi,Wi as yi,Wr as bi,Xr as xi,Y as Si,Yr as Ci,Zr as wi,bt as Ti,cr as Ei,da as Di,dr as Oi,dt as ki,ea as Ai,fa as ji,fr as Mi,ft as Ni,gt as Pi,ht as Fi,ir as Ii,ja as Li,jn as Ri,ka as zi,kn as Bi,lr as Vi,lt as Hi,ma as Ui,mr as Wi,mt as Gi,nr as Ki,or as qi,pr as Ji,pt as Yi,qr as Xi,rr as Zi,sr as Qi,ta as $i,tr as ea,ur as ta,ut as na,vt as ra,wi as ia,wt as aa,xt as oa,yr as sa,yt as ca,zi as la,zr as ua,zt as da}from"./control-ui-boot-shared-UG5ko-VG.js";import{a as fa,c as pa,l as ma,n as ha,o as ga,r as _a,s as va,t as ya}from"./session-snapshot-database-BBKeXATO.js";import{$a as ba,Ai as xa,Ba as Sa,Bi as Ca,Ga as wa,H as Ta,Ha as Ea,Hi as Da,Ja as Oa,Ki as ka,Kt as Aa,La as ja,Mt as Ma,Ni as Na,Po as Pa,Ra as Fa,Sr as Ia,U as La,Ua as Ra,Ui as za,Ur as Ba,Wr as Va,Wt as Ha,Zr as Z,ci as Ua,dt as Wa,ft as Ga,hi as Ka,jt as qa,ma as Ja,mt as Ya,pa as Xa,ro as Za,so as Qa,uo as $a,va as eo,wa as to,xa as no,xr as ro,ya as Q,yi as io,zi as ao}from"./ui-CmSP4d14.js";import{B as oo,D as so,F as co,M as lo,N as uo,T as fo,V as po,W as mo,d as ho,j as go,u as _o}from"./control-ui-boot-shared-VLPz5vN2.js";import{h as vo,m as yo,y as bo}from"./control-ui-boot-shared-SQHdJTzb.js";import{C as xo,_ as So,b as Co,h as wo,k as To,m as Eo,w as Do}from"./config-runtime-BecGLziM.js";import{$t as Oo,An as ko,At as Ao,Br as jo,Bt as Mo,Dr as No,Dt as Po,Et as Fo,Fi as Io,Gr as Lo,Hr as Ro,Ht as zo,Ir as Bo,It as Vo,Jn as Ho,Jr as Uo,Kn as Wo,Kr as Go,Kt as Ko,Li as qo,Lt as Jo,Mi as Yo,Mn as Xo,Mr as Zo,Ni as Qo,Nr as $o,Ot as es,Pr as ts,Qt as ns,T as rs,Tt as is,Ur as as,Ut as os,Vt as ss,Wn as cs,Wr as ls,Xi as us,Xt as ds,Yi as fs,Yn as ps,Yr as ms,Yt as hs,Zr as gs,_a as _s,ai as vs,an as ys,bt as bs,cn as xs,ct as Ss,dt as Cs,ft as ws,ga as Ts,gi as Es,gn as Ds,gr as Os,ha as ks,hr as As,in as js,jr as Ms,jt as Ns,kt as Ps,lr as Fs,ma as Is,mn as Ls,mr as Rs,ni as zs,oi as Bs,on as Vs,pr as Hs,qr as Us,qt as Ws,ri as Gs,si as Ks,sn as qs,ut as Js,vn as Ys,vt as Xs,w as Zs,yn as Qs,zr as $s,zt as ec}from"./control-ui-boot-shared-XreXSF7h.js";import{$ as tc,$d as nc,$o as rc,$p as ic,$r as ac,A as oc,Al as sc,Ao as cc,At as lc,B as uc,Bd as dc,Bo as fc,Br as pc,Bt as mc,Bu as hc,Co as gc,Ct as _c,D as vc,Dc as yc,Do as bc,Ds as xc,Dt as Sc,E as Cc,Eo as wc,Es as Tc,Et as Ec,Ff as Dc,Ft as Oc,G as kc,Gp as Ac,Gr as jc,Gs as Mc,Gu as Nc,H as Pc,Hf as Fc,Hp as Ic,Hr as Lc,Hs as Rc,Ht as zc,Io as Bc,Ir as Vc,It as Hc,Iu as Uc,J as Wc,Jc as Gc,Jf as Kc,Jo as qc,Jp as Jc,Jr as Yc,K as Xc,Kd as Zc,Kp as Qc,Ks as $c,Ku as el,Lf as tl,Lo as nl,Lr as rl,Ls as il,Lt as al,M as ol,Ml as sl,Mo as cl,Ms as ll,Mt as ul,Nf as dl,Nl as fl,No as pl,Nt as ml,O as hl,Of as gl,Oo as _l,Os as vl,Ot as yl,Pt as bl,Q as xl,Qf as Sl,Qo as Cl,Rd as wl,Rr as Tl,Rt as El,Ru as Dl,Sc as Ol,So as kl,Td as Al,Tl as jl,To as Ml,Tt as Nl,U as Pl,Ud as Fl,Uo as Il,Us as Ll,Ut as Rl,Uu as zl,V as Bl,Vl,Vr as Hl,Vs as Ul,Vt as Wl,W as Gl,Wp as Kl,Wr as ql,Ws as Jl,X as Yl,Xf as Xl,Xi as Zl,Xo as Ql,Xr as $l,Y as eu,Yf as tu,Yo as nu,Yr as ru,Ys as iu,Zf as au,Zo as ou,_c as su,_f as cu,al as lu,as as uu,at as du,bc as fu,bo as pu,bt as mu,cc as hu,cp as gu,cs as _u,ct as vu,dn as yu,ds as bu,dt as xu,ef as Su,en as Cu,ep as wu,es as Tu,et as Eu,ff as Du,fs as Ou,gn as ku,hc as Au,ic as ju,if as Mu,il as Nu,in as Pu,ip as Fu,is as Iu,it as Lu,j as Ru,jf as zu,jo as Bu,jt as Vu,k as Hu,ko as Uu,kt as Wu,lf as Gu,lp as Ku,ls as qu,lt as Ju,mc as Yu,mf as Xu,mp as Zu,np as Qu,ns as $u,nt as ed,oc as td,os as nd,ot as rd,pf as id,q as ad,qc as od,qi as sd,qo as cd,qp as ld,qs as ud,qu as dd,rc as fd,rl as pd,rp as md,rs as hd,sc as gd,ss as _d,st as vd,tp as yd,ts as bd,uc as xd,un as Sd,us as Cd,ut as wd,vc as Td,vf as Ed,wc as Dd,wd as Od,wl as kd,wo as Ad,wt as jd,xc as Md,xo as Nd,xt as Pd,yo as Fd,yt as Id,zr as Ld,zt as Rd}from"./control-ui-boot-shared-dOnP4mAA.js";import{G as zd,H as Bd,K as Vd,c as Hd,m as Ud,p as Wd,s as Gd}from"./control-ui-boot-shared-Q8KG_noF.js";import"./control-ui-boot-shared-styles-BXPMRytW.js";import{A as Kd,B as qd,F as Jd,G as Yd,I as Xd,O as Zd,R as Qd,W as $d,Y as ef,c as tf,d as nf,f as rf,k as af,l as of,q as sf,s as cf,u as lf,z as uf}from"./control-ui-boot-chat-XPUNenUd.js";import{A as df,B as ff,C as pf,D as mf,E as hf,F as gf,I as _f,M as vf,N as yf,O as bf,P as xf,R as Sf,S as Cf,T as wf,_ as Tf,a as Ef,b as Df,d as Of,f as kf,g as Af,h as jf,i as Mf,j as Nf,k as Pf,o as Ff,p as If,r as Lf,t as Rf,u as zf,v as Bf,w as Vf,x as Hf,y as Uf,z as Wf}from"./control-ui-boot-chat-BD9CwLj7.js";import{G as Gf,J as Kf,K as qf,M as Jf,N as Yf,Q as Xf,R as Zf,T as Qf,U as $f,V as ep,W as tp,X as np,Y as rp,a as ip,at as ap,ct as op,it as sp,lt as cp,n as lp,nt as up,o as dp,ot as fp,q as pp,rt as mp,st as hp,t as gp,tt as _p,ut as vp,w as yp}from"./control-ui-boot-chat-CGYcTLro.js";import{$ as bp,A as xp,G as Sp,H as Cp,M as wp,Q as Tp,U as Ep,a as Dp,et as Op,f as kp,h as Ap,it as jp,j as Mp,n as Np,nt as Pp,p as Fp,rt as Ip,t as Lp,u as Rp,v as zp,vt as Bp,y as Vp,yt as Hp}from"./control-ui-boot-chat-CmENwCKi.js";import{E as Up,S as Wp,T as Gp,_ as Kp,b as qp,g as Jp,v as Yp,y as Xp}from"./control-ui-boot-chat-k_u3nGjS.js";import{_t as Zp,gt as Qp,vt as $p,yt as em}from"./control-ui-boot-new-CkyIHJ_L.js";import"./control-ui-boot-chat-styles-BcslGtWC.js";function tm(e){let t=e?.archivedBy,n=t?.id?z(`sessionsView.archivedBy`,{name:t.label??t.id}):e?.archiveReason?$d(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 nm(e){return W`
<div
class="chat-divider__rule"
role=${e.compaction?`status`:`separator`}
aria-live=${e.compaction?`polite`:U}
aria-label=${e.metric?`${e.label}, ${e.metric}`:e.label}
>
<span class="chat-divider__line"></span>
<span class="chat-divider__label">
${e.compaction?W`<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?W`<span class="chat-divider__icon" aria-hidden="true"
>${Ut[e.icon]}</span
>`:U}
<span class="chat-divider__title">${e.label}</span>
${e.metric?W`
<span class="chat-divider__separator" aria-hidden="true">·</span>
<span class="chat-divider__metric">${e.metric}</span>
`:U}
</span>
<span class="chat-divider__line"></span>
</div>
`}function rm(e){return W`
<div
class="chat-divider ${e.compaction?`chat-compaction chat-compaction--${e.compaction}`:``}"
data-chat-row-key=${e.key}
data-ts=${String(e.timestamp)}
>
${nm(e)}
${e.description?W`
<div class="chat-divider__details">
<span class="chat-divider__description">${e.description}</span>
</div>
`:U}
</div>
`}function im(e){let t=e.text?W`
<div class="chat-text chat-notice__body" dir=${Md(e.text)}>
${so(bs(e.text,{codeBlockChrome:`none`}))}
</div>
`:U;return W`
<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`:U}
>
${e.label?nm({icon:e.icon,label:e.label}):U}
${e.collapsedBody&&e.text?W`
<details class="chat-notice__collapse">
<summary class="chat-notice__toggle">${z(`chat.systemNotice.showContent`)}</summary>
${t}
</details>
`:t}
</div>
`}function am(){return(am=e((()=>{G(),fo(),en(),B(),Xs(),F(),Yd(),Ol()})))()}function om(e){return!e.includes(`\0`)&&e.split(`/`).every(e=>e!==``&&e!==`.`&&e!==`..`)}function sm(e){return Array.from(e).map(e=>{if(e===`\\`)return`\\\\`;let t=e.charCodeAt(0);return t<=31||t>=127&&t<=159?`\\u{${t.toString(16).padStart(4,`0`)}}`:e}).join(``)}function cm(e){let t=Q(e);if(!t||!Array.isArray(t.paths)||t.paths.length===0)return;let n=t.paths.filter(e=>typeof e==`string`&&om(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 lm(e){if(e&&`workspaceResultConflict`in e)return cm(e.workspaceResultConflict)}function um(e){let t=Q(e);if(t?.role===`custom`&&t.customType===hm)return cm(t.details)}function dm(e){return Math.max(e.paths.length,e.totalCount??e.paths.length)}function fm(e){let t=e.paths.slice(0,gm);return{paths:t,remaining:Math.max(0,dm(e)-t.length)}}function pm(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}function mm(e,t){let n=t===void 0?e.paths.find(e=>!nr(e)):e.paths.includes(t)&&!nr(t)?t:void 0;if(!n)return;let r=pm(`${e.stagedResultRef}:${n}`),i=pm(e.stagedResultRef),a=pm(`:(top,literal)${n}`);return{inspect:`git show ${r}`,takeCloud:`git checkout ${i} -- ${a}`}}var hm,gm;function _m(){return(_m=e((()=>{or(),hm=`cloud-workspace-conflict`,gm=5})))()}function vm(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e.charAt(n),a=n,o;if(/\s/.test(i)){for(;a<e.length&&/\s/.test(e.charAt(a));)a++;o=`ws`}else if(i===`'`||i===`"`){for(a+=1;a<e.length&&e.charAt(a)!==i;)a+=e.charAt(a)===`\\`?2:1;a=Math.min(a+1,e.length),o=`str`,r=!1}else if(xm.has(i)){for(;a<e.length&&xm.has(e.charAt(a));)a++;o=`op`,r=!0}else{for(;a<e.length&&!/\s/.test(e.charAt(a))&&!xm.has(e.charAt(a))&&e.charAt(a)!==`'`&&e.charAt(a)!==`"`;)a++;let t=e.slice(n,a);o=r?`name`:t.startsWith(`-`)?`flag`:/^\d+(?:[.,]\d+)?$/.test(t)?`num`:`plain`,r=!1}t.push({text:e.slice(n,a),cls:o}),n=a}return t}function ym(e){return e.length>bm?W`${e}`:W`${vm(e).map(e=>e.cls===`ws`||e.cls===`plain`?W`${e.text}`:W`<span class="chat-cmd--${e.cls}">${e.text}</span>`)}`}var bm,xm;function Sm(){return(Sm=e((()=>{G(),bm=2e3,xm=new Set([`|`,`;`,`&`,`<`,`>`])})))()}var Cm,wm;function Tm(){return(Tm=e((()=>{Bn(),Ja(),Cm=class extends Cn{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,Xa(async()=>{let{highlightDiffLines:e}=await import(`./chat-diff-highlight.runtime-Clf1hqFV.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))}},wm=En(Cm)})))()}function Em(e){let t=e.modified===void 0;return!t&&e.added===0&&e.removed===0&&!e.modified?U:In(t,W`<span class="chat-diffstat">
${t||e.added>0?W`<span class="chat-diffstat__add">+${e.added}</span>`:U}
${t||e.removed>0?W`<span class="chat-diffstat__del">-${e.removed}</span>`:U}
${(e.modified??0)>0?W`<span class="chat-diffstat__mod">~${e.modified}</span>`:U}
</span>`)}function Dm(e,t=`succeeded`,n,r={path:``}){let i=e.some(e=>e.lineNo!==void 0);return wm(e,r,r=>W`
<div
class="chat-diff code-highlight"
role="figure"
aria-label=${z(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 W`<div class="chat-diff__row ${a}">
${i?W`<span class="chat-diff__gutter">${t?``:e.lineNo??``}</span>`:U}
<span class="chat-diff__sign">${o}</span>
<span class="chat-diff__text"
>${t?(n?.(e)??e.text)||`⋯`:r(e)}</span
>
</div>`})}
</div>
`)}function Om(){return(Om=e((()=>{G(),Nn(),F(),Tm()})))()}function km(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 Am(e){return W`
<div class="chat-tool-card__raw">
<button
class="chat-inline-disclosure chat-tool-card__raw-toggle"
type="button"
aria-expanded="false"
@click=${km}
>
<span>${z(`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>${jm({text:e})}</div>
</div>
`}function jm(e){let{label:t,text:n}=e,r=ds(n)?`markdown-block-art`:``;return W`
<div class="chat-tool-card__block">
${t?W`<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>`:U}
<pre class="chat-tool-card__block-content"><code class=${r}>${n}</code></pre>
</div>
`}function Mm(e){if(typeof e==`string`)return Ca(e,Hm);if(e==null||typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);try{return Ca(JSON.stringify(e),Hm)}catch{return Object.prototype.toString.call(e)}}function Nm(e){return W`
<div class="chat-tool-kv">
${e.map(([e,t])=>W`
<div class="chat-tool-kv__row">
<span class="chat-tool-kv__key">${e}:</span>
<span class="chat-tool-kv__value">${Mm(t)}</span>
</div>
`)}
</div>
`}function Pm(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=Q(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 Fm(e,t,n){return t&&n?W`
<button
class="chat-tool-card__detail chat-tool-card__detail-link"
type="button"
title=${z(`chat.toolCards.openFile`)}
@click=${()=>n({path:t})}
>
${e}
</button>
`:W`<div class="chat-tool-card__detail">${e}</div>`}function Im(e,t){let n=e===`failed`&&t!==void 0?z(`chat.toolCards.exitCode`,{code:String(t)}):z(`chat.toolCards.${e===`succeeded`?`completed`:e===`unknown`?`outcomeUnknown`:e}`);return W`<div class="chat-tool-card__outcome">${n}</div>`}function Lm(e,t){return W`
<div class="chat-tool-term">
<div class="chat-tool-term__cmd">
<span class="chat-tool-term__prompt">$</span
><code>${ym(e)}</code>
</div>
${t===void 0?U:W`<pre class="chat-tool-term__out"><code>${t}</code></pre>`}
</div>
`}function Rm(e,t,n,r,i,a){let o=`${t}:${e.id}`,s=i||r===`skipped`?`raw`:`diff`,c=z(`chat.toolCards.viewMode`),l=[[`diff`,`chat.toolCards.diff`,Dm(n,r,void 0,a)],[`raw`,`chat.toolCards.raw`,jm({...i?{label:z(`chat.toolCards.toolError`)}:{},text:e.outputText})]];return W`
<wa-tab-group
class="chat-tool-card__modes"
aria-label=${c}
.active=${s}
activation="auto"
without-scroll-controls
${q(e=>ws(e,c))}
>
${l.map(([e,t])=>W`<wa-tab
slot="nav"
id=${`${o}-${e}-tab`}
aria-controls=${`${o}-${e}-panel`}
panel=${e}
?active=${s===e}
>
${z(t)}
</wa-tab>`)}
${l.map(([e,,t])=>W`<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 zm(e){return e.map(e=>`${e.kind===`add`?`+`:e.kind===`del`?`-`:` `}${e.text}`).join(`
`)}function Bm(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=Vi(e),l=pp(e),u=Gf(c),d=Math.max(u?.length??0,e.outputText?.length??0)>tp,f={...c,outputText:d&&i&&!l?Ca(u??``,tp):u},p=W`
${u!==e.outputText&&e.outputText!==void 0&&!(d&&i)?Am(e.outputText):U}
${l?W`<p role="status">${z(`chat.toolCards.fullOutputUnavailable`)}</p>`:(d||f.outputTruncated)&&i?W`<button
class="btn btn--sm"
type="button"
@click=${()=>i(s)}
>
${z(`chat.toolCards.showFullOutput`)}
</button>`:U}
`,m=Ni({name:f.name,args:f.args,details:f.details}),h=fp({name:f.name,args:f.args}),g=m.kind===`read`||m.kind===`search`||m.kind===`fetch`,_=g?h.detail:_p(h),v=f.outputText!==void 0,y=!!f.inputText?.trim(),b=qi(f),x=ta(f,a),S=Pm(f,m),C=!!i,w=f.preview,T=w?.kind===`canvas`&&w.render===`url`&&w.viewId&&w.url?{kind:`canvas`,docId:w.viewId,entryUrl:w.url,...w.title?{title:w.title}:{},...w.preferredHeight?{preferredHeight:w.preferredHeight}:{},...w.sandbox?{sandbox:w.sandbox}:{},...f.outputText?{rawText:f.outputText}:{}}:s,E=C?W`
<openclaw-tooltip content=${z(`chat.toolCards.openDetails`)}>
<button
class="chat-tool-card__action-btn"
type="button"
@click=${()=>i?.(T)}
aria-label=${z(`chat.toolCards.openDetails`)}
>
<span class="chat-tool-card__action-icon">${V.panelRightOpen}</span>
</button>
</openclaw-tooltip>
`:U,D=m.diff&&m.diff.length>0?xs(zm(m.diff),z(`common.copy`)):U,O=m.kind===`command`&&(m.command||m.code)&&!f.preview?`command`:(m.kind===`edit`||m.kind===`write`)&&m.diff?.length?`diff`:`generic`,k;if(O===`command`){let e=Q(f.args),t=m.code?e?.code===m.code?`code`:`input`:`command`,n=Object.entries(e??{}).filter(([e])=>e!==t);k=W`
${m.code?t===`input`?W`${v?jm({text:f.outputText}):U}
<details class="chat-tool-card__input">
<summary>${z(`chat.toolCards.toolInput`)}</summary>
${jm({text:m.code})}
</details>`:W`${jm({label:z(`chat.toolCards.toolInput`),text:m.code})}
${v?jm({text:f.outputText}):U}`:Lm(m.command,f.outputText)}
${n.length>0?Nm(n):U}
`}else if(O===`diff`&&m.diff){let e=m.fileOperations?.[0]??{path:m.target??``};k=v?Rm(f,t,m.diff,x,b,e):Dm(m.diff,x,void 0,e)}else{let e=to(f.args)?Object.entries(f.args).filter(([e])=>!Um[m.kind]?.has(e)):null,t=y&&(!g||!!e?.length);k=W`
${t?e&&e.length>0&&e.length<=Vm?Nm(e):jm({label:z(`chat.toolCards.toolInput`),text:f.inputText}):U}
${v&&f.preview?.kind===`canvas`?Am(f.outputText):v||b?jm({...b?{label:z(`chat.toolCards.toolError`)}:{},text:v?f.outputText:z(`chat.toolCards.noOutputFailed`)}):U}
`}return In(O,W` <div
class="chat-tool-card ${O===`command`?`chat-tool-card--flush `:``}${b?`chat-tool-card--error`:``}"
>
${O===`command`?W`<div class="chat-tool-card__actions">${E}</div>`:O===`diff`||_||C?W`<div class="chat-tool-card__header">
${O===`diff`||_&&m.kind===`read`?Fm(O===`diff`?S??m.target??``:_,S,o):_?W`<div class="chat-tool-card__detail">${_}</div>`:U}
<div class="chat-tool-card__actions">
${O===`diff`?D:U}${E}
</div>
</div>`:U}
${k} ${p} ${Im(x,f.exitCode)}
</div>`)}var Vm,Hm,Um;function Wm(){return(Wm=e((()=>{G(),Nn(),H(),Vs(),B(),hs(),Tt(),Cs(),F(),ki(),Ii(),up(),qf(),Sm(),Om(),Vm=12,Hm=400,Um={read:new Set([`path`,`file_path`,`filePath`,`notebook_path`]),search:new Set([`pattern`,`query`,`glob`,`path`]),fetch:new Set([`url`])}})))()}function Gm(e,t=!0,n){let r=e.filter(qi),i=n?Un(n).outcomes:void 0,a=i?.failed??r.length,o=i?.skipped??e.filter(Qi).length,s=r[0];if(a===0&&o===0)return U;let c=s?.exitCode===void 0?z(`chat.toolCards.failed`):z(`chat.toolCards.exitCode`,{code:String(s.exitCode)}),l=(e,n)=>n>0?W`<span class="chat-tool-${e}"
>${t?z(`chat.toolCards.${e}Count`,{count:String(n)}):e===`failure`?c:z(`chat.toolCards.skipped`)}</span
>`:U;return W`${l(`failure`,a)}${l(`skipped`,o)}`}function Km(e,t=`Review`){return e?W`<span
class="chat-activity-group__review-status"
data-outcome=${e}
role="img"
aria-label=${z(`chat.toolCards.review.${e}`,{reviewer:t})}
>${e===`denied`?V.shieldX:e===`reviewing`?V.shieldQuestion:V.shieldCheck}</span
>`:U}function qm(){return(qm=e((()=>{G(),Jn(),B(),F(),Ii()})))()}function Jm(e){let t=e.contentWindow;if(!t)return Promise.reject(Error(`widget frame is unavailable`));let n=Array.from(crypto.getRandomValues(new Uint32Array(4)),e=>e.toString(16).padStart(8,`0`)).join(``);return new Promise((e,r)=>{let i=()=>{window.removeEventListener(`message`,o),globalThis.clearTimeout(s)},a=e=>{i(),r(e)},o=r=>{if(r.source!==t)return;let o=r.data;o&&o.type===Qm&&o.id===n&&(typeof o.error==`string`?a(Error(o.error)):typeof o.dataUrl!=`string`||!o.dataUrl.startsWith(`data:image/png;base64,`)||o.dataUrl.length>eh?a(Error(`widget returned an invalid snapshot`)):(i(),e(o.dataUrl)))};window.addEventListener(`message`,o);let s=globalThis.setTimeout(()=>a(new th(`widget snapshot request timed out`)),$m);try{t.postMessage({type:Zm,id:n},`*`)}catch(e){a(e instanceof Error?e:Error(String(e)))}})}function Ym(e,t){let n=document.createElement(`a`);n.href=e,n.download=t,n.click()}async function Xm(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=Ca(i,120).replace(/[. -]+$/g,``)||`widget`,o=Jm(t);if(e===`copy`){Qe();try{if(!navigator.clipboard?.write||typeof ClipboardItem>`u`)throw Error(`image clipboard is unavailable`);let e=o.then(async e=>(await globalThis.fetch(e)).blob());return e.catch(()=>{}),await navigator.clipboard.write([new ClipboardItem({"image/png":e})]),`png`}catch(e){let t=await o.then(()=>null,e=>e);if(t instanceof th)return`rerender-required`;throw t??e}}try{return Ym(await o,`${a}.png`),`png`}catch(e){if(!(e instanceof th))throw e;let n;if(r.documentHtml!==void 0)n=new Blob([r.documentHtml],{type:`text/html`});else{let r=t.getAttribute(`src`);if(!r)throw Error(`widget document URL is unavailable`,{cause:e});let i=new URL(r,window.location.href);if(i.origin!==window.location.origin)throw Error(`widget document URL is not same-origin`,{cause:e});let a=await globalThis.fetch(i.href);if(!a.ok)throw Error(`widget document download failed (${a.status})`,{cause:e});n=await a.blob()}let i=URL.createObjectURL(n);try{Ym(i,`${a}.html`)}finally{URL.revokeObjectURL(i)}return`html`}}var Zm,Qm,$m,eh,th;function nh(){return(nh=e((()=>{xe(),Zm=`openclaw:widget-snapshot-request`,Qm=`openclaw:widget-snapshot`,$m=5e3,eh=33554432,th=class extends Error{}})))()}var rh;function ih(){return(ih=e((()=>{Va(),G(),jn(),yt(),zt(),St(),Ht(),Ts(),B(),Yo(),hn(),F(),np(),xe(),zr(),Jd(),tt(),M(),k(),Gp(),rh=class extends A{constructor(){super(),this.latest=!1,this.failedImages=new Set,this.subscriptions=new y(this),this.open=()=>{this.opensExternally?this.openExternal():this.openPanel()},this.openPanel=()=>{let e=_s(this.preview);e&&this.dispatchEvent(new CustomEvent(_t,{detail:{open:!0,browserTab:e},bubbles:!0,composed:!0}))},this.onMenuSelect=e=>{let t=this.preview?.url;t&&(e.detail.item.value===`copy-url`?w(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=[Pn(Up),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 {
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&&Lr(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(),Xd(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||!fn(n)||!this.latest||!i){(!this.latest||!n||!fn(n))&&(this.requestIdentity=void 0,this.thumbnailSrc=void 0);return}let a=JSON.stringify([ks(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,Xf({client:r,tab:e,revision:i,resourceBasePath:t.resourceBasePath,authToken:Gt({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=Ze(this.preview?.url??``,window.location.href);e&&!yn(e)&&je(e)}renderImage(e){return W`<img
src=${e}
alt=""
@error=${()=>{this.failedImages.add(e),this.requestUpdate()}}
/>`}render(){let e=this.preview;if(!e)return U;let t=this.requestIdentity?.client===this.context?.gateway.snapshot.client&&this.requestIdentity?.key===JSON.stringify([ks(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||z(`browser.title`),s=e.url?`${o} — ${e.url}`:o;return W`
<div class="card">
${i&&!this.failedImages.has(i)?W`
<button
type="button"
class=${i===t?`shot`:`shot social`}
aria-label=${s}
title=${this.opensExternally?z(`browser.openExternal`):z(`browser.openPanel`)}
?data-new-tab-action=${this.opensExternally}
@click=${this.open}
>
${this.renderImage(i)}
</button>
`:U}
<div class="bar">
<span class="icon" aria-hidden="true"
>${r&&!this.failedImages.has(r)?this.renderImage(r):V.globe}</span
>
<span class="identity">
<span class="title">${o}</span>
${e.url?W`<span class="url">${e.url}</span>`:U}
</span>
<span class="actions">
<button
type="button"
title=${this.opensExternally?z(`browser.openExternal`):z(`browser.openPanel`)}
?data-new-tab-action=${this.opensExternally}
@click=${this.open}
>
${z(`browser.open`)}
</button>
<wa-dropdown
class="session-menu"
placement="bottom-end"
@wa-select=${this.onMenuSelect}
>
<button
slot="trigger"
type="button"
class="more"
aria-label=${z(`browser.moreActions`)}
aria-haspopup="menu"
title=${z(`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>
${z(`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?z(`browser.openWithinOpenClaw`):z(`browser.openNewTab`)}
</wa-dropdown-item>
</wa-dropdown>
</span>
</div>
</div>
`}},Z([Ba({context:Qt,subscribe:!0}),K({attribute:!1})],rh.prototype,`context`,void 0),Z([K({attribute:!1})],rh.prototype,`preview`,void 0),Z([K({attribute:!1})],rh.prototype,`revision`,void 0),Z([K({type:Boolean})],rh.prototype,`latest`,void 0),Z([Y()],rh.prototype,`thumbnailSrc`,void 0),Z([Y()],rh.prototype,`pagePreview`,void 0),customElements.get(`openclaw-browser-tab-card`)||customElements.define(`openclaw-browser-tab-card`,rh)})))()}async function ah(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=z(`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=z(`chat.toolCards.pinnedToDashboard`),o.dataset.pinned=`true`}catch{o.disabled=!1,o.ariaLabel=z(`chat.toolCards.pinToDashboard`);let e=z(`chat.toolCards.pinToDashboardFailed`);o.title=e,rt({message:e})}}}function oh(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 sh(e,t){if(!Dh.has(e)&&Dh.size>=kh){let e=Dh.keys().next().value;e!==void 0&&Dh.delete(e)}Dh.set(e,t)}function ch(e,t){let n=t;n&&n.type===xh&&Bp(e,n.prompt,e.getAttribute(`src`)??``)}function lh(e){let t=e.contentWindow;if(Ph.has(e)||!Nh.has(e)||!t)return;let n=jh.get(t);n&&(Ph.add(e),jh.delete(t),n.addEventListener(`message`,t=>{ch(e,t.data)}),n.start(),n.postMessage({type:Sh}))}function uh(){typeof window>`u`||Fh.has(window)||(Fh.add(window),window.addEventListener(`message`,e=>{let t=e.data;if(!t||t.type!==bh)return;let n=e.source,r=e.ports[0];if(n&&r&&e.origin===`null`){if(Mh.has(n)){r.close();return}Mh.add(n),jh.set(n,r);for(let e of Eh)if(e.contentWindow===n){lh(e);return}}}))}function dh(){typeof window>`u`||Ah.has(window)||(Ah.add(window),window.addEventListener(`message`,e=>{let t=e.data;if(t&&t.type===yh&&typeof t.height==`number`)for(let n of Eh){if(!n.isConnected){Eh.delete(n);continue}if(n.contentWindow===e.source){let e=Math.min(Math.max(Math.trunc(t.height),wh),Th);n.style.height=`${e}px`,n.style.minHeight=`${e}px`;let r=n.getAttribute(Oh)??n.getAttribute(`src`);r&&sh(r,e);return}}}))}function fh(e){return In(`${e.sandbox??``}\u0000${e.frameKey??``}\u0000${+!!e.src}\u0000${e.connectionGeneration??0}\u0000${e.height??``}`,Lh(e))}function ph(e,t,n){if(e.mcpApp)return bt(`mcp-app-view`,Rh).catch(e=>{console.error(`[openclaw] failed to load MCP App view`,e)}),W`<mcp-app-view
.sessionKey=${n?.sessionKey??``}
.viewId=${e.mcpApp.viewId}
.height=${e.preferredHeight??600}
.title=${e.title?.trim()||z(`mcpApp.title`)}
></mcp-app-view>`;if(e.sandbox!==`strict`&&oh(e))return bt(`openclaw-canvas-widget-view`,zh).catch(e=>console.error(`[openclaw] failed to load widget view`,e)),In(`${e.viewId}\0${n?.sessionKey??``}`,W`
<openclaw-canvas-widget-view
.docId=${e.viewId.trim()}
.sessionKey=${n?.sessionKey??``}
.messageTimestamp=${n?.messageTimestamp}
.title=${e.title?.trim()||z(`chat.toolCards.canvas`)}
.preferredHeight=${e.preferredHeight}
.allowScripts=${t.includes(`allow-scripts`)}
.connectionGeneration=${P()}
></openclaw-canvas-widget-view>
`);let r=mp(e.url);return fh({title:e.title?.trim()||z(`chat.toolCards.canvas`),src:sp(e.url,n?.canvasPluginSurfaceUrl,n?.allowExternalEmbedUrls??!1),frameKey:e.url?.trim()||e.viewId?.trim(),connectionGeneration:r?P():void 0,height:e.preferredHeight,sandbox:t,promptCapable:r})}function mh(e,t){let n=e.detail.item.value,r=e.currentTarget instanceof HTMLElement?e.currentTarget:null;if(n===`raw-details`){let e=(r?.closest(`.chat-tool-card__widget-host`))?.querySelector(`.chat-tool-card__widget-raw .chat-tool-card__raw-toggle`);e?.click(),(r?.querySelector(`[data-raw-label]`))?.replaceChildren(z(e&&e.getAttribute(`aria-expanded`)===`true`?`chat.toolCards.hideRawDetails`:`chat.toolCards.showRawDetails`));return}if(n!==`copy`&&n!==`download`)return;let i=r?.closest(`.chat-tool-card__preview`)?.querySelector(`.chat-tool-card__preview-frame`);if(!i){rt({message:z(`chat.toolCards.widgetExportFailed`)});return}let a=i.closest(`openclaw-canvas-widget-view`)?.documentHtml;Xm(n,i,t,{documentHtml:a}).then(e=>{e===`rerender-required`?rt({message:z(`chat.toolCards.widgetExportRerender`)}):e===`html`?rt({message:z(`chat.toolCards.widgetExportHtmlFallback`)}):n===`copy`&&rt({message:z(`common.copied`)})}).catch(()=>{rt({message:z(`chat.toolCards.widgetExportFailed`)})})}function hh(){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 gh(e){let{icon:t,labelKey:n}={copy:{icon:V.copyImage,labelKey:`chat.toolCards.copyAsImage`},download:{icon:V.download,labelKey:`chat.toolCards.downloadAsImage`},"raw-details":{icon:V.fileText,labelKey:`chat.toolCards.showRawDetails`}}[e],r=z(n);return W`<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" ?data-raw-label=${e===`raw-details`}>${r}</span>
</wa-dropdown-item>`}function _h(e,t){let n=!e.mcpApp&&mp(e.url);return!n&&!t?U:W`
<wa-dropdown
class="chat-tool-card__widget-actions"
placement="bottom-end"
aria-label=${z(`chat.toolCards.widgetActions`)}
@wa-select=${t=>mh(t,e.title)}
>
<button
slot="trigger"
type="button"
class="btn btn--ghost btn--icon chat-tool-card__widget-actions-trigger"
aria-label=${z(`chat.toolCards.widgetActions`)}
title=${z(`chat.toolCards.widgetActions`)}
>
${V.moreHorizontal}
</button>
${n?[`copy`,`download`].map(gh):U}
${t?gh(`raw-details`):U}
</wa-dropdown>
`}function vh(e,t,n){if(!e)return U;if(e.kind===`browser-tab`)return t===`chat_tool`?W`<openclaw-browser-tab-card
.preview=${e}
.revision=${n?.browserTabRevision}
.latest=${n?.browserTabLatest??!1}
></openclaw-browser-tab-card>`:U;if(e.kind!==`canvas`||t===`chat_tool`||e.surface!==`assistant_message`)return U;let r=e.mcpApp?void 0:Yf(e.url);if(r)return bt(`openclaw-youtube-video`,Bh).catch(e=>console.error(`[openclaw] failed to load YouTube player`,e)),In(`${n?.sessionKey??``}\0${r.watchUrl}`,W`<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()||z(`chat.youtube.video`)}${V.externalLink}
</a>
</openclaw-youtube-video>`);let i=e.mcpApp?`mcp-app`:`canvas-html`,a=ap(n?.embedSandboxMode??`scripts`,e.sandbox),o=n?.boardProvider,s=e.mcpApp?.viewId?.trim(),c=e.viewId?.trim(),l=e.mcpApp?s?$f(s):void 0:e.boardWidgetName||(c?ep(c):void 0),u=!!(l&&o?.snapshot$.value.widgets.find(e=>e.name===l)),d=z(u?`chat.toolCards.pinnedToDashboard`:`chat.toolCards.pinToDashboard`),f=o&&(i===`mcp-app`?o.canPinMcpApps:o.canPinWidgets)&&l&&(i===`canvas-html`&&a.includes(`allow-scripts`)&&oh(e)||i===`mcp-app`&&s)?W`<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 ah(t,e,o,l,s)}
>
${V.pin}
</button>`:U,p=_h(e,!!n?.rawText),m=f===U&&p===U?U:W`<div class="chat-tool-card__preview-actions" data-widget-actions>
${f} ${p}
</div>`;return W`
<div
${m===U?U:q(hh())}
class="chat-tool-card__preview"
data-content-kind=${i}
?data-has-widget-actions=${m!==U}
data-kind="canvas"
data-surface=${t}
>
${m}
<div class="chat-tool-card__preview-panel" data-side="canvas">
${ph(e,a,n)}
</div>
</div>
`}var yh,bh,xh,Sh,Ch,wh,Th,Eh,Dh,Oh,kh,Ah,jh,Mh,Nh,Ph,Fh,Ih,Lh,Rh,zh,Bh;function Vh(){return(Vh=e((()=>{G(),On(),Nn(),H(),It(),B(),Hp(),Yo(),F(),Bi(),Zf(),p(),up(),Jf(),we(),Qd(),nh(),ih(),Ja(),Hr(),yh=`openclaw:widget-size`,bh=`openclaw:widget-prompt-offer`,xh=`openclaw:widget-prompt`,Sh=`openclaw:widget-prompt-host-ready`,Ch=`openclaw:widget-chat-host`,wh=48,Th=8e3,Eh=new Set,Dh=new Map,Oh=`data-frame-key`,kh=100,Ah=new WeakSet,jh=new WeakMap,Mh=new WeakSet,Nh=new WeakSet,Ph=new WeakSet,Fh=new WeakSet,Ih=class extends Dn{render(e){dh(),uf();let t=e.sandbox??``,n=this.frame&&Ph.has(this.frame)?this.frame.getAttribute(`src`):e.src??``,r=e.frameKey||n,i=(r?Dh.get(r):void 0)??e.height;return e.promptCapable&&uh(),In(n,W`
<iframe
${q(e=>{e instanceof HTMLIFrameElement&&(this.frame&&this.frame!==e&&Eh.delete(this.frame),this.frame=e)})}
src=${n||U}
data-frame-key=${r||U}
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;Eh.add(n),e.promptCapable&&(Nh.add(n),lh(n)),qd(n),n.contentWindow?.postMessage({type:Ch},`*`)}}}
></iframe>
`)}},Lh=En(Ih),Rh=async()=>{(await Xa(()=>import(`./mcp-app-view-registration-B3yat5MI.js`),__vite__mapDeps([4,5,6,7,8,9,10,11,3,12,13,14,15,16,17]),import.meta.url)).registerMcpAppView()},zh=()=>Xa(()=>import(`./canvas-widget-view-CFQXp3xJ.js`),__vite__mapDeps([18,5,6,7,9,19,20,11,3,12,13,14,15,16,17,21,22]),import.meta.url),Bh=()=>Xa(()=>import(`./youtube-video-card-DcLJ5WUJ.js`),__vite__mapDeps([23,3]),import.meta.url)})))()}function Hh(e,t,n){let r=e.flatMap(e=>e.messages.flatMap(t=>Vr(t.message).filter(e=>e.browserTab).map(t=>({card:t,groupKey:e.key})))),i=new Set,a=new Set;return r.toReversed().flatMap(({card:e,groupKey:t})=>{if(!e.browserTab||ta(e,!1)!==`succeeded`)return[];let n=ks(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([Is(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=rp(e),o=vh(i,`chat_tool`,{browserTabRevision:a?JSON.stringify([t.sessionKey,a]):void 0,browserTabLatest:!!(a&&t.latestBrowserTabs?.get(ks(i))?.revision===a)});return n?.(r,o),o})}function Uh(e,t){let n=new Map;for(let r of e)Hh(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 Wh(e,t){let n=t?.pluginToolIcons?.get(t.toolName);return n?W`<span
class="chat-tool-activity-icon"
aria-hidden="true"
style=${kn({maskImage:`url("${n.url}")`})}
>
<img hidden src=${n.url} alt="" @error=${n.onError} />
</span>`:V[e]??V.puzzle}function Gh(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 Kh(e,t){let n=Gh(e);if(n){let[e,r,i]=sg[n];return z(`chat.toolCards.verbs.${t===`running`?e:t===`succeeded`?r:i}`)}let r=og[e.kind];return r?z(r):void 0}function qh(e){return Ca(($n(e).command||e).replace(/\s+/gu,` `).trim(),200)}function Jh(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 Yh(e,t,n){return W`<button
class="chat-tool-row__${e}-link"
type="button"
title=${z(e===`file`?`chat.toolCards.openFile`:`chat.toolCards.openSubagent`)}
@click=${e=>{e.stopPropagation(),n()}}
>
${t}
</button>`}function Xh(e,t,n,r,i,a){if(t.title)return W`<span class="chat-tool-row__title">${t.title}</span>`;if(t.kind===`command`&&t.command)return W`
<span class="chat-tool-row__prompt" aria-hidden="true">$</span>
<code class="chat-tool-row__cmd"
>${ym(qh(t.command))}</code
>
`;let o=Kh(t,n);if(o&&t.target){let r=t.kind===`edit`||t.kind===`write`?We(t.target):t.target,s=n===`succeeded`?t.stat:n===`running`&&(t.kind===`edit`||t.kind===`write`)?e.liveDiffStat:void 0;return W`
<span class="chat-tool-row__verb">${o}</span>
${i&&a?Yh(`file`,r,()=>a({path:i})):W`<span class="chat-tool-row__target">${r}</span>`}
${s?Em(s):U}
${!i&&t.targetDetail&&t.kind!==`edit`&&t.kind!==`write`?W`<span class="chat-tool-row__detail">${t.targetDetail}</span>`:U}
`}let s=tg(e),c=Ki(s.label)??s.label,l=Zi(s.name,c);return W`
${!l||s.label!==r?W`<span class="chat-tool-msg-summary__label">${c}</span>`:U}
${l?W`<span class="chat-tool-msg-summary__names">${l}</span>`:U}
`}function Zh(e,t){let n=e.session,r=n?.running?z(`chat.toolCards.subagentRunning`):n?.ended===`failed`?z(`chat.toolCards.failed`):n?.ended===`stopped`?z(`chat.toolCards.subagentStopped`):ti(n?.runtimeMs);return W`
${t?Yh(`subagent`,e.label,t):W`<span class="chat-tool-row__title">${e.label}</span>`}
${r?W`<span
class="chat-tool-row__subagent-state ${n?.ended===`failed`?`chat-tool-row__subagent-state--failed`:``}"
>${r}</span
>`:U}
`}function Qh(e){return Array.isArray(e)?e.flatMap(e=>{let t=Q(e);return typeof t?.step!=`string`||t.status!==`pending`&&t.status!==`in_progress`&&t.status!==`completed`?[]:[{step:t.step,status:t.status}]}):[]}function $h(e,t){if(e.name.trim().toLowerCase()!==`progress_card`)return null;let n=Q(e.args),r=Qh(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`?z(`sessionProgressCard.receipt.skipped`):t===`failed`?z(`sessionProgressCard.receipt.failed`):t===`running`?z(`sessionProgressCard.receipt.updating`):r.length>0?z(`sessionProgressCard.receipt.updated`,{completed:String(a),current:o?.step??``,total:String(r.length)}):z(i?`sessionProgressCard.receipt.noteUpdated`:`sessionProgressCard.receipt.cleared`);return W`<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">${Wh(`listChecks`)}</span>
<span class="chat-progress-card-receipt__text">${s}</span>
</div>
</div>`}function eg(e,t){return t?.trim()?t:typeof e.args==`string`?ea(e.inputText?.trim()?e.inputText:e.args):void 0}function tg(e){let t=fp({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=Ei(e.args)||n;return r?{label:t.label,name:r}:{label:eg(e,void 0)??t.label}}function ng(e,t,n){if(t.title)return t.title;if(t.kind===`command`&&t.command)return`$ ${qh(t.command)}`;let r=Kh(t,n);if(r&&t.target)return`${r} ${t.target}`;let i=tg(e);return[i.label,i.name].filter(Boolean).join(` `)}function rg(e){let t=Fi(e.details);return t.length===0?U:W`
<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 W`
<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"
>${z(`chat.toolCards.review.${n}`,{reviewer:e.label})}</span
>
${[{kind:`risk`,level:e.riskLevel},{kind:`authorization`,level:e.userAuthorization}].map(({kind:e,level:t})=>t?W`<span class="chat-tool-review__chip"
>${z(`chat.toolCards.review.${e}`,{level:t})}</span
>`:U)}
</div>
${e.status===`in_progress`?U:W`<div class="chat-tool-review__rationale">
${e.rationale??z(`chat.toolCards.review.noRationale`)}
</div>`}
</div>
`})}
</div>
`}function ig(e,t){let n=Vi(e),r=ta(n,t.runActive),i=$h(n,r);if(i&&!t.children)return ag(e,t,i);let a=Ni({name:n.name,args:n.args,details:n.details}),o=fp({name:n.name,args:n.args,detailMode:`explain`}),s=t.activityCards??[n],c=s.some(e=>ta(e,t.runActive)===`running`),l=t.expanded,u=cg[a.kind]??o.icon,d=Pm(n,a),f=gd(n,t.subagents?.subagentSessions),p=f?.session,m=p?.listed&&t.subagents?.onOpenSubagent||t.subagents?.onOpenSession,h=p&&m?()=>m(p.key):void 0,g=d?`file`:h?`subagent`:null,_=W`
<span
class="chat-tool-msg-summary__icon"
role="img"
aria-label=${o.name}
title=${o.name}
>${Wh(u,{toolName:o.name,pluginToolIcons:t.pluginToolIcons})}</span
>
<span class="chat-tool-disclosure__content"
>${f?Zh(f,h):Xh(n,a,r,o.label,d,t.onOpenWorkspaceFile)}</span
>
${l?U:Gm(s,!!t.children)}
<span class="chat-tool-row__chevron" aria-hidden="true">${V.chevronRight}</span>
`;return ag(e,t,W`
<div
class="chat-tool-msg-collapse chat-tool-msg-collapse--manual ${l?`is-open`:``}"
>
${g?W`<div
class="chat-inline-disclosure chat-tool-msg-summary chat-tool-row chat-tool-row--${g} ${c?`chat-tool-row--running`:``}"
@pointerenter=${Jh}
@focusin=${Jh}
>
<button
class="chat-tool-row__toggle"
type="button"
aria-expanded=${String(l)}
aria-label=${f?`${o.label} ${f.label}`:ng(n,a,r)}
@click=${()=>t.onToggleExpanded(n.id)}
></button>
${_}
</div>`:W`<button
class="chat-inline-disclosure chat-tool-msg-summary chat-tool-row ${c?`chat-tool-row--running`:``}"
type="button"
aria-expanded=${String(l)}
@pointerenter=${Jh}
@focus=${Jh}
@click=${()=>t.onToggleExpanded(n.id)}
>
${_}
</button>`}
${l?t.children?W`<div class="chat-tool-children">
${t.children}
<details class="chat-tool-wrapper-details">
<summary>${z(`chat.toolCards.toolInput`)}</summary>
<div class="chat-tool-msg-body">
${Bm(e,t)}
</div>
</details>
</div>`:W`<div class="chat-tool-msg-body">
${Bm(e,t)}
</div>`:U}
${t.showApprovalReviews===!1?U:rg(n)}
</div>
`)}function ag(e,t,n){return e?Re(`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 og,sg,cg;function lg(){return(lg=e((()=>{G(),wn(),ar(),Ts(),B(),F(),np(),Yi(),ki(),Ii(),up(),da(),Je(),fd(),Sm(),Om(),Wm(),qm(),Vh(),og={read:`chat.toolCards.verbs.read`,search:`chat.toolCards.verbs.searched`,fetch:`chat.toolCards.verbs.fetched`},sg={update:[`editing`,`edited`,`edit`],add:[`creating`,`created`,`create`],delete:[`deleting`,`deleted`,`delete`],mixed:[`changing`,`changed`,`change`],write:[`writing`,`wrote`,`write`]},cg={command:`squareTerminal`,read:`fileText`,edit:`pencil`,write:`fileCode`,search:`search`,fetch:`globe`}})))()}function ug(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)}}let s=a.toolCallId,c;if(s){for(let e of n.keys())if(c=e.callId===s?hu(e):void 0,c)break}return a.title.trim()?{key:a.toolCallId??a.itemId,title:(a.status?void 0:a.summary)??c??a.meta??(a.title===fp({name:a.name}).label?``:a.title),name:a.name,commandBearing:a.commandBearing,status:i?o:a.status}:void 0}var dg,fg,pg;function mg(){return(mg=e((()=>{G(),Bn(),Nn(),B(),pi(),up(),fd(),lg(),dg=3e3,fg=class extends Cn{constructor(...e){super(...e),this.scope=``,this.summary=``,this.outcomes=[],this.shownAt=0}render(e,t,n,r,i,a=[]){this.pluginToolIcons=i,this.summary=n,this.outcomes=a;let o=this.scope!==e;if(this.scope=e,o&&(this.shown=void 0),this.clearTimer(),this.pending=void 0,!t)return this.shown=void 0,this.content();let s=t.status===`failed`||t.status===`blocked`,c=dg-(Date.now()-this.shownAt);if(o||!this.shown||s||this.shown.key===t.key||c<=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()))},c))}return this.content()}show(e){(this.shown?.key!==e.key||this.shown.title!==e.title)&&(this.shownAt=Date.now()),this.shown=e}content(){let e=this.shown,t=e?.name;return W`
<span
class="chat-activity-group__icon"
role=${t?`img`:U}
aria-label=${t??U}
aria-hidden=${t?U:`true`}
title=${t??U}
>${t?Wh(e?.commandBearing?`squareTerminal`:ei(t),{toolName:t,pluginToolIcons:this.pluginToolIcons}):V.listTree}</span
>
<span class="chat-tool-disclosure__content">
${e?.title?In(e.title,W`<span class="chat-activity-group__label chat-activity-group__label--live"
>${e.title}${e.status===`running`?`…`:``}</span
>`):W`<span class="chat-activity-group__label">${this.summary}</span>`}
</span>
${e?.title?this.outcomes.map(e=>W`<span class="chat-activity-group__outcome muted">${e}</span>`):U}
`}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()))}},pg=En(fg)})))()}var hg;function gg(){return(gg=e((()=>{Va(),go(),G(),jn(),Yt(),yt(),B(),F(),u(),fl(),M(),Xp(),Kp(),Dd(),hg=class extends Ve{constructor(...e){super(...e),this.dismissed=!1,this.iconUrls={},this.pluginIconUrls={},this.failedImages=new Set,this.gateway=new sl(this,{getGateway:()=>this.context?.gateway,invalidateRequests:()=>this.resetIcons(),onPageActivation:()=>{this.gateway.connected&&document.visibilityState===`visible`&&this.statusTask.run()}}),this.catalogIcons=this.createIconController(`iconUrls`),this.pluginIcons=this.createIconController(`pluginIconUrls`),this.statusTask=new lo(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 uo;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 O(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}),Ee(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)}})}createIconController(e){return new Jp({kind:e===`iconUrls`?`catalog`:void 0,getFetchContext:()=>Yp(this.context),isConnected:()=>this.isConnected&&this.gateway.connected,onUrlsChange:t=>{this[e]=t},onLoadingChange:()=>this.requestUpdate()})}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:Ft(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 U;let e=this.statusTask.status===co.COMPLETE,t=this.presentation??this.recommendation,n=this.statusTask.status===co.ERROR,r=yc({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 W`
<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?W`<img
src=${r}
alt=""
?hidden=${i}
@load=${()=>{this.loadedImage=r}}
@error=${()=>{this.failedImages=new Set([...this.failedImages,r])}}
/>`:i?U:V.plug}
</span>
<span class="chat-clawhub-card__identity">
<span class="card-title chat-clawhub-card__name"
><span>${t.name}</span> ${qp(t.author)}
${t.official?Wp():U}
</span>
${t.description?W`<span class="card-sub">${t.description}</span>`:U}
</span>
</button>
<div class="chat-clawhub-card__actions" aria-live="polite">
${e&&this.statusTask.value?.installed?W`<span class="chip chip-ok chat-clawhub-card__installed"
>${V.check}<span>${z(`pluginsPage.installed`)}</span></span
>`:e?W`<button
type="button"
class="btn chat-clawhub-card__dismiss"
@click=${()=>{this.dismissed=!0}}
>
${z(`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?z(`pluginsPage.install`):z(`chat.clawhub.viewDetails`)}
</button>`:n?W`<button
type="button"
class="btn chat-clawhub-card__dismiss"
@click=${()=>this.statusTask.run()}
>
${z(`chat.clawhub.retryStatus`)}
</button>`:W`<span
class="skeleton chat-clawhub-card__status-skeleton"
aria-hidden="true"
></span>
<span class="sr-only">${z(`common.loading`)}</span>`}
</div>
</div>
`}},Z([Ba({context:Qt,subscribe:!0})],hg.prototype,`context`,void 0),Z([K({attribute:!1})],hg.prototype,`recommendation`,void 0),Z([K({attribute:!1})],hg.prototype,`agentId`,void 0),Z([Y()],hg.prototype,`dismissed`,void 0),Z([Y()],hg.prototype,`iconUrls`,void 0),Z([Y()],hg.prototype,`pluginIconUrls`,void 0),Z([Y()],hg.prototype,`loadedImage`,void 0),Z([Y()],hg.prototype,`failedImages`,void 0),Z([Y()],hg.prototype,`presentation`,void 0),customElements.define(`openclaw-chat-clawhub-card`,hg)})))()}function _g(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 vg(e){e.load||=(async()=>{let t=await(await bg()).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 yg(e,t=!1){t&&(e.intentRevision=Jr(e.intentRevision)),e.write=(e.write??Promise.resolve()).then(async()=>{if(await e.load,!e.loaded||e.invalidated)return;let t=_g(e),n=JSON.stringify(t);if(n===e.saved||n===e.attempted)return;e.attempted=n;let r=Jr(e.revision),i=`question:${crypto.randomUUID()}`,a=await bg();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 bg;function xg(){return(xg=e((()=>{Zr(),Ja(),bg=()=>Xa(()=>import(`./control-ui-boot-shared-UG5ko-VG.js`).then(e=>(e.i(),e.r)),__vite__mapDeps([5,6,7,3,12,13,14]),import.meta.url)})))()}function Sg(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 Cg(e){let{question:t}=e;if(t.options.length===0)return U;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 W`
<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 W`
<button
class="chat-question-panel__option ${s?`chat-question-panel__option--selected`:``}"
type="button"
role=${n?`button`:t.multiSelect?`checkbox`:`radio`}
aria-checked=${Vn(n?void 0:s?`true`:`false`)}
aria-label=${Vn(n?z(`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?W`<span class="chat-question-panel__thumbnail" aria-hidden="true">${r.thumbnail?.startsWith(`data:`)?W`<img src=${r.thumbnail} alt="" loading="lazy" referrerpolicy="no-referrer" />`:W`<span>◇</span>`}</span>`:U}
<span class="chat-question-panel__option-copy">
<strong class="chat-question-panel__option-label">${r.label}</strong>
${r.description?W`<small>${r.description}</small>`:U}
</span>
${a<9?on(a+1):U}
</button>
${r.thumbnail&&!r.thumbnail.startsWith(`data:`)?W`<a class="chat-question-panel__external-image" href=${r.thumbnail} target="_blank" rel="noreferrer noopener">${z(`chat.externalImage.notLoaded`)}: ${r.label} — ${z(`chat.externalImage.open`)}</a>`:U}
`})}
</div>
`}function wg(e,t,n,r){let i=t=>{(t.currentTarget instanceof HTMLInputElement||t.currentTarget instanceof HTMLTextAreaElement)&&e.onInput(t.currentTarget.value)};return e.question.isSecret?W`<input
class=${t}
type="password"
autocomplete="off"
placeholder=${n}
aria-label=${Vn(r)}
.value=${e.value}
?disabled=${e.disabled}
@input=${i}
/>`:W`<textarea
class="${t} chat-question-panel__textarea"
rows="1"
placeholder=${n}
aria-label=${Vn(r)}
aria-description=${z(`chat.questions.multilineHint`,{shortcut:`Ctrl/⌘+Enter`})}
.value=${e.value}
?disabled=${e.disabled}
@input=${i}
></textarea>`}function Tg(e){let{question:t}=e;if(t.resource||t.options.length>0&&!t.isOther)return U;let n=t.header||z(`chat.questions.answer`);return W`
${t.options.length===0?W`<label class="field">
<span>${n}</span>
${wg(e,`input`,z(`chat.questions.answerPlaceholder`,{label:t.secretStore?.name??n}))}
</label>`:W`<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>
${wg(e,`chat-question-panel__other`,z(`chat.questions.other`),z(`chat.questions.ownAnswerFor`,{header:t.header}))}
${t.options.length<9?on(t.options.length+1):U}
</label>`}
`}function Eg(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 Og(){return(Og=e((()=>{G(),Mn(),pn(),F()})))()}function kg(e,t){if(!t.startsWith(`> `))return null;let n=0,r=new Map;for(let[i,a]of e.questions.entries()){let o=`${Ag(a.title)}\n\n`;if(!t.startsWith(o,n))return null;n+=o.length;let s=e.questions[i+1],c=s?`\n\n${Ag(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;let d=u.split(`, `),f=d.every(e=>a.options?.includes(e))?new Set(d):new Set;r.set(String(i),{selected:f,freeText:f.size>0?``:u}),n=l+(c?2:0)}return n===t.length?r:null}function Ag(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 jg(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?kg(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?z(`chat.asyncQuestions.sent`):r?z(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`?z(`chat.asyncQuestions.awaitingConfirmation`):void 0,d=r?.sendState===`failed`||r?.sendState===`unconfirmed`;return W`<div class="chat-question-summary" role="status" aria-live="polite">
${o?W`<div class="chat-question-summary__prompt">${o}</div>`:e.questions.map((e,t)=>W`<div>
<strong>${e.title}</strong>
<div>
${a?Sg(a.get(String(t)),{}).join(`, `):z(c?`chat.asyncQuestions.reopening`:l?`chat.asyncQuestions.dismissed`:s?`chat.asyncQuestions.archived`:`chat.asyncQuestions.inComposer`)}
</div>
</div>`)}
${u?W`<div class="chat-question-summary__delivery">
<span>${u}</span>
${d&&t.retry?W`<button
type="button"
class="btn btn--sm"
@click=${()=>t.retry?.(r.id)}
>
${z(`chat.asyncQuestions.retry`)}
</button>`:U}
${r?.sendError?W`<div>${r.sendError}</div>`:U}
</div>`:U}
${s||l?W`<div>
${z(l?`chat.asyncQuestions.dismissedReason`:`chat.asyncQuestions.archivedReason`)}
</div>
${l&&t.storageError?W`<div role="alert">${t.storageError}</div>`:U}
<button
type="button"
class="btn btn--sm"
?disabled=${c}
@click=${()=>t.reopen(e.itemId)}
>
${z(`chat.questions.answer`)}
</button>`:U}
</div>`}function Mg(){return(Mg=e((()=>{G(),F(),Og()})))()}function Ng(e){let t=Q(e),n=Q(t?.__openclaw),r=Vd(e),i=typeof t?.stopReason==`string`?t.stopReason.toLowerCase():``;if(t?.role!==`assistant`||t.openclawAsyncDelivery||Su(e)||Q(t.provenance)?.kind===`inter_session`||i===`tooluse`)return null;let a=Du(e)!==null||Q(t.openclawAbort)?.aborted===!0||[`aborted`,`cancelled`,`canceled`,`timeout`,`timed_out`,`error`].includes(i);return n?.runTerminal===!0||Xu(e)!==null||n?.mirrorOrigin!==`codex-app-server`&&(r===`final_answer`||i===`stop`||a)?a||r===`commentary`||_i(e)?`settled`:`successful`:null}function Pg(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=Q(u),d=tr(u),f=Q(e?.provenance),p=Mu(u);d?.role===`user`&&(!f?.kind||f.kind===`external_user`)&&!Ed(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=Ng(u);if(p){let e=t.get(p);t.set(p,{first:e?.first??l,last:l,settled:m?l:e?.settled})}let h=Rg(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=Ci(u);if(t){let n=Q(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:kg(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,Ci(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 Fg(e){let t=id(),n=Vg.get(e);if(n?.revision===t)return n.history;let r=Pg(e);return Vg.set(e,{revision:t,history:r}),r}function Ig(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}=Fg(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)zg(e,o);vg(a),a.loaded&&u.size&&yg(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=zg(e,o);t.status=`submitted`,t.admittedQueueId=n.id,t.answers=kg(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&&yg(a,!0),f())},g=()=>a?.error?z(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=zg(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,Sg(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=zg(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)&&rt({message:g()??z(`chat.asyncQuestions.dismissedNotice`),actionLabel:z(`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 Lg(e,t){return typeof e==`string`&&e.length<=t&&e.trim().length>0}function Rg(e){if(!to(e)||e.role!==`assistant`)return null;let t=e.openclawAsyncDelivery;if(!to(t)||!Lg(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(!to(e)||!Lg(e.title,4096)||e.options!==void 0&&(!Array.isArray(e.options)||e.options.length===0||e.options.length>4||!e.options.every(e=>Lg(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 zg(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 Bg(e,t,n){let r=zg(e,t.drafts),i=t.pending.reduce((e,t)=>e+t.questions.length,0);return{model:{requestKey:JSON.stringify([t.scope,e.itemId]),title:z(`chat.asyncQuestions.title`),questions:e.questions.map((e,t)=>({questionId:String(t),header:e.options?e.title:z(`chat.questions.answer`),question:e.title,options:(e.options??[]).map(e=>({label:e})),isOther:!0})),autoFocus:!1,nonBlocking:!0,collapsed:n.collapsed??!1,collapsedLabel:z(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)=>`${Ag(e.title)}\n\n${n[String(t)]?.join(`, `)??``}`).join(`
`);try{if(!await t.submit?.(i,e.itemId,e.sourceMessageId))throw Error(z(`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 Vg;function Hg(){return(Hg=e((()=>{ir(),zd(),F(),wi(),Ti(),we(),nc(),cu(),Gu(),xg(),Mg(),Og(),Vg=new WeakMap})))()}function Ug(e){let t=pt(e);if(!t)return U;let n=t.snapshot;return W`
<details class="chat-context-attachment">
<summary class="chat-context-attachment__summary">
<span aria-hidden="true">${V.layers}</span>
${z(`chat.messages.attachedContext.label`)}
<span class="chat-context-attachment__chevron" aria-hidden="true"
>${V.chevronRight}</span
>
</summary>
<div class="chat-context-attachment__body">
<p>${z(`chat.messages.attachedContext.captured`)}</p>
<dl>
${[`title`,`page`,`agentId`,`workspace`,`file`,`selection`].map(e=>n[e]?W`<dt>${z(`chat.messages.attachedContext.${e}`)}</dt>
<dd>${n[e]}</dd>`:U)}
</dl>
<details class="chat-context-attachment__technical">
<summary>${z(`chat.messages.attachedContext.technical`)}</summary>
<pre>${JSON.stringify(n,null,2)}</pre>
</details>
<p>${z(`chat.messages.attachedContext.reference`)}</p>
</div>
</details>
`}function Wg(){return(Wg=e((()=>{G(),mt(),B(),F(),la(),Wr()})))()}function Gg(e,t){return new Set((e??[]).filter(e=>e.identities.some(e=>e.id===t)).map(e=>e.emoji))}function Kg(e,t){let n=z(`chat.reactions.you`),r=e.identities.map(e=>e.id===t?n:e.label??e.id).toSorted((e,t)=>Number(t===n)-Number(e===n)),i=r.slice(0,Xg).join(`, `),a=r.length-Math.min(r.length,Xg);return z(`chat.reactions.reactedWith`,{names:a>0?z(`chat.reactions.andOthers`,{names:i,count:String(a)}):i,emoji:e.emoji})}function qg(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 Jg(e,t,n,r){let i=n?void 0:t?.reactionMessageId,a=qg(e,r),o=i?a.messageReactions?.get(i):void 0;if(!i||!o?.length)return U;let{userId:s,onReact:c}=a,l=Gg(o,s);return W`<div class="chat-message-reactions" data-message-id=${i}>
${o.map(e=>{let t=l.has(e.emoji);return W`<openclaw-tooltip .content=${Kg(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>
${In(e.count,W`<span class="chat-reaction-chip__count">${e.count}</span>`)}
</button>
</openclaw-tooltip>`})}
${c?W`<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>`:U}
</div>`}var Yg,Xg,Zg,Qg;function $g(){return($g=e((()=>{_o(),G(),jn(),Nn(),H(),Xn(),en(),B(),ms(),Ss(),F(),M(),Yg=[`👍`,`❤️`,`🎉`,`👀`,`🚀`,`😂`],Xg=3,Zg=mn(An`<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"/>`),Qg=class extends A{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,
.back {
border-radius: var(--radius-full);
color: var(--muted);
}
.more:hover,
.back:hover {
color: var(--text);
background: var(--bg-hover);
}
.more {
width: 30px;
height: 30px;
}
.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;
}
.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(ur(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 W`<div
class="palette"
role="group"
aria-label=${z(`chat.reactions.quick`)}
@keydown=${e=>this.movePaletteFocus(e)}
>
${Yg.map(e=>W`<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=${z(`chat.reactions.more`)}>
<button
class="more"
type="button"
aria-label=${z(`chat.reactions.more`)}
@click=${()=>void this.showCustom()}
>
${V.moreHorizontal}
</button>
</openclaw-tooltip>
</div>`}renderCustom(){let e=gs()?.join(``);return W`<div class="custom">
<div class="custom-row">
<button
class="back"
type="button"
aria-label=${z(`chat.reactions.back`)}
@click=${()=>void this.showPalette()}
>
${V.arrowLeft}
</button>
<input
aria-label=${z(`chat.reactions.emoji`)}
aria-invalid=${String(this.invalid)}
autocomplete="off"
placeholder=${z(`chat.reactions.placeholder`)}
.value=${this.value}
@input=${e=>{e.currentTarget instanceof HTMLInputElement&&(this.value=e.currentTarget.value,this.invalid=!1,!e.isComposing&&ur(this.value.trim())&&this.applyCustom())}}
@compositionend=${e=>{e.currentTarget instanceof HTMLInputElement&&(this.value=e.currentTarget.value),ur(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?z(`chat.reactions.invalid`):e?z(`chat.reactions.shortcut`,{shortcut:e}):z(`chat.reactions.hint`)}
</p>
</div>`}render(){return W`
<openclaw-tooltip .content=${z(`chat.reactions.add`)}>
<button
id="reaction-trigger"
class="trigger"
type="button"
aria-label=${z(`chat.reactions.add`)}
aria-haspopup="dialog"
aria-expanded="false"
>
${Zg}
</button>
</openclaw-tooltip>
<wa-popover
class="chat-reaction-picker ${this.custom?`custom`:``}"
for="reaction-trigger"
placement=${this.placement}
distance="6"
without-arrow
aria-label=${z(`chat.reactions.add`)}
${q(Js)}
@wa-show=${e=>{e.currentTarget instanceof ho&&e.currentTarget.anchor?.setAttribute(`aria-expanded`,`true`)}}
@wa-after-show=${()=>this.focusPalette()}
@wa-hide=${e=>{e.currentTarget instanceof ho&&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>
`}},Z([K({attribute:!1})],Qg.prototype,`onSelect`,void 0),Z([K({attribute:!1})],Qg.prototype,`activeEmoji`,void 0),Z([K()],Qg.prototype,`placement`,void 0),Z([K({type:Boolean,reflect:!0})],Qg.prototype,`compact`,void 0),Z([Y()],Qg.prototype,`custom`,void 0),Z([Y()],Qg.prototype,`value`,void 0),Z([Y()],Qg.prototype,`invalid`,void 0),customElements.get(`openclaw-message-reaction-picker`)||customElements.define(`openclaw-message-reaction-picker`,Qg)})))()}function e_(e){let t=ua(e),n=ui(e,t),r=Q(e),i=Q(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=Q(e);return t?.type===`text`&&typeof t.text==`string`?[t.text]:[]}).join(`
`):null)===n&&(a=ji(n,i.humanMentions)),{message:e,normalizedMessage:t,displayMarkdown:n,humanMentions:a}}function t_(e,t,n){return n||Jl(e,t.content)}function n_({message:e,normalizedMessage:t,displayMarkdown:n},r){let{messageId:i,canFetchFullMessage:a,onReply:o,senderLabel:s}=r,c=Gr(t.role),l=Fu(e)?.startsWith(Hn)===!0,u=a?md(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`?Bd(p):p,h=c===`assistant`||c===`user`,g=h||l?m:void 0,_=t_(e,t,m),v=o&&!l?Ca(_,500):``,y=dl(e),b=h&&!l?y:null;return!_&&!g&&!v&&!d&&!b?null:{copyMarkdown:_,...b?{reactionMessageId:b}:{},...g===void 0?{}:{markdown:g},fullMessage:d,...v?{replyTarget:{messageId:i,text:v,senderLabel:s,...y?{sourceMessageId:y}:{}}}:{}}}function r_(e,t){return!!(e&&(e.markdown||e.replyTarget&&t.onReply||e.reactionMessageId&&t.onReact))}function i_(e,t){if(!e)return U;let n=e.reactionMessageId;return W`
${e.replyTarget&&t.onReply?a_(e.replyTarget,t.onReply):U}
${e.markdown?qs(e.markdown):U}
${n&&t.onReact?W`<openclaw-message-reaction-picker
class="chat-reaction-action"
placement=${t.reactionPlacement??`bottom-start`}
.activeEmoji=${Gg(t.messageReactions?.get(n),t.userId)}
.onSelect=${(e,r)=>t.onReact?.(n,e,r)}
></openclaw-message-reaction-picker>`:U}
`}function a_(e,t){return W`
<openclaw-tooltip .content=${z(`chat.messages.reply`)}>
<button
class="chat-reply-btn"
type="button"
aria-label=${z(`chat.messages.replyToMessage`)}
@click=${()=>t(e)}
>
${V.messageSquare}
</button>
</openclaw-tooltip>
`}function o_(){return(o_=e((()=>{G(),er(),Vs(),B(),F(),la(),Di(),Yr(),ii(),ic(),yd(),Vf(),$c(),$g(),Wr()})))()}function s_(){return W`<svg class="chat-reply-connector" aria-hidden="true" ${l_()}>
<path fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round"></path>
</svg>`}var c_,l_;function u_(){return(u_=e((()=>{G(),Bn(),c_=class extends Cn{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 U}update(e){return this.element=e.element,queueMicrotask(this.connect),U}disconnected(){this.observer?.disconnect(),this.observer=void 0}reconnected(){queueMicrotask(this.connect)}},l_=En(c_)})))()}function d_(e){return e&&!(`pending`in e||`missing`in e||`oversized`in e)?e:void 0}function f_(e,t,n){let r=e?dl(e)??void 0:void 0,i=r?d_(n?.(r)):void 0,a=t??i?.sender,o=i?.senderLabel||Li(a);return o?{state:`named`,name:o,sender:{...a,name:o},agentAvatar:i?.agentAvatar,openId:r}:v_}function p_(e,t,n,r){let i=n?.(e),a=d_(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}:v_;let l=a?.sender,u=a?.senderLabel||Li(l)||``,d=!!l&&!l?.name?.trim()&&!l?.username?.trim()&&(u===Li(l)||u===$t()),f=(a?r?.replyShared?l?d?c||Li(l):u:c:u:c)||``,p=r&&!r.replyShared&&(r.replyTurnSource&&dl(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||f?v_:{state:i&&`pending`in i&&s?`reserved`:`hidden`}}function m_(e,t,n,r){let i=e.replyTarget;if(i?.kind!==`id`)return v_;let a=p_(i.id,e.replyPreview,t,r?{replyShared:!0}:void 0),o=a.sender?.identity;return o?.type===`profile`&&o.id===n&&(a.name=$t()),a}function h_(e,t,n=e.messages){if(e.role!==`assistant`)return v_;let r=e.messages.map(({message:e})=>ua(e).replyTarget),i=r.find(e=>e?.kind===`id`);if(i?.kind===`id`){let r=n.map(({message:e})=>ua(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 p_(i.id,a,t,e)}if(r.some(e=>e?.kind===`current`)){let n=e.replyCurrentSource,r=n&&ua(n.message).sender;return n&&(r||!e.replyShared)&&(e.replyShared||n.key!==e.replyTurnSource?.key)?f_(n.message,r,t):v_}return e.replyToSender?f_(e.replyToMessage?.message,e.replyToSender,t):v_}function g_(e,{onOpenReply:t,replyNavigationId:n},r=!1){if(e.state===`hidden`)return U;let i=`chat-reply-attribution chat-reply-attribution--${r?`inline`:`reply`}`,a=W`<span class="chat-reply-attribution__label"
>${r?U:W`<span class="chat-reply-attribution__mobile-icon" aria-hidden="true">${V.cornerUpLeft}</span>`}${z(`chat.messages.replyingToLabel`)}</span
>`;if(e.state===`reserved`)return W`<div class="${i} chat-reply-attribution--pending" aria-hidden="true">
${a}
</div>`;let{name:o=``,openId:s}=e,c=e.state===`named`,l=!!s&&n===s,u=W`
${c?Td(e.sender,void 0,e.agentAvatar):U}
<span class="chat-reply-attribution__name" title=${o}>${o}</span>
`;return W`<div class=${i}>
${a}
${c&&s&&t?W`<button
class="chat-reply-attribution__person chat-reply-attribution__target"
type="button"
aria-label=${z(`chat.messages.replyingTo`,{name:o})}
?disabled=${l}
aria-busy=${l?`true`:`false`}
@click=${()=>t(s)}
>
${u}
</button>`:o?W`<span class="chat-reply-attribution__person">${u}</span>`:U}
${c?U:W`<span class="chat-reply-attribution__unavailable"
>${z(`chat.messages.replyOriginalUnavailable`)}</span
>`}
</div>`}function __(e,t){return t!==U&&(e.state===`named`||e.state===`unavailable`)?s_():U}var v_;function y_(){return(y_=e((()=>{G(),wt(),B(),F(),ii(),oi(),Vf(),su(),u_(),v_={state:`hidden`}})))()}function b_(e,t){return In(e,W`<button
class="btn btn--sm chat-copy-btn"
type="button"
@click=${n=>void ys(n,e,t)}
>
<span data-copy-label>${t}</span>
</button>`)}function x_(e){return e>0?W`<div class="chat-workspace-conflict-more">
${z(`chat.workspaceConflict.morePaths`,{count:String(e)})}
</div>`:U}function S_(e){let t=e.conflict;if(!t)return U;let n=dm(t),r=fm(t),i=mm(t),a=z(n===1?`chat.workspaceConflict.titleOne`:`chat.workspaceConflict.titleMany`,{count:String(n)});return W`
<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>${z(`chat.workspaceConflict.summary`)}</span>
</span>
<span class="chat-workspace-conflict-notice__chevron" aria-hidden="true"
>${V.chevronUp}</span
>
${e.onDismiss?W`<button
class="chat-error__dismiss"
type="button"
@click=${t=>{t.preventDefault(),t.stopPropagation(),e.onDismiss?.()}}
aria-label=${z(`chat.workspaceConflict.dismiss`)}
>
${V.x}
</button>`:U}
</summary>
<div class="chat-workspace-conflict-notice__content">
<ul class="chat-workspace-conflict-paths">
${r.paths.map(e=>{let n=mm(t,e);return W`<li>
<code>${sm(e)}</code>
${n?W`<span class="chat-workspace-conflict-path-actions">
${b_(n.inspect,z(`chat.workspaceConflict.inspectCloud`))}
${b_(n.takeCloud,z(`chat.workspaceConflict.takeCloud`))}
</span>`:U}
</li>`})}
</ul>
${x_(r.remaining)}
<details class="chat-workspace-conflict-commands-disclosure">
<summary>${z(`chat.workspaceConflict.showCommands`)}</summary>
<div class="chat-workspace-conflict-ref">
<span>${z(`chat.workspaceConflict.stagedResult`)}</span>
<code>${t.stagedResultRef}</code>
${xs(t.stagedResultRef,z(`chat.workspaceConflict.copyStagedResult`))}
</div>
${i?W`<div class="chat-workspace-conflict-commands">
${[[i.inspect,`inspectCloud`,`copyInspectCommand`],[i.takeCloud,`takeCloud`,`copyTakeCommand`]].map(([e,t,n])=>W`<div>
<span>${z(`chat.workspaceConflict.${t}`)}</span>
<code>${e}</code>
${xs(e,z(`chat.workspaceConflict.${n}`))}
</div>`)}
</div>
<p class="chat-workspace-conflict-command-help">
${z(`chat.workspaceConflict.commandHelp`)}
</p>`:W`<p class="chat-workspace-conflict-command-help">
${z(`chat.workspaceConflict.commandsUnavailable`)}
</p>`}
</details>
</div>
</details>
`}function C_(e,t,n){let r=dm(e),i=fm(e);return W`
<div
class="chat-bubble chat-bubble--workspace-conflict"
data-message-id=${t}
data-entry-id=${n||U}
>
<div class="chat-workspace-conflict-event" role="status">
<div class="chat-workspace-conflict-event__header">
<span aria-hidden="true">${V.alertTriangle}</span>
<strong
>${z(r===1?`chat.workspaceConflict.eventTitleOne`:`chat.workspaceConflict.eventTitleMany`,{count:String(r)})}</strong
>
</div>
<p>${z(`chat.workspaceConflict.eventDescription`)}</p>
<ul class="chat-workspace-conflict-paths">
${i.paths.map(e=>W`<li><code>${sm(e)}</code></li>`)}
</ul>
${x_(i.remaining)}
<div class="chat-workspace-conflict-ref">
<span>${z(`chat.workspaceConflict.stagedResult`)}</span>
<code>${e.stagedResultRef}</code>
</div>
</div>
</div>
`}function w_(){return(w_=e((()=>{G(),Nn(),Vs(),B(),F(),_m()})))()}function T_(e){return[...e.orderedContent,...e.supplementalAttachments].filter(e=>e.type===`attachment`&&e.attachment.kind===`video`)}function E_(e,t){let n=tr(e);return n?.role!==`user`||n.isImported?{localSubmission:!1}:!n.id||zu(e)?{localSubmission:!!n.sendId}:n.id.startsWith(`pending:`)?{}:{canonicalMessageKey:JSON.stringify([t,n.id,n.sequence])}}function D_(e,t){return W`
<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 ig(e,{...t,expanded:i,onToggleExpanded:()=>t.onToggleToolExpanded?.(r,i)})})}
</div>
`}function O_(e){return e===0?U:W`
<div class="chat-pairing-qr-notices">
${Array.from({length:e},()=>W`
<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"
>${z(`chat.pairingQrExpired.title`)}</span
>
<span class="chat-pairing-qr-expired__badge"
>${z(`chat.pairingQrExpired.badge`)}</span
>
</div>
<div class="chat-assistant-attachment-card__reason">
${z(`chat.pairingQrExpired.reason`)}
</div>
</div>
</div>
`)}
</div>
`}function k_(e,t,n,r){let i=n.assistantMessageDisclosure,{message:a,normalizedMessage:o,displayMarkdown:s,humanMentions:c}=i?.expanded&&i.message?e_(i.message):e,l=a,u=typeof l.role==`string`?l.role:`unknown`,d=Gr(u),f=n.asyncQuestions?.submit?Rg(a):null,p=Gr(o.role),m=um(a);if(m)return C_(m,t,n.entryId);let h=p===`tool`,g=mi(a),_=n.showToolCalls??!0?Vr(a):[],v=_.some(e=>n.toolCardOverrides?.get(e)!==U),{images:y,attachments:b,expiredPairingQrCount:x,nextPairingQrExpiresAt:S,orderedContent:C,supplementalImages:w,supplementalAttachments:T}=ud(a,o.content);iu(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`&&Iu(O),ee={galleryImages:y,galleryVideos:e=>{let r=T_({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=e_(e.message);o.push(...T_(ud(t.message,t.normalizedMessage.content)))}return{index:s,items:o}},sessionKey:n.sessionKey,agentId:n.agentId,policyKey:n.mediaPolicyKey,...E?E_(a,n.sessionKey):{},connectionEpoch:n.connectionEpoch,resourceBasePath:n.resourceBasePath,authToken:n.assistantAttachmentAuthToken,onRequestUpdate:n.onRequestUpdate,onRequestOpenImage:n.onRequestOpenImage,onOpenImage:n.onOpenImage,resolveArtifactDownload:n.resolveArtifactDownload},te=n.messageActions?.markdown??s,A=o.content.filter(e=>e.type===`omitted_media`),j=o.content.filter(e=>e.type===`canvas`),ne=E||x!==0||A.length!==0,M=ne||b.length!==0||j.length!==0,re=o.content.filter(e=>e.type===`clawhub`),ie=n.showReasoning&&u===`assistant`?xi(a):null,ae=ie?`_Reasoning:_\n\n${ie}`:null,N=(p===`user`?n.messageActions?.markdown:void 0)??(s||null),oe={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},P=N&&!n.isStreaming?Oo(N):null,F=p===`user`&&!N&&!o.replyTarget&&!ne&&!v&&b.length>0&&b.every(e=>qu(e)||Ou(e)),se=[`chat-bubble`,E||D.length>0||k||p===`user`&&O.some(e=>qu(e)||Ou(e))?`chat-bubble--with-images`:``,F?`chat-bubble--preview-chips-only`:``,k?`chat-bubble--with-files`:``,h?`chat-bubble--tool-shell`:``,n.isStreaming?`streaming`:``].filter(Boolean).join(` `);if(!N&&!f&&!ae&&!v&&!M&&re.length===0&&!o.replyTarget)return U;let ce=`toolmsg:${t}`,le=n.isToolMessageExpanded?.(ce)??!1,ue=[...new Set(_.map(e=>e.name))],I=_.length===1?_[0]:null,L=g&&!!N&&!P&&!E&&I?.outputText?.trim()===N?.trim(),de=L?null:N,fe=p===`assistant`&&!!N&&!f&&(!i?.expanded||!!i.message)&&C.some(e=>e.type!==`text`),pe=!!I&&(!N||L)&&!E,me=pe?void 0:_.find(qi),he=I?fp({name:I.name,args:I.args,detailMode:`explain`}):null,ge=I&&he?eg(I,he.detail):void 0,_e=ge?!N&&!E?ge:I?.outputText?.trim()?`output`:void 0:ue.length<=3?ue.join(`, `):`${ue.slice(0,2).join(`, `)} +${ue.length-2} more`,ve=N?ea(N)??``:``,ye=he&&!N&&!E?he.label:z(`chat.toolCards.toolOutput`),be=Ki(ye)??ye,xe=Zi(_e,be),Se=he?Wh(he.icon,{toolName:he.name,pluginToolIcons:n.pluginToolIcons}):V.zap,Ce=d===`assistant`&&j.length>0?W`${j.map(e=>W`<div class="chat-tool-card__widget-host">
${vh(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?W`<div class="chat-tool-card__widget-raw">
${Am(e.rawText)}
</div>`:U}
</div>`)}`:U,we=Math.max(1,Math.floor(n.duplicateCount??1)),Te=we>1?{count:we,label:z(`chat.messages.duplicatesCollapsed`,{count:String(we)})}:void 0,Ee=g&&v&&!N&&!M&&!ae,De={...n,messageKey:t,onOpenSidebar:r},Oe=()=>{if(f)return jg(f,n.asyncQuestions);let e={...n,role:g&&!fe?`tool`:p};if(!fe&&P)return Cl(P,t,e,oe);let s=de,c;if(fe){let t=bd(C,e=>e.type===`image`?hd([e.image],ee):nd([e],ee,r,n.onAssistantAttachmentLoaded));s=ui(a,{...o,content:[{type:`text`,text:t.markdown}]}),e.assistantMessageDisclosure=i?{...i,markdown:s}:void 0,c={...t.media,text:de??``}}else if(!s)return U;return rc(s,t,e,oe,Te,c)},ke=typeof n.transcriptVisible==`object`?n.transcriptVisible.isPresented():n.transcriptVisible,Ae=()=>W`
${d===`assistant`?re.map(e=>W`<openclaw-chat-clawhub-card
.recommendation=${e}
.agentId=${n.agentId}
></openclaw-chat-clawhub-card>`):U}
${O_(x)}
${hd(fe?w:y,ee,D.map(e=>W`
<div class="chat-image-frame chat-video-preview">
${ke===!1?U:Ue(n.transcriptVisible??!0,_d(e,ee,r,n.onAssistantAttachmentLoaded,`preview`))}
</div>
`))}
${vl(A)}
${nd(fe?T:O,ee,r,n.onAssistantAttachmentLoaded,p===`assistant`)}
${g?Ce:U}
${ae?W`<div class="chat-thinking">
${so(bs(ae,{codeBlockInteraction:`interactive`}))}
</div>`:U}
${g?U:Ce}
${n.avatar?W`<div class="chat-message-avatar-anchor">
${Oe()}${n.avatar}
</div>`:Oe()}
${v?g&&pe&&I?Bm(I,De):D_(_,{...De,showApprovalReviews:!g&&void 0}):U}
${g&&me?Im(`failed`,me.exitCode):U}
`;return W`
<div
class="${se}"
${n.entryRef?q(n.entryRef):U}
data-message-id=${t}
data-file-session-key=${n.fileLinkSessionKey??U}
data-entry-id=${n.entryId||U}
data-message-text=${te||U}
.messageActions=${n.messageActions}
>
${n.replyLine?g_(n.replyLine,n,!0):U}
${Ee?D_(_,De):g?ag(I,{...De,expanded:le},W`
<div
class="chat-tool-msg-collapse chat-tool-msg-collapse--manual ${le?`is-open`:``}"
>
<button
class="chat-inline-disclosure chat-tool-msg-summary"
type="button"
aria-expanded=${String(le)}
@pointerenter=${Jh}
@focus=${Jh}
@click=${()=>n.onToggleToolMessageExpanded?.(ce,le)}
>
<span class="chat-tool-msg-summary__icon">${Se}</span>
<span class="chat-tool-disclosure__content">
<span class="chat-tool-msg-summary__label">${be}</span>
${xe?W`<span class="chat-tool-msg-summary__names"
>${xe}</span
>`:ve?W`<span class="chat-tool-msg-summary__preview"
>${ve}</span
>`:U}
</span>
<span class="chat-tool-row__chevron" aria-hidden="true"
>${V.chevronRight}</span
>
</button>
${le?W`<div class="chat-tool-msg-body">${Ae()}</div>`:vl(A)}
${_.map(e=>rg(e))}
</div>
`):Ae()}
${d===`assistant`&&Sf(a)?W`<div
class="chat-tasks-status chat-turn-recap chat-turn-recap--continuation"
role="status"
>
${z(`chat.composer.runInterrupted`)}
</div>`:U}
${we>1&&(!N||P)?W`<div
class="chat-duplicate-count"
aria-label=${z(`chat.messages.duplicatesCollapsed`,{count:String(we)})}
>
×${we}
</div>`:U}
</div>
${Ug(a)}
`}function A_(){return(A_=e((()=>{ir(),G(),H(),fo(),er(),B(),ns(),Xs(),F(),la(),Yr(),jp(),wi(),ii(),Ii(),up(),$e(),Wf(),gl(),gg(),_m(),Hg(),xc(),uu(),Wg(),$u(),o_(),Tu(),$c(),ou(),Cd(),y_(),_u(),lg(),Wm(),w_(),Vh(),Wr()})))()}function j_(){try{return D()?.getItem(z_)===`1`}catch{return!1}}function M_(e){for(let[t,{dismiss:n}]of H_)e instanceof Node&&e.contains(t)&&n()}function N_(e){for(let[t,{popover:n}]of H_)if(e.contains(t)&&n.contains(document.activeElement))return!0;return!1}function P_(){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 F_(e,t,n){return n<t?t:Math.min(Math.max(e,t),n)}function I_(e,t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=P_(),a=B_,o=V_,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=F_(n.right-l,i.left+a,i.right-a-l),h=F_(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 L_(e){let t=z(`chat.messages.rewind`);return W`
<span class="chat-confirm-wrap chat-rewind-wrap">
<openclaw-tooltip .content=${t}>
<button
class="chat-group-rewind"
aria-label=${t}
@click=${t=>R_(t.currentTarget,e)}
>
${V.refresh}
</button>
</openclaw-tooltip>
</span>
`}function R_(e,t){let n=z(`chat.messages.rewind`),r=z(`chat.messages.rewindConfirm`);if(j_()){t();return}let i=e.closest(`.chat-confirm-wrap`);if(!i)return;let a=i,o=H_.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=z(`chat.messages.dontAskAgain`),c.textContent=z(`common.cancel`),a.ownerDocument.body.appendChild(s),H_.set(a,{popover:s,dismiss:p}),I_(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),H_.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){if(e.key!==`Tab`)return;let t=e.shiftKey?u:l,n=e.shiftKey?l:u;document.activeElement===t&&(e.preventDefault(),n.focus())}c.addEventListener(`click`,()=>p({restoreFocus:!0})),l.addEventListener(`click`,()=>{if(u.checked)try{D()?.setItem(z_,`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&&(I_(e,s),document.addEventListener(`click`,m,!0))})}var z_,B_,V_,H_;function U_(){return(U_=e((()=>{G(),B(),F(),la(),Wr(),z_=`openclaw:skip-rewind-confirm`,B_=8,V_=6,H_=new Map})))()}function W_(e,t){if(!e)return U;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,o=(t,r)=>r?W`<span class="chat-send-status__part">
<span aria-hidden="true">·</span>
<button
class="chat-send-status__action chat-send-status__${t}"
type="button"
aria-label=${t===`retry`?n?.label??z(`chat.queue.retryQueuedMessage`):U}
title=${t===`discard`?z(`chat.queue.discardPendingMessage`):U}
@click=${n=>{(t===`retry`||n.detail<=1)&&r(e.id)}}
>
${t===`retry`?n?.label??z(`chat.queue.retry`):z(`chat.queue.discard`)}
</button>
</span>`:U;return W`<span
class="chat-send-status"
title=${e.error??U}
data-send-state=${e.state}
>
<span class="chat-send-status__part">
<span aria-hidden="true">·</span>
<span
>${z(r?`chat.queue.states.waitingForReconnect`:e.state===`held`?`chat.queue.states.needsReview`:e.state===`unconfirmed`?`chat.queue.deliveryUnconfirmed`:`chat.queue.notSent`)}</span
>
</span>
${o(`retry`,i)} ${o(`discard`,a)}
</span>`}function G_(){return(G_=e((()=>{G(),F()})))()}function K_(e,t){let n=e.sender?.identity;return n?.type===`profile`&&n.id===t}function q_(e){return Gr(e.role)===`user`&&!!e.sourceClients?.length&&!e.sender&&!e.senderLabel?.trim()}function J_(e,t){let n=Gr(e.role);if(q_(e))return op(e.sourceClients??[]);if(n===`custom`){if(e.messages.every(({message:e})=>{let t=Q(e)?.customType;return t===`run-failed-before-reply`||t===`cloud-workspace-recovery-failed`})){let t=e.messages.every(({message:e})=>{let t=Q(e);return t?.customType===`run-failed-before-reply`&&Q(t.details)?.errorKind===`state_contention`});return z(t?`common.system`:`chat.messages.errorSender`)}return e.messages.every(({message:e})=>um(e))?z(`chat.workspaceConflict.eventSender`):z(`common.system`)}let r=$t({name:t.userName}),i=e.senderLabel?.trim();return n===`user`?K_(e,t.userId)?r:i??z(`chat.messages.unattributedSender`):n===`assistant`?i??t.assistantName??`Assistant`:n===`tool`?z(`chat.messages.toolSender`):n}function Y_(){return(Y_=e((()=>{wt(),F(),hp(),ii(),_m()})))()}function X_(e,t=[]){let n=new Date(e),r=Number.isFinite(n.getTime()),i=r?n.toLocaleString([],{month:`short`,day:`numeric`,year:`numeric`,hour:`numeric`,minute:`2-digit`,timeZoneName:`short`}):z(`chat.messages.unknownDate`),o=r?n.toLocaleString([],{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`,hour:`numeric`,minute:`2-digit`,second:`2-digit`,timeZoneName:`short`}):i,s=Date.now(),c=s-n.getTime(),l=r?c>=-12e4&&c<$_?a(Math.max(0,c)):n.toLocaleDateString([],{month:`short`,day:`numeric`,...n.getFullYear()===new Date(s).getFullYear()?{}:{year:`numeric`}}):i,u=W`
<time class="chat-group-timestamp" datetime=${r?n.toISOString():``} aria-live="off">
${l}
</time>
`;return W`
<openclaw-tooltip
class="msg-meta"
?open-on-click=${t.length>0}
content=${t.length?``:i}
>
${t.length?W`<button
type="button"
class="msg-meta__summary"
aria-label=${z(`chat.messages.contextFor`,{timestamp:o})}
>
${u}
</button>`:u}
${t.length?W`<span slot="content" class="msg-meta__details">
<span class="msg-meta__time">${i}</span>${t}
</span>`:U}
</openclaw-tooltip>
`}function Z_(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 Q_(e,t){if(!t)return X_(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(W`<span class=${i}>${r}${ze(e)}</span>`);if(t.cost>0&&n.push(W`<span class="msg-meta__cost">${j(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(W`<span class="${r}">${e}% ctx</span>`)}return t.model&&n.push(W`<span class="msg-meta__model">${t.model.split(`/`).pop()}</span>`),X_(e,n)}var $_;function ev(){return(ev=e((()=>{G(),F(),la(),ge(),Wr(),$_=6048e5})))()}function tv(e,t){let{onChange:n,onSubmit:r,onSkip:i}=t,a=t=>t?async(...n)=>{if(await t(...n),e.status===`pending`&&e.error)throw Error(e.error)}:void 0;return{model:{requestKey:e.id,title:z(`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:a(r),onSkip:a(i),onDismissError:e.error&&n?()=>{e.error=null,n()}:void 0,onCollapsedChange:t.onCollapsedChange,onPreviousRequest:t.onPreviousRequest,onNextRequest:t.onNextRequest}}function nv(e,t){return e.status===`cancelled`?z(`chat.questions.skipped`):e.status===`expired`?z(`chat.questions.expired`):e.status===`unavailable`?z(`chat.questions.unavailable`):t.isSecret?z(`chat.questions.answered`):e.answers?.answers[t.questionId]?.join(`, `)||z(e.answeredElsewhere?`chat.questions.answeredElsewhere`:`chat.questions.answered`)}function rv(e){return e.status===`pending`?U:W`
<div class="chat-question-summary" aria-label=${z(`chat.questions.summaryLabel`)}>
${e.questions.map(t=>W`
<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>${nv(e,t)}</span>
</div>
</div>
`)}
</div>
`}var iv,av;function ov(){return(ov=e((()=>{G(),jn(),It(),Wt(),rn(),F(),M(),Ja(),iv={tagName:`openclaw-chat-question-panel`,get label(){return z(`chat.questions.eyebrow`)},loadModule:()=>Xa(()=>import(`./chat-question-panel-Whh_yjZq.js`),__vite__mapDeps([24,5,6,7,3,12,13,14]),import.meta.url)},av=class extends i{constructor(...e){super(...e),this.panelLoader=new Sn(this)}willUpdate(){this.panelLoader.requestWhileActive(iv,this.isConnected&&!!this.props)}connectedCallback(){super.connectedCallback(),this.requestUpdate()}disconnectedCallback(){this.panelLoader.requestWhileActive(iv,!1),super.disconnectedCallback()}render(){if(!this.props)return U;if(Ot(iv))return W`<openclaw-chat-question-panel
.props=${this.props}
></openclaw-chat-question-panel>`;let e=this.panelLoader.visibleState;return e?.status===`error`?Jt({error:e.error,stale:e.stale,subtitle:iv.label,onRetry:()=>this.panelLoader.retry()}):Xt()}},Z([K({attribute:!1})],av.prototype,`props`,void 0),customElements.get(`openclaw-chat-question-card`)||customElements.define(`openclaw-chat-question-card`,av)})))()}function sv(e,t,n){return J(e,e=>`${e.kind}:${e.key}`,e=>lv(e,t,n))}function cv(e,t,n){return uv([{kind:`reading-indicator`,key:`waiting-subagents:${e}`,startedAt:t.startedAt??0,waitingOn:`subagents`}],n)}function lv(e,t,n){if(e.kind===`reading-indicator`)return nu(e,{mascot:t.branding?.mascot,workingIndicator:t.branding?.workingIndicator,workingPhrases:t.branding?.workingPhrases,waitingApproval:t.waitingApproval===!0,waitingSubagents:e.waitingOn===`subagents`?t.waitingSubagents:void 0,runningSubagents:t.runningSubagents,subagentActivity:t.subagentActivity,onOpenSubagent:t.onOpenSubagent,onOpenSubagents:t.onOpenSubagents,startupLabel:t.startupLabel,outputTokens:t.runOutputTokens,presentation:n});if(e.kind===`question`){let n=t.questionPrompts?.get(e.questionId);return n?rv(n):U}let r=e_({role:`assistant`,content:[{type:`text`,text:e.text}],timestamp:e.startedAt});return k_(r,e.key,{...t,isStreaming:e.isStreaming,entryRef:t.entryRefFor?.(e.key),showReasoning:!1,messageActions:n_(r,{messageId:e.key,onReply:t.onReply,senderLabel:t.assistant?.name??`Assistant`})},t.onOpenSidebar)}function uv(e,t={}){let{assistant:n}=t,r=e.flatMap(e=>e.kind===`stream`?[e.startedAt]:[]),i=r.length>0?Math.min(...r):null,a=e.some(e=>e.kind===`reading-indicator`||e.kind===`stream`&&e.isStreaming),o=e.find(e=>e.kind===`stream`),s=!o,c=s||t.showAssistantAvatar===!1?U:Yu(`assistant`,n),l=h_({role:`assistant`,messages:[],replyToSender:o?.replyToSender,replyToMessage:o?.replyToMessage},t.resolveReplyPreview),u=`chat-group assistant${l.state!==`hidden`&&c!==U?` chat-group--reply`:``}${s?` chat-group--working`:``}${i===null?``:` chat-group--with-footer`}`;return W`
<div class=${u} data-chat-row-key=${e[0]?.key??U}>
${c}
<div class="chat-group-messages">
${g_(l,t)} ${sv(e,t,`standalone`)}
</div>
${__(l,c)}
${i===null?U:a?fv:W`
<div class="chat-group-footer">
<div class="chat-group-footer__meta">
<span class="chat-sender-name">${n?.name??`Assistant`}</span>
${X_(i)}
</div>
</div>
`}
</div>
`}function dv(e,t){let n=hi(e.durationMs),r=e.groups.flatMap(e=>e.messages.map(({message:e})=>({cards:Vr(e),activity:Array.isArray(no(e)?.activity)?Ji(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=ta(t,!1),r=fp(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?z(`chat.workRun.workedFor`,{duration:n}):z(`chat.workRun.worked`),d=Oi(l),f=d.total,p=d.outcomes.filter(({kind:e})=>e!==`failed`&&e!==`skipped`),m=Gm(o,!0,l),h=W`
<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=${Jh}
@focus=${Jh}
@click=${t.onToggle}
>
<span class="chat-tool-disclosure__content">
<span class="chat-activity-group__label">${u}</span>
</span>
${t.expanded&&f>0?W`<span class="chat-work-group__total"
>·
${z(`chat.workRun.toolCalls${f===1?`One`:`Many`}`,{count:String(f)})}</span
>`:U}
${p.map(e=>W`<span class="chat-activity-group__outcome muted">· ${e.label}</span>`)}
${m===U?U:W`<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?U:t.browserTabPreviews??U}
</div>
`;return t.presentation===`continuation`?h:W`
<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 fv;function pv(){return(pv=e((()=>{G(),X(),B(),Tt(),F(),Mi(),Ii(),up(),da(),xd(),A_(),o_(),ev(),ov(),y_(),lg(),qm(),qc(),fv=W`<div class="chat-group-footer" aria-hidden="true"></div>`})))()}var mv,hv;function gv(){return(gv=e((()=>{G(),Bn(),mv=class extends Cn{constructor(...e){super(...e),this.media=globalThis.matchMedia?.(`(max-width: 768px), (max-width: 932px) and (max-height: 500px) and (orientation: landscape)`),this.content=()=>U,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()}},hv=En(mv)})))()}function _v(e,t,n){let r=`session-activity:`+e.key,i=!!t.searchResult||(t.isToolMessageExpanded?.(r)??!1),a=e.messages.reduce((e,t)=>e+(t.duplicateCount??1),0);return W`
<div
class="chat-group tool chat-group--turn-block"
data-chat-row-key=${e.key}
data-file-session-key=${e.senderSession?.sessionKey??U}
>
<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`:U}
tabindex=${t.searchResult?`-1`:U}
@click=${e=>{let n=e.target;t.searchResult&&!(n instanceof Element&&n.closest(`a.markdown-session-link`))&&e.preventDefault()}}
>
${Rc(e,{...t,...i?{showAvatar:!1}:{updateCount:a,linkSource:!1}})}
${t.searchResult?U:W`<span class="chat-session-activity__chevron" aria-hidden="true">${V.chevronRight}</span>`}
</summary>
<div class="chat-session-activity__body">
${i||!t.onToggleToolMessageExpanded?J(e.messages,e=>e.key,(t,r)=>{let i=n(t,r);return W`<div class="chat-session-activity__message">
${i.content}
<div class="chat-session-activity__meta">
${X_(Dc(t.message)??e.timestamp)}
<div
class="chat-group-footer-actions"
data-message-actions-for=${t.key}
>
${i.actions}
</div>
</div>
</div>`}):U}
</div>
</details>
</div>
</div>
`}function vv(){return(vv=e((()=>{G(),X(),B(),gl(),Ul(),ev()})))()}function yv(e,t,n=`chat-group-footer-actions`){return W`<div class=${n} data-message-actions-for=${e??U}>
${t}
</div>`}function bv(e,t,n){let r=e_(t.message),i=n_(r,{...n,messageId:t.key,canFetchFullMessage:!!(n.loadFullAssistantMessage&&n.sessionKey),senderLabel:J_(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 xv(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 W`${k_(i,r.key,{...n,isStreaming:c,entryId:dl(r.message)??void 0,entryRef:n.entryRefFor?.(r.key),duplicateCount:r.duplicateCount??1,showToolCalls:n.showToolCalls??!0,assistantMessageDisclosure:o,messageActions:a},n.onOpenSidebar)}${Jg(e,a,c,n)}`}function Sv(e,t,n=`standalone`){let r=e[0];if(!r||t.showToolCalls===!1)return U;let i=e.flatMap(e=>e.messages),a=[],o=new Map,s=new Map,c=new Set,l=i.flatMap(n=>{let r=Ji(n.message);t.runActive&&t.activityRunId&&(!t.activityGroupKey||e.some(e=>e.key===t.activityGroupKey))&&Mu(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 Vr(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()],d=dt(a),f=ug(u,d,s),p=new Set(l.map(e=>e.toolCallId??e.itemId)),m=`activity:${r.key}`,h=`activity-body-${oe(r.key).toString(16)}`,g=t.isToolMessageExpanded?.(m)??!1,_=Wi(l,{includeInlineOutcomes:g,ownSessionLaunches:td(a)}),v=new Map;function y(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),v.set(e.card,U);return ig(n,{...t,messageKey:i.messageKey,expanded:a,onToggleExpanded:()=>t.onToggleToolExpanded?.(i.disclosureId,a),activityCards:[n,...s],children:r.length?W`${a?r.map(y):U}`:void 0})}let b=a.flatMap(e=>Fi(e.details)),x=a.flatMap(e=>{let t=Gi(e.details);return t?[t]:[]}),S=Pi(b,x),[C]=d,w=C?s.get(C.card):void 0,T=!f&&!S&&b.length===0&&C!==void 0&&d.length===1&&C.children.length>0&&p.size===1&&w?.status===`completed`&&p.has(w.toolCallId??w.itemId);if(g||T)for(let e of d)e.children.length>0&&v.set(e.card,y(e));let E=()=>e.map(e=>e.messages.map((n,r)=>xv(e,r,{...t,toolCardOverrides:v},bv(e,n,t))));return(e=>n===`continuation`?e:W`
<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>
`)(T?W`
<div
class="chat-activity-group chat-activity-group--step"
data-file-session-key=${r.senderSession?.sessionKey??U}
>
<div class="chat-activity-group__body">${E()}</div>
${Hh(e,t)}
</div>
`:W`
<div
class="chat-activity-group ${g?`is-open`:``}"
data-file-session-key=${r.senderSession?.sessionKey??U}
>
<button
class="chat-inline-disclosure chat-activity-group__summary"
type="button"
aria-expanded=${String(g)}
aria-controls=${h}
@pointerenter=${Jh}
@focus=${Jh}
@click=${()=>t.onToggleToolMessageExpanded?.(m,g)}
>
${pg(JSON.stringify([t.sessionKey,t.connectionEpoch,t.activityRunId]),f,_,u,t.pluginToolIcons,Oi(l).outcomes.filter(({kind:e})=>e!==`failed`&&e!==`skipped`).map(({label:e})=>e))}
${Km(S,b[0]?.label)}
${g?U:Gm(a.filter(e=>e.callId&&p.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=${h} ?hidden=${!g}>
${g?E():U}
</div>
${Hh(e,t)}
</div>
`)}function Cv(e){if(Gr(e.role)!==`tool`)return!1;let t=e.messages.flatMap(e=>Vr(e.message));return e.messages.length>1||t.length>1||t.some(e=>Fi(e.details).length>0)}function wv(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 Tv(e,t){let n=wv(e,t);if(Cv(e))return Sv([e],n,`continuation`);let r={...n,isForwarded:tu(e)},i=J(e.messages,e=>e.key,(t,i)=>xv(e,i,r,bv(e,t,n)));return W`${i}${n.showToolCalls===!1?U:Hh([e],n)}`}function Ev(e,t){let n=e.senderSession?.sessionKey,r=wv(e,t);if(Sl(e))return _v(e,r,(t,n)=>{let i=bv(e,t,r);return{content:xv(e,n,{...r,isForwarded:!0,onToggleUserMessageExpanded:void 0,replyLine:h_({...e,messages:[t]},r.resolveReplyPreview)},i),actions:i.actions?i_(i.actions,r):U}});let i=Gr(e.role),a=q_(e),o=i!==`user`||!!(e.sender||e.senderLabel?.trim()),s=r.assistantName??`Assistant`,c=K_(e,r.userId),l=i===`user`&&!!(r.userId&&e.sender)&&!c,u=tu(e),d=i===`assistant`&&u,f=r.frameContent?r.frameReplyLine??v_:h_(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=>cp(e)!==`web`),_=J_(e,r),v=i===`user`||i===`assistant`||i===`tool`?i:e.messages.every(e=>um(e.message))?`workspace-conflict`:`other`,y=r.avatarPlacement??`gutter`,b=()=>W`${h?as(_,l&&e.sender?.identity?.type===`profile`?jo(e.sender.identity.id,r.personActivity,_):null,`chat-sender-name`):U}
${g?.length?W`<span class="chat-message-source">${op(g)}</span>`:U}`,x=Z_(e,r.contextWindow??null);if(i===`tool`&&r.showToolCalls===!1)return U;if(Cv(e))return Sv([e],r);let S=r.frameContent!==void 0,C=i===`tool`||i===`assistant`&&!r.searchResult&&!S&&!d&&ff(e.messages[0]?.message)===`commentary`,w=S?r.frameActionOwner?[r.frameActionOwner]:[]:e.messages,T=w.map(t=>bv(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||r_(D,r))?yv(O,W`
${D?.replyTarget&&r.onReply?a_(D.replyTarget,r.onReply):U}
${r.onRewind&&!r.rewindDisabled?L_(r.onRewind):U}
${i_(D,qg(e,r))}
`):U,ee=d&&n?zi({id:n}):i===`user`&&e.sender?zi(e.sender):null,te=tl(e.messages.at(-1)?.message),A=i===`user`&&y===`gutter`&&(l||!!T[E]?.source.displayMarkdown),j=o&&!C&&y===`gutter`&&(d||i!==`assistant`||r.showAssistantAvatar!==!1)?d?Au(e.senderSession?.agentId,r):Yu(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):U,ne=f.state!==`hidden`&&j!==U;return W`
<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`:``}${ee===null?``:` chat-group--sender-tint`}${ne?` chat-group--reply`:``}"
style=${ee===null?U:`--chat-sender-hue: ${ee}`}
data-chat-row-key=${e.key}
data-file-session-key=${n??U}
>
${A?U:j}
<div class="chat-group-messages">
${u?Rc(e,r):U}
${g_(f,r)}
${r.frameContent??hv(t=>J(T,e=>e.item.key,(n,a)=>{let{item:o,actions:s}=n,c=r_(s,r)&&a<E&&!C?t?W`<div class="chat-group-footer chat-message-footer">
<div class="chat-group-footer__meta">
${b()}
${Q_(n.source.normalizedMessage.timestamp,null)}
</div>
${yv(o.key,i_(s,r))}
</div>`:yv(o.key,i_(s,r),`chat-message-actions-row`):U,d=i===`assistant`?v_:m_(n.source.normalizedMessage,r.resolveReplyPreview,r.userId,l||e.replyShared),f=l&&d.state!==`hidden`,p=xv(e,a,{...r,isForwarded:u,replyLine:l?void 0:d,avatar:!f&&A&&(l||a===E)?j:void 0},n),m=l?g_(d,r):U;return W`
${f?W`<div class="chat-message--reply">
${m} ${p}${j} ${__(d,j)}
</div>`:W`${m}${p}`}
${c}
`}))}
${S||r.showToolCalls===!1?U:Hh([e],r)}
${r.activeContinuation?sv(r.activeContinuation.parts,r.activeContinuation.options,`continuation`):r.turnRecap?Ql(r.turnRecap,{presentation:`continuation`}):U}
</div>
${C?U:e.isStreaming||r.activeContinuation?fv:W`<div
class="chat-group-footer ${i===`user`&&(g?.length||l||h&&y!==`footer`)?`chat-group-footer--persistent-identity`:``}${te?` chat-group-footer--send-status`:``}"
>
${l?U:k}
<div class="chat-group-footer__meta">
${i===`user`&&o&&y===`footer`?Td(e.sender):U}
${b()} ${W_(te,r)}
${Q_(e.timestamp,x)}
</div>
${l?k:i!==`user`&&D?yv(O,i_(D,r)):U}
</div>`}
${__(f,j)}
</div>
`}function Dv(){return(Dv=e((()=>{G(),X(),B(),$s(),hp(),ii(),Yi(),Mi(),Ii(),vp(),Xr(),R(),Wf(),xd(),fd(),nc(),Vf(),Xl(),_m(),mg(),su(),Ul(),A_(),U_(),o_(),$g(),G_(),Y_(),pv(),ev(),y_(),gv(),vv(),lg(),qm(),qc()})))()}function Ov(e,t,n){if(e===t)return!0;let r=lt(e);return!!(n&&f(t)&&r?.rest===`global`&&$a(r.agentId)===$a(n))}function kv(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 Av(e,t,n){if(!bo(lr,e))return[];let r=vo(lr,e);return Ov(r.sessionKey,t,n)?r.approvals.filter(e=>e.status===`pending`).map(e=>kv(e,t,e.sourceSessionKey)):[]}function jv(e,t,n,r){if(!bo(cr,t))return null;let i=vo(cr,t),a=n??i.sessionKey;if(!Ov(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(kv(i.approval,a,i.sourceSessionKey)),o.toSorted((e,t)=>e.createdAtMs-t.createdAtMs)}function Mv(){return(Mv=e((()=>{yo(),Qn(),R()})))()}function Nv(e,t,n){return{columns:[{id:e,panes:[{id:t,sessionKey:n}],paneWeights:[1]}],columnWeights:[1],activePaneId:t}}function Pv(e,t,n){let r=Na(e[t],`${n} before divider`);return r/(r+Na(e[t+1],`${n} after divider`))}function Fv(e,t){return`${t}${e.reduce((e,n)=>Math.max(e,ee(n.id,t)),0)+1}`}function Iv(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 Lv(e){return e.columns.flatMap(e=>e.panes)}function Rv(e,t){if(!t)return Lv(e);let n=Iv(e,e.activePaneId)?.pane;return n?[n]:[]}function zv(e,t,n,r){let i=structuredClone(e),a=Iv(i,t);if(!a)return i;let o=Fv(Lv(e),`p`),s=r===`left`||r===`right`,c=s?i.columnWeights:a.column.paneWeights,l=s?a.columnIndex:a.paneIndex,u=Na(c[l],s?`split column weight for located pane`:`split pane weight for located pane`),d=l+ +(r===`right`||r===`down`);return s?i.columns.splice(d,0,{id:Fv(e.columns,`c`),panes:[{id:o,sessionKey:n}],paneWeights:[1]}):a.column.panes.splice(d,0,{id:o,sessionKey:n}),c.splice(l,1,u/2,u/2),i.activePaneId=o,i}function Bv(e,t,n){let r=structuredClone(e),i=Iv(r,t);if(!i)return r;let{column:a}=i;r.activePaneId===t&&(r.activePaneId=a.panes[i.paneIndex-1]?.id??r.columns[i.columnIndex-1]?.panes.at(-1)?.id??r.columns.flatMap(e=>e.panes).find(e=>e.id!==t)?.id??``),a.panes.splice(i.paneIndex,1),a.paneWeights.splice(i.paneIndex,1),a.panes.length===0?(r.columns.splice(i.columnIndex,1),r.columnWeights.splice(i.columnIndex,1)):a.paneWeights=b(a.paneWeights);let o=Lv(r);if(!(o.length<=1&&!n?.has(o[0]?.id??``)))return r.columnWeights=b(r.columnWeights),r}function Vv(e,t,n){let r=structuredClone(e),i=Iv(r,t)?.pane;return i&&(i.sessionKey=n),r}function Hv(e,t){let n=structuredClone(e);return Iv(e,t)&&(n.activePaneId=t),n}function Uv(e,t,n){if(t.kind===`split`){let r=n?Lv(e).find(e=>e.sessionKey===n):void 0;return n&&!r?e:zv(e,r?.id??e.activePaneId,t.sessionKey,t.direction)}let r=Lv(e).find(e=>e.sessionKey===t.sessionKey);return r?Hv(e,r.id):e}function Wv(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(qv,Math.min(.85,n));return r[t]=o*s,r[t+1]=o*(1-s),r}function Gv(e,t,n){let r=structuredClone(e);return r.columnWeights=Wv(r.columnWeights,t,n),r}function Kv(e,t,n,r){let i=structuredClone(e),a=i.columns.find(e=>e.id===t);return a&&(a.paneWeights=Wv(a.paneWeights,n,r)),i}var qv;function Jv(){return(Jv=e((()=>{Ua(),N(),qv=.15})))()}function Yv(e){return Pa(e.sessionKey)?.toLowerCase()===`global`?C(e,e.sessionKey).agentId??$a(e.assistantAgentId??e.agentsList?.defaultId??e.agentsList?.agents?.[0]?.id??`main`):g(e.sessionKey)}function Xv(e){e?.browserSearchTimer&&(globalThis.clearTimeout(e.browserSearchTimer),e.browserSearchTimer=null)}function Zv(e){dy.add(e)}function Qv(e){e.sidebarContent&&dy.has(e.sidebarContent)&&(e.sidebarContent=null)}function $v(e){return{previews:[],activePreviewId:null,activeId:null,agentId:Yv(e),browserPath:``,browserSearch:``,filter:`all`,browserSearchTimer:null,connectionEpoch:e.connectionEpoch,error:null,list:null,loading:!1,pendingReload:!1,sessionKey:e.sessionKey}}function ey(e,t){return e.sessionWorkspaceState===t&&t.sessionKey===e.sessionKey&&t.agentId===Yv(e)&&t.connectionEpoch===e.connectionEpoch}function ty(e){let t=e.sessionWorkspaceState;if(t&&ey(e,t))return t;Qv(e),Xv(t);let n=$v(e);return e.sessionWorkspaceState=n,n}function ny(e,t,n){e.error=t,e.errorOwner=n}function ry(e,t){e.errorOwner===t&&ny(e,null)}function iy(e,t,n=!1){if(!e.client||!e.connected)return;if(t.loading){n&&(t.pendingReload=!0);return}t.loading=!0,ny(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=()=>ey(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()&&ny(t,st(e))}finally{ey(e,t)&&(t.loading=!1),e.requestUpdate?.()}})()}function ay(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:iy(e,n),r}function oy(e){let t=e.sessionWorkspaceState;t&&t.sessionKey===e.sessionKey&&(Qv(e),Xv(t),e.sessionWorkspaceState=$v(e),e.requestUpdate?.())}function sy(e,t,n,r){let i=ty(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 cy(e,t){let n=ty(e);(t===null||n.previews.some(e=>e.id===t))&&(n.activePreviewId=t,e.requestUpdate?.())}function ly(e,t){let n=ty(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 uy(e){let t=e.sessionWorkspaceState;t&&(t.previews=[],t.activePreviewId=null,e.requestUpdate?.())}var dy;function fy(){return(fy=e((()=>{ot(),De(),R(),dy=new WeakSet})))()}function py(e){return sn(void 0,t=>{let{render:n,finish:r}=t,i=[...e],a=``,o,s=e=>t.settled?!1:!i.includes(e)||!e.isCurrent()?(a=z(`chat.detailPanel.draftRecovery.changed`),n(l),!1):!0,c=(e,t,n=!1)=>W`<button type="button" class=${n?`btn danger`:`btn`} @click=${t}>
${e}
</button>`,l=()=>W`
<openclaw-modal-dialog
label=${z(`chat.detailPanel.draftRecovery.review`)}
description=${z(`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">${z(`chat.detailPanel.draftRecovery.review`)}</div>
<div class="exec-approval-sub">
${z(`chat.detailPanel.draftRecovery.description`)}
</div>
</div>
</div>
${i.map(e=>W`
<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?W`
<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>
`:U}
<label class="field">
<span>${e.path}</span>
<textarea readonly rows="6" .value=${e.content}></textarea>
</label>
<div class="exec-approval-actions">
${c(o===e?z(`common.copied`):z(`chat.detailPanel.draftRecovery.copy`,{name:e.name}),async()=>{if(!s(e))return;let t=await w(e.content,()=>s(e));s(e)&&(o=t?e:void 0,a=t?``:z(`chat.detailPanel.draftRecovery.copyFailed`),n(l))})}
${c(z(`chat.detailPanel.draftRecovery.download`,{name:e.name}),()=>{s(e)&&Si(e.name,e.content)})}
${c(z(`chat.detailPanel.draftRecovery.discard`,{name:e.name}),()=>{s(e)&&e.discard()&&(i=i.filter(t=>t!==e),a=``,i.length?n(l):r())},!0)}
</div>
</section>
`)}
${a?W`<p role="alert">${a}</p>`:U}
<div class="exec-approval-actions">
<button type="button" class="btn" autofocus @click=${()=>r()}>
${z(`chat.detailPanel.draftRecovery.keep`)}
</button>
</div>
</section>
</openclaw-modal-dialog>
`;n(l)})}function my(){return(my=e((()=>{G(),Bt(),F(),yp(),xe(),Qf()})))()}async function hy(){if(!(Cy||xy.size===0)){Cy=!0;try{await py([...xy].map(([e,t])=>({name:t.name,path:t.path,context:t.context,content:t.draft.content,isCurrent:()=>xy.get(e)===t,discard:()=>xy.get(e)===t&&(xy.delete(e),by(),!0)})))}finally{Cy=!1}}}function gy(e){return e.draftKey??`${e.root??``}\u0000${e.path}`}function _y(e){return xy.get(gy(e))?.draft}function vy(e,t){if(!t.editing)return null;let{dirty:n}=t,r=n?t.expectedHash:e.edit?.hash??``;return yy(e,n?{content:t.content,expectedHash:r}:null),{dirty:n,expectedHash:r}}function yy(e,t){let n=gy(e);xy.delete(n),t&&xy.set(n,{draft:t,name:e.name,path:e.path,context:e.draftContext}),by()}function by(){xy.size>0?Sy??=Rt(()=>xy.size===0,()=>rt({message:z(`chat.detailPanel.reloadBlocked`),actionLabel:z(`chat.detailPanel.draftRecovery.review`),onAction:()=>void hy()})):(Sy?.(),Sy=void 0)}var xy,Sy,Cy;function wy(){return(wy=e((()=>{Lt(),F(),yp(),we(),my(),Qf(),xy=new Map,Cy=!1})))()}function Ty(e,t,n,r,i,a,o){if(!e.client||!e.connected)return;let s={kind:`loading`,fileTab:{id:n,label:o.label}},c=sy(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`&&_y(u)))return;let d={order:++Ay};ky.set(c,d);let f=Ey(c),p=new Map(t.previews.map(e=>{let t=ky.get(e);return[e,{snapshot:Ey(e),read:t,published:t?.published}]})),m=()=>t.previews.includes(c)&&ky.get(c)===d&&Dy(c,f)&&ey(e,t),h=e=>{m()&&(ny(t,e,d),c.content={kind:`unavailable`,message:e},d.published=Ey(c),t.previews=[...t.previews])};(async()=>{ny(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=ky.get(e),a=i===r?.read&&i?.published===r?.published?r?.snapshot:i?.published;o.revalidate&&(i?.order??0)<=d.order&&Dy(e,a)&&(Oy(e,n,s),i&&ry(t,i),d.published=Ey(e),ky.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=Ey(c),t.previews=[...t.previews]}}catch(e){h(o.resolveError?.(e)??st(e))}finally{e.requestUpdate?.()}})()}function Ey(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 Dy(e,t){let n=e.content;return t!==void 0&&n===t.content&&(n.kind!==`file`||!_y(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 ky,Ay;function jy(){return(jy=e((()=>{ot(),wy(),fy(),ky=new WeakMap,Ay=0})))()}function My(e){if(!e.absolutePath)return U;let t=`Open in editor`;return W`
<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&&Ri.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>
${Ri.map(e=>W`
<wa-dropdown-item class="sidebar-file-view__editor-item" value=${e}>
${si[e]}
</wa-dropdown-item>
`)}
</wa-dropdown>
</div>
`}function Ny(){return(Ny=e((()=>{G(),B(),Yo(),li()})))()}function Py(){try{return D()?.getItem(Hy)===`true`}catch{return!1}}function Fy(e){try{D()?.setItem(Hy,String(e))}catch{}}function Iy(e){return new Set(e.match(/\r\n?|\n/g)).size<=1}function Ly(e,t){let n=t.toLocaleLowerCase();return n?e.split(/\r\n?|\n/).flatMap((e,t)=>e.toLocaleLowerCase().includes(n)?[t+1]:[]):[]}function Ry({label:e,icon:t,onClick:n,className:r=``,pressed:i,disabled:a=!1}){return W`
<openclaw-tooltip .content=${e}>
<button
class="btn btn--sm sidebar-file-view__action ${r}"
type="button"
aria-label=${e}
aria-pressed=${i===void 0?U:String(i)}
?disabled=${a}
@click=${n}
>
${t}
</button>
</openclaw-tooltip>
`}function zy(e,t){let n=t?.copyFeedback[e];return Ry({label:z(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 By(e,t,n=!1){return W`<button class="btn btn--sm" type="button" ?disabled=${n} @click=${t}>
${e}
</button>`}function Vy(e,t,n,r){let i=Xo(e,n?.execNode),a=n?.matches.length?n.currentMatchIndex+1:0;return W`
<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>
${zy(`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?W`
<div class="sidebar-file-view__actions">
${!n.htmlPreview||n.htmlPreview.source?Ry({label:z(n.wrap?`chat.codeBlock.disableWrap`:`chat.codeBlock.enableWrap`),icon:V.wrapText,onClick:n.onToggleWrap,className:`sidebar-file-view__wrap`,pressed:n.wrap}):U}
${n.htmlPreview?W`<button
class="btn btn--sm"
type="button"
aria-pressed=${String(n.htmlPreview.source)}
@click=${n.htmlPreview.onToggle}
>
${n.htmlPreview.source?z(`chat.workspaceFiles.preview`):z(`chat.detailPanel.viewSource`)}
</button>`:U}
${n.editing?W`
${By(z(n.saving?`common.saving`:`common.save`),n.onSave,!n.dirty||n.saving)}
${By(z(`chat.detailPanel.discard`),n.onDiscard,n.saving)}
`:W`
${e.edit?Ry({label:z(`chat.detailPanel.editFile`),icon:V.edit,onClick:n.onEdit,disabled:n.loadingEditor}):U}
${Ry({label:z(`chat.detailPanel.searchInFile`),icon:V.search,onClick:n.onToggleSearch,className:`sidebar-file-view__search-toggle`,pressed:n.searchOpen})}
${n.onReveal?Ry({label:z(`chat.detailPanel.showInFiles`),icon:V.folder,onClick:()=>n.onReveal?.(e.path)}):U}
${My({absolutePath:i,open:n.editorMenuOpen,onOpenChange:n.onEditorMenuOpenChange,onOpenEditor:n.onOpenEditor})}
${zy(`contents`,n)}
`}
</div>
`:U}
</div>
${Object.values(n?.copyFeedback??{}).includes(`failed`)?W`<div class="file-view__save-notice" role="alert">${z(`common.copyFailed`)}</div>`:U}
${n?.searchOpen?W`
<div class="file-view__search" @keydown=${n.onSearchKeydown}>
<input
type="search"
aria-label=${z(`chat.detailPanel.searchInFile`)}
placeholder=${z(`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])=>W`<button
class="btn btn--sm file-view__search-action${r}"
type="button"
aria-label=${z(e)}
?disabled=${n.matches.length===0}
@click=${t}
>
${V.chevronDown}
</button>`)}
</div>
`:U}
${n?.saveNotice?W`
<div class="file-view__save-notice" role="alert">
<span>
${n.saveNotice.kind===`conflict`?z(`chat.detailPanel.fileChanged`):n.saveNotice.message}
</span>
${n.saveNotice.kind===`conflict`?W`
<div class="file-view__save-notice-actions">
${By(z(`common.reload`),n.onReload,n.saving)}
${By(z(`chat.detailPanel.overwrite`),n.onOverwrite,n.saving)}
</div>
`:U}
</div>
`:U}
${n?.htmlPreview?W`<div class="chat-html-preview" ?hidden=${n.htmlPreview.source}>
${n.htmlPreview.presentation}
</div>`:U}
<div class="file-view" ?hidden=${n?.htmlPreview&&!n.htmlPreview.source}>
${n?.htmlPreview?.sourceFallback??U}
${In(n?.mountKey??e,W`<div class="file-view__mount"></div>`)}
${n?.loadingEditor?Ep(`review`,z(`common.loading`),!1,!0):U}
</div>
${n?.editing||n?.htmlPreview?U:W`
<div class="sidebar-file-view__footer">
${By(z(`chat.detailPanel.viewRawText`),t)}
</div>
`}
</section>
`}var Hy;function Uy(){return(Uy=e((()=>{G(),No(),Nn(),ko(),B(),Cp(),Tt(),F(),ra(),yp(),Ny(),ca(),Qf(),Hy=`openclaw.control.fileView.wrap.v1`})))()}function Wy(e){return typeof e!=`number`||!Number.isFinite(e)||e<0?``:xa(e,{style:`legacy-binary`,maxUnit:`mega`,separator:` `,fractionDigits:(e,t)=>t===`byte`?null:Math.round(e*10)%10?1:0})}function Gy({icon:e,name:t,meta:n,tooltip:r=t,badge:i=U,actions:a=U,onOpen:o,active:s=!1,directory:c=!1}){return W`
<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?W`<span class="chat-workspace-rail__file-meta">${n}</span>`:U}
</span>
</button>
${i} ${a}
</div>
`}function Ky(e,t){return e.length===0?U:W`<div class="chat-workspace-rail__list" role="list">${e.map(t)}</div>`}function qy(e){if(!e)return U;let t=e.list?.files??[],n=Jo(t.map(e=>e.path||e.name)),r=e.list?.artifacts??[],i=e.list?.browser,a=i?.entries??[],o=Pa(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:z(`chat.workspaceFiles.filterAll`),count:t.length+r.length},{filter:`changed`,label:z(`chat.workspaceFiles.changedCount`,{count:String(c.length)}),count:c.length},{filter:`read`,label:z(`chat.workspaceFiles.readCount`,{count:String(l.length)}),count:l.length},{filter:`artifacts`,label:z(`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)=>W`
<span
class="chat-workspace-rail__row-actions"
role="group"
aria-label=${z(`chat.workspaceFiles.actions`)}
>
<openclaw-tooltip .content=${z(`chat.workspaceFiles.preview`)}>
<button
class="chat-workspace-rail__row-action"
type="button"
aria-label=${z(`chat.workspaceFiles.preview`)}
@click=${t=>{t.stopPropagation(),e()}}
>
${V.eye}
</button>
</openclaw-tooltip>
${t===void 0?U:W` <span @click=${e=>e.stopPropagation()}>
${xs(t,z(`chat.workspaceFiles.copyPath`))}
</span>`}
</span>
`,v=t=>Ky(t,t=>{let r=()=>e.onOpenFile(t.path,`session`);return Gy({icon:V.fileText,name:n.get(t.path||t.name)??t.name,tooltip:t.path||t.name,meta:Wy(t.size),onOpen:r,active:sf(e.activeId,e.sessionKey,e.list?.root,t.path,t.workspacePath),badge:t.missing?W`<span class="chat-workspace-rail__file-badge"
>${z(`chat.workspaceFiles.missing`)}</span
>`:U,actions:_(r,t.path)})}),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=()=>W`
${i?.search?W`<div class="chat-workspace-rail__browser-caption">${z(`chat.workspaceFiles.searchResults`)}</div>`:U}
<div class="chat-workspace-rail__list chat-workspace-rail__list--browser" role="list">
${b==null?U:Gy({icon:V.folder,name:`..`,directory:!0,meta:z(`chat.workspaceFiles.parentFolder`),onOpen:()=>e.onBrowsePath(b)})}
${a.length===0?W`<div class="chat-workspace-rail__state">
${z(y?`chat.workspaceFiles.folderUnavailable`:i?.search?`chat.workspaceFiles.noSearchResults`:`chat.workspaceFiles.noBrowserFiles`)}
</div>`:U}
${a.map(t=>{let n=t.kind===`directory`,r=()=>n?e.onBrowsePath(t.path):e.onOpenFile(t.path,`workspace`),i=t.sessionKind;return Gy({icon:n?V.folder:V.fileText,name:t.name,tooltip:t.path||t.name,meta:n?t.path||z(`chat.workspaceFiles.root`):[t.path,Wy(t.size)].filter(Boolean).join(` / `),onOpen:r,directory:n,active:sf(e.activeId,e.sessionKey,e.list?.root,t.path,t.path),badge:i?W`<span
class="chat-workspace-rail__file-badge chat-workspace-rail__file-badge--kind"
>${z(Jy[i])}</span
>`:U,actions:n?U:_(r,t.path)})})}
</div>
${i?.truncated?W`<div class="chat-workspace-rail__state">${z(`chat.workspaceFiles.truncated`)}</div>`:U}
`,S=()=>Ky(p,t=>{let n=()=>e.onOpenArtifact(t.id);return Gy({icon:t.mimeType?.startsWith(`image/`)?V.image:V.paperclip,name:t.title,meta:[t.mimeType,Wy(t.sizeBytes)].filter(Boolean).join(` / `),onOpen:n,active:`artifact:${t.id}`===e.activeId,actions:_(n)})}),C=!!o||g!==`all`,w=(e,t,n,r,i)=>i===U||g!==`all`&&g!==e?U:In(C,W`<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 W`
<aside class="chat-workspace-rail" aria-label=${z(`chat.workspaceFiles.label`)}>
${e.list?.root?W`
<openclaw-tooltip .content=${e.list.root}>
<div class="chat-workspace-rail__path">${e.list.root}</div>
</openclaw-tooltip>
`:U}
<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=${z(`chat.workspaceFiles.search`)}
aria-label=${z(`chat.workspaceFiles.search`)}
.value=${e.browserSearch}
@input=${t=>e.onSearch(t.currentTarget.value)}
/>
</label>
${t.length||r.length?W` <div
class="chat-workspace-rail__filters"
role="group"
aria-label=${z(`chat.workspaceFiles.filters`)}
>
${h.filter(({count:e})=>e>0).map(({filter:t,label:n})=>W` <button
type="button"
class="chat-workspace-rail__chip"
aria-pressed=${g===t}
@click=${()=>e.onSetFilter(t)}
>
${n}
</button>`)}
</div>`:U}
</div>
${e.error?W`<div class="chat-workspace-rail__state chat-workspace-rail__state--error">
${e.error}
</div>`:e.loading&&!m?Ep(`files`,z(`chat.workspaceFiles.loading`)):W`
<div class="chat-workspace-rail__scroll">
${w(`changed`,z(`chat.workspaceFiles.changed`),d.length,!0,v(d))}
${w(`read`,z(`chat.workspaceFiles.read`),f.length,!1,v(f))}
${w(`artifacts`,z(`chat.workspaceFiles.artifacts`),p.length,!1,S())}
${w(null,z(`chat.workspaceFiles.browser`),a.length,!0,i||y?x():U)}
</div>
`}
</aside>
`}var Jy;function Yy(){return(Yy=e((()=>{G(),Nn(),Vs(),Vo(),B(),Cp(),Tt(),F(),ge(),Jy={modified:`chat.workspaceFiles.changed`,read:`chat.workspaceFiles.read`,mixed:`chat.workspaceFiles.session`}})))()}function Xy(e){let t=e.replace(/\r/g,`\\r`).replace(/\n/g,`\\n`),n=t.startsWith(` `)&&t.endsWith(` `);return Ud(n&&!/^ +$/.test(t)?` ${t} `:t)}function Zy(e){if(typeof e!=`number`)return null;let t=new Date(e);return Number.isNaN(t.getTime())?null:t.toISOString()}function Qy(e,t){let n=e.workspacePath||e.path||t,r=Zy(e.updatedAtMs),i=[`This file is not previewable inline.`,``,`- Path: ${Xy(n)}`,e.mimeType?`- Type: ${Xy(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 $y(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}`}function eb(e){return e?.previewKind===`text`&&e.contentEncoding===`utf8`&&typeof e.content==`string`?e.content:null}async function tb(e,t,n){let{data:r,encoding:i,url:a,blob:o}=e,{title:c}=e.artifact,l=e.artifact.mimeType??``,u,d;if(o?l.startsWith(`image/`)?u=await sa(o,{readError:`Artifact image could not be decoded`,invalidResultError:`Artifact image could not be decoded`}):d=await o.text():i===`base64`&&r&&(l.startsWith(`image/`)?u=`data:${l};base64,${r}`:(l===`application/json`||l.startsWith(`text/`))&&(d=new TextDecoder().decode(s(r)))),u)return{kind:`image`,title:c,src:u,mimeType:l,rawText:a??null};if(d!==void 0)return{kind:`markdown`,content:`# ${c}\n\n${Wd(d,l===`application/json`?`json`:``)}`,rawText:d};if(i===`base64`||a&&Op(a,n))return{kind:`attachment`,attachmentKind:`document`,title:c,mimeType:l,download:t};let f=a?`# ${c}\n\n[Open artifact](${a})`:`# ${c}\n\nArtifact download is not previewable in the sidebar.`;return{kind:`markdown`,content:f,rawText:f}}function nb(e,t){ay(e,t)&&(e.sidebarContent=cb(e),e.requestUpdate?.())}function rb(e,t,n,r={}){let i=r.requestPath??n,a=r.sessionKey??t.sessionKey,o=r.sessionKey?lt(r.sessionKey)?.agentId:t.agentId,s=a===t.sessionKey,c=e.sessionWorkspaceDraftScope,l=e.sessionWorkspaceDraftContext,u=e.settings?.gatewayUrl??``;Ty(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||We(n),p=d.workspacePath||d.path||n;if(d.previewKind===`image`)return d.contentEncoding!==`base64`||typeof d.content!=`string`||!d.mimeType||!Gd.has(d.mimeType)?null:{kind:`image`,title:f,src:`data:${d.mimeType};base64,${d.content}`,mimeType:d.mimeType,rawText:p};if(d.previewKind===`unsupported`)return{...Qy(d,n),fileLinkSessionKey:a.sessionKey};let m=eb(d);if(m===null)return null;let h=typeof d.hash==`string`&&Iy(m)&&Rr(e,`sessions.files.set`)===!0&&xn(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}))?.file.hash;return typeof c==`string`&&s&&ey(e,t)&&nb(e,!0),typeof c==`string`?{ok:!0,hash:c}:{ok:!1,code:`error`,message:`Save failed.`}}catch(e){return(e instanceof Kt&&e.details&&typeof e.details==`object`?e.details:null)?.type===`session_file_conflict`?{ok:!1,code:`conflict`}:{ok:!1,code:`error`,message:st(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:Iy(t.content)}}}:void 0,g=f.match(/\.([a-z0-9_-]+)$/i)?.[1]?.toLowerCase()??``;return{kind:`file`,path:p,name:f,content:m,sessionFileSource:{sessionKey:a.sessionKey,agentId:o,path:p},draftKey:[u,c??``,a.sessionKey,a.root??``,p].join(`\0`),draftContext:{sessionKey:a.sessionKey,sessionTitle:(s?l?.sessionTitle:void 0)??Te(a.sessionKey),paneLabel:l?.paneLabel},root:a.root??null,mimeType:d.mimeType,language:g===`yml`?`yaml`:g,line:r.line??null,rawText:m,...h?{edit:h}:{}}},`Failed to load ${n}`,{line:r.line,label:We(n),revalidate:!0,resolveLabel:e=>e.file?.name,resolveKey:e=>{let t=e.file?.workspacePath||e.file?.path;return t?ef(e.sessionKey,e.root,t):void 0},resolveError:e=>e instanceof Kt&&typeof e.details==`object`&&e.details!==null&&`reason`in e.details&&e.details.reason===`outside_session_boundary`?z(`chat.detailPanel.outsideSessionBoundary`,{session:(s?l?.sessionTitle:void 0)??Te(a)}):void 0})}function ib(e,t){rb(e,ty(e),t.path,{line:t.line,sessionKey:t.sessionKey})}function ab(e,t){let n=ty(e);Xv(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}`,iy(e,n,!0),e.requestUpdate?.()}function ob(e,t,n){let r={sessionKey:t.sessionKey,artifactId:n,...t.agentId?{agentId:t.agentId}:{}},i=async n=>{let i=ty(e);if(i.sessionKey!==r.sessionKey||i.agentId!==t.agentId)return null;let a=e.client,o=e.connectionEpoch,c=await Tp(e,r,n,{readBinary:!0});return n.aborted||!e.connected||e.client!==a||e.connectionEpoch!==o||!ey(e,i)?null:c?.blob?c.blob:c?.encoding!==`base64`||c.data===void 0?null:new Blob([s(c.data)],{type:c.artifact.mimeType??`application/octet-stream`})};Ty(e,t,`artifact:${n}`,async()=>{let t=await Tp(e,r);return t?.artifact?{artifact:t.artifact,content:await tb(t,i,e.resourceBasePath)}:null},e=>e.content,`Failed to load artifact ${n}`,{label:t.list?.artifacts?.find(e=>e.id===n)?.title||z(`chat.workspaceFiles.artifacts`),resolveLabel:e=>e.artifact?.title})}function sb(e,t){e.sessionWorkspaceDraftScope=t?.draftScope,e.sessionWorkspaceDraftContext=t?.draftContext;let n=ty(e);(t?.expanded===!1||t?.presented===!1)&&n.browserSearchTimer&&(Xv(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)&&iy(e,n);let r=cb(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?.()},onBrowsePath:t=>{Xv(n),n.browserPath=t,n.browserSearch=``,iy(e,n,!0)},onOpenFile:(t,r)=>{let i=r===`workspace`?{requestPath:$y(n.list?.root,t)}:{};rb(e,n,t,i)},onSearch:t=>{n.browserSearch=t,e.requestUpdate?.(),Xv(n),n.browserSearchTimer=globalThis.setTimeout(()=>{n.browserSearchTimer=null,iy(e,n,!0)},160)},onOpenArtifact:t=>ob(e,n,t),onOpenDiff:r?()=>e.handleOpenSidebar(r):void 0}}function cb(e){let t=ty(e),n=e.client;if(Rr(e,`sessions.diff`)!==!0||!n)return null;if(t.diffContent)return t.diffContent;let r=e.sessionKey,i=t.agentId,a={kind:`session-diff`,owner:t,load:async e=>await n.request(`sessions.diff`,{sessionKey:r,...i?{agentId:i}:{},...e}),loadFileText:Rr(e,`sessions.files.get`)===!0&&e.client?async t=>{try{return eb((await e.sessions.getFile(r,t,{agentId:i}))?.file)}catch{return null}}:void 0,openFile:t=>rb(e,ty(e),t)};return Zv(a),t.diffContent=a,a}function lb(){return(lb=e((()=>{Hd(),bp(),gt(),vn(),F(),yp(),ot(),zr(),Ye(),R(),jy(),fy(),Uy(),Yy(),Qf()})))()}function ub(){return{id:`side-panel-column`,side:`right`,panels:[],activePanelId:``,height:kb,width:Ob,browserWidthPending:!0}}function db(e){if(be(e,`dashboard`))return e.expanded||e.open!==!0?`expanded`:`split`}function fb(e,t){let n=vb(e,`dashboard`);if(t===`expanded`){let e=n.columns[0]?.panels.find(e=>e.slot===`dashboard`);e&&(n=gb(n,e.id))}else r(n)?.slot===`dashboard`&&(n=vb(n,`conversation`));return Cb(n,t===`expanded`)}function pb(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 mb(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 hb(e){let t=structuredClone(e),n=t.columns[0]??=ub(),i=n.panels.find(e=>e.slot===`conversation`);return i||(i={id:pb(t,`conversation`),slot:`conversation`},n.panels.push(i)),t.mainPanelId=r(t)?.id??i.id,n.activePanelId===t.mainPanelId&&(n.activePanelId=Pe(t)[0]?.id??``),t}function gb(e,t){if(!e.columns[0]?.panels.find(e=>e.id===t)||r(e)?.id===t)return structuredClone(e);let n=hb(e),i=n.mainPanelId;return n.mainPanelId=t,n.columns[0].activePanelId=i,n.open=!0,n.expanded=!1,delete n.expandedSide,n}function _b(e,t,n){t.activePanelId=n,e.open=!0,e.expanded&&(e.expanded=!1,delete e.expandedSide)}function vb(e,t){let n=structuredClone(e);if((r(n)?.slot??`conversation`)===t)return n.expandedSide?Cb(n,!1):n;let i=n.columns.find(e=>e.panels.some(e=>e.slot===t))??(n.columns[0]??=ub()),a=i.panels.find(e=>e.slot===t);return a||(a={id:pb(n,t),slot:t},i.panels.push(a)),_b(n,i,a.id),n}function yb(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===Ce(n)?.id&&(n=Cb(n,!1)),t===`conversation`)return r.id!==n.mainPanelId&&(n.open=!1),n;r.id===n.mainPanelId&&(n=hb(n),n.mainPanelId=n.columns[0].panels.find(e=>e.slot===`conversation`).id),mb(n,r.id);let e=n.columns[0];e&&!Ce(n)&&(e.activePanelId=Pe(n)[0]?.id??``),Pe(n).length===0&&(n.open=!1)}return n.columns.length===0&&(n.open=!1),n}function bb(e,t){let n=structuredClone(e),r=n.columns.find(e=>e.panels.some(e=>e.id===t));return r&&t!==n.mainPanelId&&_b(n,r,t),n}function xb(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 Sb(e,t){let n=structuredClone(e);return t&&(n.columns[0]??=ub()),n.open=t,(t?n.expanded:n.expandedSide)&&(n.expanded=!1,delete n.expandedSide),n}function Cb(e,t){let n=structuredClone(e);return delete n.expandedSide,{...n,expanded:t,...t?{open:!0}:{}}}function wb(e,t){if(!Pe(e).some(e=>e.id===t))return structuredClone(e);if(e.expanded&&e.expandedSide&&Ce(e)?.id===t)return Cb(e,!1);let n=bb(hb(e),t);return n.expanded=!0,n.expandedSide=!0,n}function Tb(e){let t=e.open===!0&&!e.expanded?Ce(e)?.slot:void 0;if(t!==`subagents`&&t!==`processes`)return e;let n=jb.get(e);return n||(n={...e,expanded:!0,expandedSide:!0},jb.set(e,n)),n}function Eb(e,t){return{...structuredClone(e),dock:t}}function Db(e,t,n){let r=structuredClone(e),i=r.columns.find(e=>e.id===t);return i&&Number.isFinite(n)&&(se(r)===`bottom`?i.height=h(n):(i.width=E(n),delete i.browserWidthPending)),r}var Ob,kb,Ab,jb;function Mb(){return(Mb=e((()=>{S(),me(),Ob=480,kb=360,Ab=`openclaw-sidebar-geometry-commit`,jb=new WeakMap})))()}var Nb;function Pb(){return(Pb=e((()=>{F(),di(),Ie(),qr(),ot(),Sd(),Qr(),Nb=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()}finish(e,t){this.current(e)&&(this[t]=!1,this.notify())}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=st(e))}finally{this.finish(t,`loading`)}}}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=st(e))}finally{this.finish(n,`busy`)}}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=z(`skillLibrary.session.queued`),this.result=null,this.closeRead();let i={agentId:r.agentId,sessionKey:r.sessionKey};yu(r.client,i),nt(r.client,i),await Promise.all([this.load(),ai(r.client,i)])}catch(e){this.current(r)&&(this.error=st(e))}finally{this.finish(r,`busy`)}}}}})))()}function Fb(){return{entries:[],nextEntryId:1,userEntryId:null,userEntryAwaitingFinalStartedAtMs:null,assistantEntryId:null}}function Ib(e){return{...Fb(),nextEntryId:e.nextEntryId,entries:e.entries.map((e,t)=>({...e,order:t,isStreaming:!1}))}}function Lb(e,t){let n=Rb(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 Rb(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:Gb(t.final?n:(i?.text??``)+n),isStreaming:!t.final};return zb({...e,entries:[...e.entries.filter(e=>e.id!==r),a]})}let r=t.nowMs??Date.now();if(t.textMode===`verbatim`||t.textMode===`snapshot`)return Bb(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 Bb(i,t.role,i.assistantEntryId,n,t.final)}let i=e.userEntryId,a=i!==null&&Ub(e,i,n,t.final,r),o=i===null||a?Hb(e,`assistant`,r):e;return Bb(a?{...Hb(o,`user`,r),userEntryId:null,userEntryAwaitingFinalStartedAtMs:null}:o,t.role,a?null:i,n,t.final)}function zb(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 Bb(e,t,n,r,i,a){let o=n===null?-1:e.entries.findIndex(e=>e.id===n),s=e.entries[o];if(!s){let n=`rt-${e.nextEntryId}`,o=[...e.entries,{id:n,role:t,text:Gb(a?r:r.trimStart()),isStreaming:!i}].slice(-60);return Vb({...e,entries:o,nextEntryId:e.nextEntryId+1},t,n,i)}let c=Gb(a===`snapshot`?r:a===`verbatim`?s.text+r:Wb(s.text,r,i,t)),l=s.text===c&&s.isStreaming===!i?e.entries:e.entries.map((e,t)=>t===o?{...e,text:c,isStreaming:!i}:e);return Vb({...e,entries:l},t,s.id,i)}function Vb(e,t,n,r){return t===`user`?{...e,userEntryId:r?null:n,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,userEntryAwaitingFinalStartedAtMs:n}:{...e,entries:i,assistantEntryId:null}}function Ub(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.userEntryAwaitingFinalStartedAtMs!==null&&i-e.userEntryAwaitingFinalStartedAtMs<=tx&&Kb(o,n))}function Wb(e,t,n,r){if(e.trim()===``)return t.trimStart();if(r===`assistant`)return n&&(t.startsWith(e)||Kb(e,t))?t:`${e}${t}`;if(e.endsWith(t))return e;if(t.startsWith(e))return t;if(t[0]&&/\s/.test(t[0]))return`${e}${t}`;if(n&&Kb(e,t))return t;let i=Xb(e,t),a=i>0?t.slice(i):t;return a===``?e:`${e}${i>0||!Zb(e,a)?``:` `}${a}`}function Gb(e){if(e.length<=Qb)return e;let t=e.indexOf(ex),n=ao(e,0,t>=255&&t<=$b?t:$b).replace(/[\uD800-\uDBFF]$/,``),r=Qb-n.length-3,i=ao(e,-r);return`${n}${ex}${i}`}function Kb(e,t){let n=qb(e),r=qb(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=Jb(e),a=Jb(t),o=Yb(i,a),s=Math.min(i.length,a.length);return o>=6&&o/Math.max(1,s)>=.45}function qb(e){return[...e.toLowerCase().matchAll(/[\p{L}\p{N}]+/gu)].map(e=>e[0])}function Jb(e){return e.toLowerCase().replace(/\s+/g,` `).trim()}function Yb(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r+=1;return r}function Xb(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 Zb(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 Qb,$b,ex,tx;function nx(){return(nx=e((()=>{Qb=8e3,$b=256,ex=`
…
`,tx=1500})))()}function rx(e,t){let n=fx.get(e);n||(n=new Map,fx.set(e,n));let r=n.get(t)??0,i=[...n.values()].reduce((e,t)=>e+t,0);if(r>=cx||i>=lx)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=()=>{if(c)return;c=!0;for(let e of l??[])clearTimeout(e);l=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||(l=[setTimeout(()=>{o.abort()},ux),setTimeout(()=>{o.abort(),s.abort(),u()},dx)])},release:u}}async function ix(e,t,n){let r;for(let n of[0,500,2e3]){if(e.aborted)throw Da(`voice transcript persistence aborted`);try{n>0&&await ka(n,e),await t();return}catch(t){if(e.aborted)throw Da(`voice transcript persistence aborted`);r=t}}throw r instanceof Error?r:Error(n,{cause:r})}var ax,ox,sx,cx,lx,ux,dx,fx;function px(){return(px=e((()=>{Aa(),za(),Ia(),Cr(),ax=1024,ox=1024,sx=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=ro()}observe(e){if(e.type===`settled`)return this.settle(this.requireItem(e.itemId)),[];if(this.items.has(e.itemId))return[];if(this.items.size>=ax||e.itemId.length>ox||(e.previousItemId?.length??0)>ox)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),dr.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,pr(e.text)||void 0),{...e,order:t.order})}if(e.final){let t=pr(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=ro()}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(dr.overflowMessage);r.completion.catch(n)}},cx=2,lx=16,ux=Ha,dx=ux+Ha,fx=new WeakMap})))()}function mx(e){if(typeof e!=`string`)return;let t=wr(e);if(t===`webrtc`||t===`provider-websocket`||t===`gateway-relay`||t===`managed-room`)return t}function hx(){return(hx=e((()=>{mr()})))()}async function gx(e){let t=!1,n;if(await Promise.all([..._x].map(async r=>{try{await r.switchCameraIfEnabled(e)}catch(e){t=!0,n??=e}})),t)throw n}var _x,vx;function yx(){return(yx=e((()=>{Aa(),Cr(),F(),ot(),Pu(),px(),hx(),Ja(),_x=new Set,vx=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.videoOperation=0,this.transportGeneration=0,this.transcriptQueue=dr.createQueue()}async start(){let e=rx(this.client,this.sessionKey),t=!1,n;try{this.retireTransport();let r=this.lifecycleGeneration;this.closed=!1,this.callbacks.onStatus?.(`connecting`,z(`chat.voice.preparing`));let[{createRealtimeTalkTransport:i},a]=await Promise.all([Xa(()=>import(`./transport.runtime-Cfond1RX.js`),__vite__mapDeps([25,5,6,26,7,3,12,14,13]),import.meta.url),this.resolveVideoCapability()]);if(this.closed||r!==this.lifecycleGeneration)return;n=new Cu(()=>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}c!==`gateway-relay`&&(this.voiceSessionId=l,this.transportGeneration=r,this.clientVoiceSessionOwner=e,t=!0);let u=c===`gateway-relay`?this.callbacks:this.clientOwnedTranscriptCallbacks(l,r,e.signal),d=this.transcriptQueue,f=null,p=()=>{if(f?.stop({emitClosed:!1}),c===`gateway-relay`)f?e.release():this.closeUnadoptedVoiceSession(l,c,e);else if(this.clientVoiceSessionOwner===e){let e=this.detachVoiceSession();e&&this.closeLogicalVoiceSession(e)}},m;try{n.requireStream(),f=i(s,{client:this.client,sessionKey:this.sessionKey,voiceSessionId:l,flushTranscriptWrites:async()=>await d.flush(),callbacks:u,input:n,videoDeviceId:this.localOptions.videoDeviceId}),this.pendingStartup=f,this.callbacks.onVideoCapability?.(a&&typeof f.setVideoEnabled==`function`),m=this.pendingStartup===f?await f.start():`cancelled`}catch(e){throw this.pendingStartup===f&&(this.pendingStartup=null),p(),t=!0,e}if(this.pendingStartup===f&&(this.pendingStartup=null),m===`cancelled`||this.closed||r!==this.lifecycleGeneration){p(),t=!0;return}this.transport=f,this.selectedTransport=c,c===`gateway-relay`&&(this.voiceSessionId=l,this.transportGeneration=r,e.release()),t=!0;try{f.activate?.()}catch(e){throw this.transport===f&&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:Ha}),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:Ha})}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:Ha})}catch{throw n}if(!e.config||typeof e.config!=`object`)throw n;let t=e.config?.talk?.realtime?.transport;if(t!==void 0&&(r=mx(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:Ha})}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,r=[];this.transport=null,this.selectedTransport=void 0,this.pendingStartup=null;try{r.push(Promise.resolve(n?.stop({emitClosed:!1})))}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}closeUnadoptedVoiceSession(e,t,n){if(t===`gateway-relay`){this.client.request(`talk.session.close`,{sessionId:e},{timeoutMs:Ha}).catch(()=>void 0).finally(n.release);return}let r=dr.createQueue();r.seal(),this.closeLogicalVoiceSession({voiceSessionId:e,transcriptQueue:r,owner:n})}clientOwnedTranscriptCallbacks(e,t,n){let r=new sx(this.transcriptQueue,async(t,r,i)=>{await ix(n,()=>this.client.request(`talk.client.transcript`,{sessionKey:this.sessionKey,voiceSessionId:e,entryId:t,role:r,text:i,timestamp:Date.now()},{signal:n,timeoutMs:Ha}),`voice transcript save failed`)},e=>{if(n.aborted)return;let r=`Voice transcript could not be saved: ${st(e)}`;console.warn(r,e),this.transportGeneration===t&&this.callbacks.onStatus?.(`error`,r)});this.transcriptItems=r;let i=()=>this.transportGeneration===t&&this.voiceSessionId===e,a=e=>{if(i())try{return e()}catch(e){this.failTranscriptPersistence(t,st(e));return}};return{...this.callbacks,onTalkEvent:e=>{if(i())try{e.type===`session.closed`&&this.retireTransport()}finally{this.callbacks.onTalkEvent?.(e)}},onTranscriptItem:e=>{let t=a(()=>r.observe(e));t?.length&&this.callbacks.onTranscriptOrder?.(t)},onTranscript:e=>{let t=a(()=>r.publish(e));t&&this.callbacks.onTranscript?.(t)}}}failTranscriptPersistence(e,t){this.transportGeneration===e&&this.voiceSessionId&&(this.retireTransport(),this.transportGeneration+=1,console.warn(t),this.callbacks.onStatus?.(`error`,t))}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.transcriptQueue=dr.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(()=>ix(t.closeSignal,()=>this.client.request(`talk.client.close`,{sessionKey:this.sessionKey,voiceSessionId:e.voiceSessionId},{signal:t.closeSignal,timeoutMs:Ha}),`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=_x.has(this);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){e?_x.add(this):_x.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(_x.has(this))try{await this.switchCamera(e)}catch(e){throw this.callbacks.onVideoError?.(e),e}}}})))()}var bx,xx;function Sx(){return(Sx=e((()=>{sr(),qn(),F(),bx=rr+1e4,xx=class{constructor(e){this.owner=e,this.active=!0,this.unsubscribe=e.client.addEventListener(e=>{e.event===`talk.voice.change`&&Wn(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,z(`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(z(`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,z(`chat.voice.selectionTimedOut`)),bx)};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,z(`chat.voice.selectionFailed`));return}n.started=e,this.completeReady(n)}}).catch(()=>this.fail(n,z(`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.complete(e,{voiceSessionId:n,outcome:`ready`}).then(()=>{this.change===e&&this.current(t)&&this.clearChange(e)}).catch(()=>this.fail(e,z(`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.complete(e,{...n&&n!==e.request.voiceSessionId?{voiceSessionId:n}:{},outcome:`failed`,error:t}).catch(()=>void 0)}complete(e,t){return this.owner.client.request(`talk.voice.complete`,{changeId:e.request.changeId,...t},{timeoutMs:bx})}dispose(){this.active=!1,this.unsubscribe();let e=this.change;e&&(this.clearChange(e),this.reportFailure(e,z(`common.cancelled`)))}}})))()}function Cx(e){let t=Ox.get(e);t!==void 0&&(clearInterval(t),Ox.delete(e))}function wx(e){let t=null;return n=>{if(t&&=(Cx(t),null),!(n instanceof HTMLElement)||(n.textContent=_r(Pr(e,Date.now())),e.status!==`active`))return;t=n;let r=setInterval(()=>{if(!n.isConnected){Cx(n);return}n.textContent=_r(Pr(e,Date.now()))},1e3);Ox.set(n,r)}}function Tx(e,t,n){if(!t)return U;let r=_r(Pr(t,Date.now())),i=fr(t),a=e.goalExpandedId===t.id,o=n.canAct&&!!n.onGoalAction,s=[`paused`,`blocked`,`usage_limited`,`budget_limited`].includes(t.status),c=s&&!a?t.lastStatusNote:void 0;return W`
<div
class="agent-chat__goal agent-chat__goal--${t.status}"
data-expanded=${String(a)}
role="group"
aria-label=${Ir(t)}
>
<div class="agent-chat__goal-row">
<span class="agent-chat__goal-icon" aria-hidden="true"
>${kx[t.status]}</span
>
<span class="agent-chat__goal-copy">
<openclaw-tooltip .content=${c??``} ?disabled=${!c}>
<span class="agent-chat__goal-label" tabindex=${c?`0`:U}
>${Fr(t.status)}</span
>
</openclaw-tooltip>
<span class="agent-chat__goal-objective">${t.objective}</span>
</span>
<span class="agent-chat__goal-elapsed" ${q(wx(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?W`<openclaw-tooltip content=${z(i)}>
<button
class="agent-chat__goal-action agent-chat__goal-${e}"
type="button"
aria-label=${z(i)}
@click=${()=>e===`edit`?n.onGoalEdit?.(t):n.onGoalAction?.(t.id,e)}
>
${s}
<span class="agent-chat__goal-action-label">${z(a)}</span>
</button>
</openclaw-tooltip>`:U)}
</span>
<button
class="agent-chat__goal-action agent-chat__goal-expand"
type="button"
aria-expanded=${a?`true`:`false`}
aria-label=${z(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"
${Ds()}
.textContent=${t.objective}
></div>
${t.lastStatusNote?W`<div class="agent-chat__goal-detail-note">${t.lastStatusNote}</div>`:U}
<div class="agent-chat__goal-detail-meta">
${i?W`
<span class="agent-chat__goal-detail-usage">${i}</span>
<span class="agent-chat__goal-detail-separator" aria-hidden="true">·</span>
`:U}
<span class="agent-chat__goal-detail-duration">${r}</span>
</div>
</div>
</div>
</div>
`}function Ex(){for(let e of Ox.values())clearInterval(e);Ox.clear()}function Dx(e,t){return e?W`
<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>${z(e.pending?`chat.goals.checking`:`chat.goals.recoveryTitle`)}</strong>
<span
>${z(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}
>
${z(e.retired?`chat.goals.refreshCurrent`:`chat.goals.checkOutcome`)}
</button>
</div>
`:U}var Ox,kx;function Ax(){return(Ax=e((()=>{G(),H(),en(),B(),Ls(),F(),Hi(),na(),Ox=new Map,kx={active:mn(An` <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 jx(){return{...Ec(),...ml(),composerComposing:!1,editRevision:0,mentionMenu:new mc,emojiMenu:new zc,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 Mx(e){let t=Wx.get(e);if(t)return t;let n=jx();return Wx.set(e,n),n}function Nx(e){return e?.phase===`done`||e?.phase===`interrupted`}function Px(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 Fx(e){return e.runActive===!0&&!Nx(e.runStatus)||e.queue.some(t=>Px(t,e.sessionKey,e.runStatus))}function Ix(e){return`${e.currentAgentId}\u0000${e.sessionKey}`}function Lx(e,t,n){let r=e.getDraft?e.getDraft():e.draft;if(r===t&&n===void 0)return;let i=e.getMentions?.()??e.mentions??[];Mx(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 Rx(e,t){e.editRevision+=1,e.composerInputIntentKey=t}function zx(e,t){return e.composerInputIntentKey===t&&(e.composerInputIntentKey=null,!0)}function Bx(e,t){e.pendingClearedSubmittedDraft?.key===t&&(e.pendingClearedSubmittedDraft=null)}function Vx(e,t,n,r,i){let a=i.pendingClearedSubmittedDraft;return!a||e.value!==a.value||r||t.inputType===`insertFromPaste`||t.inputType===`insertFromDrop`?!1:(e.value=n,Fd(e),!0)}function Hx(e){e.emojiMenu.close(),e.mentionMenu.dispose(),e.composerDraftScopeKey=null,e.dictation?.dispose(),e.microphonePicker?.dispose(),e.composerInput&&pu(e.composerInput)}function Ux(e){if(e){let t=Wx.get(e);t&&Hx(t),Wx.delete(e);return}for(let e of Wx.values())Hx(e);Wx.clear(),Ex()}var Wx;function Gx(){return(Gx=e((()=>{gc(),Rl(),Ax(),Wl(),Oc(),Wu(),Wx=new Map})))()}function Kx(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 qx(e){let t=e.closest(`.code-block-wrapper`)?.querySelector(`.code-block-copy`);if(t)return{label:z(`common.copyCode`),text:Ws(t)};let n=e.closest(`pre, code`);if(n)return{label:z(`common.copyCode`),text:n.textContent??``};let r=e.closest(`table`)??e.closest(`.markdown-table`)?.querySelector(`table`);if(r instanceof HTMLTableElement)return{label:z(`common.copyTable`),text:Po(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:z(`chat.messages.copyLink`),text:e.href};let t=i.querySelector(`.chat-assistant-attachment-card__title, .chat-attachment-file__name`)?.textContent;if(t)return{label:z(`chat.messages.copyFileName`),text:t}}return null}function Jx(){return(Jx=e((()=>{Ko(),Fo(),F(),la(),Wr()})))()}function Yx(e){aS&&(e===void 0||aS.paneId===e)&&(window.clearTimeout(aS.timer),aS=null),(e===void 0||iS?.paneId===e)&&(iS?.element.remove(),iS?.listeners.abort(),iS=null)}function Xx(e){return iS?.paneId===e&&iS.element.contains(document.activeElement)}function Zx(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 Qx(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 $x(e,t,n,r,i){Yx(),document.body.appendChild(e);let a=new AbortController;iS={element:e,listeners:a,paneId:n};let{signal:o}=a,s=()=>Qx(e,i?.getBoundingClientRect()??t);return s(),document.addEventListener(`pointerdown`,t=>{e.contains(t.target)||Yx()},{capture:!0,signal:o}),document.addEventListener(`keydown`,e=>{He(de.escape,e)&&(e.preventDefault(),e.stopPropagation(),Yx(),r?.())},{signal:o}),document.addEventListener(`scroll`,t=>{(!(t.target instanceof Node)||!e.contains(t.target))&&Yx()},{capture:!0,passive:!0,signal:o}),window.addEventListener(`resize`,s,{signal:o}),window.visualViewport?.addEventListener(`resize`,s,{signal:o}),o}function eS(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 tS(e,t,n){let r=document.createElement(`div`);r.className=`chat-selection-popup`,r.setAttribute(`role`,`toolbar`),r.setAttribute(`aria-label`,z(`chat.messages.selectionActions`)),r.addEventListener(`pointerdown`,e=>e.preventDefault());let i=e=>{Yx(),window.getSelection()?.removeAllRanges(),e()};if(n.onAddToChat){let a=n.onAddToChat;r.append(eS(z(`chat.messages.addToChat`),()=>i(()=>a(t,e))))}r.append(eS(z(`chat.messages.askInSideChat`),()=>i(()=>n.onAskSideChat(t,e))));let a=$x(r,e,n.paneId);document.addEventListener(`selectionchange`,()=>{(!window.getSelection()||window.getSelection()?.isCollapsed)&&Yx()},{signal:a})}function nS(e){if(e.readSignal?.aborted)return;let t=document.createElement(`div`);t.className=`chat-annotation-editor`,t.setAttribute(`role`,`dialog`),t.setAttribute(`aria-label`,z(`chat.messages.annotationEditor`));let n=document.createElement(`textarea`);n.value=e.comment,n.rows=1,n.placeholder=z(`chat.messages.annotationComment`),n.setAttribute(`aria-label`,z(`chat.messages.annotationComment`));let r=()=>{Yx(),e.onCancel?.()},i=()=>{if(e.readSignal?.aborted){Yx();return}e.onSave(n.value)!==!1&&Yx()},a=eS(z(`chat.messages.saveAnnotation`),i);a.className=`btn primary chat-annotation-editor__confirm`,a.textContent=``,Tn(V.cornerDownLeft,a);let o=document.createElement(`div`);o.className=`chat-annotation-editor__controls`;let s=eS(z(`chat.messages.deleteAnnotation`),()=>{Yx(),e.readSignal?.aborted||(e.onDelete??e.onCancel)?.()});s.className=`btn btn--icon btn--ghost chat-annotation-editor__delete`,s.title=z(`chat.messages.deleteAnnotation`),s.textContent=``,Tn(V.trash,s);let c=eS(z(`common.cancel`),r);c.className=`btn`;let l=eS(z(`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&&!$p(e)&&(He(de.sendMessage,e)||He(de.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=$x(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,Qx(t,e.anchorElement?.getBoundingClientRect()??e.anchorRect)};n.addEventListener(`input`,d,{signal:u}),n.addEventListener(`compositionend`,em,{signal:u}),n.addEventListener(`keyup`,Qp,{signal:u}),n.addEventListener(`blur`,Qp,{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=()=>Yx();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),()=>{iS?.element===t&&Qx(t,e.anchorElement?.getBoundingClientRect()??e.anchorRect)}}function rS(e,t){let n=e.currentTarget instanceof HTMLElement?e.currentTarget:null;n&&(Yx(),aS={paneId:t.paneId,timer:window.setTimeout(()=>{aS=null;let e=window.getSelection(),r=e?Zx(e,n):null;r&&e&&n.isConnected&&tS(e.getRangeAt(0).getBoundingClientRect(),r,t)},0)})}var iS,aS;function oS(){return(oS=e((()=>{G(),B(),F(),la(),Zp(),re(),Wr(),iS=null,aS=null})))()}function sS(e){let t=bS.get(e);if(t)return t;let n={asyncQuestionDrafts:new Map,asyncQuestionRevision:0,turnRecapWatch:null,...xS,transcriptRenderDependencies:[],transcriptRenderContext:{}};return bS.set(e,n),n}function cS(e,t){let n=SS?.paneId===e?SS.element:null;return t.contains(t.ownerDocument.activeElement)||Xx(e)||N_(t)||!!(n&&(n.contains(document.activeElement)||N_(n)))}function lS(e,t){hS(e),t&&M_(t),Yx(e)}function uS(e,t){lS(e,t),t?.querySelectorAll(`.chat-thread`).forEach(es);let n=bS.get(e);n&&(n.asyncQuestionDrafts=new Map,n.transcriptRenderDependencies=[],Object.assign(n,xS))}function dS(e,t){lS(e,t);let n=e?[bS.get(e)]:bS.values();for(let e of n)e&&(e.asyncQuestionGeneration=(e.asyncQuestionGeneration??0)+1,e.asyncQuestionDrafts=new Map);e?bS.delete(e):bS.clear(),hf(e)}function fS(e,t){let n=sS(e);return n.searchOpen?W`
<div
class="agent-chat__search-bar"
@keydown=${e=>{e.key!==`Escape`||e.defaultPrevented||e.isComposing||e.keyCode===229||(e.preventDefault(),e.stopPropagation(),pS(n,t))}}
>
${V.search}
<input
type="text"
placeholder=${z(`chat.thread.searchPlaceholder`)}
aria-label=${z(`chat.thread.search`)}
.value=${n.searchQuery}
${n.searchFocusPending?q(e=>{e instanceof HTMLInputElement&&(n.searchFocusPending=!1,queueMicrotask(()=>{e.isConnected&&e.focus({preventScroll:!0})}))}):U}
@input=${e=>{n.searchQuery=e.target.value,t()}}
/>
<openclaw-tooltip .content=${z(`chat.thread.closeSearch`)}>
<button
class="btn btn--ghost"
aria-label=${z(`chat.thread.closeSearch`)}
@click=${()=>pS(n,t)}
>
${V.x}
</button>
</openclaw-tooltip>
</div>
`:U}function pS(e,t){let n=e.searchReturnFocusTarget,r=e.searchReturnFocusOwner;Object.assign(e,xS),t(),queueMicrotask(()=>{(n?.isConnected?n:r?.querySelector(`.agent-chat__composer-combobox > textarea`))?.focus({preventScroll:!0})})}function mS(e,t,n){let r=sS(e);if(r.searchOpen){pS(r,t);return}r.searchOpen=!0,r.searchFocusPending=!0;let i=n?.target,a=n?.currentTarget,o=e=>e instanceof HTMLElement&&e.isConnected?e:null;r.searchReturnFocusTarget=o(i),r.searchReturnFocusOwner=o(a),t()}function hS(e){let t=SS;if(e&&e!==t?.paneId)return;t&&(M_(t.element),t.element.remove()),SS=null;let n=document.querySelector(`.chat-reply-context-menu`);n&&(M_(n),n.remove()),t?.listeners.abort()}function gS(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 _S(e,t){gS(e),!(e.button!==0||e.ctrlKey||typeof t.onCompanionSelection!=`function`)&&rS(e,{paneId:t.paneId,onAddToChat:t.onAddToChat,onAskSideChat:(e,n)=>t.onCompanionSelection?.(e,n)})}function vS(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 yS(e,t){if(e.defaultPrevented||Kx(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=qx(n),o=window.getSelection(),s=vS(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(),hS();let b=document.createElement(`div`);b.className=`chat-reply-context-menu`,b.setAttribute(`role`,`menu`),b.setAttribute(`aria-label`,z(`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=>{ys(r,n,e).then(e=>{e&&SS?.element===b&&hS(t.paneId)})}})};if(s&&C(z(`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`,z(`chat.messages.replyToMessage`)),e.textContent=z(`chat.messages.reply`),e.addEventListener(`click`,()=>{t.onSetReply?.(c),hS(),t.onFocusComposer?.()}),b.append(e),x.push(e)}let w=!!(t.runActive||t.runWorking);if(g){let e=S({label:z(`chat.messages.rewindToHere`),disabled:w,tooltip:z(w?`chat.messages.rewindUnavailable`:`chat.messages.rewindToHere`),className:`chat-confirm-wrap chat-rewind-wrap`,onClick:()=>{R_(e,()=>{hS(),Promise.resolve(t.onRewindMessage?.(l)).then(e=>{e&&t.onFocusComposer?.()})})}})}_&&!p?C(js(),_):p&&S({label:js(),tooltip:js(),onClick:()=>{hS(),p?.click()}}),y&&S({label:z(`chat.messages.forkFromHere`),disabled:w,tooltip:z(w?`chat.messages.forkUnavailable`:`chat.messages.forkFromHere`),onClick:()=>{hS(),t.onForkMessage?.(l)}}),(n.closest(`openclaw-modal-dialog, dialog`)??document.body).appendChild(b);let T={element:b,paneId:t.paneId,listeners:new AbortController};SS=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||SS!==T)return;let e=e=>{b.contains(e.target)||hS()},n=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),hS(),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 bS,xS,SS;function CS(){return(CS=e((()=>{G(),H(),Vs(),B(),Fo(),F(),la(),Tt(),Vf(),Jx(),U_(),oS(),Wr(),bS=new Map,xS={searchOpen:!1,searchQuery:``,searchFocusPending:!1,searchReturnFocusTarget:null,searchReturnFocusOwner:null},SS=null})))()}var wS;function TS(){return(TS=e((()=>{Vf(),wS=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`||yf(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 ES;function DS(){return(DS=e((()=>{ES=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 OS(e){let t=no(e)?.content;return(Array.isArray(t)?t:[]).flatMap(e=>(Xi(e)??[]).filter(e=>e.type===`attachment_error`)).map(({attachment:e})=>`${e.label}: ${z(`chat.attachments.notSent`)}. ${Tc(e.code)}`).join(` `)||null}function kS(e){let t=Ci(e)?.trim();return[OS(e),t].filter(Boolean).join(` `)||null}function AS(e){let t=(e,t)=>({key:e,text:Ca(t,jS)});for(let n=e.length-1;n>=0;--n){let r=e[n];if(!r)continue;let i=kS;if(r.kind===`agent-run-frame`){if(r.outcome.kind===`completed`){let e=r.outcome.actionOwner,n=e?kS(e.message):null;if(e&&n)return t(e.key,n);i=OS}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 df(e).toReversed()){if(Sl(n)){let e=n.messages.reduce((e,t)=>e+(t.duplicateCount??1),0),r=n.senderSession?.label??n.senderSession?.sessionKey,i=z(r?e===1?`chat.messages.interSessionUpdateFrom`:`chat.messages.interSessionUpdatesFrom`:e===1?`chat.messages.interSessionUpdate`:`chat.messages.interSessionUpdates`,{count:String(e)});return t(n.messages.at(-1)?.key??n.key,r?`${i} ${r}`:i)}if(n.role.toLowerCase()===`assistant`)for(let e=n.messages.length-1;e>=0;--e){let r=n.messages[e],a=i(r?.message);if(a)return t(r?.key??n.key,a)}}}}return null}var jS,MS;function NS(){return(NS=e((()=>{F(),la(),wi(),ri(),vf(),Xl(),xc(),Wr(),jS=500,MS=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 PS(e,t,n,r,...i){let a=Math.max(0,Math.floor(n/12)-US),o=Math.min(e,Math.ceil((n+r)/12)+US),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 FS(e,t,n){let r={height:t.clientHeight,...Bc(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 IS(e,t){let n=e instanceof HTMLElement&&typeof getComputedStyle==`function`?Number.parseFloat(getComputedStyle(e).paddingTop):0;return(Number.isFinite(n)?n:0)+t}function LS(e,t){t!==e.options.scrollMargin&&e.setOptions({...e.options,scrollMargin:t})}function RS(){return{width:typeof window>`u`?0:window.innerWidth,height:typeof window>`u`?0:window.innerHeight}}function zS(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 BS(e,t,n){if(t||!n.targetWindow?.ResizeObserver){let r=t?.borderBoxSize?.[0]?.blockSize??br(e,t,n);if(r!==0||n.scrollElement?.clientHeight!==0)return r}let r=n.indexFromElement(e);return n.itemSizeCache.get(n.options.getItemKey(r))??n.options.estimateSize(r)}function VS(e){return e&&e.clientHeight>0?Math.max(0,e.scrollHeight-e.clientHeight):null}function HS(e,t){let n=VS(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 US,WS;function GS(){return(GS=e((()=>{xr(),fc(),US=6,WS=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 KS;function qS(){return(qS=e((()=>{fc(),GS(),cc(),KS=class{constructor(){this.offset=null,this.frame=null,this.maxOffset=null,this.lastOffset=null,this.composerResizePending=null}isResizeAnchor(e){let t=VS(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)}disconnect(){this.cancelComposerResize(),this.cancelReconcile()}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=VS(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)&&Bu(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=VS(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 JS(e,t,n,r){if(n===r)return r;let i=n-r;e.setOptions({...e.options,scrollMargin:IS(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 YS(){return(YS=e((()=>{GS()})))()}function XS(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 ZS(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 QS(e,t=getComputedStyle(e)){let n=t.boxSizing===`border-box`,r=(e,r,i)=>Number.parseFloat(t[e])+(n?0:Number.parseFloat(t[`padding${r}`])+Number.parseFloat(t[`padding${i}`])+Number.parseFloat(t[`border${r}Width`])+Number.parseFloat(t[`border${i}Width`]));return{width:r(`width`,`Left`,`Right`),height:r(`height`,`Top`,`Bottom`)}}var $S,eC,tC;function nC(){return(nC=e((()=>{G(),On(),cc(),$S=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}:QS(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=cl(t),r=n.scrollTop;e!==r&&this.onClamp(e,r),Bu(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}},eC=class extends Dn{render(e,t){return U}update(e,[t,n]){return e.element instanceof HTMLElement&&t.commitRange(e.element,n),U}},tC=En(eC)})))()}function rC({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 W`
<div
class="chat-thread-inner chat-thread-inner--virtual"
?data-measuring-rows=${c}
${q(a)}
${tC(l,n.getTotalSize()+u)}
@click=${{handleEvent:o,capture:!0}}
>
${i}
<div class="chat-virtual-sizer">
${r}
<div
class="chat-virtual-block"
style=${kn({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 U;let a=d[r-1],o=a&&n.index>a.index+1?n.start-a.end:0;return W`
${o>0?W`<div aria-hidden="true" style=${kn({height:`${o}px`})}></div>`:U}
<div
class="chat-virtual-row ${n.index===0?`chat-virtual-row--first`:``}"
style=${kn({containIntrinsicBlockSize:`${n.size}px`})}
data-index=${String(n.index)}
data-virtual-row-key=${i.key}
${q(s(i.key))}
>
${t(i)}
</div>
`})}
</div>
</div>
</div>
`}function iC(){return(iC=e((()=>{G(),H(),X(),wn(),nC()})))()}function aC(e,t){return t!==null&&e.maintenanceScrollOffset!==null&&Math.min(e.maintenanceScrollOffset,VS(t)??0)===t.scrollTop}function oC(e,t){let n=(VS(t)??0)-(t?.scrollTop??0);return aC(e,t)||e.pendingScrollOffset!==null||e.scrollCommand!==null&&n>8}function sC(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=VS(o);o&&s!==null&&Math.abs(s-o.scrollTop)<=1&&i()}function cC(e,t,n,r){let i=r.scrollElement,a=i?.scrollTop??0;Er(t,n,r),e.recordProgrammaticScroll?.(a,i?.scrollTop??0,n.behavior===void 0)}function lC(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&&Bu(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?pl(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,VS(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&&!Of(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=hr(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((VS(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()}}var uC;function dC(){return(dC=e((()=>{xr(),zf(),fc(),GS(),cc(),uC=class{constructor(){this.pendingScrollOffset=null,this.scrollCommand=null,this.touching=!1,this.touchScrolling=!1,this.renderedScrollState={atEnd:!1,touchActive:!1},this.maintenanceScrollOffset=null,this.pendingInteractionAnchor=null,this.syncNativeOffset=null,this.recordProgrammaticScroll=null}get touchActive(){return this.touching||this.touchScrolling}renderState(e){return{atEnd:e,touchActive:this.touchActive}}}})))()}function fC(e,t,n,r,i){if(!e||n.length===0)return null;let a=VS(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 pC(){return(pC=e((()=>{GS()})))()}function mC(e,t,n){let r=kr(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 hC(e,t,n){let r=new Map(t.map((e,t)=>[e,t])),i=new yr({...e.options,initialMeasurementsCache:e.takeSnapshot(),initialOffset:e.scrollOffset??e.options.initialOffset,initialRect:e.scrollRect??e.options.initialRect,onChange:()=>void 0,rangeExtractor:e=>mC(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 gC(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 _C(){return(_C=e((()=>{xr()})))()}function vC(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 yC(e,t,n){if(!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 bC;function xC(){return(xC=e((()=>{_C(),bC=class{constructor(){this.messageKeys=new Set,this.committedMessageRows=new Map,this.pending=null}get messageKey(){return this.pending?.messageKey??null}extractRange(e,t,n){let r=this.messageKey;return mC(e,t,[n,(r===null?null:this.committedMessageRows.get(r))??this.pending?.rowKey??null])}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??vC(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=yC(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 SC;function CC(){return(CC=e((()=>{SC=class{constructor(e,t){this.virtualizer=e,this.callbacks=t,this.refs=new Map,this.pruneQueued=!1,this.pendingRows=null}queueMountedRow(e,t){if(this.pendingRows){this.pendingRows.set(e,t);return}let n=new Map([[e,t]]);this.pendingRows=n,queueMicrotask(()=>{this.pendingRows=null;for(let[e,t]of n)e.isConnected&&e.dataset.virtualRowKey===t&&this.callbacks.isCurrentRow(e,t)&&this.virtualizer.measureElement(e)})}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 wC,TC;function EC(){return(EC=e((()=>{wC=2,TC=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:wC}))}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===wC&&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(){for(let e of[`overscanFrame`,`measureFrame`]){let t=this[e];t!==null&&(cancelAnimationFrame(t),this[e]=null)}this.presented=!1,this.renderedRows=!1,this.virtualizer.setOptions({...this.virtualizer.options,overscan:6})}}})))()}function DC(e){let t=e.offsetState.pendingScrollOffset;if(!t||!e.isConnected())return;if(e.isContentReady()&&e.getRowCount()===0){kC(e,0);return}let n=VS(e.getScrollElement());if(n===null||n===0&&t.offset>0){t.observedMaxOffset=void 0,t.stableFrames=0,n===null?t.zeroMaxFrames=0:e.isContentReady()&&(t.zeroMaxFrames>=60?kC(e,0):OC(e));return}if(t.zeroMaxFrames=0,n<t.offset&&(t.observedMaxOffset!==n&&(t.observedMaxOffset=n,t.stableFrames=0),t.stableFrames<=12)){OC(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?OC(e):kC(e,a)}function OC(e){e.isConnected()&&e.pendingScrollFrame===null&&(e.pendingScrollFrame=requestAnimationFrame(()=>{e.pendingScrollFrame=null;let t=e.offsetState.pendingScrollOffset;if(e.isConnected()&&t){let n=VS(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),DC(e)}}))}function kC(e,t){let n=e.offsetState.pendingScrollOffset;if(e.offsetState.pendingScrollOffset=null,!n)return;let r=VS(e.getScrollElement());n.onSettled?.({scrollTop:t,anchorToEnd:r===null?e.isContentReady()&&e.getRowCount()===0:r-t<=8}),e.onReaderScroll()}function AC(){return(AC=e((()=>{fc(),GS(),EC()})))()}function jC(e,t){return e!=null&&Math.abs(e-t)<.5}var MC;function NC(){return(NC=e((()=>{xr(),GS(),nC(),MC=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=IS(e.scrollElement,this.owner.getHeaderHeight());if(n&&i===e.options.scrollMargin&&jC(this.observedWidth,r.width)&&jC(this.observedHeight,r.height)&&jC(e.scrollRect?.width,r.width)&&jC(e.scrollRect?.height,r.height))return;n=!0;let a=this.owner.positionRail.read();this.owner.commitComposerResize();let o=this.observedWidth!==null&&!jC(this.observedWidth,r.width),s=this.observedHeight!==null&&!jC(this.observedHeight,r.height);this.observedWidth=r.width,this.observedHeight=r.height,LS(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=QS(t);r({width:Math.round(e.width),height:Math.round(e.height)})}};this.syncRect=i;let a=Nr(e,r);return()=>{a?.(),this.syncRect===i&&(this.syncRect=null)}}}recordMeasuredWidth(e){this.observedWidth=Math.round(e)}sync(){this.syncRect?.()}}})))()}var PC;function FC(){return(FC=e((()=>{xr(),G(),dn(),Mb(),TS(),DS(),NS(),qS(),GS(),YS(),nC(),iC(),dC(),pC(),xC(),_C(),CC(),AC(),EC(),NC(),PC=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?.(),zS(this.scrollElement,this.virtualizer)}constructor(e,t=null,n,r={}){this.host=e,this.callbacks=r,this.offsetState=new uC,this.entryAnimations=new wS,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 KS,this.recordEndLayoutCorrection=(e,t)=>{this.endAnchor.recordLayoutCorrection(e,t),this.scheduleEndReconcile()},this.layout=new $S(this.recordEndLayoutCorrection),this.followEnd=()=>this.scrollToEnd({source:`auto`,behavior:`auto`}),this.reconcileEnd=()=>{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))},this.messageReveal=new ES,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=XS(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 bC,this.candidateMessageRowKeysById=new Map,this.candidateMessageRowsByKey=new Map,this.renderPreviousRows=null,this.focusedRowKey=null,this.announcement=new MS,this.mcpAppUnmountGate=new an(this),this.requestUpdate=()=>this.host.requestUpdate(),this.positionRail=new WS(this,()=>this.threadInnerElement),this.viewportRect=new MC({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 yr({onChange:()=>this.host.requestUpdate(),count:0,getScrollElement:()=>this.scrollElement,estimateSize:()=>120,getItemKey:()=>``,initialRect:RS(),initialOffset:t??2**53-1,anchorTo:`end`,followOnAppend:!1,scrollToFn:(e,t,n)=>cC(this.offsetState,e,t,n),observeElementRect:this.viewportRect.observe,observeElementOffset:(e,t)=>lC({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:BS,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 TC(this,this.virtualizer,r,()=>this.measureConnectedRows()),this.rowRefs=new SC(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,pendingScrollFrame:null,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(Ab,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)}scheduleEndReconcile(){this.connected&&this.endAnchor.scheduleReconcile(this.reconcileEnd)}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()),DC(this.scrollRestoreHost),e?this.endAnchor.cancelReconcile():this.scheduleEndReconcile()}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.scrollRestoreHost.pendingScrollFrame!==null&&(cancelAnimationFrame(this.scrollRestoreHost.pendingScrollFrame),this.scrollRestoreHost.pendingScrollFrame=null),this.threadInnerElement=null,this.connected){this.connected=!1,this.host instanceof HTMLElement&&this.host.removeEventListener(Ab,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=U,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),(u||this.messageRowKeysById!==c)&&this.offsetState.scrollCommand?.target===`message`&&queueMicrotask(()=>this.completeMessageReveal()),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=JS(f,this.scrollElement,this.headerHeight,this.appliedHeaderHeight),this.announcement.sync(i,a),rC({layout:this.layout,headerHeight:this.headerHeight,rows:n,renderRow:r,virtualizer:f,overlay:o,header:s?.template??U,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?hC(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()||aC(this.offsetState,this.scrollElement)}get isProgrammaticScroll(){return oC(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:(sC(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.scrollRestoreHost.pendingScrollFrame!==null&&(cancelAnimationFrame(this.scrollRestoreHost.pendingScrollFrame),this.scrollRestoreHost.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 fC(this.scrollElement,this.virtualizer,e,this.messageRowKeysById,this.rowIndexesByKey)}revealMessage(e){let t=this.messageRowKeysById.get(e)??this.candidateMessageRowKeysById.get(e);if(!t)return!1;this.cancelScroll(),this.offsetState.scrollCommand={behavior:cd(),target:`message`,messageId:e};let n=this.rowIndexesByKey.get(t);return n!==void 0&&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=gC(this.scrollElement,e.target)}handleFocusOut(e){this.focusedRowKey=gC(this.scrollElement,e.relatedTarget)}reconcileInteractionResize(e){let t=this.virtualizer;ZS(this.offsetState.pendingInteractionAnchor,e,this.scrollElement,t)&&(this.offsetState.pendingInteractionAnchor=null)}syncRows(e){let t=this.virtualizer;this.rowKeys=Object.freeze(e);let n=new Map(this.rowKeys.map((e,t)=>[e,t]));this.rowIndexesByKey=n,this.rowRefs.retainKeys(n),this.appliedHeaderHeight=this.headerHeight,t.setOptions({...t.options,count:e.length,getItemKey:t=>e[t]??`missing:${t}`,rangeExtractor:e=>this.prependAnchor.extractRange(e,n,this.focusedRowKey),scrollMargin:IS(this.scrollElement,this.headerHeight)})}reconcileImplicitEndAnchor(){if(!this.implicitEndAnchorPending||!this.connected||!this.contentReady)return;let e=HS(this.scrollElement,this.virtualizer);this.implicitEndAnchorPending=e===`pending`,e!==`pending`&&this.canAutoFollow()&&this.endAnchor.capture(this.scrollElement),e===`corrected`&&this.host.requestUpdate()}}})))()}var IC;function LC(){return(LC=e((()=>{R(),fc(),FC(),IC=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||!it(this.activeSessionKey,e)){this.sessionVirtualizer?.dispose();let t=this.scrollPaneId(),n=nl(t,e),r=n?.anchorToEnd?null:n?.scrollTop??null;this.activeSessionKey=e,this.sessionVirtualizer=new PC(this.host,r,n=>Il(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 RC(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 zC(e,t,n){let r={id:Kl(),mimeType:`text/plain`,fileName:`selection-comment.txt`,selectionAnnotation:{...e}};if(t.selectionContextOnly)return r;let i=RC(e),a=new File([i],r.fileName,{type:r.mimeType});return $l([a],t.attachmentLimits,n).length===0?null:ld({attachment:{...r,sizeBytes:a.size},dataUrl:ql(i),file:a})}function BC(){return(BC=e((()=>{Qc(),ac(),jc()})))()}function VC(e){return e===`draft`?V.pencil:e===`shared`?V.users:V.lock}function HC(e,t){if(t?.startsWith(`public:`)){if(!e.session||!UC(e.session)||e.state?.loading||!e.state?.result)return;t===`public:copy`&&e.state.result.publicShare?e.onCopyPublicLink?.():!e.publicShareDisabledReason&&(t===`public:enable`||t===`public:disable`)&&e.onPublicShareChange?.(t===`public:enable`);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 UC(e){return e.sharingRole===`admin`||e.sharingRole===`owner`}function WC(e){if(!e.state?.result?.publicShare)return U;let t=z(`chat.sessionSharing.worldReadable`);return W`<span
class="chat-pane__public-share-indicator"
role="status"
aria-label=${t}
title=${t}
>
<span aria-hidden="true">${V.globe}</span>
<span>${z(`chat.sessionSharing.publicIndicator`)}</span>
</span>`}function GC(e,t=!1){let n=e.session;if(!n)return U;let r=n.visibility??`shared`,i=UC(n),a=e.state?.result,o=a?.publicShare,s=a?.owner??n.owner?.actor,c=jo(s?.identity?.type===`profile`?s.identity.id:void 0,e.personActivity,s?.label);if(!i)return r===`draft`?W`${e.showOwner&&s?ls(Bo(s,`header`,`owned`,e.ownerViewing),c):U}<span class="chat-pane__draft-indicator" title=${z(`chat.sessionSharing.draft`)}
>${VC(`draft`)}</span
>`:U;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=W`
${f?W`<wa-dropdown-item
value="visibility:shared"
class="session-menu__item chat-pane__publish-draft"
?disabled=${!!e.visibilityDisabledReason}
title=${e.visibilityDisabledReason??U}
>
<span class="session-menu__text">${z(`chat.sessionSharing.publishDraft`)}</span>
<span slot="details" aria-hidden="true">${V.users}</span>
</wa-dropdown-item>
<div class="session-menu__separator" role="separator"></div>`:U}
<div class="chat-pane__sharing-title chat-pane__sharing-visibility-title">
${z(`chat.sessionSharing.visibility`)}
</div>
${m.map(t=>{let n=t===r;return W`
<wa-dropdown-item
class="session-menu__item chat-pane__sharing-visibility-item"
value=${`visibility:${t}`}
role="menuitemradio"
aria-checked=${String(n)}
${q(e=>Qo(e,n))}
?disabled=${!!e.visibilityDisabledReason}
title=${e.visibilityDisabledReason??U}
>
<span slot="icon" class="session-menu__icon" aria-hidden="true"
>${VC(t)}</span
>
<span class="session-menu__text">${z(KC[t])}</span>
${n?W`<span slot="details" class="session-menu__check" aria-hidden="true"
>${V.check}</span
>`:U}
</wa-dropdown-item>
`})}
${e.onPublicShareChange?W`
<div class="session-menu__separator" role="separator"></div>
<div class="chat-pane__sharing-title">${z(`chat.sessionSharing.publicAccess`)}</div>
<div class="chat-pane__sharing-status">
${z(e.state?.loading||!a?`common.loading`:o?`chat.sessionSharing.worldReadable`:`chat.sessionSharing.notPublic`)}
</div>
${o?W`<wa-dropdown-item
class="session-menu__item"
value="public:copy"
?disabled=${!!e.state?.loading}
>${z(`chat.sessionSharing.copyPublicLink`)}</wa-dropdown-item
>`:U}
<wa-dropdown-item
class="session-menu__item"
value=${o?`public:disable`:`public:enable`}
?disabled=${!!(e.publicShareDisabledReason||e.state?.loading||!a)}
title=${e.publicShareDisabledReason??U}
>
${z(o?`chat.sessionSharing.disablePublicAccess`:`chat.sessionSharing.enablePublicAccess`)}
</wa-dropdown-item>
`:U}
${s?W`
<div class="chat-pane__sharing-title chat-pane__sharing-owner-title">
${z(`chat.sessionSharing.owner`)}
</div>
<div class="chat-pane__sharing-owner">
<span class="chat-pane__sharing-member-icon" aria-hidden="true">
${s.type===`human`?Ro(Bo(s,`header`,`owned`,e.ownerViewing),c):V.bot}
</span>
${as(s.label??s.id??z(`chat.sessionSharing.owner`),c,`session-menu__text`)}
</div>
`:U}
${p?W`
<div class="chat-pane__sharing-title chat-pane__sharing-members-title">
${z(`chat.sessionSharing.members`)}
</div>
${e.state?.loading?W`
<div
class="chat-pane__sharing-members-loading"
role="status"
aria-busy="true"
aria-label=${z(`common.loading`)}
>
${Array.from({length:3},()=>W`
<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>
`:u.length>0?Ks(u.map(t=>({text:[t.label,t.id,t.type].join(` `),render:()=>{let n=l.has(t.id)?e.memberRemoveDisabledReason:e.memberAddDisabledReason;return W`
<wa-dropdown-item
class="session-menu__item chat-pane__sharing-member"
value=${`member:${t.id}`}
?disabled=${!!n}
title=${n??U}
>
<span
slot="icon"
class="chat-pane__sharing-member-icon"
aria-hidden="true"
>
${t.type===`human`?Bo(t,`header`):V.bot}
</span>
<span
class="session-menu__text chat-pane__sharing-member-label"
title=${n?U:t.label??t.id}
>${t.label??t.id}</span
>
${l.has(t.id)?W`<span
slot="details"
class="session-menu__check"
aria-label=${z(`chat.sessionSharing.selected`)}
>${V.check}</span
>`:U}
</wa-dropdown-item>
`}})),a):W`<div class="chat-pane__sharing-status">
${z(`chat.sessionSharing.noPeople`)}
</div>`}
`:U}
${e.state?.error?W`<div class="chat-pane__sharing-status chat-pane__sharing-status--error" role="alert">
${e.state.error}
</div>`:U}
`;return t?g:W`
${WC(e)}
<wa-dropdown
class="chat-pane__sharing-menu ${h?`chat-pane__sharing-menu--capped`:``}"
placement="bottom-end"
@keydown=${vs}
@wa-show=${()=>{e.openDisabledReason||e.onOpen()}}
@wa-select=${t=>{HC(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=${z(`chat.sessionSharing.menu`)}
?disabled=${!!e.openDisabledReason}
title=${e.openDisabledReason??z(`chat.sessionSharing.current`,{visibility:z(KC[r])})}
>
${VC(r)}
</button>
${g}
</wa-dropdown>
`}var KC;function qC(){return(qC=e((()=>{G(),H(),B(),$s(),Bs(),ts(),Yo(),F(),KC={shared:`chat.sessionSharing.shared`,"read-only":`chat.sessionSharing.readOnly`,suggest:`chat.sessionSharing.suggest`,draft:`chat.sessionSharing.draft`}})))()}var JC;function YC(){return(YC=e((()=>{jn(),M(),JC=class extends Ve{constructor(...e){super(...e),this.sessionKey=``,this.presented=!0,this.disclosure=null,this.handleToggle=e=>{e.target===this.disclosure&&this.handleVisibility()}}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.disconnect(),super.disconnectedCallback()}get visible(){return this.isConnected&&this.presented&&this.disclosure?.open===!0&&this.ownerDocument.visibilityState!==`hidden`}},Z([K({attribute:!1})],JC.prototype,`gateway`,void 0),Z([K({attribute:!1})],JC.prototype,`pullRequest`,void 0),Z([K({attribute:!1})],JC.prototype,`sessionKey`,void 0),Z([K({type:Boolean})],JC.prototype,`presented`,void 0)})))()}function XC(e){return e.status===`in_progress`?`running`:nw.get(e.conclusion??``)??`queued`}function ZC(e){let[t,n]=rw[e],r=z(t);return W`<span
class="chat-ci__status"
data-state=${e}
role="img"
aria-label=${r}
title=${r}
>${n}</span
>`}function QC(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?ti(r-n)??``:``}var $C,ew,tw,nw,rw,iw;function aw(){return(aw=e((()=>{G(),jn(),X(),en(),B(),F(),ip(),da(),ot(),tt(),YC(),dp(),$C=3e4,ew=mn(An`<circle cx="12" cy="12" r="10" /><path d="M8 12h8" />`),tw={failed:0,running:1,passed:2,skipped:3},nw=new Map([[`success`,`passed`],[`failure`,`failed`],[`timed_out`,`failed`],[`action_required`,`failed`],[`startup_failure`,`failed`],[`skipped`,`skipped`],[`neutral`,`skipped`],[`cancelled`,`skipped`]]),rw={passed:[`chat.pullRequests.checksPassed`,V.check],failed:[`chat.pullRequests.checksFailed`,V.circleX],running:[`chat.pullRequests.checksRunning`,V.loader],skipped:[`chat.pullRequests.checksSkipped`,ew],queued:[`chat.pullRequests.checksQueued`,V.clock]},iw=class extends JC{constructor(...e){super(...e),this.loading=!1,this.error=null,this.connection=Me({client:null,phase:`stopped`}),this.target=``,this.requestGeneration=0,this.retryAt=0,this.expandedJobs=new Map,this.expansionInitialized=!1,this.handleVisibility=()=>{this.visible?this.load():this.cancelRequest()}}disconnect(){this.stopGateway?.(),this.stopGateway=void 0,this.boundGateway=void 0,this.connection.transition({client:null,phase:`stopped`}),this.reset()}targetKey(){let e=this.pullRequest;return JSON.stringify([this.sessionKey,e?.owner,e?.repo,e?.number,e?.headSha])}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=z(`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=z(`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)=>tw[e.state]-tw[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(),$C))}catch(e){c()&&(this.result=void 0,this.error=st(e,z(`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 W`<div class="chat-ci__notice" role="status">
${z(`chat.pullRequests.checksLoading`)}
</div>`;if(!t&&!n&&!r&&!i)return U;let a=Math.max(0,this.retryAt-Date.now());return W`<div
class="chat-ci__notice"
role="status"
data-state=${t?`rate-limited`:`unavailable`}
>
<span
>${this.error??z(t?`chat.pullRequests.checksRateLimited`:n?`chat.pullRequests.checksStale`:`chat.pullRequests.checksUnavailable`)}
${a>0?z(`chat.pullRequests.checksRetryAfter`,{duration:ti(a)??``}):U}
</span>
<button
class="chat-ci__retry"
type="button"
?disabled=${this.loading||a>0}
@click=${()=>void this.load()}
>
${z(`common.retry`)}
</button>
</div>`}renderJob(e){let t=e.detailsUrl?Ze(e.detailsUrl,this.ownerDocument.baseURI):null,n=e.state===`running`&&e.status!==`in_progress`?`queued`:e.state;return W`<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">
${ZC(n)}
<span class="chat-ci__name">${e.name}</span>
<span class="chat-ci__duration">${QC(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?W`<ol class="chat-ci__steps" role="list">
${J(e.steps.toSorted((e,t)=>e.number-t.number),e=>e.number,e=>{let t=XC(e);return W`<li class="chat-ci__step" data-state=${t} value=${e.number}>
${ZC(t)}<span class="chat-ci__name">${e.name}</span>
<span class="chat-ci__duration">${QC(e,t===`running`)}</span>
</li>`})}
</ol>`:W`<div class="chat-ci__empty-steps">
${e.source===`check`?z(`chat.pullRequests.checksNoSteps`):z(`chat.pullRequests.checksStepsUnavailable`)}
</div>`}
${t?W`<a
class="chat-ci__job-link"
href=${t}
target="_blank"
rel="noopener noreferrer"
>${e.source===`actions`?z(`chat.pullRequests.openJob`):z(`chat.pullRequests.openCheck`)}${V.externalLink}</a
>`:U}
</div>
</details>`}render(){let e=this.result?.checks??[],t=e.filter(e=>e.state!==`skipped`).toSorted((e,t)=>tw[e.state]-tw[t.state]),n=e.filter(e=>e.state===`skipped`),r=e=>J(e,e=>e.id,e=>this.renderJob(e));return W`${this.renderNotice()}
<div class="chat-ci__jobs" aria-busy=${this.loading?`true`:`false`}>
${r(t)}
${n.length?W`<details class="chat-ci__skipped">
<summary>
${ZC(`skipped`)}<span
>${z(`chat.pullRequests.checksSkippedCount`,{count:String(n.length)})}</span
>
<span class="chat-ci__chevron" aria-hidden="true">${V.chevronDown}</span>
</summary>
${r(n)}
</details>`:U}
${this.result?.status===`ready`&&!e.length&&!this.result.rateLimited&&!this.result.error?W`<div class="chat-ci__notice">${z(`chat.pullRequests.checksEmpty`)}</div>`:U}
</div>`}},Z([Y()],iw.prototype,`loading`,void 0),Z([Y()],iw.prototype,`result`,void 0),Z([Y()],iw.prototype,`error`,void 0),customElements.get(`openclaw-chat-ci-details`)||customElements.define(`openclaw-chat-ci-details`,iw)})))()}function ow(e){let t=e?.state.autoDisabled,n=e?.state.lastError;return!t&&!n?U:W`<div class="chat-ci__automation-job-error" role="status">
${t?W`<div>
${z(t.reason===`schedule-errors`?`chat.pullRequests.automationScheduleDisabled`:`chat.pullRequests.automationFailureDisabled`,{count:String(t.consecutiveErrors)})}
</div>`:U}
${n?W`<div>${z(`chat.pullRequests.automationLastError`,{error:n})}</div>`:U}
</div>`}function sw(e){return W`
<div class="chat-ci__automation">
<fieldset
class="chat-ci__automation-options"
aria-label=${z(`chat.pullRequests.automationLabel`)}
?disabled=${e.disabled}
>
${cw.map(([t,n])=>W`
<div class="chat-ci__automation-row">
<label class="chat-ci__automation-option">
<input
class="chat-ci__automation-checkbox"
type="checkbox"
name=${t}
.checked=${Rn(e.options[t])}
?disabled=${e.pending[t]!==void 0}
@change=${n=>{n.currentTarget instanceof HTMLInputElement&&e.onChange(t,n.currentTarget.checked)}}
/>
<span class="chat-ci__automation-label">${z(n)}</span>
</label>
${ow(e.jobs?.[t])}
</div>
`)}
</fieldset>
${e.schedulerEnabled===!1?W`<p class="chat-ci__automation-warning" role="status">
${z(`chat.pullRequests.automationSchedulerDisabled`)}
</p>`:U}
${e.disabledReason?W`<div class="chat-ci__automation-status" role="status">
${e.disabledReason}
</div>`:U}
${e.error?W`
<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}
>
${z(`chat.pullRequests.automationRetry`)}
</button>
</div>
`:U}
</div>
`}var cw;function lw(){return(lw=e((()=>{G(),Fn(),F(),ip(),dp(),cw=[[`autoFix`,`chat.pullRequests.automationAutoFix`],[`autoMerge`,`chat.pullRequests.automationAutoMerge`],[`autoArchive`,`chat.pullRequests.automationAutoArchive`]]})))()}var uw;function dw(){return(dw=e((()=>{wa(),jn(),F(),ot(),zr(),lf(),lw(),YC(),uw=class extends JC{constructor(...e){super(...e),this.sessionId=``,this.jobs={},this.loading=!1,this.pending={},this.loaded=!1,this.error=null,this.connection=Me({client:null,phase:`stopped`}),this.connectionRevision=-1,this.connectionGeneration=-1,this.authKey=``,this.targetKey=``,this.version=0,this.readGeneration=0,this.refreshPending=!0,this.handleVisibility=()=>{this.visible||this.cancelRead(),this.invalidate()}}disconnect(){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()}get saving(){return Object.keys(this.pending).length>0}automationTarget(){let e=this.pullRequest,t=Qa(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=>Lr(this.gateway?.snapshot,e,`operator.read`,{requireAdvertisement:!1}))}canManage(){return[`cron.add`,`cron.update`].every(e=>Lr(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.pending={},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;let r=()=>e.current()&&this.visible&&n===this.readGeneration;try{let[n,i]=await Promise.all([nf(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=st(e,z(`chat.pullRequests.automationLoadFailed`)))}finally{r()&&(this.loading=!1,this.readController=void 0,this.requestUpdate())}}async setEnabled(e,t){if(!this.visible||!this.loaded||this.pending[e]!==void 0||!this.canRead()||!this.canManage())return;let n=this.capture();if(n&&n.current()){this.cancelRead(),this.pending={...this.pending,[e]:t},this.error=null;try{let r=await rf(n.client,n.target,e,t,this.jobs[e]);if(!n.current())return;this.jobs={...this.jobs,[e]:r}}catch(e){n.current()&&(this.loaded=!1,this.error=st(e,z(`chat.pullRequests.automationSaveFailed`)))}finally{if(n.current()){let t={...this.pending};delete t[e],this.pending=t,this.requestUpdate()}}}}render(){let e=this.automationTarget()?this.canRead()?this.canManage()?void 0:z(`chat.pullRequests.automationAdminRequired`):z(`chat.pullRequests.automationReadRequired`):z(`chat.pullRequests.automationSessionRequired`);return sw({options:{autoFix:this.pending.autoFix??this.jobs.autoFix?.enabled===!0,autoMerge:this.pending.autoMerge??this.jobs.autoMerge?.enabled===!0,autoArchive:this.pending.autoArchive??this.jobs.autoArchive?.enabled===!0},jobs:this.jobs,pending:this.pending,schedulerEnabled:this.schedulerEnabled,loading:this.loading,saving:this.saving,error:this.error,disabled:!!e||!this.loaded,disabledReason:e,retryDisabled:!this.automationTarget()||!this.canRead(),onChange:(e,t)=>void this.setEnabled(e,t),onRetry:()=>{this.error=null,this.invalidate()}})}},Z([K({attribute:!1})],uw.prototype,`sessionId`,void 0),Z([Y()],uw.prototype,`jobs`,void 0),Z([Y()],uw.prototype,`loading`,void 0),Z([Y()],uw.prototype,`pending`,void 0),Z([Y()],uw.prototype,`loaded`,void 0),Z([Y()],uw.prototype,`schedulerEnabled`,void 0),Z([Y()],uw.prototype,`error`,void 0),customElements.get(`openclaw-chat-ci-automation`)||customElements.define(`openclaw-chat-ci-automation`,uw)})))()}function fw(e){return z(e===`personal`?`githubPublication.personal`:e===`agent-override`?`githubPublication.agent`:`githubPublication.system`)}function pw(e){if(e.result?.status===`published`)return W`<a
class="chat-pr__create"
href=${e.result.url}
target="_blank"
rel="noopener noreferrer"
>
${z(`chat.pullRequests.openPublishedPr`)}
</a>
${e.onNewAction?W`<button
class="chat-pr__dismiss"
type="button"
aria-label=${z(`common.dismiss`)}
?disabled=${e.activity!==null}
@click=${e.onNewAction}
>
${V.x}
</button>`:U}`;if(e.optionsUnavailable)return _w(e,`${z(`githubPublication.statusUnavailable`)}: ${e.error}`);let t=af(e.options),n=e.options?.shared;if(e.result||e.locked||!e.onSelect||!n||!t)return hw(e);let r=[{source:`shared`,account:n,label:fw(n.source)},{source:`personal`,account:t.account,label:fw(`personal`)}];return W`
${hw(e)}
<wa-dropdown
class="chat-pr__accounts"
placement="top-end"
aria-label=${z(`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=${z(`githubPublication.account`)}
?disabled=${e.activity!==null}
>
${V.chevronDown}
</button>
${r.map(({source:r,account:i,label:a})=>{let o=e.selection?.source===r;return W`
<wa-dropdown-item
class="session-menu__item"
value=${r}
role="menuitemradio"
aria-checked=${String(o)}
?disabled=${e.activity!==null}
${q(e=>Qo(e,o))}
>
<span class="session-menu__text"
>@${i.login}${n.login===t.account.login?W` · ${a}`:U}</span
>
<span slot="details" class="session-menu__icon" aria-hidden="true">
${o?V.check:U}
</span>
</wa-dropdown-item>
`})}
</wa-dropdown>
`}function mw(e){return e.selection??(e.options?.shared?null:af(e.options))}function hw(e){let{result:t,activity:n}=e,r=mw(e),i=n!==null,a=z(n===`read`?`common.loading`:`chat.pullRequests.publishing`),o;return o=t?.status===`failed`?{click:e.onNewAction,label:z(e.canPublishShared||e.canPublishPersonal?`githubPublication.newAction`:`common.dismiss`),disabled:i}:t?.status===`needs_confirmation`?{click:e.onConfirm,label:z(`githubPublication.confirm`),disabled:i||!e.personalReady}:t?.status===`publishing`||t?.status===`requested`?{click:e.onRefresh,label:i?a:z(`githubPublication.check`),disabled:i}:{click:e.onPublish,disabled:i||!r||r.source===`personal`&&!e.personalReady,label:i?a:e.locked?z(`chat.pullRequests.retryPublication`):!e.selection&&r?.source===`personal`?z(`githubPublication.publishAs`,{account:r.account.login}):z(`chat.pullRequests.publishPr`)},o.click||t?.status===`publishing`||t?.status===`requested`?W`<button
class="chat-pr__create"
type="button"
?disabled=${o.disabled}
@click=${o.click}
>
${o.label}
</button>`:U}function gw(e){let{selection:t,result:n}=e,r=n?n.publisher:Kd(t);return r?W`<span data-publication-account>
${z(`githubPublication.publishAs`,{account:r.login})} ·
${fw(r.source)}
</span>`:U}function _w(e,t){let n=z(`githubPublication.refresh`);return W`<openclaw-tooltip content=${t??n}>
<button
class="btn btn--ghost btn--icon chat-icon-btn chat-pr__publication-refresh"
type="button"
aria-label=${n}
@click=${e.onRefresh}
>
${V.refresh}
</button>
</openclaw-tooltip>`}function vw(e){return e?W`<span
>${z(e.status===`dispatched`?`githubPublication.dispatched`:`githubPublication.observed`,{kind:z(e.kind===`push`?`githubPublication.effectPush`:`githubPublication.effectPullRequest`)})}
${e.headCommit?W`<code>${e.headCommit}</code>`:U}
${e.url?W`<a href=${e.url} target="_blank" rel="noopener noreferrer"
>${z(`githubPublication.effectLink`)}</a
>`:U}
</span>`:U}function yw(e,t){let{result:n,error:r,locked:i}=e;if(r)return{text:z(`githubPublication.statusUnavailable`),alert:!0};switch(n?.status){case`failed`:return{text:z(`githubPublication.statusFailed`),alert:!0};case`needs_confirmation`:return{text:z(`githubPublication.statusConfirm`),alert:!1};case`publishing`:return{text:z(`githubPublication.statusPublishing`),alert:!1};case`requested`:return{text:z(`githubPublication.statusRequested`),alert:!1};default:return i?t?{text:z(`githubPublication.statusPublishing`),alert:!1}:{text:z(`githubPublication.statusUnknown`),alert:!0}:null}}function bw(e,{inline:t=!1}={}){let{result:n,confirmation:r,activity:i,locked:a,error:o,options:s}=e,c=mw(e);if(n?.status===`published`&&!o||e.optionsUnavailable)return U;let l=i!==null,u=c?.source===`personal`&&!e.personalReady,d=s&&!s.shared&&!af(s)&&!c&&!n&&!a&&!l&&(e.canPublishShared||e.canPublishPersonal);if(!n&&!r&&!o&&!a&&!u&&!d)return U;let f=yw(e,l),p=!l&&(o||n?.status===`failed`||n?.status===`needs_confirmation`&&!e.onConfirm),m=n||a||o?W`<div class="chat-pr__publication-more">
${gw(e)}
${n&&n.status!==`published`&&n.status!==`failed`?W`<span>${n.message}</span>`:U}
${n?.status===`failed`?W`<span>${n.nextAction}</span>`:U}
${o?W`<span>${o}</span>`:U}
${a&&!n&&!l?W`<span>${z(`githubPublication.unknown`)}</span>`:U}
${vw(n?.effect)}
</div>`:U;return W`<div class="chat-pr__publication-outcome" data-state=${n?.status??`selection`}>
${t?m:f?W`<details class="chat-pr__publication-status">
<summary>
<span
class="chat-pr__publication-headline"
role=${f.alert?`alert`:`status`}
>${f.text}</span
>
<span class="chat-pr__publication-chevron" aria-hidden="true"
>${V.chevronDown}</span
>
</summary>
${m}
</details>`:U}
${p?_w(e):U}
${d?W`<span class="chat-pr__publication-note">${z(s.personal===null?`githubPublication.unidentified`:`githubPublication.connectHelp`)}</span>`:U}
${r?W`<div class="chat-pr__publication-note">
<div>
${z(`githubPublication.target`,{repository:r.repository,base:r.baseBranch})}
</div>
<div>
${z(`githubPublication.pushTarget`,{repository:r.pushRepository,branch:r.branch})}
</div>
<details>
<summary>${z(`githubPublication.snapshot`)}</summary>
<div>
${z(`githubPublication.head`)}: <code>${r.sourceHeadCommit}</code>
</div>
<div>
${z(`githubPublication.index`)}: <code>${r.sourceIndexTree}</code>
</div>
<div>
${z(`githubPublication.workspace`)}: <code>${r.workspaceTree}</code>
</div>
</details>
</div>`:U}
${u?W`<span class="chat-pr__publication-note"
>${z(`githubPublication.personalWorkspace`)}</span
>`:U}
</div>`}function xw(){return(xw=e((()=>{mo(),G(),H(),B(),Tt(),Yo(),F(),Zd()})))()}function Sw(e){return`${e.owner}/${e.repo}#${e.number}`.toLowerCase()}function Cw(e){return`${e.owner}/${e.repo}`.toLowerCase()+`@${e.branch}`}function ww(e){try{let t=JSON.parse(e.getItem(Fw)??`{}`);if(!to(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 Tw(e){let t=D();return!t||!e?new Set:new Set(ww(t)[e]??[])}function Ew(e,t){let n=D();if(!n||!e)return new Set([t]);let r=ww(n),i=new Set(r[e]??[]);i.add(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(Fw,JSON.stringify(r))}catch{}return i}function Dw(e,t,n){return t===0?U:W`
<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 Ow(e,t){let n=e.checks,r=z(n?Lw[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,Qs(e,`top`,{alignment:`end`});let t=e.querySelector(`:scope > wa-popup[data-anchored-overlay]`);t&&!o()&&(t.active=!1)};return W`
<details
class="chat-pr__checks"
data-checks=${n?.state??`none`}
${q(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>
${z(`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`?zn:Oe({owner:a.owner,isPresented:()=>o()&&!!i?.open})}
>
<div
class="chat-pr__checks-menu"
role="group"
aria-label=${z(`chat.pullRequests.ciMonitoring`)}
>
<div class="chat-pr__checks-menu-header">
<span>${z(`chat.pullRequests.ciMonitoring`)}</span>
<a
href=${e.checksUrl??e.url}
target="_blank"
rel="noopener noreferrer"
aria-label=${z(`chat.pullRequests.openChecks`)}
>
${V.externalLink}
</a>
</div>
<div class="chat-pr__checks-counts">
${Dw(z(`chat.pullRequests.checksFailed`),n?.failed??0,`failed`)}
${Dw(z(`chat.pullRequests.checksPassed`),n?.passed??0,`passed`)}
${Dw(z(`chat.pullRequests.checksRunning`),n?.running??0,`running`)}
${Dw(z(`chat.pullRequests.checksSkipped`),n?.skipped??0,`skipped`)}
${n?U:z(`chat.pullRequests.automationNoChecks`)}
</div>
<openclaw-chat-ci-automation
.pullRequest=${e}
.gateway=${t.gateway}
.sessionKey=${t.sessionKey??``}
.sessionId=${t.sessionId??``}
.presented=${Oe(a)}
></openclaw-chat-ci-automation>
${n?W`<openclaw-chat-ci-details
.pullRequest=${e}
.gateway=${t.gateway}
.sessionKey=${t.sessionKey??``}
.presented=${Oe(a)}
></openclaw-chat-ci-details>`:U}
</div>
</wa-popup>
</details>
`}function kw(e,t){if(typeof e.additions!=`number`&&typeof e.deletions!=`number`)return U;let n=W`<span class="chat-pr__additions"
>+${(e.additions??0).toLocaleString()}</span
>`,r=W`<span class="chat-pr__deletions"
>−${(e.deletions??0).toLocaleString()}</span
>`;return t?W`
<button
class="chat-pr__diff"
type="button"
aria-label=${z(`chat.sessionDiff.show`)}
@click=${t}
>
${n} ${r}
</button>
`:W` <span class="chat-pr__diff">${n} ${r}</span> `}function Aw(e){if(e===`ready`)return U;let t=z(e===`rate-limited`?`chat.pullRequests.rateLimited`:`chat.pullRequests.unavailable`);return W`
<openclaw-tooltip content=${t}>
<span class="chat-pr__warning" role="img" aria-label=${t}>
${V.alertTriangle}
</span>
</openclaw-tooltip>
`}function jw(e){return e.createUrl?W`
<a
class="chat-pr__create"
href=${e.createUrl}
target="_blank"
rel="noopener noreferrer"
aria-label=${z(`chat.pullRequests.createPrLabel`,{branch:e.branch})}
>
${z(`chat.pullRequests.createPr`)}
</a>
`:U}function Mw(e,t,n,r,i){let a=!e&&r?.result?.status===`published`?r.result:void 0;return W`
<article
class="chat-pr"
data-state=${a?`published`:e?`branch`:`publication`}
>
<span class="chat-pr__link chat-pr__link--static">
<span class="chat-pr__icon" aria-hidden="true"
>${a||!e?V.gitPullRequest:V.gitBranch}</span
>
<span class="chat-pr__identity">
<span class="chat-pr__repo"
>${a?.repository??e?.repo??z(`chat.pullRequests.publishPr`)}</span
>
<span class="chat-pr__branch">${a?.branch??e?.branch}</span>
</span>
</span>
<span class="chat-pr__meta">
${e&&!a?kw(e,n):U}
${Aw(t)}
${r?pw(r):e?jw(e):U}
${e&&!a&&i?W`<button
class="chat-pr__dismiss"
type="button"
?disabled=${r?.activity!=null}
aria-label=${z(`chat.pullRequests.dismissBranch`,{branch:e.branch})}
@click=${()=>i(e)}
>
${V.x}
</button>`:U}
</span>
${r?bw(r):U}
</article>
`}function Nw(e){let{publication:t}=e,n=t?.result?.status===`published`?t.result:void 0,r=t?.result||t?.locked||t?.error&&!t.optionsUnavailable,i=!e.branchDismissed&&t?.canPublishShared&&!t.canPublishPersonal&&t.options?.shared,a=e.branchDismissed?void 0:e.branch;if(a||e.pullRequests.length===0&&(r||i))return W`<div class="chat-prs" aria-live="polite">
${Mw(a,e.status,e.onOpenSessionDiff,t,e.onDismissBranch)}
</div>`;if(e.pullRequests.length===0)return U;let o=r&&(!n||t?.error)?t:void 0,s=[...e.pullRequests.filter(e=>e.state===`open`||e.state===`draft`),...e.pullRequests.filter(e=>e.state!==`open`&&e.state!==`draft`)];return W`
<div class="chat-prs" aria-live="polite">
${J(s,Sw,r=>{let i=r.state===`merged`;return W`
<article class="chat-pr" data-state=${r.state}>
<a
class="chat-pr__link"
href=${r.url}
target="_blank"
rel="noopener noreferrer"
aria-label=${z(`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">
${kw(r)} ${Ow(r,e)}
${r.state===`open`?U:W`<span class="chat-pr__state"
>${z(Iw[r.state])}</span
>`}
${!i||e.status===`unavailable`?Aw(e.status):U}
<button
class="chat-pr__dismiss"
type="button"
?disabled=${!!n&&t?.activity!==null}
aria-label=${z(`chat.pullRequests.dismiss`,{number:String(r.number)})}
@click=${()=>{n&&t?.onNewAction?.(),e.onDismiss(r)}}
>
${V.x}
</button>
</span>
</article>
`})}
${o?Pw(o):U}
</div>
`}function Pw(e){let t=e.result?.status===`failed`,n=W`<div class="chat-pr__publication-recovery">
${bw(e,{inline:t})}
${e.result?.status===`published`?U:W`<div>${pw(e)}</div>`}
</div>`;return t?W`<details class="chat-pr__publication-history">
<summary>${z(`githubPublication.failedAttempt`)}</summary>
${n}
</details>`:n}var Fw,Iw,Lw;function Rw(){return(Rw=e((()=>{G(),H(),X(),aw(),dw(),Ys(),B(),F(),$e(),Tt(),xw(),Fw=`openclaw.chat.dismissedPullRequests`,Iw={merged:`chat.pullRequests.merged`,draft:`chat.pullRequests.draft`,closed:`chat.pullRequests.closed`,open:`chat.pullRequests.open`},Lw={passing:`chat.pullRequests.checksPassing`,failing:`chat.pullRequests.checksFailing`,pending:`chat.pullRequests.checksPending`}})))()}function zw(e){return z(e===`darwin`?`chat.sessionHeader.revealFinder`:e===`win32`?`chat.sessionHeader.revealFileExplorer`:`chat.sessionHeader.revealFileManager`)}function Bw(e,t){let n=ye(e);if(!n||e&&it(n,e.key))return null;let r=t.find(e=>it(e.key,n));return r?{key:r.key,title:Te(r.key,r)}:null}function Vw(e){let t=Ww(e),n=Hw(e);return W`
<div class="chat-pane__crumbs">
${t?W`<div class="chat-pane__project-row">${t}</div>`:U}
<div class="chat-pane__session-trail">
${t?W`<span class="chat-pane__crumb-sep" aria-hidden="true">/</span>`:U}
${n?W`${n}<span class="chat-pane__crumb-sep" aria-hidden="true">/</span>`:U}
${Uw(e)}
</div>
</div>
`}function Hw(e){let t=e.parentSession;if(!t)return null;let n=z(`chat.sessionHeader.openParent`,{title:t.title});return W`<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 Uw(e){if(e.editing)return W`<input
class="chat-pane__session-title-input"
.value=${e.renameValue}
aria-label=${z(`chat.sessionHeader.renameInputAria`)}
placeholder=${z(`chat.sessionHeader.renameInputPlaceholder`)}
@input=${t=>e.onRenameInput(t.currentTarget.value)}
@compositionend=${em}
@keyup=${Qp}
@keydown=${t=>{$p(t)||(t.key===`Enter`?(t.preventDefault(),e.onCommitRename()):t.key===`Escape`&&(t.preventDefault(),e.onCancelRename()))}}
@blur=${t=>{Qp(t),e.onCommitRename()}}
/>`;let t=W`${wp(e.catalog?e.catalogColor:e.session?.color)}<span
class="chat-pane__session-title-text"
>${e.title}</span
>`;return e.catalog||!e.session||e.renameDisabledReason?W`<span class="chat-pane__session-title" title=${e.renameDisabledReason??e.title}
>${t}</span
>`:W`<button
class="chat-pane__session-title chat-pane__session-title-button"
type="button"
title=${z(`chat.sessionHeader.renameTooltip`)}
aria-label=${z(`chat.sessionHeader.renameAria`,{title:e.title})}
@click=${e.onBeginRename}
>
${t}
</button>`}function Ww(e){if(e.catalog||!e.workspaceLabel)return null;let t=e.copiedAction===`copy-path`?z(`chat.sessionHeader.copied`):z(`chat.sessionHeader.copyPath`),n=e.copiedAction===`copy-branch`?z(`chat.sessionHeader.copied`):z(`chat.sessionHeader.copyBranch`),r=e.copiedAction===`copy-path`||e.copiedAction===`copy-branch`;return W`
<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${!r&&!e.workspaceIcon?` chat-pane__workspace-chip--fallback-icon`:``}`}
type="button"
title=${e.workspaceRoot??e.workspaceLabel}
aria-label=${z(`chat.sessionHeader.workspaceAria`,{workspace:e.workspaceLabel})}
>
${r?V.check:Gw(e.workspaceIcon)}<span
>${r?z(`chat.sessionHeader.copied`):e.workspaceLabel}</span
>
</button>
${[[e.canReveal&&e.workspaceRoot,`reveal`,zw(e.platform)],[e.workspaceRoot,`copy-path`,t],[e.branch,`copy-branch`,n]].map(([e,t,n])=>e?W`<wa-dropdown-item value=${t}>${n}</wa-dropdown-item>`:U)}
</wa-dropdown>
`}function Gw(e){return e?W`<openclaw-workspace-icon
.routeUrl=${e.routeUrl}
.authTokens=${e.authTokens}
.authReady=${e.authReady}
.connectionId=${e.connectionId}
></openclaw-workspace-icon>`:V.folder}function Kw(e){return!!(e.workspaceRoot&&e.methodAdvertised&&e.hasAdminAccess&&!e.session?.execNode&&!Kn(e.session?.placement?.state))}function qw(e){let t=e.navDrawerOpen?z(`nav.collapse`):z(`nav.expand`),n=e.narrow&&e.sessionMenuAction!==U,r=e.sharingControl!==void 0&&e.sharingControl!==U;return W`
<div
class=${`chat-pane__header${e.onClosePane?` chat-pane__header--closable`:``}`}
role="group"
aria-label=${e.title}
tabindex="-1"
@mousedown=${bn}
>
<div class="chat-pane__header-leading">
${e.mergedChrome?W`<openclaw-tooltip .content=${t}>
<button
class="btn btn--ghost btn--icon chat-icon-btn chat-pane__nav-toggle"
type="button"
aria-label=${t}
aria-expanded=${String(!!e.navDrawerOpen)}
@click=${e=>{window.dispatchEvent(new CustomEvent(ln,{detail:{trigger:e.currentTarget}}))}}
>
${V.menu}
</button>
</openclaw-tooltip>`:U}
${e.incognito??e.session?.incognito?W`<span
class="chat-pane__incognito"
role="img"
aria-label=${z(`chat.sessionHeader.incognito`)}
title=${z(`chat.sessionHeader.incognito`)}
>${V.lock}</span
>`:U}
${Vw(e)} ${e.publicAccessIndicator??U}
${r?e.sharingControl:ls(Bo(e.showOwnerChip?e.session?.owner?.actor:void 0,`header`,e.session?.owner?.assignedAt===void 0?`created`:`owned`,e.ownerViewing),e.showOwnerChip?jo(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?W`<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>`:U}
${e.placementControl??U} ${e.presence??U}
</div>
<div class="chat-pane__header-trailing">
${!e.catalog&&e.branches.length>1?W`
<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??z(`chat.sessionHeader.branches`)}
aria-label=${z(`chat.sessionHeader.branches`)}
>
${V.gitBranch}
</button>
${e.branches.map(t=>{let n=Date.parse(t.updatedAt??``),r=ct(n,{fallback:``});return W`
<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||z(`chat.sessionHeader.untitledBranch`)}</span
>
<span class="chat-pane__branch-meta"
>${z(t.messageCount===1?`chat.sessionHeader.oneMessage`:`chat.sessionHeader.messages`,{count:String(t.messageCount)})}${r?` · ${r}`:``}</span
>
</span>
${t.active?W`<span
class="chat-pane__branch-active"
aria-label=${z(`chat.sessionHeader.activeBranch`)}
>${V.check}</span
>`:U}
</wa-dropdown-item>
`})}
</wa-dropdown>
`:U}
<div class="chat-pane__actions">
${e.runAction??U} ${e.panelLayoutActions}
<fieldset class="chat-pane__actions" ?disabled=${e.actionsDisabled}>
${n?U:e.panelActions}
${[[e.onOpenSplitView&&!n,`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&&!n,`chat-pane__palette-open`,`chat.openCommandPalette`,V.search,()=>window.dispatchEvent(new Event(Et))]].map(([e,t,n,r,i])=>e&&i?Jw({className:t,label:z(n),icon:r,onToggle:i}):U)}
${e.sessionMenuAction}
</fieldset>
</div>
</div>
</div>
`}function Jw(e){return W`<openclaw-tooltip .content=${e.label}>
<button
class="btn btn--ghost btn--icon chat-icon-btn ${e.className??``}"
type="button"
aria-label=${e.label}
aria-expanded=${Vn(e.expanded===void 0?void 0:String(e.expanded))}
aria-pressed=${Vn(e.pressed===void 0?void 0:String(e.pressed))}
@click=${e.onToggle}
>
${e.icon}
</button>
</openclaw-tooltip>`}function Yw(e,t,n,i){if(!e)return U;let a=Ce(e),o=r(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=z(e.expanded?`chat.sidePanel.restore`:`chat.sidePanel.expand`),d=s&&c?z(`chat.sidePanel.swap`,{main:s.label,side:c.label}):``;return W`${s?.headerAction?W`<span class="side-panel__action-group side-panel__action-group--content"
>${s.headerAction}</span
>`:U}
${l||e.expanded?Jw({label:u,icon:e.expanded?V.minimize:V.maximize,className:`chat-panel-focus`,pressed:e.expanded===!0,onToggle:()=>i(Cb(hb(e),e.expanded!==!0),{dashboardPresentation:`personal`})}):U}
${l&&a&&d?Jw({label:d,icon:V.arrowLeftRight,className:`chat-panel-swap`,onToggle:()=>i(gb(e,a.id))}):U}
${n||!l?U:W`<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=${z(`chat.sidePanel.layout`)}
title=${z(`chat.sidePanel.layout`)}
>
${V.columns2}
</button>
${[[`left`,`dockLeft`,V.panelLeftOpen],[`right`,`dockRight`,V.panelRightOpen],[`bottom`,`dockBottom`,V.panelBottomOpen]].map(([t,n,r])=>W`<wa-dropdown-item
value=${t}
type="checkbox"
?checked=${se(e)===t}
><span slot="icon">${r}</span>${z(`chat.sidePanel.${n}`)}</wa-dropdown-item
>`)}
</wa-dropdown>`}`}function Xw(e,t){if(!t)return null;let n=e.gateway,r=vt({hello:n.snapshot.hello,settings:{token:n.connection.token},password:n.connection.password});return{routeUrl:Ta(`workspaceIcon`,e.resourceBasePath,t),authTokens:r,authReady:!!(n.snapshot.hello||r.length),connectionId:n.snapshot.hello?.server?.connId}}function Zw(){return(Zw=e((()=>{G(),Mn(),La(),zt(),xt(),kt(),B(),$s(),Mp(),ts(),Es(),Tt(),xp(),F(),ge(),Zp(),Ye(),R(),Mb()})))()}function Qw(e){if(_i(e))return null;let t=Q(e),n=Vd(e),r=typeof t?.stopReason==`string`?t.stopReason.trim().toLowerCase():``,i=Q(t?.__openclaw);if(n===`commentary`||(!r||r===`tooluse`)&&i?.runTerminal!==!0)return null;let a=ni(e);if(typeof a==`string`&&oa(a))return null;let o=(wu(e)?.content??[]).filter(e=>e.type===`text`?typeof e.text==`string`&&e.text.trim().length>0:!ht(e.type)&&!ft(e.type));if(o.length===0)return null;try{return JSON.stringify(o)??null}catch{return null}}function $w(e,t){let n=Od(e),r=n.runs[t],i=r?.message===void 0?[]:[r.message];for(let e of n.messages)tr(e)?.role===`assistant`&&Mu(e)===t&&i.push(e);let a=new Set;for(let e of i){let t=Qw(e);t&&a.add(t)}return{acceptedFinal:(r?.acceptedFinalMessageIdentities?.length??0)>0,terminalReplySignatures:a}}function eT(){return(eT=e((()=>{ir(),ut(),zd(),wi(),Ti(),nc(),Xl(),Al()})))()}function tT(e,t,n){let r=Ix(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=>{Lx(e,n);let r=t.composerTextarea;r&&(r.value=n,Fd(r))},o=()=>queueMicrotask(()=>t.composerTextarea?.focus({preventScroll:!0})),s=n=>{t.goalComposer=null,e.onGoalDraftModeChange?.(null),n.action===`edit`&&a(n.previousDraft)},c=()=>{let e=i();e&&!e.pending&&(s(e),n(),o())},l=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),Vu(t),El(t),a(s?.objective??``),n(),o()};return{get active(){return i()!==null},get pending(){return i()?.pending===!0},get submissionLabel(){let e=i();return e?z(e.action===`edit`?`chat.goals.save`:`chat.goals.start`):void 0},begin:l,activateDraft:(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:(l(),!0)},activateCommand:n=>n.key!==`goal`||n.source!==`native`||t.slashMenuCompletion?.inline||!e.onGoalSubmit?!1:(l(),!0),cancel:c,async submit(r){let o=i(),c=t.composerTextarea?.value??e.getDraft?.()??e.draft;if(o&&!o.pending&&e.onGoalSubmit&&c.trim()){a(c),o.pending=!0,n();try{await e.onGoalSubmit({...o.sessionId?{sessionId:o.sessionId}:{},...o.action===`start`?{action:`start`,objective:c}:{action:`edit`,goalId:o.goalId,objective:c}},r)&&i()===o&&s(o)}finally{o.pending=!1,n()}}},render(){let e=i();return e?W`<div
class="agent-chat__goal-mode composer-context-strip"
role="group"
aria-label=${z(`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"
>${z(e.action===`edit`?`chat.goals.edit`:`chat.goals.composerMode`)}</span
>
</span>
<span class="agent-chat__goal-mode-hint composer-context-strip__text"
>${z(e.action===`edit`?`chat.goals.editHint`:`chat.goals.startHint`)}</span
>
<button
type="button"
class="composer-context-strip__dismiss"
aria-label=${z(`chat.goals.cancel`)}
?disabled=${e.pending}
@click=${c}
>
${V.x}
</button>
</div>`:U}}}function nT(){return(nT=e((()=>{G(),B(),F(),Hi(),gc(),Oc(),Wu(),Gx(),na()})))()}function rT({state:e,props:t,skillMenuHost:n,slashMenuHost:r,mentionMenuHost:i,requestUpdate:a,sendShortcut:o,canSubmitDraft:s,submitDraft:c,showAbortableUi:l,alternateFollowUpMode:u,goalComposer:d}){return f=>{let p=f.target;if(!(p instanceof HTMLTextAreaElement)||e.composerComposing||$p(f)||e.emojiMenu.handleKeydown(f,t.paneId,a)||e.mentionMenu.handleKeydown(f,i,a))return;if(d.active){f.key===`Escape`?(f.preventDefault(),d.cancel()):f.key===`Enter`&&!f.shiftKey&&(o===`enter`||f.metaKey||f.ctrlKey)&&s(p.value)&&(f.preventDefault(),c(p.value,f));return}if(t.connected&&(bl(f,e,n,a)||Sc(f,e,r,a,o)||yl(f,e,r,a)))return;if((f.key===`ArrowUp`||f.key===`ArrowDown`)&&t.onHistoryKeydown){Lx(t,p.value);let n=t.onHistoryKeydown({key:f.key,selectionStart:p.selectionStart,selectionEnd:p.selectionEnd,altKey:f.altKey,ctrlKey:f.ctrlKey,metaKey:f.metaKey,shiftKey:f.shiftKey,isComposing:f.isComposing,keyCode:f.keyCode});if(n.handled){e.editRevision+=1,n.preventDefault&&f.preventDefault(),a(),n.restoreCaret&&_l(p,n.restoreCaret);return}}if(f.key===`Escape`&&!e.skillMenuOpen&&!e.slashMenuOpen&&!e.mentionMenu.open&&!t.replyTarget&&!e.dictation?.active&&l&&t.onAbort){f.preventDefault(),t.onAbort();return}let m=o===`enter`||f.metaKey||f.ctrlKey;if(f.key===`Enter`&&!f.shiftKey&&m){if(f.repeat){f.preventDefault();return}let e=t.getAttachments?.()??t.attachments??[];if(!(p.value.trim()||e.length)){let e=l&&t.connected&&t.canSend&&!t.submitDisabledReason&&t.onQueueSteer?Zu(t.displayQueue??t.queue):void 0;if(e){f.preventDefault(),t.onQueueSteer?.(e.id);return}s(p.value)&&f.preventDefault();return}if(!s(p.value))return;f.preventDefault();let n=(f.metaKey||f.ctrlKey)&&!f.altKey?u:void 0;c(p.value,f,n)}}}function iT(){return(iT=e((()=>{Zp(),gu(),gc(),Oc(),Wu(),Gx()})))()}function aT(e){return e?W`<div class="agent-chat__question-dock">
<openclaw-chat-question-card .props=${e}></openclaw-chat-question-card>
</div>`:U}function oT(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=>tv(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=>Bg(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 sT(){return(sT=e((()=>{G(),Hg(),ov()})))()}function cT(e){for(let t=(e?.length??0)-1;t>=0;--t){let n=eo(e?.[t]);if(n?.role===`user`)return null;if(n?.role!==`assistant`||Tr(n))continue;let r=eo(n.cost),i=eo(eo(n.usage)?.cost),a={};for(let e of[`input`,`output`,`cacheRead`,`cacheWrite`]){let t=Ka(r?.[e])??Ka(i?.[e]);t!==void 0&&(a[e]=t)}if(Object.keys(a).length>0)return a}return null}function lT(e){for(let t=(e?.length??0)-1;t>=0;--t){let n=eo(e?.[t]);if(!(n?.role!==`assistant`||Tr(n)))return typeof n.provider==`string`&&n.provider.trim()||null}return null}function uT(e,t){let n=Ka(e?.totalTokens),{tokens:r,fromLastPrompt:i}=ku(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>=_T,l=Number.isFinite(e?.inputTokens)?e?.inputTokens??null:null,u=Number.isFinite(e?.outputTokens)?e?.outputTokens??null:null,d=Ka(e?.estimatedCostUsd)??null,f=`var(--muted)`,p=`color-mix(in srgb, var(--muted) 8%, transparent)`;if(c){let e=Math.min(Math.max((o-_T)/.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?`~`:``}${ze(n)} / ${ze(r)}`,color:f,bg:p,warning:c,approximate:a}}function dT(e){if(e===`5h`)return z(`chat.composer.contextUsage.limitFiveHour`);if(e===`Week`)return z(`chat.composer.contextUsage.limitWeekly`);if(e===`Day`)return z(`chat.composer.contextUsage.limitDaily`);let t=/^(\d+)h$/.exec(e);return t?z(`chat.composer.contextUsage.limitHours`,{hours:t[1]??``}):e}function fT(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 pT(e,t,n,r){let i=t>=90?`danger`:t>=75?`warn`:null;return W`
<div class="context-usage__limit">
<div class="context-usage__limit-head">
<span class="context-usage__limit-label">${e}</span>
<span class="context-usage__limit-meta">
${r?W`<span class="context-usage__limit-reset"
>${z(`chat.composer.contextUsage.resets`,{time:r})}</span
>`:U}
<strong>${n}</strong>
</span>
</div>
<div
class="context-usage__limit-bar"
role="progressbar"
aria-label=${e}
aria-valuemin="0"
aria-valuemax="100"
aria-valuenow=${t}
>
<span
class=${i?`context-usage__limit-fill--${i}`:``}
style="width: ${t}%"
></span>
</div>
</div>
`}function mT(e,t){return W`
<div class="context-usage__section-label context-usage__plan-header">
<span>${z(`chat.composer.contextUsage.planUsage`)}</span>
<a
class="context-usage__plan-link"
href=${t}
data-chat-provider-usage="true"
aria-label=${z(`chat.composer.contextUsage.openUsage`)}
>
${e.plan?W`<span class="context-usage__plan-badge">${e.plan}</span>`:U}
${V.externalLink}
</a>
</div>
${e.accountEmail?W`<div class="context-usage__account" data-chat-usage-account="true">
${e.accountEmail}
</div>`:U}
<div class="context-usage__limits">
${e.windows.map(e=>pT(dT(e.label),e.usedPercent,`${e.usedPercent}%`,tf(e.resetAt)))}
${e.budgets.map(e=>pT(e.label||z(`chat.composer.contextUsage.usageCredits`),Math.max(0,Math.min(100,Math.round(e.used/e.limit*100))),z(`chat.composer.contextUsage.budgetValue`,{used:fT(e.used,e.unit),limit:fT(e.limit,e.unit)})))}
</div>
<div class="context-usage__provenance" data-chat-usage-provider="true">
<span>${z(`sessionsView.provider`)}:</span>
<strong>${e.displayName}</strong>
</div>
`}function hT(e,t){return W`<div>
<dt>${e}</dt>
<dd>${t}</dd>
</div>`}function gT(e,t,n={}){let r=uT(e,t),i=n.providerUsage?cf(n.providerUsage.modelAuthStatusResult??null,jl):[],a=(e?.modelProvider?.trim()||lT(n.messages))?.toLowerCase(),o=a?i.find(e=>e.providers.some(e=>e.trim().toLowerCase()===a)):void 0;if(!r&&!o)return U;let s=r?z(`chat.composer.contextUsage.summary`,{used:`${r.approximate?`~`:``}${ze(r.used)}`,limit:ze(r.limit),pct:`${r.approximate?`~`:``}${r.pct}`}):z(`chat.usageRemaining`),c=r?`${r.approximate?`~`:``}${r.pct}%`:null,l=r?yT*(1-r.pct/100):yT,u=r?cT(n.messages):null,d=!o,f=`${Fa(n.providerUsage?.basePath??``)}/usage`,p=e=>e===null?z(`usage.common.emptyValue`):ze(e),m=(e,t)=>t===void 0||t<=0?U:hT(e,j(t)),h=u&&Object.values(u).some(e=>e>0);return W`
<div
class="context-usage"
style=${r?`--ctx-color:${r.color};--ctx-bg:${r.bg}`:``}
>
<details
@toggle=${e=>{Id(e);let t=e.currentTarget;t instanceof HTMLDetailsElement&&Nl(t)}}
>
<summary
class="context-ring ${r?.warning?`context-ring--warning`:``}"
aria-label=${s}
title=${z(`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=${vT} />
<circle
class="context-ring__fill"
cx="8"
cy="8"
r=${vT}
stroke-dasharray=${yT.toFixed(2)}
stroke-dashoffset=${l.toFixed(2)}
/>
</svg>
</summary>
<wa-popup data-anchored-overlay>
<section
class="context-usage__popover"
aria-label=${z(`chat.composer.contextUsage.title`)}
>
${r?W`
<div class="context-usage__header">
<span class="context-usage__title"
>${z(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>
`:U}
${r?W`
<div class="context-usage__section-label">
${z(`chat.composer.contextUsage.latestRunTokens`)}
</div>
<dl class="context-usage__stats">
${hT(z(`usage.breakdown.input`),p(r.input))}
${hT(z(`usage.breakdown.output`),p(r.output))}
${!d||r.cost===null?U:hT(z(`chat.composer.contextUsage.estimatedCost`),j(r.cost))}
</dl>
`:U}
${d&&u&&h?W`
<div class="context-usage__section-label">
${z(`usage.breakdown.costByType`)}
</div>
<dl class="context-usage__stats">
${m(z(`usage.breakdown.input`),u.input)}
${m(z(`usage.breakdown.output`),u.output)}
${m(z(`usage.breakdown.cacheRead`),u.cacheRead)}
${m(z(`usage.breakdown.cacheWrite`),u.cacheWrite)}
</dl>
`:U}
${o?mT(o,f):U}
</section>
</wa-popup>
</details>
</div>
`}var _T,vT,yT;function bT(){return(bT=e((()=>{io(),G(),vr(),Yt(),B(),F(),ge(),kd(),of(),Pd(),_T=.85,vT=6.5,yT=2*Math.PI*vT})))()}function xT(){BT?.frame!=null&&cancelAnimationFrame(BT.frame),BT=void 0}function ST(){let e=BT;if(!e||e.velocity===0)return;let t=e.container.scrollTop;if(e.container.scrollTop+=e.velocity,e.container.scrollTop===t){xT();return}e.frame=requestAnimationFrame(ST)}function CT(e,t){let n=e.getBoundingClientRect(),r=e=>Math.min(FT,Math.max(0,FT-e)),i=r(t-n.top),a=r(n.bottom-t),o=(a>0?a:-i)/FT*IT;if(o===0){xT();return}if(BT?.container===e){BT.velocity=o,BT.frame??(BT.frame=requestAnimationFrame(ST));return}xT(),BT={container:e,velocity:o,frame:requestAnimationFrame(ST)}}function wT(e,t){e?.toggleAttribute(NT,t)}function TT(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 ET(e,t){e instanceof HTMLTextAreaElement&&!LT.has(e)&&(LT.add(e),e.value=t,queueMicrotask(()=>{e.isConnected&&(TT(e),e.focus(),e.setSelectionRange(t.length,t.length))}))}function DT(e,t){if(t&&e.sendState!==`failed`&&e.sendState!==`unconfirmed`&&e.sendState!==`held`)return z(`chat.queue.states.waitingForReconnect`);switch(e.sendState){case`waiting-model`:case`waiting-idle`:return null;case`executing-command`:return z(`chat.queue.states.runningCommand`);case`waiting-reconnect`:return z(`chat.queue.states.waitingForReconnect`);case`unconfirmed`:case`held`:return z(`chat.queue.states.needsReview`);case`failed`:return z(`common.failed`);default:return null}}function OT(e){let t=e.queuedEdit,n=(e.displayQueue??e.queue).filter(e=>e.sendState!==`submitting`&&e.sendState!==`sending`&&!dc(e));if(t?.source&&t.editingId===t.source.id&&!n.some(e=>e.id===t.editingId)&&n.push(t.source),!n.length)return U;let r=new Set(n.map(e=>e.id)),i={segments:Ur(e.queue,e=>r.has(e.id)&&fi(e)&&e.id!==t?.editingId).map(e=>e.map(e=>e.id)),offered:n.filter(fi).length>1},a=e.queue.find(e=>e.sendState!==`failed`||e.localCommandName),o=(a?.sendState===`unconfirmed`||a?.sendState===`held`)&&dc(a)?{label:z(`chat.queue.states.blockedByUnconfirmed`),tone:`warn`}:n.some(e=>e.sendState===`waiting-model`)&&!e.offline?{label:z(`chat.queue.states.applyingSettings`),tone:`settings`}:null;return W`
<div class="chat-queue" role="status" aria-live="polite">
${o?W`<div
class="chat-queue__global-state"
data-chat-queue-global-state=${o.tone}
>
${o.label}
</div>`:U}
<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(jT))return;let t=e.currentTarget;t instanceof HTMLElement&&CT(t,e.clientY)}}
@dragleave=${e=>{let t=e.currentTarget;t instanceof HTMLElement&&e.relatedTarget instanceof Node&&t.contains(e.relatedTarget)||xT()}}
@drop=${xT}
@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 kT(e,t){let n=e.currentTarget;n instanceof HTMLElement&&n.classList.toggle(MT,t)}function AT(e,t,n){let r=t.queuedEdit,i=Td(e.sender),a=i!==U,o=e.attachments?.filter(e=>e.mimeType.startsWith(`image/`)),s=o?.[0]?Ac(o[0]):null,c=e.sendState===`failed`||e.sendState===`unconfirmed`||e.sendState===`held`,l=!e.serverQueued&&!c&&(t.offline||e.sendState===`waiting-reconnect`),u=DT(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)&&Ku(e)&&!p,_=!!(t.canAbort&&t.onQueueSteer)&&!p&&!e.localCommandName&&!e.intent&&(Ku(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&&fi(e)&&!e.localCommandName,w=C&&!r?.editingId,T=e.text||(e.attachments?.length?z(`chat.queue.imageCount`,{count:String(e.attachments.length)}):``),E=`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`:``}`,D=(n,r=!1)=>W`<button
class="chat-queue__action chat-queue__${n}"
type="button"
?disabled=${r}
aria-label=${z(`chat.queue.${n}QueuedMessage`)}
@click=${()=>n===`retry`?t.onQueueRetry?.(e.id):t.onQueueSteer?.(e.id)}
>
${n===`retry`?V.refresh:V.arrowUp}
<span>${z(`chat.queue.${n}`)}</span>
</button>`;return W`
<div
class=${E}
data-chat-queue-item=${e.id}
@click=${e=>{let t=e.currentTarget,n=e.target;t instanceof Element&&n instanceof Element&&(!w||n.closest(PT)?VT.delete(t):e.detail===1&&VT.add(t))}}
@dblclick=${w?t=>{let n=t.currentTarget;n instanceof Element&&VT.has(n)&&(VT.delete(n),t.stopPropagation(),wT(n,!1),r?.onEdit?.(e.id))}:void 0}
@dragover=${S?e=>{e.dataTransfer?.types.includes(jT)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,kT(e,!0))}:void 0}
@dragleave=${S?e=>kT(e,!1):void 0}
@drop=${S?t=>{let n=t.dataTransfer?.getData(jT);kT(t,!1),n&&n!==e.id&&v.includes(n)&&(t.preventDefault(),b?.(n,e.id))}:void 0}
>
${x?W`<button
class="chat-queue__leading chat-queue__grip"
type="button"
draggable=${S?`true`:`false`}
?disabled=${!S}
aria-label=${z(S?`chat.queue.reorderQueuedMessage`:`chat.queue.reorderUnavailable`)}
aria-keyshortcuts=${Vn(S?`ArrowUp ArrowDown`:void 0)}
@dragstart=${S?t=>{t.dataTransfer?.setData(jT,e.id),t.dataTransfer&&(t.dataTransfer.effectAllowed=`move`)}:void 0}
@dragend=${xT}
@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"
>${zT}</span
>
${S?W`<span
class="chat-queue__grip-state chat-queue__grip-state--active"
aria-hidden="true"
>${V.gripVertical}</span
>`:U}
</button>`:W`<span class="chat-queue__leading chat-queue__icon" aria-hidden="true"
>${zT}</span
>`}
${i}
${s&&o?W`<img
class="chat-queue__images"
src=${s}
alt=${z(`chat.queue.imageCount`,{count:String(o.length)})}
draggable="false"
width="24"
height="24"
loading="lazy"
decoding="async"
/>`:U}
${p?W`<textarea
class="chat-queue__edit-input"
rows="1"
${q(t=>ET(t,r?.editingText??e.text))}
aria-label=${z(`chat.queue.editQueuedMessage`)}
@beforeinput=${e=>{e.currentTarget instanceof HTMLTextAreaElement&&RT.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;TT(t),h?.length?r?.onEditChange?.(t.value,Ui(m,t.value,h,RT.get(t))):r?.onEditChange?.(t.value),RT.delete(t)}}}
@keydown=${e=>{$p(e)||(e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),r?.onCancel()):e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),r?.onEditSubmit?.()))}}
@compositionend=${em}
@keyup=${Qp}
@blur=${Qp}
></textarea>`:W`<span class="chat-queue__copy">
<span class="chat-queue__text" title=${T}>${T}</span>
${d&&!g?W`<span class="chat-queue__badge chat-queue__badge--steered"
>${z(`chat.queue.steer`)}</span
>`:U}
${u&&(!c||!e.sendError)?W`<span
class=${c?`chat-queue__badge`:l?`chat-queue__badge chat-queue__badge--reconnect`:`chat-queue__state`}
title=${Vn(l?e.sendError:void 0)}
>${u}</span
>`:U}
</span>`}
<span class="chat-queue__actions">
${c&&!p&&t.onQueueRetry?D(`retry`):U}
${_?D(`steer`,!g):U}
${p?W`
<button
class="chat-queue__edit-submit"
type="button"
aria-label=${z(`chat.runControls.sendMessage`)}
@click=${()=>r?.onEditSubmit?.()}
>
${V.check}
</button>
<button
class="chat-queue__edit-cancel"
type="button"
aria-label=${z(`chat.queue.cancelEdit`)}
@click=${()=>r?.onCancel()}
>
${V.x}
</button>
`:U}
${f||p?U:W`
<openclaw-tooltip .content=${z(`chat.queue.removeQueuedMessage`)}>
<button
class="chat-queue__remove"
type="button"
?disabled=${e.serverQueued&&!t.canRemoveServerQueued}
aria-label=${z(`chat.queue.removeQueuedMessage`)}
@click=${n=>{n.detail<=1&&t.onQueueRemove(e.id)}}
@dblclick=${e=>e.stopPropagation()}
>
${V.trash}
</button>
</openclaw-tooltip>
`}
${p||!C?U:W`
<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;wT(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=${z(`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>
${z(`chat.queue.editQueuedMessage`)}
</wa-dropdown-item>
</wa-dropdown>
`}
</span>
${h?.length?W`<span class="chat-queue__mentions">
${z(`chat.mentions.selected`,{names:h.map(({start:e,end:t})=>m.slice(e,t)).join(`, `)})}
${p?W`<button
class="chat-queue__remove"
type="button"
aria-label=${z(`chat.mentions.remove`)}
@click=${()=>r?.onEditChange?.(m,[])}
>
${V.x}
</button>`:U}
</span>`:U}
${e.sendError&&!l?W`<span class="chat-queue__error">
${c&&u?W`<span class="chat-queue__badge">${u}</span>`:U}
<span class="chat-queue__error-text">${e.sendError}</span>
</span>`:U}
</div>
`}var jT,MT,NT,PT,FT,IT,LT,RT,zT,BT,VT;function HT(){return(HT=e((()=>{G(),Mn(),H(),X(),en(),B(),F(),Di(),Zp(),Qc(),wl(),gu(),su(),jT=`application/x-openclaw-queued-message`,MT=`chat-queue__item--drop-target`,NT=`data-edit-keyboard-focus`,PT=`a, button, input, select, textarea, wa-dropdown, wa-dropdown-item`,FT=24,IT=12,LT=new WeakSet,RT=new WeakMap,zT=mn(An` <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" />`),VT=new WeakSet})))()}function UT(e){if(!e)return U;let t=e.phase??`active`;if(Date.now()-e.occurredAt>=WT)return U;let n=[z(`chat.composer.fallbackSelected`,{model:e.selected}),z(`chat.composer.fallbackCurrent`,{model:t===`cleared`?e.selected:e.active}),t===`cleared`&&e.previous?z(`chat.composer.fallbackPrevious`,{model:e.previous}):null,e.reason?z(`chat.composer.fallbackReason`,{reason:e.reason}):null,e.attempts.length>0?z(`chat.composer.fallbackAttempts`,{attempts:e.attempts.slice(0,3).join(` | `)}):null].filter(Boolean).join(` • `),r=t===`cleared`?z(`chat.composer.fallbackCleared`,{model:e.selected}):z(`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 W`
<openclaw-tooltip .content=${n}>
<div class=${i} role="status" aria-live="polite" aria-label=${n}>
${a} ${r}
</div>
</openclaw-tooltip>
`}var WT;function GT(){return(GT=e((()=>{G(),B(),F(),WT=8e3})))()}function KT(e,t){let n=e.connected&&e.canSend&&!e.submitDisabledReason;return OT({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 qT(e){let{props:t,state:n,canCompose:r,showAbortableUi:i,visibleDraft:a,runStatusAnnouncement:o,requestUpdate:s,sendShortcut:c,questionPanelProps:l,showComposer:u,handleKeyDown:d,handleBeforeInput:f,handleInput:p,handleSelect:m,draftKey:h,handleCompositionEnd:g,handleBlur:_,dictation:v,runControlsProps:y,menus:b,mentionMenuHost:x,mentionError:S,skillMenuHost:C,slashMenuHost:w,goalComposer:T}=e,{slashMenuVisible:E,skillMenuVisible:D,mentionMenuVisible:O,menuVisible:k,activeMenuOptionId:ee,activeMenuOptionLabel:te,menuListboxId:A}=b,j=t.selectedSession,ne=gT(j,t.sessions?.defaults?.contextTokens??null,{messages:t.messages,providerUsage:t.providerUsage}),M=t.composerControls??U,re=t.permissionPicker?Bl(t.permissionPicker):U,ie=T.active?z(`chat.goals.objectivePlaceholder`):(t.attachments??[]).some(e=>!bu(e))?z(`chat.composer.placeholderWithAttachments`):z(`chat.composer.placeholder`,{name:t.assistantName||`agent`}),ae=t.realtimeTalkVideoStream?.getVideoTracks?.()[0]?.getSettings?.().facingMode!==`environment`,N=Ml(t.paneId,`slash-active-announcement`),oe=t.disabledBanner&&t.disabledBanner.presentation!==`hidden`?W`
<div
class="agent-chat__disabled-banner ${t.disabledBanner.kind===`composer-replacement`?`agent-chat__disabled-banner--replacement`:``} ${t.disabledBanner.presentation===`compact`?`agent-chat__disabled-banner--compact`:``} callout ${t.disabledBanner.tone===`neutral`?`agent-chat__disabled-banner--neutral`:`info`} callout--action"
role="status"
>
${t.disabledBanner.icon?W`<span
class="agent-chat__disabled-banner-icon agent-chat__disabled-banner-icon--${t.disabledBanner.icon}"
aria-hidden="true"
>${t.disabledBanner.icon===`archive`?V.archive:t.disabledBanner.icon===`eye`?V.eye:V.alertTriangle}</span
>`:U}
<div class="callout__content">
${t.disabledBanner.title?W`<div class="agent-chat__disabled-banner-title">
${t.disabledBanner.title}
</div>`:U}
<div class="agent-chat__disabled-banner-detail">${t.disabledBanner.text}</div>
</div>
${t.disabledBanner.onAction?W`<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??U}
@click=${t.disabledBanner.onAction}
>
${t.disabledBanner.busy?W`<span class="btn__spinner" aria-hidden="true"></span>${t.disabledBanner.busyLabel??t.disabledBanner.actionLabel}`:t.disabledBanner.actionLabel}
</button>`:U}
${t.disabledBanner.kind===`composer-replacement`&&t.disabledBanner.presentation!==`compact`&&i?tc(y):U}
</div>
`:U,P=u&&t.disabledBanner?.kind!==`composer-replacement`;t.capabilityMenu||(n.capabilityMenuView=`root`);let F=Ml(t.paneId,`disabled-reason`),se=P?W`
${rd({status:t.realtimeTalkCameraError?`error`:t.realtimeTalkStatus,detail:t.realtimeTalkDetail,onUseSystemDefaultMicrophone:t.onUseSystemDefaultMicrophone,onDismissError:t.realtimeTalkCameraError?void 0:t.onDismissRealtimeTalkError})}
${t.realtimeTalkInputNotice?rd({status:`error`,detail:t.realtimeTalkInputNotice,onDismissError:t.onDismissRealtimeTalkInputNotice}):U}
`:U,ce=t.offline&&t.queuedOutboxCount?z(`chat.composer.offlineQueuedHint`,{count:String(t.queuedOutboxCount)}):null,le=S||n.dictationError,ue=t.disabledReason?{text:t.disabledReason,tone:t.disabledReasonTone??`danger`,icon:t.disabledReasonBusy?W`<span class="btn__spinner" aria-hidden="true"></span>`:(t.disabledReasonTone??`danger`)===`danger`?V.alertTriangle:V.shieldQuestion}:le?{text:le,tone:`danger`,icon:V.alertTriangle}:ce?{text:ce,tone:`info`,icon:V.inbox}:null,I=P&&ue?W`<div class="agent-chat__composer-status" data-tone=${ue.tone}>
<div
id=${t.disabledReason?F:U}
class="agent-chat__composer-status-band"
role=${ue.tone===`danger`?`alert`:`status`}
aria-live="polite"
aria-busy=${t.disabledReasonBusy?`true`:`false`}
>
<span class="agent-chat__composer-status-icon" aria-hidden="true"
>${ue.icon}</span
>
<span class="agent-chat__composer-status-text">${ue.text}</span>
</div>
</div>`:U,L=v?.active?xu(n.dictationSelection?.value??a,v.transcript,n.dictationSelection?.start??a.length,n.dictationSelection?.end??a.length).value:a,de=Md(L),fe=UT(t.fallbackStatus),pe=t.progressCard?W`<div class="agent-chat__progress-float" ?hidden=${!u}>
${zp(t.progressCard,`composer`,t.onDismissProgressCard,j?.status,j?.startedAt,j?.endedAt,t.runActive,t.collapseTaskProgress,{presented:u,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?W`<div
class="agent-chat__progress-float agent-chat__progress-float--loading"
?hidden=${!u}
aria-hidden="true"
></div>`:U,me=KT(t,i),he=j?.goal?W`<div class="agent-chat__goal-float">
${Tx(n,j.goal,{canAct:t.connected&&t.canSend&&!t.submitDisabledReason&&!!t.currentSessionId&&!t.goalRecovery,onGoalAction:t.onGoalAction,onGoalEdit:t.onGoalSubmit?e=>T.begin(e):void 0,requestUpdate:s})}
</div>`:U;return W`
<div class="agent-chat__composer-shell">
<div class="chat-footer__context">
${t.footerContent??U}
<div class="agent-chat__composer-notices">
${t.notices??U} ${I} ${se} ${fe}
</div>
${aT(l)}
${t.disabledBanner?.kind===`above-composer`?oe:U}
${Ue(t.progressCardVisibility??!0,pe)} ${me}
${Dx(t.goalRecovery,t.connected)} ${he}
${t.composerRecovery??U}
</div>
${P?W`<div
class="agent-chat__input agent-chat__input--chat agent-chat__input--mobile-toolbar ${t.offline?`agent-chat__input--offline`:``}${v?.active?` agent-chat__input--dictating`:``}${r?``:` agent-chat__input--disabled`}"
aria-busy=${t.disabledReasonBusy?`true`:`false`}
@wa-show=${mu}
@wa-after-show=${jd}
@openclaw-composer-dismiss-invocations=${()=>{Vu(n),El(n),n.mentionMenu.close(),n.emojiMenu.dismiss(n.composerTextarea),s()}}
@click=${e=>kl(e,r)}
@pointerdown=${e=>{_c(e),kl(e,r)}}
${q(n.composerInputRef??void 0)}
>
${E?lc(n,w,a,s):U}
${D?al(n,C,s):U}
${n.emojiMenu.render(t.paneId,n.composerTextarea,s)}
${O?n.mentionMenu.render(x,s):U}
<div class="agent-chat__composer-lede">
${t.sessionAdmitted===!1?U:W`
<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>
`}
${T.render()}
${Pl(a,t.mentions,()=>{Lx(t,t.getDraft?.()??t.draft,[]),s()},n.mentionMenu.selectedAvatarUrls)}
${t.replyTarget?W`
<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"
>${z(`chat.messages.replyingTo`,{name:t.replyTarget.senderLabel??z(`chat.messages.message`)})}</span
>
</span>
<span class="chat-reply-preview__text composer-context-strip__text"
>${Ca(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=${z(`chat.composer.cancelReply`)}
title=${z(`chat.composer.cancelReply`)}
>
${V.x}
</button>
</div>
`:U}
${t.sessionAdmitted===!1?U:W`
<openclaw-mcp-app-context-strip
.sessionKey=${t.sessionKey}
.agentId=${t.currentAgentId}
></openclaw-mcp-app-context-strip>
`}
${Tl(t)}
${Ld(t.getPendingAttachmentReads?.()??t.pendingAttachmentReads??0)}
${ed(v)}
${ad({...t,disabled:!r,cameraActive:u&&t.cameraActive!==!1})}
${t.realtimeTalkVideoStream?W`
<div class="agent-chat__video-preview">
<video
class=${ae?`agent-chat__video-preview-mirrored`:U}
autoplay
.muted=${!0}
playsinline
aria-label=${z(`chat.composer.cameraPreview`)}
.srcObject=${Rn(t.realtimeTalkVideoStream)}
></video>
${t.realtimeTalkCameraDevices&&t.realtimeTalkCameraDevices.length>=2&&t.onSwitchRealtimeCamera?W`
<openclaw-tooltip
class="agent-chat__video-preview-switch-tooltip"
.content=${z(`chat.composer.switchCamera`)}
>
<button
type="button"
class="agent-chat__video-preview-switch"
aria-label=${z(`chat.composer.switchCamera`)}
?disabled=${t.realtimeTalkVideoPending}
@click=${t.onSwitchRealtimeCamera}
>
${V.switchCamera}
</button>
</openclaw-tooltip>
`:U}
</div>
`:U}
</div>
<div class="agent-chat__composer-input-row">
<div class="agent-chat__composer-combobox">
<textarea
${q(n.textareaRef??void 0)}
.value=${po([L],()=>Rn(L))}
dir=${de}
?disabled=${!r}
?readonly=${v?.locksComposer===!0||T.pending}
aria-autocomplete="list"
aria-controls=${Vn(k?A:void 0)}
aria-haspopup=${Vn(k?`listbox`:void 0)}
aria-activedescendant=${Vn(ee??void 0)}
aria-describedby=${`${N}${t.disabledReason?` ${F}`:``}`}
aria-keyshortcuts=${c===`enter`?`Enter`:`Control+Enter Meta+Enter`}
@keydown=${d}
@beforeinput=${f}
@input=${p}
@select=${m}
@focus=${m}
@pointerup=${m}
@keyup=${e=>{Qp(e),n.emojiMenu.handleKeyup(e),(e.key.startsWith(`Arrow`)||e.key===`Home`||e.key===`End`)&&m(e)}}
@compositionstart=${e=>{let t=n.emojiMenu.open;n.mentionMenu.close(),n.emojiMenu.close(),n.editRevision+=1,n.composerComposing=!0,n.composingDraft={key:h,value:e.target.value},t&&s()}}
@compositionend=${g}
@blur=${_}
@paste=${e=>{r&&!t.suggestionComposer&&Vc(e,t)}}
aria-label=${z(`chat.composer.composerInput`)}
placeholder=${v?.active?``:ie}
rows="1"
></textarea>
<span class="agent-chat__composer-placeholder" aria-hidden="true"
>${v?.active?``:ie}</span
>
<span
id=${N}
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">
${kc({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`),s()},onViewChange:e=>{n.capabilityMenuView=e,s()}})}
${re}
</div>
<div class="agent-chat__composer-trail">
<div class="agent-chat__composer-meta agent-chat__composer-context">
${ne}
</div>
${M===U?U:W` <div class="agent-chat__composer-controls">${M}</div> `}
<div class="agent-chat__composer-actions">
${Eu(y)}
</div>
</div>
</div>
</div> `:t.disabledBanner?.kind===`composer-replacement`?oe:U}
</div>
`}function JT(){return(JT=e((()=>{No(),Vp(),Sp(),G(),oo(),Mn(),Fn(),H(),B(),Ap(),F(),Zp(),Ol(),$e(),wd(),Xc(),rl(),bT(),xl(),gc(),Ax(),Gl(),sT(),HT(),Pc(),Oc(),Wu(),Gx(),GT(),Cd(),uc(),Pd(),du()})))()}function YT(e){let t=Mx(e.paneId);t.slashCommandDispatchConnected=e.connected;let n=e.canCompose??e.canSend,r=e.sending||e.stream!==null,i=!!(e.canAbort&&e.onAbort)&&!Nx(e.runStatus),a=e.queue.find(t=>Px(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=Fx(e),l=s||c?{phase:`in-progress`}:e.runStatus,u=Ix(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=bc(t.composerInput,e)},t.textareaRef??=e=>{let n=e instanceof HTMLTextAreaElement?e:null,r=t.composerTextarea;r&&r!==n&&Nd(r),t.composerTextarea=n,n&&(Ad(n),Uu(n),t.restoreComposerFocus&&(t.restoreComposerFocus=!1,queueMicrotask(()=>t.composerTextarea?.focus({preventScroll:!0}))))},t.composerTextarea?.isConnected&&t.composerTextarea.value!==d&&Uu(t.composerTextarea);let f=e.assistantName||`OpenClaw`,p=e.waitingApproval?z(`chat.waitingForApproval`):a?.sendState===`waiting-model`?z(`chat.composer.preparingModel`):e.stream===null?s||a?z(`chat.composer.sendingMessage`):z(`chat.composer.working`,{name:f}):z(`chat.composer.responding`,{name:f}),m=l==null?``:l.phase===`in-progress`?p:l.phase===`done`?z(`chat.composer.runDone`):z(`chat.composer.runInterrupted`),h=e.onRequestUpdate??(()=>{}),g=tT(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(`/`))?z(`chat.mentions.unsupported`):null,b=(t,n)=>{Lx(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=>eu(t,e),runCommand:()=>A(e.getDraft?.()??e.draft),canRun:(n,r,i=``)=>e.canSend&&t.slashCommandDispatchConnected&&!(n&&!e.onSlashCommand)&&(!e.modelRequiredReason||$i(r?`/${r.name} ${i}`:x.getDraft()))&&(!e.submitDisabledReason||Ai(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=Pt(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=oT(e,t,h),D=!(!E||E.model.nonBlocking||t.questionCollapsed);!t.questionTakeoverActive&&D&&(t.composingDraft?.key===u&&(Lx(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&&$i(n))&&(!e.submitDisabledReason||!g.active&&yi(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(`/`)),ee=k(d),te=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}:Bx(t,u),n&&n.value!==i&&(n.value=i,Fd(n))},A=(n,r,i)=>{if(k(n)&&(t.composerComposing=!1,t.composingDraft=null,Lx(e,n),e.onTypingChange?.(!1),!g.activateDraft(n,!0))){if(g.active){g.submit(r);return}e.onSend(i,r),te(t.composerTextarea)}},j=rT({state:t,props:e,skillMenuHost:x,slashMenuHost:S,mentionMenuHost:C,requestUpdate:h,sendShortcut:w,canSubmitDraft:k,submitDraft:A,showAbortableUi:i,alternateFollowUpMode:T,goalComposer:g}),ne=e=>t.emojiMenu.update(e,h,!t.composerComposing&&!t.skillMenuOpen&&!t.slashMenuOpen&&!t.mentionMenu.open),M=(n,r=!1)=>{Fd(n,{nativeInput:!0}),n.dir=Md(n.value);let i=v();if(Lx(e,n.value,i.length?Ui(e.getDraft?.()??e.draft,n.value,i,t.mentionInput):void 0),t.mentionInput=void 0,g.activateDraft(n.value),!g.active){ul(n.value,t,S,h),Rd(n.value,n.selectionStart,t,x,h);let e=r?`trigger`:`input`;t.mentionMenu.update(n,h,e)}ne(n),(!!n.value.trim()!=!!d.trim()||k(n.value)!==ee)&&h(),e.onTypingChange?.(!!n.value.trim(),n.value)},re=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&&(Rx(t,Ix(e)),t.emojiMenu.complete(r,h,n)))},ie=n=>{let r=n.target,i=zx(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)},ae=e=>{let n=e.target;ne(n),!g.active&&(t.mentionMenu.update(n,h),e.type!==`keyup`&&(ul(n.value,t,S,h),Rd(n.value,n.selectionStart,t,x,h)))},N=e=>{em(e),t.composerComposing=!1,t.composingDraft?.key===u&&(t.composingDraft=null),M(e.target)},oe=n=>{Qp(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=Ic(i.value);i.value!==t&&(i.value=t,Fd(i)),Lx(e,t)}e.onTypingChange?.(!1)};t.microphonePicker??=new vd(h);let P=t.microphonePicker;P.syncCatalog(e.gatewayClient??null,e.connected);let F=()=>{if(P.realtimeStatus!==`ready`){P.handleOpen();return}e.submitDisabledReason||e.onToggleRealtimeTalk?.()},se=()=>{if(e.realtimeTalkActive){e.onToggleRealtimeTalk?.();return}let n=t.composerTextarea?.value??d;if(n.trim()||e.attachments?.length){A(n);return}F()},ce=e.realtimeTalkInputDeviceId?.trim()??``,le=e.onToggleRealtimeTalk?Lu({devices:P.devices,loading:P.loading,open:P.open,selectedDeviceId:ce,voiceActive:!!e.realtimeTalkActive,issue:P.issue,holdToDictate:e.composerHoldToRecord!==!1,realtimeStatus:P.realtimeStatus,dictationStatus:P.dictationStatus,onOpen:P.handleOpen,onClose:P.handleClose,onSelect:e=>{gn({realtimeTalkInputDeviceId:e.trim()||void 0}),P.handleClose()},onHoldToDictateChange:t=>{e.onComposerHoldToRecordChange?e.onComposerHoldToRecordChange(t):gn({composerHoldToRecord:t}),h()},onOpenTalkSettings:e.onOpenTalkSettings,onOpenDictationSettings:e.onOpenDictationSettings}):U,ue={client:e.gatewayClient??null,connected:e.connected,enabled:e.composerHoldToRecord!==!1,dictationAvailable:P.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=xu(s.value,n,s.start,s.end);i&&(i.value=c.value,Fd(i)),Lx(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?z(`chat.composer.dictationInterruptedRecovery`):z(`chat.composer.dictationStartRecovery`);t.dictationError=`${e} ${r}`,h()},onStateChange:()=>{t.dictation?.locksComposer&&(t.editRevision+=1,e.onDismissRealtimeTalkError?.()),h()},onDictationUnavailable:P.handleOpen,onTap:d.trim()||e.attachments?.length?F:se};t.dictation??=new Ju(ue),t.dictation.update(ue);let I=e.onToggleRealtimeTalk&&e.composerHoldToRecord!==!1?t.dictation:void 0,L=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};(!e||I?.handlePointerDown(e))&&(t.dictationSelection=r,e&&n&&(n.readOnly=!0))},de={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:n=>A(t.composerTextarea?.value??e.draft,n),onToggleVoice:e.onToggleRealtimeTalk?se:void 0,onToggleCamera:e.onToggleRealtimeCamera,microphonePicker:le,dictation:I,onDictationPointerDown:L,onDirectDictationStart:L,onPrimaryActionPointerDown:e=>wc(e,t.composerTextarea)};e.modelSwitching&&t.slashMenuCommand?.key===`think`&&Vu(t),(!n||t.composerComposing||t.dictation?.locksComposer||g.pending)&&t.emojiMenu.close();let fe=e.connected&&n;return!(fe&&Hc(t))&&t.skillMenuOpen&&!t.skillCommandRefreshPending&&El(t),qT({props:e,state:t,canCompose:n,showAbortableUi:i,visibleDraft:d,runStatusAnnouncement:m,requestUpdate:h,sendShortcut:w,questionPanelProps:E,showComposer:O,handleKeyDown:j,handleBeforeInput:re,handleInput:ie,handleSelect:ae,draftKey:u,handleCompositionEnd:N,handleBlur:oe,dictation:I,runControlsProps:de,menus:Yl(e.paneId,fe,t,t,t.mentionMenu,t.emojiMenu),mentionMenuHost:C,mentionError:y,skillMenuHost:x,slashMenuHost:S,goalComposer:g})}function XT(){return(XT=e((()=>{G(),Zt(),Tt(),F(),Hi(),Br(),Di(),Zp(),Ol(),wd(),vu(),xl(),gc(),nT(),iT(),Wc(),sT(),Oc(),Wu(),Gx(),JT(),na()})))()}function ZT(e,t){try{let n=e.getItem(t);if(!n)return!1;let r=JSON.parse(n);return to(r)&&r.open===!0}catch{return!1}}function QT(e){try{e.setItem(tE,`1`)}catch{}}function $T(e){try{return e.getItem(tE)===`1`}catch{return!1}}function eE(e){let t=e.sessionKey.trim(),n=e.storage===void 0?D():e.storage;if(!t||!n||$T(n))return e.settings;if(e.settings.sidebarSessionLayouts?.[t]!==void 0)return QT(n),e.settings;let r={columns:[]};for(let[t,i,a]of[[`openclaw.browser.panel.v1`,`browser`,e.browserAvailable],[`openclaw.desktopPanel`,`desktop`,e.desktopAvailable]])a&&ZT(n,t)&&(r=vb(r,i));let i=r.columns.length>0?gn({sidebarSessionLayouts:_(e.settings.sidebarSessionLayouts,t,r)}):e.settings;return QT(n),i}var tE;function nE(){return(nE=e((()=>{Ua(),Zt(),le(),Mb(),tE=`openclaw.chat.sidePanel.legacyDockVisibility.v1`})))()}function rE(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(!lt(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 ${Or({sessionKey:i,gatewayUrl:t})}`,qualifiedSessionKey:i}}catch{return{ok:!1,reason:`unavailable`}}}function iE(){return(iE=e((()=>{jr(),R()})))()}var aE,oE,$;function sE(){return(sE=e((()=>{G(),jn(),kp(),Dp(),B(),Gs(),$o(),Go(),F(),M(),qC(),aE={},oE={"compact:open-layout":`layout`,"compact:open-panels":`panels`,"compact:open-sharing":`sharing`,"compact:open-view":`view`},$=class extends Ve{constructor(...e){super(...e),this.session=Ms,this.worktreePath=null,this.onboarding=!1,this.preferencesBrowserOnly=!1,this.compact=!1,this.copyMarkdownAllowed=!1,this.splitAllowed=!1,this.settings=aE,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 Zo(this,()=>({session:this.session,selectionCount:1,compact:this.compact,navigationAllowed:!0,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=Lo(t),r=n??oE[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&&HC(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=W`<span class="session-menu__text"
>${t.label}${t.description?W`<span class="session-menu__description">${t.description}</span>`:U}</span
>`;if(t.kind===`status`)return W`<div
slot=${n?U:`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?W`<span slot="details" class="session-menu__sub">${t.badge}</span>`:U;return W`
<wa-dropdown-item
slot=${n?U:`submenu`}
class="session-menu__item"
value=${`quick:${e}:${t.id}`}
type=${t.active===void 0?U:`checkbox`}
.checked=${t.active??!1}
?disabled=${t.disabled}
variant=${t.variant??U}
>
<span slot="icon" class="session-menu__icon" aria-hidden="true">${t.icon}</span>
${r} ${i}
</wa-dropdown-item>
`})}renderSubmenu(e){let t=e===`panels`?this.panelActions:this.layoutActions;if(e!==`view`&&t.length===0)return U;let n=z(e===`view`?`chat.view.menu`:e===`panels`?`chat.sessionHeader.panels`:`chat.sessionHeader.layout`),r=e===`view`?V.eye:e===`panels`?V.panelRightOpen:V.columns2;return this.compact?Uo({value:`compact:open-${e}`,label:n,icon:r}):W`
<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>
${e===`view`?this.renderViewSubmenu():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?z(`chat.onboardingDisabled`):U,a=(t,n,r)=>W`
<wa-dropdown-item
slot=${e?U:`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 W`
${a(`reasoning`,z(`chat.view.reasoning`),t)}
${a(`tool-calls`,z(`chat.view.toolCalls`),n)}
${a(`commentary`,z(`chat.view.commentary`),r)}
${this.preferencesBrowserOnly?W`<div slot=${e?U:`submenu`} class="session-menu__info" role="note">
${z(`quickSettings.personal.browserOnly`)}
</div>`:U}
`}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=W`${this.compactView===`panels`?this.renderQuickActionItems(`panels`,this.panelActions,!0):this.compactView===`layout`?this.renderQuickActionItems(`layout`,this.layoutActions,!0):this.compactView===`sharing`&&this.sharing?GC(this.sharing,!0):this.renderViewSubmenu(!0)}`;return Us(e)}renderRootView(){return W`
${this.compact?W`<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">${z(`chat.openCommandPalette`)}</span>
</wa-dropdown-item>
<div class="session-menu__separator" role="separator"></div>`:U}
${this.boardWidgetMenu?W`
<div class="board-widget__page-menu-heading">
<strong
>${this.boardWidgetMenu.widget.title||this.boardWidgetMenu.widget.name}</strong
>
</div>
${Fp(this.boardWidgetMenu.widget,`details`)}
${this.boardWidgetMenu.canMutate?Rp({widget:this.boardWidgetMenu.widget,tabs:this.boardWidgetMenu.tabs,disabled:!1,prefix:`board-widget:`}):U}
<div class="session-menu__separator" role="separator"></div>
`:U}
${this.renderSubmenu(`panels`)} ${this.renderSubmenu(`layout`)}
${this.compact&&this.sharing?.session&&UC(this.sharing.session)?Uo({value:`compact:open-sharing`,label:z(`chat.sessionSharing.menu`),icon:V.users,disabled:!!this.sharing.openDisabledReason}):U}
${this.renderSubmenu(`view`)}
<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 W`<wa-dropdown-item
slot=${e?U:`submenu`}
class="session-menu__item"
value="continue-in-terminal"
?disabled=${!!this.actionDisabledReasons[`continue-in-terminal`]}
title=${this.actionDisabledReasons[`continue-in-terminal`]??U}
>
<span slot="icon" class="session-menu__icon" aria-hidden="true">${V.terminal}</span>
<span class="session-menu__text">${z(`chat.sessionHeader.continueInTerminal.action`)}</span>
</wa-dropdown-item>`}render(){let e=z(`chat.sidebar.sessionMenu`,{session:this.session.label});return W`
<wa-dropdown
class=${`session-menu chat-header-session-menu${this.compact?` session-menu--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)||zs(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>
`}},Z([K({attribute:!1})],$.prototype,`session`,void 0),Z([K({attribute:!1})],$.prototype,`worktreePath`,void 0),Z([K({attribute:!1})],$.prototype,`onboarding`,void 0),Z([K({attribute:!1})],$.prototype,`preferencesBrowserOnly`,void 0),Z([K({attribute:!1})],$.prototype,`compact`,void 0),Z([K({attribute:!1})],$.prototype,`copyMarkdownAllowed`,void 0),Z([K({attribute:!1})],$.prototype,`splitAllowed`,void 0),Z([K({attribute:!1,hasChanged:(e,t)=>e?.chatShowThinking!==t?.chatShowThinking||e?.chatShowToolCalls!==t?.chatShowToolCalls||e?.chatPersistCommentary!==t?.chatPersistCommentary})],$.prototype,`settings`,void 0),Z([K({attribute:!1})],$.prototype,`panelActions`,void 0),Z([K({attribute:!1})],$.prototype,`layoutActions`,void 0),Z([K({attribute:!1})],$.prototype,`sessionActions`,void 0),Z([K({attribute:!1})],$.prototype,`boardWidgetMenu`,void 0),Z([K({attribute:!1})],$.prototype,`sharing`,void 0),Z([K({attribute:!1,hasChanged:(e,t)=>e.length!==t?.length||e.some((e,n)=>e!==t?.[n])})],$.prototype,`groups`,void 0),Z([K({attribute:!1})],$.prototype,`currentOwner`,void 0),Z([K({attribute:!1})],$.prototype,`actionDisabledReasons`,void 0),Z([K({attribute:!1})],$.prototype,`forkDisabled`,void 0),Z([K({attribute:!1})],$.prototype,`forkFromLastCompleted`,void 0),Z([K({attribute:!1})],$.prototype,`archiveAllowed`,void 0),Z([K({attribute:!1})],$.prototype,`archiveShortcut`,void 0),Z([K({attribute:!1})],$.prototype,`deleteAllowed`,void 0),Z([K({attribute:!1})],$.prototype,`onOpen`,void 0),Z([K({attribute:!1})],$.prototype,`onOpenCommandPalette`,void 0),Z([K({attribute:!1})],$.prototype,`onSettingsChange`,void 0),Z([K({attribute:!1})],$.prototype,`onAction`,void 0),Z([Y()],$.prototype,`compactView`,void 0),customElements.get(`openclaw-chat-header-session-menu`)||customElements.define(`openclaw-chat-header-session-menu`,$)})))()}function cE(e){let t=e.session,n=t?.placement,r=n?.state,i=If(t);if(!t||!Kn(r)&&!i)return U;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=ps(n),g=jf(t,e.placementStartupStatus),_=a?.target.kind===`gateway`?z(`sessionsView.moveSessionGatewayTarget`):a?.target.kind===`profile`?a.target.profileId:a?.target.kind===`device`?a.target.deviceId:void 0,v=a?.error?z(`sessionsView.moveSessionFailed`):a&&_?z(`sessionsView.movingSession`,{target:_}):e.placementRestarting?z(t.repositoryWorkspaceId&&r!==`failed`?`sessionsView.dispatchingSession`:`sessionsView.restartingSession`):e.placementMoving?z(`sessionsView.movingSessionGeneric`):f?z(`sessionsView.deviceOffline`):p||r===`draining`||r===`reconciling`?z(`sessionsView.syncingCloudFiles`):i?z(`sessionsView.repositoryWorkerRequiredLabel`):g.label,y=e.placementMoveDisabledReason,b=e.placementReclaimDisabledReason,x=e.placementRecoveryDisabledReason,S=ct(n?.stateChangedAtMs,{fallback:``}),C=a?.error?a.error:i||r===`active`||u?U:`${r}${S?` · ${S}`:``}`;return W`
<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===U?U:W`<div class="chat-pane__placement-state">${C}</div>`}
${u?W`<dl class="chat-pane__placement-facts">
${[[`sessionsView.placementFactService`,s],[`sessionsView.placementFactProfile`,c],[`sessionsView.placementFactMachine`,l&&`…${l.slice(-6)}`]].map(([e,t])=>t?W`<dt>${z(e)}</dt>
<dd>${t}</dd>`:U)}
${n?.state===`active`&&n.inference===`worker`?W`<dt>${z(`sessionsView.placementFactInference`)}</dt>
<dd>${z(`sessionsView.inferenceWorker`)}</dd>`:U}
<dt>${z(`sessionsView.placementFactState`)}</dt>
<dd>${r}${S?` · ${S}`:``}</dd>
${n?.state===`active`&&n.diskSpace?W`<dt>${z(`sessionsView.placementFactDisk`)}</dt>
<dd>
${z(`sessionsView.placementDiskFree`,{free:ke(n.diskSpace.availableBytes)})}
</dd>`:U}
</dl>`:U}
${[[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?W`<wa-dropdown-item
class=${`session-menu__item ${t}`}
variant=${n?`danger`:U}
?disabled=${!!r}
title=${r??U}
@click=${()=>!r&&o?.()}
>
<span slot="icon" class="session-menu__icon" aria-hidden="true">${i}</span>
<span class="session-menu__text">${a?z(a):g.stopLabel}</span>
</wa-dropdown-item>`:U)}
</wa-dropdown>
${f?W`<div class="chat-pane__placement-note" role="status">
${z(`sessionsView.waitingForDevice`)}
</div>`:p?W`<div class="chat-pane__placement-note" role="status">
${z(`sessionsView.syncingCloudFilesDetail`)}
</div>`:n&&(n.state===`draining`||n.state===`reconciling`)?W`<div class="chat-pane__placement-note" role="status">
${z(`sessionsView.syncingCloudFilesDetail`)} ·
<openclaw-elapsed-time
.startMs=${n.stateChangedAtMs}
></openclaw-elapsed-time>
</div>`:U}
</div>
`}function lE(){return(lE=e((()=>{G(),Fs(),Ho(),B(),Es(),F(),Ge(),ge(),kf()})))()}function uE(e){let t=z(`chat.sessionHeader.continueInTerminal.title`),n=z(`chat.sessionHeader.continueInTerminal.description`);return W`
<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>
${rs(e.command)}
<p class="continue-in-terminal-dialog__note">
${z(`chat.sessionHeader.continueInTerminal.authNote`)}
</p>
<footer class="exec-approval-actions">
<button type="button" class="btn primary" @click=${e.onClose}>
${z(`common.close`)}
</button>
</footer>
</section>
</openclaw-modal-dialog>
`}function dE(){return(dE=e((()=>{G(),Zs(),un(),F()})))()}var fE;function pE(){return(pE=e((()=>{G(),jn(),X(),Wo(),Os(),B(),Rs(),F(),od(),Ye(),M(),fd(),fE=class extends i{constructor(...e){super(...e),this.sessions=[],this.sessionKey=``,this.expiryTimer=null}disconnectedCallback(){this.clearExpiryTimer(),super.disconnectedCallback()}clearExpiryTimer(){this.expiryTimer!==null&&(clearTimeout(this.expiryTimer),this.expiryTimer=null)}render(){this.clearExpiryTimer();let e=Date.now(),t=cs(this.sessions,this.sessionKey).flatMap(t=>{let n=Gc(t,e);return n.kind===`none`?[]:[{row:t,attention:n}]}),n=Math.min(...t.flatMap(({row:e,attention:t})=>t.kind===`agent`&&e.agentStatus?[e.agentStatus.expiresAt]:[]));return this.isConnected&&Number.isFinite(n)&&(this.expiryTimer=setTimeout(()=>this.requestUpdate(),Math.max(0,n-e+1))),J(t,({row:e})=>e.key,({row:e,attention:t})=>{let n=t.kind===`agent`?t.note:t.reason,r=ju(e)?this.onOpenSubagent??this.onOpenSession:this.onOpenSession;return W`<div
class="chat-composer-neighbor-card chat-composer-neighbor-card--${t.kind===`agent`?`warn`:`danger`} chat-child-attention"
data-child-session-key=${e.key}
role=${t.kind===`agent`?`status`:`alert`}
>
<span class="chat-composer-neighbor-card__icon" aria-hidden="true"
>${t.kind===`agent`?Hs[t.icon]:V.alertTriangle}</span
>
<div class="chat-composer-neighbor-card__copy">
<strong>${Te(e.key,e)}</strong>
<span>${As(n)}</span>
</div>
${r?W`<button class="btn btn--sm" type="button" @click=${()=>r(e.key)}>${z(`sessionsView.openSession`)}</button>`:U}
</div>`})}},Z([K({attribute:!1})],fE.prototype,`sessions`,void 0),Z([K()],fE.prototype,`sessionKey`,void 0),Z([K({attribute:!1})],fE.prototype,`onOpenSubagent`,void 0),Z([K({attribute:!1})],fE.prototype,`onOpenSession`,void 0),customElements.get(`openclaw-chat-child-attention`)||customElements.define(`openclaw-chat-child-attention`,fE)})))()}function mE(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 hE(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 gE(){return(gE=e((()=>{})))()}function _E(e,t){return e.filter(e=>!!(e.selectionAnnotation&&it(e.selectionAnnotation.sessionKey,t)))}var vE;function yE(){return(yE=e((()=>{G(),jn(),Tt(),R(),M(),Qc(),ru(),rl(),BC(),oS(),vE=class extends i{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=_E(Yc(this.props),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`)}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&&!_E(Yc(this.props),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?(Jc(t,[e]),!1):(Jc(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=_E(Yc(this.props),this.sessionKey);if(e.length===0)return;let t=new Set(e.map(e=>e.id)),n=Yc(this.props);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=_E(Yc(this.props),r),a=i.findIndex(t=>t.id===e),o=i[a+1]??i[a-1],s=Yc(this.props);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=nS({paneId:this.paneId,anchorRect:t.getBoundingClientRect(),anchorElement:t,sourceRange:this.root?mE(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=Yc(this.props),a=i.find(t=>t.id===e.id);if(!a?.selectionAnnotation)return!0;let o=zC({...a.selectionAnnotation,comment:r},this.props,pc(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?Mt(e):this.focusComposer()}}),!0)},onDelete:()=>{this.canChange(n)&&this.deleteComment(e.id)},onCancel:()=>{this.retireEditor(),Mt(t)}}),this.root&&(this.editorObserver??=new MutationObserver(this.syncEditorAnchor),this.editorObserver.observe(this.root,{childList:!0,subtree:!0,attributes:!0})))}render(){return U}},Z([K({attribute:!1,hasChanged:(e,t)=>e.readSignal!==t?.readSignal||e.attachments!==t?.attachments})],vE.prototype,`props`,void 0),Z([K({type:Boolean})],vE.prototype,`disabled`,void 0),Z([K()],vE.prototype,`sessionKey`,void 0),Z([K()],vE.prototype,`paneId`,void 0),Z([K({type:Boolean})],vE.prototype,`presented`,void 0),customElements.define(`openclaw-chat-comment-controller`,vE)})))()}function bE(e){if(e.suggestions.length===0)return U;let t=e.canResolve&&(e.role===`owner`||e.role===`admin`);return W`
<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 W`
<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`?W`
<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`?U:W`
<button
class="btn btn--ghost btn--icon session-suggestion__action"
type="button"
?disabled=${r}
aria-label=${z(`chat.sessionSuggestions.${a}`,{author:i})}
title=${z(`chat.sessionSuggestions.${a}`,{author:i})}
@click=${()=>e.onResolve(n,t)}
>
${o}
</button>
`)}
</div>
`:W`<span class="session-suggestion__state"
>${z(`chat.sessionSuggestions.state.${n.state}`)}</span
>`}
</article>
`})}
</div>
`}function xE(){return(xE=e((()=>{G(),B(),F()})))()}function SE(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 ti(n)??`—`}function CE(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:{label:Te(t.key,t),status:i,duration:SE(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 wE({sessions:e,sessionKey:t,agentId:n}){let r=e.find(e=>it(e.key,t)&&(t!==`global`&&t!==`unknown`||!!(n&&e.agentId===n))),i=r?.swarm;if(!i?.groups.length)return U;let a=r?Ya(r):!1,o=CE(e,i.groups);return W` <aside
class="chat-swarm"
data-test-id="chat-swarm"
role="status"
aria-live="off"
aria-label=${z(`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:z(`labsPage.swarm.groupTitle`),l=z(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 W` <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?W`
<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"
>${z(`labsPage.swarm.completed`,{done:String(e.done)})}</span
>
<span class="chat-swarm__disclosure"
><span class="sr-only">${z(`labsPage.swarm.details`)}</span
>${V.chevronDown}</span
>
`:W`
<div class="chat-swarm__header">
<strong title=${c}>${c}</strong>
<span
>${z(`labsPage.swarm.progress`,{complete:String(r),total:String(n)})}</span
>
</div>
<div class="chat-swarm__markers" role="img" aria-label=${l}>
${u.map(e=>W`<span class=${`chat-swarm__marker chat-swarm__marker--${e}`} aria-hidden="true"></span>`)}
${n>u.length?W`<span>+${n-u.length}</span>`:U}
</div>
<div class="chat-swarm__counts">${l}</div>
${i?W`<div class="chat-swarm__outcome">${z(a?`labsPage.swarm.childOutcomeProcessing`:`labsPage.swarm.childOutcome`)}</div>`:U}
<span class="chat-swarm__disclosure"
>${z(`labsPage.swarm.details`)} ${V.chevronDown}</span
>
`}
</summary>
${s?W`<div class="chat-swarm__outcome">${z(a?`labsPage.swarm.childOutcomeProcessing`:`labsPage.swarm.childOutcome`)}</div>`:U}
<div class="chat-swarm__tasks" role="list">
${t.length===0?W`<div class="chat-swarm__outcome">${z(`labsPage.swarm.detailsUnavailable`)}</div>`:U}
${t.map(e=>W` <div class="chat-swarm__task" role="listitem">
<span
class=${`chat-swarm__task-icon chat-swarm__task-icon--${e.status}`}
role="img"
aria-label=${z(TE[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?W`<div class="chat-swarm__outcome">${z(`labsPage.swarm.otherGroups`,{count:String(i.otherActiveGroups)})}</div>`:U}
</aside>`}var TE;function EE(){return(EE=e((()=>{G(),X(),B(),F(),da(),Ye(),R(),TE={queued:`common.queued`,running:`common.running`,done:`common.completed`,failed:`labsPage.swarm.failedOrStopped`}})))()}function DE(e){return e.replace(/[\u061c\u200e\u200f\u202a-\u202e\u2066-\u2069]/g,``)}function OE(e){if(!(e instanceof HTMLElement))return;let t=e.scrollLeft+e.clientWidth<e.scrollWidth-1;e.toggleAttribute(`data-overflow-right`,t)}function kE(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 U;let o=t.length>1,s=t.some(t=>t.id===e.activeTaskSuggestionId)?e.activeTaskSuggestionId:t[0]?.id;return W`
<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=DE(c.title),m=DE(c.tldr),h=DE(c.cwd),g=DE(c.prompt),_=DE(We(h)),y=e.taskSuggestionCopiedIds?.has(c.id)??!1,b=z(y?`chat.taskSuggestions.promptCopied`:`chat.taskSuggestions.copyPrompt`),x=t=>{!u&&n&&e.onAcceptTaskSuggestion?.(c,t,void 0)},S=c.id===s,C=W`
<article
class="task-suggestion"
data-task-id=${c.id}
data-swap-direction=${S&&e.taskSuggestionSwapDirection?e.taskSuggestionSwapDirection:U}
?hidden=${!S}
>
<header class="task-suggestion__header">
<div class="task-suggestion__eyebrow" title=${h}>
${z(`chat.taskSuggestions.eyebrow`,{repo:_})}
${o?W`<span class="task-suggestion__position"
>${l+1} / ${t.length}</span
>`:U}
</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?W`
${[`previous`,`next`].map(t=>W`
<button
class="task-suggestion__header-action"
type="button"
aria-label=${z(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>
`)}
`:U}
${r||d?.phase===`started`?W`
<button
class="task-suggestion__header-action task-suggestion__dismiss"
type="button"
?disabled=${u||d?.phase===`started`&&!i}
aria-label=${z(`chat.taskSuggestions.dismiss`,{title:p})}
@click=${()=>e.onDismissTaskSuggestion?.(c)}
>
${V.x}
</button>
`:U}
</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"
>${z(`chat.taskSuggestions.showInstructions`)}</span
>
<span class="task-suggestion__hide"
>${z(`chat.taskSuggestions.hideInstructions`)}</span
>
</summary>
<div class="task-suggestion__instruction-body">
<code
${q(e=>{e&&requestAnimationFrame(()=>OE(e))})}
@scroll=${e=>OE(e.currentTarget)}
>${h}</code
>
<pre>${g}</pre>
</div>
</details>
${d?.phase===`started`?W`<p class="task-suggestion__summary" role="status">
${z(`chat.taskSuggestions.started`)}
</p>`:d?.phase===`failed`?W`<div class="callout danger" role="alert">
<span
>${f?U:z(`chat.taskSuggestions.startUnconfirmed`)}
${d.error}</span
>
</div>`:U}
${f?.open?W`
<div class="task-suggestion__repository">
<p>${z(`chat.taskSuggestions.chooseRepositoryHelp`)}</p>
<label>
<span>${z(`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=>W`
<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})}
>
${z(`common.cancel`)}
</button>
</div>
`:U}
</div>
<div class="task-suggestion__actions">
${d?.phase===`started`?W`<a
class="btn task-suggestion__start task-suggestion__open"
href=${i?d.href:U}
aria-disabled=${i?U:`true`}
tabindex=${i?0:-1}
@click=${e=>{i?a&&v(e)&&(e.preventDefault(),a(c)):e.preventDefault()}}
>${z(`sessionsView.openSession`)}</a
>`:d?.phase===`failed`?W`<button
class="btn task-suggestion__start task-suggestion__retry"
type="button"
?disabled=${!n||!(!f?.open||ol(f.cwd.trim()))}
@click=${()=>{f?f.open?n&&ol(f.cwd.trim())&&e.onAcceptTaskSuggestion?.(c,`worktree`,f.cwd.trim()):e.onChangeTaskRepository?.(c,{open:!0}):x(`local`)}}
>
${z(f?f.open?`chat.taskSuggestions.startWorktree`:`chat.taskSuggestions.chooseRepository`:`common.retry`)}
</button>`:W`
<button
class="btn task-suggestion__start task-suggestion__start--primary"
type="button"
?disabled=${u||!n}
title=${n?``:z(`chat.taskSuggestions.adminRequired`)}
@click=${()=>x(`local`)}
>
${V.play}
${z(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=${z(`chat.taskSuggestions.startOptions`)}
title=${n?``:z(`chat.taskSuggestions.adminRequired`)}
>
${V.chevronDown}
</button>
<wa-dropdown-item value="local" ?disabled=${u||!n}>
${z(`chat.taskSuggestions.startSession`)}
</wa-dropdown-item>
<wa-dropdown-item value="worktree" ?disabled=${u||!n}>
${z(`chat.taskSuggestions.startWorktree`)}
</wa-dropdown-item>
<wa-dropdown-item value="session" ?disabled=${u||!n}>
${z(`chat.taskSuggestions.startCurrentSession`)}
</wa-dropdown-item>
</wa-dropdown>
`}
</div>
</article>
`;return In(S?`${c.id}:${e.taskSuggestionSwapGeneration??0}`:`${c.id}:inactive`,C)})}
</div>
`}function AE(){return(AE=e((()=>{G(),Nn(),H(),B(),Yo(),F(),Ru()})))()}function jE(e,t,n){let r=ME.get(t);r||(r={favicons:new Map,inFlight:new Map},ME.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 ME;function NE(){return(NE=e((()=>{ME=new WeakMap})))()}function PE(e){if(LE?.resourceBasePath===e.resourceBasePath&&LE.gatewayUrl===e.gatewayUrl&&LE.authCandidates.length===e.authCandidates.length&&LE.authCandidates.every((t,n)=>t===e.authCandidates[n]))return LE.fetcher;let t=(t,n)=>ll({...e,auth:{},hostname:t,signal:n});return LE={...e,fetcher:t},t}function FE(e){let t=e.client?.gatewayUrl??e.settings.gatewayUrl;return e.automaticallyFetchFavicons&&Nt(t)?PE({authCandidates:vt(e),resourceBasePath:e.resourceBasePath,gatewayUrl:t}):void 0}function IE(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=jE(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 LE;function RE(){return(RE=e((()=>{zt(),il(),NE()})))()}var zE;function BE(){return(BE=e((()=>{G(),jn(),X(),B(),F(),la(),M(),yE(),Lc(),Wr(),zE=class extends Ve{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 _E(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=mE(this.root,e.selectionAnnotation),c=s?hE(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(_E(this.attachments,this.sessionKey),e=>e.id,(e,t)=>W` <button
type="button"
class="btn primary chat-comment-pin"
data-attachment-id=${e.id}
aria-label=${z(`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&&Hl(t,e.id,`edit`)}}
>
${V.messageSquare}
</button>`)}},Z([K({attribute:!1})],zE.prototype,`attachments`,void 0),Z([K()],zE.prototype,`sessionKey`,void 0),Z([K({attribute:!1})],zE.prototype,`disabled`,void 0),customElements.define(`openclaw-chat-comment-pins`,zE)})))()}function VE(e,t){let n=e?.closest(`.chat-position-rail`);return!n||n.hasAttribute(`data-overflow`)===t?!1:(!t&&n.contains(n.ownerDocument.activeElement)&&n.closest(`.chat-thread`)?.focus({preventScroll:!0}),n.toggleAttribute(`data-overflow`,t),!0)}function HE(e,t){let n=e?.querySelector(`[tabindex="0"]`);t&&t!==n&&(n&&(n.tabIndex=-1),t.tabIndex=0)}function UE(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??``}. ${z(`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 WE({transcript:e,assistant:t,markers:n,renderedIndexes:r,activeId:i,visibleIds:a,rovingId:o,previewId:s,hoveredId:c,bindScroller:l,bindPreview:u,onScroll:d,stopScrollInput:f,onPointerLeave:p,onMarkerHover:m,onMarkerFocus:h,onMarkerBlur:g,onMarkerKeyDown:_,onMarkerSelect:v}){let y=n.length,b=z(`chat.thread.positionUserMessage`),x=t?.name.trim()||z(`chat.thread.positionAssistantMessage`),S=e=>e.role===`user`?b:x,C=s==null?void 0:n.find(e=>e.id===s),w=C?ua(C.message):void 0,T=w?.role===`user`?w.sender:void 0,E=(T?w?.senderLabel:null)??(C?S(C):void 0),D=C&&w?Ca(ui(C.message,w).trim(),GE):``;return W`
<aside
class="chat-position-rail"
style=${`--chat-position-rail-count: ${y}`}
aria-label=${z(`chat.thread.positionRail`)}
@pointerleave=${p}
>
<div class="chat-position-rail__track">
<div
${q(l)}
class="chat-position-rail__marks"
role="list"
aria-label=${z(`chat.thread.positionRail`)}
@scroll=${d}
@wheel=${f}
@touchstart=${f}
@touchmove=${f}
>
<div class="chat-position-rail__virtual-space">
${po([e,y,c,...r.flatMap(e=>[e,n[e].id,S(n[e]),n[e].anchorId])],()=>J(r,e=>n[e].id,(e,t)=>{let s=n[e],l=r[t-1];return W`
${l!==void 0&&e>l+1?W`<div aria-hidden="true"></div>`:U}
<div
class="chat-position-rail__item"
?data-hovered=${s.id===c}
role="listitem"
aria-posinset=${e+1}
aria-setsize=${y}
>
<button
class="chat-position-rail__marker"
style=${`top: ${e*12}px`}
type="button"
data-position-marker-id=${s.id}
tabindex=${s.id===o?`0`:`-1`}
aria-label=${z(`chat.thread.positionMarker`,{position:String(e+1),count:String(y),label:S(s)})}
aria-description=${z(`chat.thread.positionMarkerHint`)}
aria-current=${String(s.id===i)}
?data-visible=${a.has(s.id)}
@pointerenter=${()=>m(s.id)}
@focus=${e=>h(s.id,e)}
@blur=${g}
@keydown=${t=>_(e,t)}
@click=${()=>v(s.anchorId)}
>
<span class="chat-position-rail__tick" aria-hidden="true"></span>
</button>
</div>
`}))}
</div>
</div>
${C?W`
<div ${q(u)} class="chat-position-rail__preview" aria-hidden="true">
<div class="chat-position-rail__preview-header">
${C.role===`assistant`&&t?W`<span
class="chat-author-avatar"
role="img"
aria-label=${x}
>
${qo(t)}
</span>`:Td(T)}
<span class="chat-position-rail__preview-label">${E}</span>
</div>
<!-- Preview links remain non-interactive; the marker owns keyboard navigation. -->
<div class="chat-position-rail__preview-copy" inert>
${D?so(bs(D,{codeBlockChrome:`none`})):z(`chat.attachments.previewUnavailable`)}
</div>
</div>
`:U}
</div>
</aside>
`}var GE;function KE(){return(KE=e((()=>{G(),oo(),H(),X(),fo(),Io(),Xs(),F(),Yr(),ii(),su(),GS(),GE=140})))()}function qE(e,t){return e.length===t.length&&e.every((e,n)=>Object.is(e,t[n]))}function JE(){let e=new WeakMap;return(t,n,r)=>{let i=e.get(t);if(i&&qE(i.key,n))return i.value;let a=r();return e.set(t,{key:n,value:a}),a}}function YE(){return{hoveredId:null,focusedId:null,dismissed:!1}}var XE,ZE,QE,$E;function eD(){return(eD=e((()=>{G(),Bn(),On(),KE(),GS(),cc(),XE=`.chat-bubble[data-entry-id]`,ZE=`.chat-bubble[data-message-id]:not([data-entry-id])`,QE=class extends Cn{constructor(...e){super(...e),this.session=null,this.interaction=YE(),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(cl(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 PS(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.scrollElement?.closest(`.chat-position-rail`)?.removeAttribute(`data-overflow`),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=pl(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(XE)||e.matches(ZE)&&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(`${XE}, ${ZE}`)].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(XE),...e.querySelectorAll(ZE)]),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 t=e.clientHeight>0&&e.scrollHeight-e.clientHeight>1;VE(this.scrollElement,t)&&!t&&(this.interaction=YE(),this.refreshWindow());let{state:n,scheduleLayout:r}=FS(this.reader,e,this.markerElements.get(this.interaction.focusedId??``)?.matches(`:focus-visible`)??!1);this.reader=n,r&&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))}qE(this.windowIndexes(),this.renderedIndexes)||(this.refreshWindow(),this.syncMountedMarkers(),this.syncTabStop()),this.reservedOffset=this.viewportOffset,e.style.setProperty(`--chat-position-scroll-top`,`${this.viewportOffset}px`);let i=this.markerIds.length*12;e.toggleAttribute(`data-overflow-top`,this.viewportOffset>1),e.toggleAttribute(`data-overflow-bottom`,i-t-this.viewportOffset>1);let a=this.interaction.hoveredId??this.interaction.focusedId;UE(this.previewElement,this.markerElements.get(a??``),((this.markerIndexes.get(a??``)??0)+.5)*12-this.viewportOffset,t)}syncTabStop(){let e=this.interaction.focusedId??this.activeId??this.markerIds[0];HE(this.scrollElement,this.markerElements.get(e??``))}disconnected(){this.pendingFocusId=void 0,this.bindPreview(),this.bindScroller(),Object.assign(this.interaction,YE())}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=YE(),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(),U;let s=this.interaction;for(let e of[`focusedId`,`hoveredId`])a.some(t=>t.id===s[e])||(s[e]=null);let c=a.map(e=>e.id);qE(c,this.markerIds)||(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();(!qE(l,this.renderedIndexes)||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 WE({transcript:n,assistant:r,markers:a,renderedIndexes:this.renderedIndexes,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)})}},$E=En(QE)})))()}function tD(e){let t=e?.previousElementSibling;e instanceof ho&&t instanceof HTMLButtonElement&&(t.id||=`chat-source-${qa()}`,e.id||=`${t.id}-preview`,e.for=t.id,t.setAttribute(`aria-controls`,e.id),Js(e))}function nD(e){let t=e.currentTarget;t instanceof ho&&t.anchor?.setAttribute(`aria-expanded`,String(t.open))}function rD(e){let t=e.currentTarget,n=t instanceof Element?t.closest(`wa-popover`):null;n instanceof ho&&(n.open=!1,n.anchor instanceof HTMLElement&&n.anchor.focus({preventScroll:!0}))}function iD(e,t){return e.length>0?W`<openclaw-chat-sources
.sources=${e}
.fetchFavicon=${t}
></openclaw-chat-sources>`:U}var aD;function oD(){return(oD=e((()=>{_o(),G(),H(),X(),B(),Ss(),F(),la(),Ma(),M(),NE(),Wr(),aD=class extends Ve{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?jE(new URL(e.url).hostname,this.fetchFavicon,this.refreshFavicons):null;return t&&!this.failedFavicons.has(t)?W`<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 W`<div
class="chat-source-strip"
role="group"
aria-label=${z(`chat.messages.sourcePreviews.label`)}
>
<div class="chat-source-strip__label">${z(`chat.messages.sourcePreviews.label`)}</div>
<div class="chat-source-strip__cards">
${J(this.sources,e=>e.url,e=>W`
<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
${q(tD)}
class="chat-source-popover"
data-source-url=${e.url}
placement="bottom-start"
without-arrow
@wa-show=${nD}
@wa-hide=${nD}
>
<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=${z(`common.close`)}
@click=${rD}
>
${V.x}
</button>
</div>
${e.excerpt?W`
<div class="chat-source-popover__kind">
${z(e.excerptKind===`page`?`chat.messages.sourcePreviews.pageExcerpt`:`chat.messages.sourcePreviews.searchSnippet`)}
</div>
<p class="chat-source-popover__excerpt">${e.excerpt}</p>
`:W`<p class="chat-source-popover__unavailable">
${z(`chat.messages.sourcePreviews.unavailable`)}
</p>`}
<a
class="chat-source-popover__open"
href=${e.url}
target="_blank"
rel="noopener noreferrer"
>${z(`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`,aD)})))()}function sD(e,t){let n=Pf(e);if(n)return uv(n,t.streamOptions);let r=df(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?Dc(a.message):null)??Math.min(...r.map(e=>e.timestamp),...s,Date.now()),isStreaming:e.outcome.kind===`active`,runId:e.runId},u=h_(a&&r.find(e=>e.messages.includes(a))||l,t.renderGroupOptions(l).resolveReplyPreview,r.flatMap(e=>e.messages)),d=e=>Tv(e,t.renderGroupOptions(e)),f=e.parts.flatMap(e=>e.kind===`stream-run`?e.parts:[e]),p=Uh(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 lv(e,t.streamOptions,`standalone`);if(e.kind===`work-group`){let n=t.isWorkExpanded(e.key);return W`
${dv(e,{expanded:n,onToggle:()=>t.onToggleWork(e.key,n),presentation:`continuation`,browserTabPreviews:p.get(e.key)})}
${n?e.groups.map(d):U}
`}if(e.kind===`activity-run`){let n=e.groups[0];return n?Sv(e.groups,t.renderGroupOptions(n),`continuation`):U}return W`${d(e)}${p.get(e.key)??U}`}),a?iD(gp({groups:r,answer:a.message,runId:e.runId,basePath:t.basePath,sessionPublicOrigin:t.sessionPublicOrigin}),t.streamOptions.fetchLinkFavicon):U];return Ev(l,{...t.renderGroupOptions(l),frameContent:m,frameReplyLine:u,frameActionOwner:a,turnRecap:t.turnRecap})}function cD(){return(cD=e((()=>{G(),X(),lp(),vf(),gl(),Dv(),pv(),y_(),oD(),lg()})))()}function lD(e){let t=e.realtimeTalkConversation??[];return t.length===0?U:W`
<div
class="agent-chat__voice-turns"
role="log"
aria-label=${z(`chat.composer.voiceTranscript`)}
>
${J(t,e=>e.id,t=>{let n=t.role===`user`?e.userName?.trim()||`You`:e.assistantName;return W`
<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?W`<span
class="agent-chat__voice-turn-stream"
aria-label=${z(`chat.composer.stillListening`)}
></span>`:U}
</div>
`})}
</div>
`}function uD(){return(uD=e((()=>{G(),X(),F()})))()}function dD(e,t,n,r){let{normalizedMessage:i,displayMarkdown:a}=e_(e),o=t_(e,i,a),s=dl(e);if(!o&&!s)return;let c={...i,messages:[{message:e}]},l=s??t,u=Gr(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??J_(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:hl({currentAgentId:d,agents:n.agents,assistantAvatar:f?n.assistantAvatar??null:null,assistantAvatarUrl:f?n.assistantAvatarUrl:n.senderAgentAvatars?.get(d)})}:{turnRunId:Fc(e)??void 0},text:o}}function fD(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?dD(a,r,t,i):o&&pD[o];return n.set(r,s),s}}var pD;function mD(){return(mD=e((()=>{ii(),R(),gl(),Vf(),o_(),Y_(),Cc(),pD={pending:{pending:!0},missing:{missing:!0},oversized:{oversized:!0}}})))()}function hD(e,t){let n=Df(e),r=gD(e,[n],()=>e.find(e=>e.kind===`reading-indicator`)),i=r?.runId??t.runId,a=_D(e,[n,i,t.runActive],()=>t.runActive&&i?e.findLast(e=>e.kind===`group`&&e.messages.some(({message:e})=>Mu(e)===i&&Ji(e).some(e=>!e.hideFromChannelProgress&&!e.suppressChannelProgress)))?.key:void 0),o=r?.request?.runIds??[];return{workingIndicator:r,activityRunId:i,activityGroupKey:a,runOutputTokens:Zc(t.runUsageById,r?.runId?[...o,r.runId]:[])??Zc(t.runUsageById,o)}}var gD,_D;function vD(){return(vD=e((()=>{Mi(),wl(),nc(),Vf(),gD=JE(),_D=JE()})))()}function yD(e){let t=e.selectedSession,n=t?.expandedParticipants??t?.participants;return SD(e.messages,[e.userId,n,t?.owner?.actor.identity,...e.pendingInputs??[]],()=>({showOwnSenderName:(n??[]).some(({identity:t})=>t.type!==`agent`&&(t.type!==`profile`||t.id!==e.userId))||[...e.messages,...(e.pendingInputs??[]).map(e=>e.message)].some(t=>{if(Gr(vi(t))!==`user`)return!1;let n=bi(no(no(t)?.__openclaw));return!(!n||n.identity?.type===`profile`&&n.identity.id===e.userId)}),sessionPeople:new Set([t?.owner?.actor.identity,...(n??[]).map(({identity:e})=>e)].flatMap(e=>e&&e.type!==`agent`?[$r(e)]:[]))}))}function bD(e){let t=e.sessionHost??null;return lt(e.sessionKey)?.rest===`global`||t!==null&&ae(t)&&T(t,e.sessionKey)!==null}function xD(e,t,n){let r=e.selectedSession,i=r?.kind,a=i&&i!==`unknown`?i:n?`global`:Sr(e.sessionKey),o=CD(t,[Df(t)],()=>t.some(e=>e.kind===`group`&&tu(e))),s=fu((a===`direct`||a===`cron`||a===`spawn-child`)&&!o,e.userId);return{isDirectThread:s===`footer`,avatarPlacement:r?.classification===`subagent`||ne(e.sessionKey)?`none`:s}}var SD,CD;function wD(){return(wD=e((()=>{gr(),ii(),oi(),R(),Vf(),Xl(),su(),SD=JE(),CD=JE()})))()}function TD(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((!Sl(e)||r||t.get(`session-activity:`+e.key))&&!(e.role!==`user`&&e.role!==`assistant`||e.visibleContent===`none`))for(let t of e.messages){if(!t.hasVisibleContent)continue;let r=dl(t.message)??t.key,i=e.role===`user`?r:e.runId?`run:${e.runId}`:dl(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}=e_(r);(aa(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 ED(){return(ED=e((()=>{Ti(),gl(),Xl(),o_()})))()}function DD(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`||!Sl(i)||!au(i.messages[0]?.message)||!i.senderSession?.sessionKey||i.messages.some(({message:e})=>ua(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 OD(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 kD(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 AD(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 jD(e,t){let{session:n}=t,r=[Df(e),t.sessionKey,t.runWorking,t.searchActive,n?.key,n?.lastRunId,n?.status,n?.runtimeMs,id()],i=FD.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`&&kD(t.item,n)){let r=AD(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={...i.value,collapsedItems:a,transcriptItems:o},c={...t.owner,item:r},l={...t,item:n,owner:c};return ID.set(s,{item:n,owner:c,structuralChain:i.structuralChain}),FD.set(e,{...i,value:s,live:l}),s}}let a=Nf(xf(_f(gf(e),t),t),t),o=t.searchActive?a:DD(a),s=new Map,c=o.filter((e,t)=>{if(e.kind===`notice`&&e.handoffBoundary)return!1;let n=o[t-1],r=e.kind===`stream-run`&&e.parts.every(e=>e.kind===`reading-indicator`)?e.parts:e.kind===`agent-run-frame`?Pf(e):void 0,i=e.kind===`stream-run`||e.kind===`agent-run-frame`?e.runId:void 0;return n?.kind!==`group`||!r||!yf(n)||n.runId!==void 0&&i!==void 0&&n.runId!==i||(s.set(n.key,r),!1)}),l={collapsedItems:o,transcriptItems:c,workGroups:c.filter(e=>e.kind===`work-group`),continuations:s,searchActive:t.searchActive},u=Uf(e),d=e[u],f;if(d?.kind===`stream`){let e=l.collapsedItems.findLast(e=>OD(e,d)),t=e?l.transcriptItems.lastIndexOf(e):-1,n=e&&t>=0?{item:e,collapsedIndex:l.collapsedItems.lastIndexOf(e),transcriptIndex:t}:void 0;f={index:u,item:d,owner:n},n&&ID.set(l,{item:d,owner:n,structuralChain:l})}return FD.set(e,{key:r,value:l,structuralChain:l,live:f}),l}function MD(e,t,n){let r=[t,pf(t),n.assistantName,n.userId,n.userName];return LD(e,r,()=>{let i=ID.get(e);if(!i)return ND(e,t,n);let a=TD(e.transcriptItems.slice(i.owner.transcriptIndex),t,new Map,e.searchActive),o=a.markerIdsByMessageId.has(i.item.key),s=RD(i.structuralChain,[...r,o],()=>{let r=ND(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 ND(e,t,n){let r=new Map,i=new Map,a=new Map,o=[];for(let s of e.transcriptItems){if(o.push({kind:`item`,key:s.key,item:s}),s.kind===`work-group`&&t.get(s.key))for(let e of s.groups)o.push({kind:`item`,key:`${s.key}:${e.key}`,item:e});let e=s.kind===`agent-run-frame`?s.parts:[s],c=df(s),l=c.find(e=>e.role===`assistant`)??c[0];for(let o of e){if(o.kind===`stream-run`)for(let e of o.parts)e.kind===`stream`&&a.set(e.key,s.key);else o.kind===`stream`&&a.set(o.key,s.key);for(let e of df(o)){let o=J_(l??e,n),c=s.kind===`work-group`&&t.get(s.key)?s.key+`:`+e.key:s.key;for(let t of e.messages){a.set(t.key,c);let e=dl(t.message);e&&(i.set(e,c),r.set(e,{message:t.message,messageId:t.key,senderLabel:o}))}}}}return{messageRowKeysById:i,transcriptMessageKeys:a,loadedReplySources:r,positionIndex:TD(e.transcriptItems,t,i,e.searchActive),rows:o}}function PD(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`&&Sl(r)&&r.messages.some(e=>dl(e.message)===n)&&mf(t,`session-activity:`+r.key,!0),r.kind===`work-group`&&r.groups.some(e=>e.messages.some(e=>dl(e.message)===n))&&mf(t,r.key,!0)}}var FD,ID,LD,RD;function zD(){return(zD=e((()=>{ii(),vf(),Vf(),Xl(),Gu(),Y_(),ED(),FD=new WeakMap,ID=new WeakMap,LD=JE(),RD=JE()})))()}function BD(e,t){e.size>0&&VD(e,[t.fullMessageAgentId,t.messages,t.toolMessages,pf(e),...t.pendingInputs??[]],()=>wf(e,t.fullMessageAgentId,[...t.messages,...t.toolMessages,...(t.pendingInputs??[]).map(e=>e.message)]))}var VD;function HD(){return(HD=e((()=>{Vf(),VD=JE()})))()}function UD(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(UD)]}return[e]}function WD(e,t){let n=e.transcriptRenderDependencies;qE(t,n)||(e.transcriptRenderDependencies=t,e.transcriptRenderContext={})}function GD(e,t,n){return r=>po([...UD(r),e.transcriptRenderContext,...t(r)],()=>n(r))}function KD(){return(KD=e((()=>{oo()})))()}function qD(e){return{key:e.key,message:{role:`assistant`,content:[{type:`text`,text:e.text}]}}}function JD(e){let t=Df(e),n=YD.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]=qD(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`||Kc(n)||n.kind===`group`&&tu(n))&&(a=[]),n.kind===`group`){if(Gr(n.role)!==`assistant`||tu(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(qD(n)),r.set(n.key,a));return YD.set(e,i),r}var YD;function XD(){return(XD=e((()=>{ii(),Vf(),Xl(),YD=new WeakMap})))()}function ZD(e){let t=te.getLocale();(!$D||eO!==t)&&(eO=t,$D=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(z(`chat.sessionSuggestions.typingOthers`,{count:String(e.length-2)}));let i=0,a=$D.formatToParts(r).map(e=>e.type===`element`&&i++<n.length?W`<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=z(o,{name:``,names:``});return{text:z(o,{name:$D.format(r),names:$D.format(r)}),content:s.split(``).map((e,t)=>t?W`${a}${e}`:e)}}function QD(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:z(`chat.sessionSuggestions.typingSeveral`),content:z(`chat.sessionSuggestions.typingSeveral`)}:a.length?ZD(a):void 0,s=t===`none`&&i.length?i.map(e=>`${e.label} — ${z(`chat.sessionSuggestions.typingDraftState`)}`).join(`; `):void 0,c=n?.several?o?.text??``:r.length===0?``:r.length===1?z(`chat.sessionSuggestions.typing`,{name:r[0]?.label??``}):z(`chat.sessionSuggestions.typingMany`,{names:r.map(e=>e.label).join(`, `)});return W`<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 W`<div
class="agent-chat__typing-row"
?data-exiting=${e.exitDurationMs!==void 0}
style=${e.exitDurationMs===void 0?U:`--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: ${zi(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?W`<span
class="chat-text agent-chat__typing-preview-text"
dir="auto"
?data-paused=${e.paused}
>${r}</span
>`:W`<span class="agent-chat__typing-bubble" aria-hidden="true"
><span></span><span></span><span></span
></span>`}
${t===`gutter`?Yu(`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`?Td(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}
>${z(e.paused?`chat.sessionSuggestions.pausedDraftState`:`chat.sessionSuggestions.typingDraftState`)}</span
>
</div>
</div>
</div>
</div>
</div>`})}
${i.length?W`<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?`${z(`chat.sessionSuggestions.otherCollaborators`)}: ${s}`:z(`chat.sessionSuggestions.otherCollaborators`)}
title=${s??U}
aria-live="off"
>
${t===`none`?U:W`<span class="agent-chat__typing-identities">
${J(i,e=>e.id,e=>W`<span class="agent-chat__typing-person">
${Td({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>`:U}
<span class="sr-only" role="status">${c}</span>
</div>`}var $D,eO;function tO(){return(tO=e((()=>{G(),X(),F(),Xr(),xd(),su()})))()}function nO(e,t,n){return e.length?W`<div
class="chat-subagent-activity"
role="list"
aria-label=${z(`chat.subagentsPanel.title`)}
>
${J(e,e=>e.key,e=>{let r=z(e.status===`queued`?`common.queued`:e.status===`waiting`?`chat.waitingOnSubagents`:`common.running`),i=e.activity||r,a=e.listed?t??n:n,o=W`
<span
class="chat-subagent-activity__icon ${e.status===`running`?`chat-reading-indicator`:``}"
aria-hidden="true"
>
${e.status===`running`?us(V.claw):V.clock}
</span>
<span class="chat-subagent-activity__name">${e.label}</span>
<span class="chat-subagent-activity__status">${i}</span>
`,s=[e.label,r,e.activity].filter(Boolean).join(`. `);return W`<div role="listitem" data-subagent-session-key=${e.key}>
${a?W`<button
class="chat-subagent-activity__row"
type="button"
title=${s}
aria-label=${s}
@click=${()=>a(e.key)}
>
${o}
</button>`:W`<div class="chat-subagent-activity__row" title=${s}>${o}</div>`}
</div>`})}
</div>`:U}function rO(){return(rO=e((()=>{G(),X(),B(),fs(),F()})))()}var iO;function aO(){return(aO=e((()=>{Va(),jn(),yo(),Gn(),yt(),R(),M(),rO(),iO=class extends i{constructor(...e){super(...e),this.rows=[],this.connection=null,this.cleanup=[],this.digests=new Map}connectedCallback(){super.connectedCallback(),this.requestUpdate()}disconnectedCallback(){this.retire(),super.disconnectedCallback()}retire(){for(let e of this.cleanup)e();this.cleanup=[],this.boundContext=void 0,this.connection=null,this.digests.clear()}matchesRun(e,t){let n=e.session;return e.status===`running`&&it(e.key,t.sessionKey)&&typeof t.runId==`string`&&n.activeRunIds?.includes(t.runId)===!0&&(!t.agentId||$a(t.agentId)===Se(n,``))&&(!t.sessionId||t.sessionId===n.sessionId)&&(!t.lifecycleRevision||t.lifecycleRevision===n.lifecycleRevision)}willUpdate(e){if(this.isConnected){if(this.boundContext!==this.context){this.retire();let e=this.context;this.boundContext=e,e&&(this.connection=e.gateway.snapshot.hello,this.cleanup=[e.gateway.subscribe(()=>{this.connection!==e.gateway.snapshot.hello&&(this.connection=e.gateway.snapshot.hello,this.digests.clear(),this.requestUpdate())}),e.gateway.subscribeEvents(t=>{if(t.event!==`session.observer`||!this.connection||this.connection!==e.gateway.snapshot.hello||!bo(Zn,t.payload))return;let n=t.payload,r=this.rows.find(e=>this.matchesRun(e,n));r&&Vl(this.digests.get(r.key),n)===n&&(this.digests.set(r.key,n),this.requestUpdate())})])}for(let[e,t]of this.digests)this.rows.some(n=>n.key===e&&this.matchesRun(n,t))||this.digests.delete(e)}}render(){return nO(this.rows.map(e=>{let t=this.digests.get(e.key);if(!t||!this.matchesRun(e,t))return e;let n=e.session.observerDigest,r=Vl(t,n?.runId===t.runId?n:void 0);return{...e,activity:r?.headline.trim()||void 0}}),this.onOpenSubagent,this.onOpenSession)}},Z([Ba({context:Qt,subscribe:!0})],iO.prototype,`context`,void 0),Z([K({attribute:!1})],iO.prototype,`rows`,void 0),Z([K({attribute:!1})],iO.prototype,`onOpenSubagent`,void 0),Z([K({attribute:!1})],iO.prototype,`onOpenSession`,void 0),customElements.get(`openclaw-chat-subagent-activity`)||customElements.define(`openclaw-chat-subagent-activity`,iO)})))()}function oO(e,t){let n=sS(e.paneId),r=e.asyncQuestions,i=e.onRequestUpdate??(()=>{}),a=e.selectedSession,{showOwnSenderName:o,sessionPeople:s}=yD(e),c=Ll(a,e.mediaPolicyEpoch),l=bD(e),u=e.showThinking&&a?.reasoningLevel===`on`,d=e.currentAgentId??e.fullMessageAgentId,f=hl({currentAgentId:d,agents:e.agents,assistantAvatar:e.assistantAvatar,assistantAvatarUrl:e.assistantAvatarUrl}),p={agentId:d,name:e.assistantName,avatar:f.avatar,textAvatar:f.textAvatar},m=te.getLocale(),h=n.searchOpen&&!!n.searchQuery.trim(),g=t.expandedAssistantMessages,_=t=>Qu(e.fullMessageAgentId,t);BD(g,e);let v=Mf(e,h),y=v.wait,b={paneId:e.paneId,sessionKey:e.sessionKey,archiveNotice:tm(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,subagentWait:v.placedWait,questionPrompts:e.questionPrompts,loading:e.loading,replyPeople:[...s].toSorted(),replyLocalPerson:ci(e.userId),searchOpen:n.searchOpen,searchQuery:n.searchQuery,messageRecovery:h&&e.loadFullAssistantMessage?{messages:g,revision:pf(g),agentId:e.fullMessageAgentId}:void 0},x=Bf(b),{workingIndicator:S,activityRunId:C,activityGroupKey:w,runOutputTokens:T}=hD(x,e),E=e.latestBrowserTabs;bf(e.sessionKey,x,!!e.autoExpandToolCalls,h||!e.showToolCalls);let D=Hf(e.sessionKey),O=Cf(e.sessionKey),k=jD(x,{sessionKey:e.sessionKey,runWorking:!!e.runWorking,searchActive:h,session:a}),{collapsedItems:ee,transcriptItems:A,continuations:j}=k,ne=e.replyMessageAccess?.navigationId;ne&&PD(A,D,ne);let{messageRowKeysById:M,transcriptMessageKeys:re,loadedReplySources:ie,positionIndex:ae,rows:N}=MD(k,D,e),oe=JSON.stringify([...E??[]]),P=sO(k.workGroups,[D,pf(D),e.sessionKey,oe],()=>Uh(k.workGroups.filter(e=>!D.get(e.key)),{sessionKey:e.sessionKey,latestBrowserTabs:E})),F=new Map((e.questionPrompts??[]).map(e=>[e.id,e])),se=(e,t)=>{mf(D,e,!(t??D.get(e)??!1)),n.transcriptRenderContext.onRequestUpdate?.()},ce=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};mf(g,n,s),i();let c=e=>{if(g.get(n)!==s)return;let t=e?.ok&&e.message&&typeof e.message==`object`?Ci(e.message)??``:null;mf(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,...e.messages.some(e=>Fu(e)===t&&Q(Q(e)?.__openclaw)?.reason===`oversized`)?{maxChars:Yn}:{}}).then(c,()=>c(null))},le=(e.realtimeTalkConversation?.length??0)>0,ue=(e.typingActors?.length??0)>0,I=!!(y||ue||le),L=A.length===0&&!e.loading&&!I;t.setContentReady(!e.loading);let{isDirectThread:de,avatarPlacement:fe}=xD(e,x,l),pe=e.loading&&A.length===0&&!ue,me=typeof e.presented==`object`?e.presented.isPresented():e.presented??!0,he=a?.contextTokens??e.sessions?.defaults?.contextTokens??null,ge=Fl(n,{sessionKey:e.sessionKey,agentId:e.currentAgentId,gatewayClient:e.gatewayClient,indicator:S,row:a,usageByRun:e.runUsageById}),_e=A.at(-1),ve=_e?.kind===`agent-run-frame`&&_e.outcome.kind===`completed`&&_e.outcome.actionOwner!==null||_e?.kind===`group`&&yf(_e)?_e:null,ye=ge&&(!ve?.runId||ve.runId===ge.runId)?ge:null,be=!e.runActive&&!e.runWorking&&!h&&ve&&(ve.kind!==`group`||!ve.isStreaming)?ve.key:null,xe=ye!==null&&ve?.runId===ye.runId,Se=e=>xe&&e===ve?.key?ye??void 0:void 0,Ce=fD(ie,e),we={entryRefFor:t.entryAnimations.refFor,presented:me,onReply:e.onSetReply?e=>n.transcriptRenderContext.onSetReply?.(e):void 0,resolveReplyPreview:Ce,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:fe===`gutter`},Te={...we,branding:e.branding,assistant:p,startupLabel:e.startupLabel,waitingApproval:e.waitingApproval,waitingSubagents:y??void 0,runningSubagents:v.running,subagentActivity:v.activity.length?W`<openclaw-chat-subagent-activity
.rows=${v.activity}
.onOpenSubagent=${e.onOpenSubagent}
.onOpenSession=${e.onOpenSession}
></openclaw-chat-subagent-activity>`:void 0,onOpenSubagent:v.listed&&e.onOpenSubagent||e.onOpenSession,onOpenSubagents:v.listed?e.onOpenSubagents:void 0,runOutputTokens:T,questionPrompts:F},Ee=t=>{let n=j.get(t.key),r=t.messages.at(-1)?.message,a=t.role.toLowerCase()===`user`&&r?dl(r):null;return{...we,messageReactions:e.messageReactions,onReact:e.onReact,transcriptVisible:e.transcriptVisible,latestBrowserTabs:E,showReasoning:u,showToolCalls:e.showToolCalls,activityRunId:C,activityGroupKey:w,isToolMessageExpanded:e=>D.get(e),onToggleToolMessageExpanded:se,isUserMessageExpanded:e=>O.get(e)??!1,onToggleUserMessageExpanded:e=>{mf(O,e,!O.get(e)),i()},loadFullAssistantMessage:e.loadFullAssistantMessage??void 0,getAssistantMessageExpansion:e=>g.get(_(e)),onToggleAssistantMessageExpanded:ce,isToolExpanded:e=>D.get(e)??!1,onToggleToolExpanded:se,subagents:e,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:fe,contextWindow:he,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:Te}:void 0,turnRecap:Se(t.key),latestAssistant:t.key===be,searchResult:h}},De=JSON.stringify([T,v.statusKey]),Oe=e=>{if(e.kind===`stream-run`)return e.parts.some(e=>e.kind===`reading-indicator`)?De:``;if(e.kind!==`group`&&e.kind!==`agent-run-frame`)return``;let t=Se(e.key),n=`${t?`${t.runtimeMs}:${t.outputTokens??``}`:``}|${e.key===be?`latest-assistant`:``}`;if(e.kind===`agent-run-frame`)return`${e.parts.some(e=>e.kind===`stream-run`&&e.parts.some(e=>e.kind===`reading-indicator`))?De:``}|${n}`;let r=j.get(e.key);return`${r?`${r.map(e=>e.key).join(` `)}${De}`:``}|${n}|${h?`search-result`:``}`},ke=GD(n,e=>{let t=[Oe(e)];for(let n of df(e))for(let e of n.messages)if(e.replyTarget?.kind===`id`){let n=ie.get(e.replyTarget.id);t.push(e.replyTarget.id,n?.message,n?.senderLabel)}return t},t=>{if(t.kind===`divider`)return rm(t);if(t.kind===`notice`)return im(t);if(t.kind===`stream-run`)return uv(t.parts,Te);if(t.kind===`work-group`){let e=D.get(t.key)??!1;return dv(t,{expanded:e,browserTabPreviews:P.get(t.key),onToggle:()=>se(t.key,e)})}if(t.kind===`activity-run`){let e=t.groups[0];return e?t.groups.length===1?Ev(e,Ee(e)):Sv(t.groups,Ee(e)):U}return t.kind===`agent-run-frame`?sD(t,{basePath:e.basePath,sessionPublicOrigin:e.sessionPublicOrigin,streamOptions:Te,renderGroupOptions:Ee,isWorkExpanded:e=>D.get(e)??!1,onToggleWork:se,turnRecap:Se(t.key)}):t.kind===`group`?Ev(t,Ee(t)):t.kind===`question`?uv([t],{questionPrompts:F}):U});t.entryAnimations.project(x),t.syncMessageRows(M,re);let Ae=P.size?[]:N.slice(),je=(e,t)=>Ae.push({kind:`content`,key:e,content:t});for(let e of P.size?N:[]){Ae.push(e);let t=P.get(e.key);t&&(e.kind!==`item`||e.item.kind!==`work-group`)&&je(`work-previews:${e.key}`,W`<div class="chat-group tool chat-group--turn-block">
<div class="chat-group-messages">${t}</div>
</div>`)}let Me=lD({...e,realtimeTalkConversation:e.realtimeTalkConversation?.filter(t=>!t.transcriptId||!cO(e.messages,[],()=>new Set(e.messages.map(dl))).has(t.transcriptId))});Me!==U&&je(`realtime-talk`,Me),ye!==null&&!xe&&!L&&!pe&&je(`turn-recap`,Ql(ye)),y&&!v.placedWait&&!h&&je(`waiting-subagents`,cv(e.sessionKey,y,Te));let Ne=QD(e.typingActors,fe,e.typingOverflow);Ne&&je(`presence:typing`,Ne);let Pe=nn();WD(n,[m,e.branding?.mascot,e.branding?.brandIcon,e.branding?.workingIndicator,e.branding?.avatarHat,e.branding?.artwork,e.branding?.workingPhrases,Pe.mascot,Pe.brandIcon,Pe.workingIndicator,Pe.artwork,Pe.avatarHat,D,pf(D),O,pf(O),g,pf(g),Mc(),Math.floor(Date.now()/6e4),oe,e.sessionKey,me,typeof e.transcriptVisible==`object`?e.transcriptVisible.isPresented():e.transcriptVisible??!0,fe,v.rowsKey,e.boardProvider,e.boardProvider?.canPinWidgets,e.boardProvider?.canPinMcpApps,e.boardProvider?.snapshot$.value.revision,e.fullMessageAgentId,!!e.loadFullAssistantMessage,u,e.showToolCalls,!!e.runActive,C,w,!!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,ec(e.githubRepositories,e.githubRepo),he,!!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??``,ye===null?``:`${ye.runtimeMs}:${ye.outputTokens??``}`]),n.transcriptRenderContext.onRequestUpdate=e.onRequestUpdate;let Fe=()=>Bf({...b,searchOpen:!1,searchQuery:``,messageRecovery:void 0},`unfiltered`);return n.transcriptRenderContext.turnVideoMessages=JD(h?Fe():x),n.transcriptRenderContext.onSetReply=e.onSetReply,n.transcriptRenderContext.onOpenReply=r=>{let o=h?jD(Bf({...b,searchOpen:!1,searchQuery:``}),{sessionKey:e.sessionKey,runWorking:!!e.runWorking,searchActive:!1,session:a}):k,s=(o===k?ie:MD(o,D,e).loadedReplySources).has(r);if(s&&PD(o.transcriptItems,D,r),h&&pS(n,i),s){h?queueMicrotask(()=>t.revealMessage(r)):t.revealMessage(r);return}e.replyMessageAccess?.open(r)},{isDirectThread:de,positionIndex:pe?{markers:[],markerIdsByMessageId:new Map}:ae,isEmpty:L,showLoadingSkeleton:pe,searchOpen:n.searchOpen,renderRows:(r=U,i=null)=>t.render(Ae,e=>e.kind===`item`?ke(e.item):e.content,AS(ee),e.announceTranscript!==!1&&!n.searchOpen&&!e.loading,r,i,!!ne)}}var sO,cO;function lO(){return(lO=e((()=>{G(),er(),qt(),F(),wi(),oi(),vf(),yd(),wl(),Lf(),Vf(),cD(),am(),Dv(),$c(),pv(),uD(),mD(),CS(),lg(),vD(),NS(),wD(),zD(),HD(),KD(),XD(),tO(),Cc(),qc(),aO(),sO=JE(),cO=JE()})))()}function uO(e,t){let n=ue(e);return!t.onNavigate||!n?.hasAttribute(`data-cron-run-link`)?!1:(e.preventDefault(),t.onNavigate(`cron`,{search:n.search}),!0)}function dO(e,t){return t.renderSession(e.sessionKey,t=>fO(e,t))}function fO(e,t){let n=oO(e,t);(n.isEmpty||n.showLoadingSkeleton)&&t.entryAnimations.sync(pO,e.announceTranscript!==!1&&!n.searchOpen&&!e.loading);let r=e.historyPagination?W`<div class="chat-history-sentinel"></div>`:U,i=e.historyPagination?{template:oc(e.historyPagination),height:44}:null,a=e.routeLoadingSkeleton&&n.showLoadingSkeleton,o=e.commentAttachments?.some(e=>e.selectionAnnotation),s=a?Xt():n.showLoadingSkeleton||n.isEmpty?W`
<div class="chat-thread-inner" ${q(t.scrollElementRef)}>
${r}
${n.isEmpty&&!n.showLoadingSkeleton&&i?i.template:U}
${n.showLoadingSkeleton?Ep(`chat`,z(`chat.thread.loading`)):U}
${n.isEmpty&&!n.showLoadingSkeleton&&!n.searchOpen?vc({...e,onModelSetup:void 0}):U}
${n.isEmpty&&n.searchOpen?W` <div class="agent-chat__empty">${z(`chat.thread.noMatches`)}</div> `:U}
</div>
`:n.renderRows(r,i);return W`
<div class="chat-thread-viewport">
<div
class="chat-thread ${n.isDirectThread?`chat-thread--direct`:``} ${a?`chat-thread--route-loading`:``} ${o?`chat-thread--comment-pins`:``}"
${Ip(e.transcriptVisible??!0)}
${Np(e.sessionKey,n.showLoadingSkeleton?!1:e.transcriptVisible??!0,!!e.gatewayClient?.connected)}
${q(t=>{t instanceof HTMLElement&&IE(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===` `)&&uO(t,e))return;let n=zo(t);if(n){e.onOpenWorkspaceFile?.(n);return}let r=Ns(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),v(t)&&uO(t,e))return;let n=ss(t);if(n){e.onOpenWorkspaceFile?.(n);return}let r=Ao(t,e.basePath);r&&v(t)&&(t.preventDefault(),e.onOpenSessionLink?.(r))}}
@contextmenu=${t=>yS(t,e)}
@pointerup=${t=>_S(t,e)}
>
<span
class="chat-transcript-announcement sr-only"
role="status"
aria-live=${e.announceTranscript===!1?`off`:`polite`}
aria-atomic="true"
>${t.liveAnnouncementText}</span
>
${$E({positions:n.positionIndex,transcript:t,assistant:{...hl(e),name:e.assistantName},requestUpdate:e.onRequestUpdate??(()=>{})})}
${s}
${o?W`<openclaw-chat-comment-pins
.attachments=${e.commentAttachments}
.sessionKey=${e.sessionKey}
.disabled=${e.commentsDisabled??!1}
></openclaw-chat-comment-pins>`:U}
</div>
</div>
`}var pO;function mO(){return(mO=e((()=>{G(),H(),Lp(),rn(),Pp(),Ko(),Mo(),Ps(),Fo(),Cp(),F(),RE(),Hu(),BE(),eD(),CS(),LC(),lO(),Cc(),pO=new Map})))()}var hO;function gO(){return(gO=e((()=>{G(),jn(),er(),Vs(),F(),Ii(),qf(),M(),Wm(),hO=class extends Ve{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(pp(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:t.outputTruncated?Yn:2e6});if(i!==this.requestVersion||this.content!==e||!this.isConnected)return;let o=a?.ok&&a.message?Vr(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||pp(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 U;let t=e.outputText??``,n=Gf(e)??``;return W`<section class="chat-tool-output" aria-busy=${this.loadState===`loading`}>
<div class="sidebar-header">
<div class="sidebar-title">${Kf(e)}</div>
</div>
${this.loadState===`loading`?W`<p role="status">${z(`common.loading`)}</p>`:U}
${this.loadState===`unavailable`?W`<p role="status">${z(`chat.toolCards.fullOutputUnavailable`)}</p>`:U}
${this.loadState===`error`?W`<p role="alert">${z(`chat.toolCards.outputLoadFailed`)} <button class="btn btn--sm" @click=${this.loadOutput}>${z(`common.retry`)}</button></p>`:U}
${e.inputText===void 0?U:W`<details>
<summary>${z(`chat.toolCards.toolInput`)}</summary>
<pre>${e.inputText}</pre>
</details>`}
${this.loadState===`loading`?U:W`<div class="chat-tool-output__actions">
${xs(t,z(`chat.toolCards.copyOutput`))}
<button class="btn btn--sm" type="button" @click=${()=>this.downloadOutput(e)}>
${z(`chat.toolCards.downloadOutput`)}
</button>
</div>`}
${this.downloadFailed?W`<p role="alert">${z(`chat.toolCards.outputDownloadFailed`)}</p>`:U}
<pre class="chat-tool-output__text"><code>${n}</code></pre>
${n===t?U:Am(t)}
</section>`}},Z([K({attribute:!1})],hO.prototype,`content`,void 0),Z([K({attribute:!1})],hO.prototype,`loadFullMessage`,void 0),Z([K()],hO.prototype,`connectionEpoch`,void 0),Z([Y()],hO.prototype,`resolvedCard`,void 0),Z([Y()],hO.prototype,`loadState`,void 0),Z([Y()],hO.prototype,`downloadFailed`,void 0),customElements.get(`openclaw-chat-tool-output`)||customElements.define(`openclaw-chat-tool-output`,hO)})))()}function _O(e){let{content:t,host:n}=e;if(t.kind===`tool-output`)return W`<openclaw-chat-tool-output
class="chat-sidebar"
.content=${t}
.loadFullMessage=${e.chat.loadFullAssistantMessage??null}
.connectionEpoch=${e.chat.connectionEpoch}
></openclaw-chat-tool-output>`;let r=Ef(`detail-panel`,e.requestUpdate);return r===void 0?W`<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:Ll(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=>ib(n,e)}
.onOpenSessionLink=${e.chat.onOpenSessionLink}
.onRevealInWorkspace=${e=>{ab(n,e),cy(n,null),n.updateSidebarLayout(vb(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??Ep(`review`,z(`common.loading`))}function vO(){return(vO=e((()=>{G(),Cp(),F(),Ff(),Af(),Mb(),gO(),$c(),fy(),lb()})))()}function yO(e){let t=lt(e)?.rest.match(Ea)?.[1];return t?t.toLowerCase().replaceAll(`-`,``):null}function bO(e,t,n=`main`){let r=e.filter(e=>lt(e.key)?.agentId===$a(t.agentId));if(t.kind!==`short`){let e=t.kind===`main`?Za({agentId:t.agentId,mainKey:n}):t.sessionKey,i=r.find(t=>it(t.key,e));if(i||t.kind===`main`||!t.slugCandidate)return i}let i=r.filter(e=>{let n=yO(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=>ba(e.displayName)===a):[],s=o.length||t.kind!==`short`?o:i;return s.length===1?s[0]:void 0}function xO(e,t,n){let r=new URLSearchParams(t.search).get(he)?.trim(),i=pd(e.gateway,t.pathname),a=r??i,o=!!(i&&i===a);if(a){let i=()=>{r&&lu(e.gateway,t.pathname,r)},s=fe(e,a,n.agentId);if(s&&bO([s],n))return i(),{sessionKey:s.key,row:s};let c=yO(a),l=lt(a)?.agentId;if(o&&c?.startsWith(n.shortId.toLowerCase().replaceAll(`-`,``))&&l&&$a(l)===$a(n.agentId))return i(),{sessionKey:a}}}function SO(){return(SO=e((()=>{wa(),Nu(),_e(),R()})))()}function CO(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(ce);let r=n.toString();return{...e,...t,search:r?`?${r}`:``}}function wO(e){let t=new URLSearchParams(e.search),n=t.get(ce)===`1`;return{draft:t.get(`draft`)||void 0,...n?{focusComposer:!0}:{}}}function TO(e){let t=new URLSearchParams,{draft:n,focusComposer:r}=wO(e);return n&&t.set(`draft`,n),r&&t.set(ce,`1`),t.size>0?`?`+t.toString():``}function EO(e,t,n=e?.sessionKey){return!e||!it(n,e.sessionKey)||t===e?void 0:e.draft}function DO(){return(DO=e((()=>{_e(),R()})))()}function OO(e,t,n){let r=(t-e.left)/e.width,i=(n-e.top)/e.height,a=r<=AO?{edge:`left`,distance:r}:1-r<=AO?{edge:`right`,distance:1-r}:null,o=i<=AO?{edge:`up`,distance:i}:1-i<=AO?{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 kO(e,t){let n={left:e.left,top:e.top,width:e.width,height:e.height};if(t.kind===`center`)return n;let r=t.edge===`left`||t.edge===`right`,i=r?`width`:`height`,a=r?`left`:`top`;return n[i]/=2,(t.edge===`right`||t.edge===`down`)&&(n[a]+=n[i]),n}var AO;function jO(){return(jO=e((()=>{AO=.3})))()}function MO(e,t){return LO?LO.expiresAt<=Date.now()?(LO=void 0,!1):LO.sourceData!==t&&it(LO.sessionKey,e):!1}var NO,PO,FO,IO,LO,RO;function zO(){return(zO=e((()=>{R(),NO=3e4,PO=15e3,FO=250,IO=`.agent-chat__composer-combobox textarea`,RO=class{constructor(e){this.host=e}rendered(e,t,n){let r=!!(e&&(t===void 0||t!==null&&it(t,e.sessionKey)));return e&&!e.draft&&r&&MO(e.sessionKey,e)&&(LO=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&&MO(n,r)))}beforeDraftCleanup(e){e.focusComposer&&(LO={expiresAt:Date.now()+NO,sessionKey:e.sessionKey,sourceData:e})}maintain(e){this.timer!==void 0&&(window.clearTimeout(this.timer),this.timer=void 0);let t=Date.now()+PO,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&&it(t.sessionKey,e))?.querySelector(IO),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,FO):void 0};r()}}})))()}function BO(e,t){return e?.presentedTranscriptsReady===!0&&!(!e.intentSessionKey||t&&e.intentSessionKey!==t)}function VO(e){return e.lastActivityAt??e.updatedAt??0}var HO,UO,WO,GO,KO;function qO(){return(qO=e((()=>{d(),sd(),el(),hc(),et(),HO=75,UO=3e4,WO=`openclaw-chat-prefetch`,GO=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.running=!1,this.rescheduleDelayMs=null,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,document.removeEventListener(`visibilitychange`,this.handleVisibilityChange),this.cancelScheduledWork()}update(e){let t=this.snapshot;this.snapshot=e,(!t||t.client!==e.client||t.listRevision!==e.listRevision||t.intentSessionKey!==e.intentSessionKey||t.presentedTranscriptsReady!==e.presentedTranscriptsReady||t.openSessionKeys.length!==e.openSessionKeys.length||t.openSessionKeys.some((t,n)=>t!==e.openSessionKeys[n]))&&this.schedule()}schedule(e=HO){if(!this.connected||!BO(this.snapshot)){this.cancelScheduledWork(),this.rescheduleDelayMs=null;return}if(this.running){this.rescheduleDelayMs=this.rescheduleDelayMs===null?e:Math.min(this.rescheduleDelayMs,e);return}let t=Date.now()+e;this.delayDeadline!==null&&this.delayDeadline<=t||(this.cancelScheduledWork(),this.delayDeadline=t,this.delayTimer=globalThis.setTimeout(()=>{this.delayTimer=null,this.delayDeadline=null,this.runCycle()},e))}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(WO,{ifAvailable:!0},async e=>{e&&await this.prefetchIntendedSession()}):await this.prefetchIntendedSession()}catch(e){console.debug(`[chat-session-prefetch] cycle failed`,e)}finally{if(this.running=!1,this.rescheduleDelayMs!==null){let e=this.rescheduleDelayMs;this.rescheduleDelayMs=null,this.schedule(e)}}}}async prefetchIntendedSession(){let e=this.snapshot;if(!e?.client||!e.rows||!BO(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=zl(this.cache,e.snapshotHost,{sessionKey:t});n&&this.cache.size===20&&this.snapshotStore.write(Ae(e.snapshotHost,{sessionKey:t}),n)}let n=this.selectCandidate(e);n&&await this.prefetchCandidate(e,t,n)}async prefetchCandidate(e,t,n){let r=this.snapshotStore.captureReadScope(n.snapshotKey),i=()=>this.isCurrent(e,n)&&r(),a=()=>i()&&BO(this.snapshot,n.sessionKey);if(!a()||this.isOpen(n.snapshotKey))return;let o={sessionKey:n.canonicalSessionKey},s=()=>zl(this.cache,e.snapshotHost,o),c=t=>Dl(this.cache,e.snapshotHost,o,t);try{let l=s();if(!l&&this.snapshotStore.readSavedAt(n.snapshotKey)!==null){if(l=await this.snapshotStore.read(n.snapshotKey),!a())return;l&&(c(l),r=this.snapshotStore.captureReadScope(n.snapshotKey))}this.lastAttemptAt.set(n.snapshotKey,Date.now());let u=await Zl(t,n.canonicalSessionKey,this,a,l?.deltaCursor);if(!i())return;if(u.kind===`reset`){if(l?.deltaCursor!==void 0){let{deltaCursor:e,...t}=l;c(t),l=t,r=this.snapshotStore.captureReadScope(n.snapshotKey)}if(!a()||(u=await Zl(t,n.canonicalSessionKey,this,a),!i()))return}if(this.isOpen(n.snapshotKey))return;let d;if(u.kind===`delta`){for(let t of u.messages){let n=no(t);n&&Object.hasOwn(n,`message`)&&Uc(this.cache,e.snapshotHost,o,n.message,n)}let t=s();if(!t)return;d={...t,...u.inFlightRun?{}:{deltaCursor:u.deltaCursor},...Object.hasOwn(u.sessionInfo,`activeLeafEntryId`)?{displayedLeafEntryId:u.sessionInfo.activeLeafEntryId?.trim()||null}:{},sessionId:u.sessionInfo.sessionId?.trim()||t.sessionId}}else if(u.kind===`snapshot`)d=u.snapshot;else throw Error(`chat history page request returned a cursor reset`);c(d)}catch(e){console.debug(`[chat-session-prefetch] history fetch failed for ${n.canonicalSessionKey}`,e)}}selectCandidate(e){let t=e.rows?.find(t=>t.key===e.intentSessionKey);if(!t||Ya(t))return null;let n=new Set(e.openSessionKeys.map(t=>Ae(e.snapshotHost,{sessionKey:t}))),r=Ae(e.snapshotHost,{sessionKey:t.key,agentId:t.agentId});if(n.has(r)||n.size>=20)return null;let i=VO(t),a=this.snapshotStore.readSavedAt(r);if(a!==null&&a>=i)return null;let o=Date.now()-(this.lastAttemptAt.get(r)??0);return o<UO?(this.schedule(UO-o),null):{activityAt:i,sessionKey:t.key,canonicalSessionKey:Ke(e.snapshotHost,{sessionKey:t.key,agentId:t.agentId}),snapshotKey:r,sessionId:t.sessionId,activeLeafEntryId:t.activeLeafEntryId,updatedAt:t.updatedAt}}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(Ae(n.snapshotHost,{sessionKey:e.key,agentId:e.agentId})!==t.snapshotKey)continue;let i=VO(e);if(e.sessionId!==t.sessionId||e.activeLeafEntryId!==t.activeLeafEntryId||(e.updatedAt??0)>(t.updatedAt??0)||i>t.activityAt||Ya(e))return!1;r||=e.updatedAt===t.updatedAt&&i===t.activityAt}return r}isOpen(e){let t=this.snapshot;return!!t?.openSessionKeys.some(n=>Ae(t.snapshotHost,{sessionKey:n})===e)}cancelScheduledWork(){this.delayDeadline=null,this.delayTimer!==null&&(globalThis.clearTimeout(this.delayTimer),this.delayTimer=null)}},KO=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,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 GO(t,n)}hostConnected(){this.paneRoot=this.host.closest(`openclaw-app-shell`)??this.host,this.paneRoot.addEventListener(ie,this.sync),this.paneRoot.addEventListener(Be,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(ie,this.sync),this.paneRoot.removeEventListener(Be,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 JO(e,t){let n=ik.safeParse(e);return n.success&&(!t||n.data.sessionKey===t)?n.data:null}function YO(e,t){let n=t.snapshot,r,i;try{let e=JSON.stringify(n);if(!e)return null;r=JSON.parse(e),i=e.length}catch{return null}let a={projectionVersion:$O,savedAt:t.savedAt,sessionId:t.snapshot.sessionId,sessionKey:e},o=JO({...a,snapshot:r});return o?{record:o,metadata:{savedAt:o.savedAt,sessionKey:e,weight:i+JSON.stringify(a).length}}:null}async function XO(){let e=await va();if(!e)return[];try{let t=e.transaction(ya,`readonly`),n=await Kr(t.objectStore(ya).getAll());await ia(t);let r=[];for(let t of n){let n=ak.safeParse(t);if(!n.success)return _a(`resetting cache after metadata shape mismatch`),await ma(e),null;r.push(n.data)}return r}catch(t){return _a(`IndexedDB read failed`,t),await ma(e),null}finally{e.close()}}async function ZO(e,t){if(e.length===0||t!==L)return[];let n=await va();if(!n)return[];try{if(t!==L)return[];let r=n.transaction([ha,ya],`readwrite`),i=r.objectStore(ha),a=r.objectStore(ya),o=await Kr(a.getAll()),s=new Map;for(let e of o){let t=ak.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 ia(r),u}catch(e){return _a(`resetting cache after IndexedDB write failure`,e),await ma(n),null}finally{n.close()}}function QO(){for(let e of ok)e.flush()}var $O,ek,tk,nk,rk,ik,ak,ok,sk;function ck(){return(ck=e((()=>{So(),gi(),el(),hc(),fa(),at(),c(),Fe(),$O=1,ek=500,tk=1e3,nk=wo(`hasMore`,[Do({completeSnapshot:Co(!0).optional(),hasMore:Co(!1),totalMessages:xo().finite().nonnegative().optional()}).strict(),Do({hasMore:Co(!0),nextOffset:xo().finite().nonnegative(),totalMessages:xo().finite().nonnegative().optional()}).strict()]),rk=Do({deltaCursor:To().optional(),displayedLeafEntryId:To().nullable().optional(),messages:Eo(Array.isArray),pagination:nk,sessionId:To().nullable()}).strict(),ik=Do({projectionVersion:xo().int().positive(),savedAt:xo().finite().nonnegative(),sessionId:To().nullable(),sessionKey:To().min(1),snapshot:rk}).strict().refine(e=>e.sessionId===e.snapshot.sessionId),ak=Do({savedAt:xo().finite().nonnegative(),sessionKey:To().min(1),weight:xo().finite().nonnegative()}).strict(),ok=new Set,sk=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,ok.add(this)}disconnect(){this.connected=!1,this.flush().finally(()=>{this.connected||ok.delete(this)})}captureReadScope(e){let t=L,n=this.revisions.get(e)??0;return this.revisions.set(e,n),()=>t===L&&n===(this.revisions.get(e)??0)}async read(e,t){let n=this.captureReadScope(e),r=qe(e);r&&t?.(r.readyAt);let i=await(r?.promise??pa(e));if(i===void 0||!n()||!ga(e)||no(i)?.projectionVersion!==$O)return null;let a=JO(i,e);return a?(dd(this.hydratedSnapshots,e,new WeakRef(a.snapshot)),a.snapshot):(_a(`resetting cache after record shape mismatch`),await ma(),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){ga(e)&&(Le(e),this.revisions.set(e,(this.revisions.get(e)??0)+1),Nc(this.hydratedSnapshots,e)?.deref()!==t&&(this.hydratedSnapshots.delete(e),this.schedule(e,t)))}async delete(e,t){this.forget(e),await I(e,t)}forget(e){Le(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=YO(t,r);e?n.push(e):await this.delete(t,`cache-eviction`)}let r=L;this.writeChain=this.writeChain.then(async()=>{let e=await ZO(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:tk});this.cancelScheduledWrite=()=>globalThis.cancelIdleCallback(e)}else this.flush()},ek);this.cancelScheduledWrite=()=>globalThis.clearTimeout(r)}async seedSavedAtIndex(){let e=new Set;this.savedAtSeedRetirements=e;let t=L,n=new Map(this.revisions);try{let r=await XO();if(t!==L)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)}},l(async({sessionKey:e,scopePrefix:t})=>{for(let n of ok)t?n.forgetScope(t):e?n.forget(e):n.clearMemory();await Promise.all([...ok].map(e=>e.whenIdle()))}),typeof window<`u`&&(window.addEventListener(`pagehide`,QO),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&QO()}))})))()}function lk(e){window.history.pushState({},``,e),window.dispatchEvent(new PopStateEvent(`popstate`))}function uk(e,t=!1,n=!0){let r=e;return r?r.kind===`ambiguous`?W`
<section class="card">
<h2>${z(`chat.sessionRoute.chooseTitle`)}</h2>
<p>
${r.candidates.length>1?z(`chat.sessionRoute.multipleMatches`,{shortId:r.shortId}):z(`chat.sessionRoute.additionalMatches`)}
</p>
${r.candidates.map(e=>W`
<p>
<a href=${e.href}>${e.displayName}</a><br />
<small>${e.agentId} · ${e.idPrefix}</small>
</p>
`)}
${r.truncated&&r.candidates.length>1?W`<p><small>${z(`chat.sessionRoute.additionalMatches`)}</small></p>`:null}
</section>
`:r.kind===`route-error`?W`<section class="card"><p role="alert">${r.message}</p></section>`:r.kind===`missing-session`?cn({className:`session-route-not-found`,role:`status`,title:z(`chat.sessionRoute.notFoundTitle`),subtitle:z(`chat.sessionRoute.notFoundExplanation`),actions:W`
<button
class="btn primary"
type="button"
@click=${()=>lk(r.currentSessionHref)}
>
${z(`chat.sessionRoute.goToMain`)}
</button>
<button class="btn" type="button" @click=${()=>lk(r.sessionsHref)}>
${z(`chat.sessionRoute.viewSessions`)}
</button>
`}):W`<openclaw-chat-page .data=${r} .presented=${n}></openclaw-chat-page>`:U}function dk(e,t){return(e.data??t?.data)?.kind===`session`?fk:void 0}var fk;function pk(){return(pk=e((()=>{G(),Wt(),F(),fk=`chat-page`})))()}var mk=t({header:()=>!0,render:()=>gk,renderOwnerKey:()=>hk,retainOnNavigate:()=>!0}),hk,gk;function _k(){return(_k=e((()=>{Rf(),pk(),hk=dk,gk=uk})))()}async function vk(e,t,n,r){let i=await At(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(),{...yk(e),isCurrent:f}});if(t.namespace!==`chat`||n.search||n.hash||!s)return p;let m=ro(),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&&$a(i.agentId)===$a(t.agentId)&<(i.sessionKey)?.agentId===$a(t.agentId)&&yO(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 yk(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 bk(){return(bk=e((()=>{Ia(),Dt(),R(),SO()})))()}var xk=t({querySessionReference:()=>wk});function Sk(e,t,n){let r=pe({agentsList:e.agents.state.agentsList,hello:e.gateway.snapshot.hello}),i=Za({agentId:n,mainKey:r});return{kind:`missing-session`,face:t,currentSessionHref:ve({context:e,face:t,sessionKey:i,agentId:n}).href,sessionsHref:_n(`sessions`,e.basePath)}}function Ck(e,t,n){let r=e.toLowerCase().replaceAll(`-`,``);if(!Ra.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 wk(e,t,n){let r=await At(e.gateway,n);n.throwIfAborted();let i=Tk.get(r)??new Map;Tk.set(r,i);let a=JSON.stringify([$a(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()?yk(e):null}catch(e){if(!c())return null;throw e}}),subscribers:new Set},i.set(a,o)}let s=o;return await sc(s,n,n,()=>{s.subscribers.size===0&&i.get(a)===s&&i.delete(a)})}var Tk;function Ek(){return(Ek=e((()=>{wa(),Yt(),Dt(),_e(),R(),bk(),Tk=new WeakMap})))()}function Dk(e,t){let n=new URLSearchParams(t.search),r=n.get(tn),i=r||t.pathname,a=Oa({pathname:i,basePath:e.basePath});if(!a||!r)return a?{target:a,location:t}:null;n.delete(tn);let o=n.toString();return{target:a,location:{...t,pathname:i,search:o?`?${o}`:``}}}function Ok(e){return{kind:`route-error`,message:e,face:`chat`}}async function kk(e,t,r){let i=Dk(e,t);if(!i)return null;let{target:a,location:o}=i;try{let t=await At(e.gateway,r);r.throwIfAborted();let i=m({agentsList:e.agents.state.agentsList,hello:e.gateway.snapshot.hello}),s=await t.request(`sessions.catalog.list`,{agentId:i,search:a.shortId,limitPerHost:2});r.throwIfAborted();let c=s.catalogs.filter(e=>e.shareRoute?.routeSegment===a.routeSegment),l=c.length===1?c[0]:void 0;if(!l?.shareRoute)return Ok(z(`chat.sessionRoute.catalogShareUnavailable`));let u=l.shareRoute;if(!Ar(u,a.shortId))return Ok(z(`chat.sessionRoute.catalogShareInvalid`,{catalog:l.label}));if(l.error)return Ok(l.error.message);let d=l.hosts.filter(e=>e.hostId===u.hostId),f=d.length===1?d[0]:void 0;if(!f)return Ok(z(`chat.sessionRoute.catalogShareUnavailable`));if(f?.error)return Ok(f.error.message);let p=f.sessions.filter(e=>Ar(u,e.threadId)&&e.threadId.length===u.fullLength&&e.threadId.startsWith(a.shortId)),h=(t,n)=>Mr({shareRoute:u,threadId:t.threadId,displayName:t.name,basePath:e.basePath,prefixLength:n});if(p.length>1||f.nextCursor){let e=p.flatMap(e=>{let t=h(e,u.fullLength);return t?[{agentId:l.label,displayName:e.name?.trim()||e.threadId,href:t,idPrefix:e.threadId}]:[]});return{kind:`ambiguous`,shortId:a.shortId,candidates:e,truncated:!!f.nextCursor,face:`chat`}}let g=p[0];if(!g)return Sk(e,`chat`,i);let _=h(g,a.shortId.length);return _?{kind:`session`,sessionKey:n({catalogId:l.id,hostId:u.hostId,threadId:g.threadId},i),agentId:i,draft:void 0,face:`chat`,..._===o.pathname?{}:{canonicalLocation:{...o,pathname:_},canonicalLocationSource:o}}:Ok(z(`chat.sessionRoute.catalogShareUnavailable`))}catch(e){return r.throwIfAborted(),Ok(st(e,z(`chat.sessionRoute.catalogShareUnavailable`)))}}function Ak(){return(Ak=e((()=>{Wa(),Dr(),Yt(),Dt(),F(),ot(),Xe(),R(),Ek()})))()}var jk=t({loadChatRoute:()=>Wk,loadSessionPage:()=>Gk,sessionRouteTargetFromLocation:()=>Bk});function Mk(e){return{...wO(e),...new URLSearchParams(e.search).get(`dashboard`)===`expanded`?{dashboardExpanded:!0}:{}}}function Nk(e){return new URLSearchParams(e.search).get(o)===`1`}function Pk(e,t){let n=new URLSearchParams(e.search);n.delete(t);let r=n.toString();return{...e,search:r?`?${r}`:``}}function Fk(e){return Pk(Pk(e,o),he)}function Ik(e){return!Lk(e)&&e.sessions.cachedRoutingDefaults?e.sessions.cachedRoutingDefaults.mainKey:e.offlineSessionDefaults?.mainKey??pe({agentsList:e.agents.state.agentsList,hello:e.gateway.snapshot.hello})}function Lk(e){return!!(e.offlineSessionDefaults?.mainKey.trim()||e.agents.state.agentsList?.mainKey?.trim()||e.gateway.snapshot.phase===`connected`&&e.gateway.snapshot.hello)}function Rk(e,t,n,r){let i=lt(r);if(!i)return null;let a=Ik(e).toLowerCase();if(i.rest.toLowerCase()!==a)return null;let o=jt(n,i.agentId,r,e.basePath,{mainKey:a});return o&&o!==t.pathname?{...Fk(t),pathname:o}:null}function zk(e){let t=e.face,n=g(e.row.key),r=jt(t,n,e.row.key,e.context.basePath,{displayName:e.row.displayName,mainKey:Ik(e.context),shortIdLength:e.shortIdLength});if(!r)return;let i=Fk(e.location);return r!==e.location.pathname||i.search!==e.location.search?{...i,pathname:r}:null}function Bk(e,t){let n=Ik(e),r=Ga(t.pathname,e.basePath,n);if(r)return{target:r,location:t};let i=new URLSearchParams(t.search).get(tn);if(!i)return null;let a=Ga(i,e.basePath,n);return a?{target:a,location:{...Pk(t,tn),pathname:i}}:null}function Vk(e,t){return Za({agentId:t.agentId,mainKey:Ik(e)})}function Hk(e,t,n,r,i,a){let o=n.sessions.flatMap(e=>{let t=yO(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=Ck(o,s,n.truncated);if(!c)return[];let l=g(a.key),u=i?x(a):t,d=jt(u,l,a.key,e.basePath,{displayName:a.displayName,mainKey:Ik(e),shortIdLength:c.length});return d?[{agentId:l,displayName:a.displayName?.trim()||a.key,href:`${d}${TO(r)}`,idPrefix:c}]:[]}),truncated:n.truncated,face:t}}function Uk(e){let t=e.preferenceDerived?x(e.row):e.face,n=f(e.row.key)?e.mainTarget:void 0,r=zk({context:e.context,location:e.location,face:t,row:n?{key:Vk(e.context,n)}:e.row,...e.shortId?{shortIdLength:e.shortId.length}:{}});return r===void 0?null:(!n&&r&&e.isResolutionSourceCurrent()&&lu(e.context.gateway,r.pathname,e.row.key),{kind:`session`,sessionKey:e.row.key,...n?{agentId:n.agentId}:e.row.agentId?{agentId:e.row.agentId}:{},...Mk(e.location),face:t,...e.shortId&&e.shortId.length>8?{shortId:e.shortId}:{},...r?{canonicalLocation:r,canonicalLocationSource:e.location}:{}})}async function Wk(e,t,r,i,a){let{client:o,hello:s}=e.gateway.snapshot,c=()=>e.gateway.snapshot.phase===`connected`&&e.gateway.snapshot.client===o&&e.gateway.snapshot.hello===s,l=r===`chat`&&await kk(e,t,i);if(l)return l;let u=Bk(e,t);if(!u||u.target.namespace!==r)return Sa({routeId:r});let{target:d}=u;d.kind===`literal`&&!d.slugCandidate&&e.sessions.cachedRoutingDefaults&&(await e.sessions.whenCachedRosterSettled(),i.throwIfAborted());let f=u.location,p=Nk(f),m={context:e,isResolutionSourceCurrent:c,location:f,face:r,preferenceDerived:p},h=(t,n)=>wk(e,{key:t,agentId:d.agentId,...n?{slug:n}:{}},i),_=a?.sessionKey&&(d.kind===`short`||d.kind===`literal`&&d.slugCandidate)?await h(a.sessionKey):void 0;if(_===null)throw Error(`The Gateway connection changed while resolving the session.`);let v=Lk(e)&&(e.offlineSessionDefaults?.scope??e.agents.state.agentsList?.scope)!==`global`,y=Ne(f.search);if(d.kind===`main`&&y){let t=n(y),i=p?Fk(f):null,a=r;if(p){let n=await h(t);if(n?.kind===`unique`){a=x(n.session);let t=jt(a,d.agentId,Vk(e,d),e.basePath,{mainKey:Ik(e)});t&&(i={...Fk(f),pathname:t})}}return{kind:`session`,sessionKey:n(y,d.agentId),agentId:d.agentId,...Mk(f),face:a,...i?{canonicalLocation:i,canonicalLocationSource:f}:{}}}if(d.kind===`main`){(p||!v)&&await At(e.gateway,i);let t=Vk(e,d);if(p){let e=await h(t);if(e?.kind===`unique`)return Uk({...m,row:e.session,mainTarget:d})??Sa({routeId:r})}let n=p?Fk(f):null;return{kind:`session`,sessionKey:t,...Mk(f),face:r,...n&&n.search!==f.search?{canonicalLocation:n,canonicalLocationSource:f}:{}}}if(d.kind===`literal`){let t=v||e.gateway.snapshot.phase===`connected`&&Lk(e),n=p||!!d.slugCandidate;if(!t&&n&&(await At(e.gateway,i),t=Lk(e),t))return await Wk(e,f,r,i,a);if(n){let n=t&&!a?fe(e,d.sessionKey,d.agentId):void 0,i=_??(n?{kind:`unique`,session:n}:await h(d.sessionKey,d.slugCandidate));if(i?.kind===`unique`){let e=Uk({...m,row:i.session});return e?{...e,...n?{sessionResolutionFromCache:!0}:{}}:Sa({routeId:r})}if(d.slugCandidate){if(i?.kind===`not-found`)return Sk(e,r,d.agentId);if(i?.kind===`ambiguous`)return Hk(e,r,i,f,p,d.slugCandidate)}}let o=t?Rk(e,f,r,d.sessionKey):null,s=lt(d.sessionKey),c=!t&&s?At(e.gateway,i).then(()=>Rk(e,f,r,d.sessionKey)).catch(()=>null):void 0,l=p?Fk(f):null;return{kind:`session`,sessionKey:d.sessionKey,...Mk(f),face:r,...o?{canonicalLocation:o,canonicalLocationSource:f}:l&&l.search!==f.search?{canonicalLocation:l,canonicalLocationSource:f}:{},...c?{canonicalLocationReady:c,canonicalLocationSource:f}:{}}}let b=a?void 0:xO(e,f,d);if(b&&!b.row){let e=Fk(f),t=e.search!==f.search;return{kind:`session`,sessionKey:b.sessionKey,agentId:d.agentId,...Mk(f),face:r,...d.shortId.length>8?{shortId:d.shortId}:{},...t?{canonicalLocation:e,canonicalLocationSource:f}:{}}}let S=b?.row;!b&&!p&&!a&&(await e.sessions.whenCachedRosterSettled(),i.throwIfAborted(),e.gateway.snapshot.phase!==`connected`&&(v||e.sessions.cachedRoutingDefaults?.scope===`per-sender`)&&e.sessions.state.resultCached&&(S=bO(e.sessions.state.result?.sessions??[],d,Ik(e))));let C=_?{..._,isCurrent:c}:S?{kind:`unique`,session:S,isCurrent:c}:await vk(e,d,f,i);if(C.kind===`prepared`){let e=C.resolution.then(e=>!C.isCurrent()||e.kind!==`unique`||e.session.key!==C.session.key||(e.session.agentId??g(e.session.key))!==C.session.agentId?null:Uk({...m,isResolutionSourceCurrent:C.isCurrent,row:e.session,preferenceDerived:!1,shortId:d.shortId})?.canonicalLocation??null).catch(()=>null);return{kind:`session`,sessionKey:C.session.key,agentId:C.session.agentId,face:r,routeLoadingSkeleton:!0,...d.shortId.length>8?{shortId:d.shortId}:{},canonicalLocationReady:e,canonicalLocationSource:f}}if(C.kind===`not-found`){if(_)return Sk(e,r,d.agentId);let t=await h(d.literalSessionKey);return t?.kind===`unique`?Uk({...m,row:t.session})??Sa({routeId:r}):t?.kind===`not-found`?Sk(e,r,d.agentId):Sa({routeId:r})}if(C.kind===`ambiguous`)return Hk(e,r,C,f,p,d.shortId);let w=Uk({...m,isResolutionSourceCurrent:C.isCurrent,row:C.session,shortId:d.shortId});return w?{...w,...S?{sessionResolutionFromCache:!0}:{routeLoadingSkeleton:!0}}:Sa({routeId:r})}async function Gk(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 Wk(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 Xa(()=>import(`./pending-session-create-BhgyPcx_.js`),__vite__mapDeps([27,5,6,7,9,19,3,12,13,14,15,21,22]),import.meta.url),r.throwIfAborted())),s}function Kk(){return(Kk=e((()=>{ja(),Yt(),Ct(),Vt(),Dt(),Xe(),Nu(),_e(),R(),DO(),Ak(),Ek(),SO(),bk(),Ja()})))()}export{aT as $,Ev as $n,bb as $t,kE as A,ly as An,dS as At,uE as B,zv as Bn,xx as Bt,mO as C,Fy as Cn,rm as Cr,IC as Ct,NE as D,yy as Dn,CS as Dt,FE as E,_y as En,sS as Et,yE as F,cy as Fn,Mx as Ft,iE as G,Vv as Gn,Ib as Gt,cE as H,Gv as Hn,vx as Ht,gE as I,Uv as In,Nx as It,XT as J,Rv as Jn,zb as Jt,nE as K,Nv as Kn,Fb as Kt,mE as L,Bv as Ln,Gx as Lt,wE as M,fy as Mn,mS as Mt,xE as N,sy as Nn,oS as Nt,jE as O,uy as On,cS as Ot,bE as P,oy as Pn,nS as Pt,sT as Q,Dv as Qn,Ab as Qt,pE as R,Iv as Rn,Fx as Rt,_O as S,Vy as Sn,am as Sr,BC as St,RE as T,wy as Tn,lS as Tt,sE as U,Kv as Un,yx as Ut,lE as V,Lv as Vn,Sx as Vt,rE as W,Hv as Wn,gx as Wt,JT as X,Av as Xn,Nb as Xt,YT as Y,Mv as Yn,Lb as Yt,KT as Z,jv as Zn,Pb as Zt,CO as _,Yy as _n,Em as _r,qC as _t,_k as a,gb as an,w_ as ar,qw as at,SO as b,Uy as bn,_m as br,zC as bt,ck as c,Eb as cn,Hg as cr,Bw as ct,RO as d,wb as dn,Sg as dr,Sw as dt,yb as en,tv as er,oT as et,zO as f,sb as fn,Dg as fr,Ew as ft,DO as g,cb as gn,Dm as gr,UC as gt,kO as h,nb as hn,Om as hr,Nw as ht,xk as i,Tb as in,U_ as ir,Zw as it,EE as j,ty as jn,uS as jt,AE as k,Xv as kn,fS as kt,KO as l,Sb as ln,Og as lr,Xw as lt,OO as m,ib as mn,Cg as mr,Tw as mt,jk as n,fb as nn,rv as nr,$w as nt,mk as o,xb as on,S_ as or,Yw as ot,jO as p,lb as pn,Tg as pr,Rw as pt,eE as q,Pv as qn,nx as qt,Ek as r,vb as rn,M_ as rr,Kw as rt,sk as s,Db as sn,Ig as sr,Jw as st,Kk as t,Mb as tn,ov as tr,eT as tt,qO as u,db as un,Eg as ur,Cw as ut,EO as v,qy as vn,Tm as vr,WC as vt,dO as w,vy as wn,LC as wt,vO as x,Py as xn,lm as xr,RC as xt,bO as y,Ly as yn,wm as yr,GC as yt,dE as z,Jv as zn,Ux as zt};