openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
595 lines • 66.9 kB
JavaScript
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./input-dialog-OAeQnraY.js","./session-snapshot-database-BurLa_ut.js","./control-ui-core-yIvVj14Y.css"])))=>i.map(i=>d[i]);
import{n as e}from"./rolldown-runtime-8BhlS34s.js";import{Ac as t,Bc as n,Cu as r,Eu as i,Fl as a,Fs as o,Hc as s,Hr as c,Ko as l,Lc as u,Li as d,Lo as f,Ml as p,R as m,Ru as h,Sl as g,Tu as ee,Uc as _,Ur as v,Vc as te,W as y,Wl as b,Ys as x,Zs as S,_l as C,dn as w,du as T,fn as E,j as D,jl as O,ju as k,kc as ne,lu as re,pu as A,uu as ie,vl as ae,wl as oe,xo as se,xr as ce,yl as le,yo as ue,z as de}from"./control-ui-core-BncvAZjR.js";import{Ai as fe,La as pe,Ra as me,Ti as he,bi as ge,na as j,ra as M,wa as _e,wi as ve,xi as ye}from"./control-ui-core-9qYjK5B2.js";import{$ as N,F as be,M as xe,X as P,Y as F,ct as I,nt as Se,ut as Ce}from"./lit-runtime-B8uOr6OX.js";import{_ as L,b as we}from"./control-ui-boot-chat-VeeaXyJz.js";import{c as Te,d as Ee,l as R}from"./gateway-runtime-Cr51Pi7N.js";import{A as De,M as Oe,N as ke,To as Ae,Tr as je,Uo as Me,Wr as Ne,Xr as Pe,Yr as Fe,k as Ie,o as Le,s as Re,wn as ze,wo as Be,wr as Ve,xn as He,zr as Ue}from"./control-ui-boot-shared-DJkUdZmL.js";import{Co as We,Do as z,Ei as Ge,Nr as Ke,Pr as qe,Xa as Je,Xr as Ye,Zr as Xe,_t as B,ii as V,ki as H,oa as Ze,sa as Qe,wo as $e}from"./ui-DuRgK6kL.js";import{A as et,O as tt,k as nt}from"./control-ui-boot-shared-em9-jnbz.js";import{Bi as U,Cr as rt,Dn as it,En as at,G as ot,Gn as st,I as W,R as ct,Wn as lt,X as ut,Y as dt,Z as G,at as ft,bi as pt,c as mt,ct as ht,it as gt,l as _t,lt as vt,n as yt,s as bt,t as xt,u as St,ut as Ct,zi as wt}from"./control-ui-boot-shared-xfDhIVun.js";import{a as Tt,n as Et,o as Dt,r as Ot,t as kt}from"./session-workspace-recovery.runtime-sCzaBa0p.js";import{$i as At,Hc as jt,Ic as Mt,Li as Nt,Nc as K,Oc as Pt,Ri as Ft,Uc as It,Xc as Lt,Yc as q,Zi as Rt,ea as zt,hc as Bt,ic as Vt,jc as Ht,lc as Ut,mc as Wt,nc as Gt,on as Kt,pc as qt,uc as Jt,zi as Yt}from"./control-ui-boot-shared-D3oo_6Fq.js";import{ct as Xt,lt as Zt}from"./control-ui-boot-shared-D4XEBdOG.js";import{H as Qt,V as $t}from"./control-ui-boot-chat-Ck7W_FPO.js";import{n as en,t as tn}from"./transcript-search-C_sHjcNy.js";import{n as nn,t as rn}from"./cloud-worker-stop.runtime-BR0jZ8bp.js";import{n as an,t as on}from"./capacity-meter-Cbrs_m5W.js";import{n as sn,t as cn}from"./sessions-hub-header-iaB_NgZ6.js";function ln(e){return[...new Set((e?.sessions??[]).map(e=>O(e.key)?.agentId).filter(e=>!!e))]}function un(e,t){return Object.fromEntries(ln(e).map(e=>[e,t(e)]).filter(e=>!!e[1]))}function dn(e,t){if(!e||!t)return;let n=ln(t).filter(t=>!e.get(t));n.length!==0&&e.ensure(n)}function fn(){return(fn=e((()=>{g()})))()}function pn(e,{key:t,sessionId:n,pinned:r},i){let a=e.captureConnectionScope();return a?o=>{e.isConnectionScopeCurrent(a)&&o.entry.sessionId===n&&ie({message:k(`sessionsView.sessionArchived`),actionLabel:k(`common.undo`),onAction:()=>{e.isConnectionScopeCurrent(a)&&e.patch(t,{archived:!1,...r===!0?{pinned:!0}:{}},{agentId:i,expectedSessionId:n}).catch(t=>{e.isConnectionScopeCurrent(a)&&ie({message:T(t)})})}})}:null}function mn(){return(mn=e((()=>{i(),A(),re()})))()}function hn(e,t){let n=(e?.sessions??[]).map(e=>e.category?.trim()).filter(e=>!!e);return[...new Set([...t,...n.toSorted((e,t)=>e.localeCompare(t))])]}async function gn(e){if(!e.sessions||e.knownCategories.includes(e.name))return`completed`;try{return await e.sessions.groupsPut([...e.sessions.state.groups??[],e.name])===`completed`&&e.isCurrent()?`completed`:`stale`}catch(t){return e.isCurrent()?(e.onError(T(t)),`failed`):`stale`}}function _n(){return(_n=e((()=>{A()})))()}function vn(e,t){let n=t.deepLinkSessionKey?.trim()||null,r=O(n)?.agentId??e.agentSelection.state.scopeId?.trim(),i=!n&&t.statusFilter===`active`?t.activeMinutes:void 0;return{limit:n?50:t.limit,...i?{activeMinutes:i}:{},...n||t.search?.trim()?{search:n??t.search.trim()}:{},includeGlobal:n?!0:t.includeGlobal,includeUnknown:n?!0:t.includeUnknown,includeDerivedTitles:!1,includeLastMessage:!1,archivedFilter:t.statusFilter,...r?{agentId:r}:{}}}function yn(){return(yn=e((()=>{ce(),g()})))()}var bn;function xn(){return(xn=e((()=>{A(),Qe(),bn=class{constructor(e){this.onError=e,this.lifecycle=null}abort(){this.lifecycle?.abort()}async open(e){let t=this.lifecycle,n=t??new AbortController;this.lifecycle=n;try{let t=await this.load();if(!t)return null;let r=e();return await t({...r,signal:r.signal?AbortSignal.any([n.signal,r.signal]):n.signal})??null}finally{!t&&this.lifecycle===n&&(this.lifecycle=null)}}async load(){try{return(await Ze(async()=>{let{showInputDialog:e}=await import(`./input-dialog-OAeQnraY.js`).then(e=>(e.t(),e.n));return{showInputDialog:e}},__vite__mapDeps([0,1,2]),import.meta.url)).showInputDialog}catch(e){return this.onError(T(e)),null}}}})))()}function Sn(){return Mt(h()?.getItem(J))}function Cn(e){try{h()?.setItem(J,e)}catch{}}var J;function wn(){return(wn=e((()=>{K(),J=`openclaw:sessions:group-by`})))()}function Tn(e,t,n){let r=new Map(t.map(e=>[e.key,e])),i=new Map(e);for(let[e,t]of i){let a=r.get(e);(a?t.sessionId?.trim()&&a.sessionId===t.sessionId:n(t))||i.delete(e)}return i.size===e.size?e:i}function En(e,t,n,r){let i=new Map(e);for(let e of n)if(r===`deselect`||r===`toggle`&&i.has(e))i.delete(e);else{let n=t.find(t=>t.key===e);n&&i.set(e,{...n})}return i}function Dn(e){let{context:t,row:n}=e,r=t.gateway.snapshot,i=a({agentsList:t.agents.state.agentsList,hello:r.hello}),o=ae(n,i),s=le([n],i),c=st(n.placement),l=!(!c||c.blocksActiveRun&&n.hasActiveRun===!0||Ee(r,c.method)!==!0),u=oe(n);return N`
<openclaw-session-menu
.session=${{label:z(n.label)??n.key,sessionId:z(n.sessionId)??null,pinned:n.pinned===!0,pinnable:u,snoozedUntil:n.snoozedUntil??null,unread:n.unread===!0,hiddenFromInvolvingMe:n.hiddenFromInvolvingMe,archived:n.archived===!0,archiving:t.sessions.archiveVisibility(n.key)===`pending`,category:z(n.category)??null,icon:z(n.icon)??null,color:z(n.color)??null,categoryClearReturnsToGroups:!1}}
.anchor=${e.menu}
.trigger=${e.trigger}
.disabled=${e.disabled}
.navigationAllowed=${!0}
.copyMarkdownAllowed=${Rt(r)}
.splitAllowed=${!1}
.actionDisabledReasons=${ft({snapshot:r,session:{...n,pinnable:u},cloudWorkerStopAction:c})}
.forkDisabled=${n.modelSelectionLocked===!0}
.forkFromLastCompleted=${n.hasActiveRun===!0}
.archiveAllowed=${o}
.deleteAllowed=${s}
.cloudWorkerStopAllowed=${l}
.groups=${e.groups}
.currentOwner=${n.owner?.actor??null}
.work=${e.work}
.pluginActions=${Ft(t.plugins,n)}
.onClose=${e.onClose}
.onAction=${t=>{t.kind!==`snooze`&&t.kind!==`wake`&&e.onAction(t)}}
></openclaw-session-menu>
`}function On(){return(On=e((()=>{F(),lt(),gt(),R(),g(),At(),Nt()})))()}function kn(e,t){let n=z(e.category)??``,r=[...t.knownCategories];return n&&!r.includes(n)&&r.push(n),N`
<td>
<select
?disabled=${t.loading||!!t.groupWriteDisabledReason}
title=${t.groupWriteDisabledReason??P}
aria-label=${k(`sessionsView.moveToGroup`)}
class="session-group-select"
@change=${r=>{if(t.groupWriteDisabledReason)return;let i=r.currentTarget;if(i instanceof HTMLSelectElement){if(i.options[i.selectedIndex]?.dataset.action===`create`){i.value=n,t.onRequestNewCategory(e.key);return}t.onAssignCategory(e.key,i.value||null)}}}
>
<option value="" ?selected=${!n}>${k(`sessionsView.ungrouped`)}</option>
${r.map(e=>N`<option value=${e} ?selected=${n===e}>${e}</option>`)}
<option data-action="create">${k(`sessionsView.newGroup`)}</option>
</select>
</td>
`}function An(){return(An=e((()=>{F(),i()})))()}function jn(e){let t=B(e),n=e.hasActiveRun===!1&&(!e.status||e.status===`running`),r=e.status===`queued`?k(`sessionsView.statusQueued`):t?k(`sessionsView.statusLive`):n?k(`sessionsView.statusIdle`):e.status?k(Mn[e.status]??`sessionsView.statusUnknown`):k(`sessionsView.statusUnknown`),i=e.status===`queued`?`warn`:t||e.status===`done`?`ok`:n||!e.status||e.status===`interrupted`?`muted`:`danger`,a=`${k(`sessionsView.status`)}: ${r}`;return N`
<openclaw-tooltip .content=${a}>
${G({kind:i,label:r})}
</openclaw-tooltip>
`}var Mn;function Nn(){return(Nn=e((()=>{F(),W(),i(),Mn={queued:`sessionsView.statusQueued`,running:`sessionsView.statusRunning`,done:`sessionsView.statusDone`,failed:`sessionsView.statusFailed`,interrupted:`sessionsView.statusInterrupted`,killed:`sessionsView.statusKilled`,timeout:`sessionsView.statusTimeout`}})))()}function Pn(e){let t=[[`activeMinutes`,`minutes`,k(`sessionsView.active`),k(`sessionsView.activeTooltip`,{count:e.activeMinutes.trim()}),k(`sessionsView.minutesPlaceholder`),e.statusFilter!==`active`],[`limit`,`limit`,k(`sessionsView.limit`),k(`sessionsView.limitTooltip`),P,!1]],n=[[`includeGlobal`,k(`sessionsView.global`),k(`sessionsView.globalTooltip`)],[`includeUnknown`,k(`sessionsView.unknown`),k(`sessionsView.unknownTooltip`)]],{activeMinutes:r,limit:i,includeGlobal:a,includeUnknown:o}=e,s=(t,n)=>e.onFiltersChange({activeMinutes:r,limit:i,includeGlobal:a,includeUnknown:o,[t]:n}),c=r.trim()!==``||i.trim()!==`50`||!a||o||e.groupBy!==`none`;return N`
<button
id="sessions-filter-popover-trigger"
type="button"
class="btn btn--sm sessions-filter-popover__trigger ${c?`active`:``}"
title=${k(`sessionsView.filters`)}
aria-label=${k(`sessionsView.filters`)}
aria-haspopup="dialog"
aria-expanded="false"
>
${j.listFilter}
</button>
<wa-popover
${be(Ct)}
class="sessions-filter-popover"
for="sessions-filter-popover-trigger"
placement="bottom-end"
without-arrow
@wa-show=${vt}
@wa-hide=${vt}
>
<div class="sessions-filter-popover__panel">
<div class="sessions-filter-popover__fields">
${t.map(([t,n,r,i,a,o])=>N`
<openclaw-tooltip .content=${i}>
<label class="session-filter-field">
<span class="session-filter-label">${r}</span>
<input
class="session-filter-input session-filter-input--${n}"
placeholder=${a}
.value=${e[t]}
?disabled=${o}
@input=${e=>{e.currentTarget instanceof HTMLInputElement&&s(t,e.currentTarget.value)}}
/>
</label>
</openclaw-tooltip>
`)}
</div>
<div
class="session-filter-toggle-group"
role="group"
aria-label=${k(`sessionsView.sourceFilters`)}
>
${n.map(([t,n,r])=>N`
<openclaw-tooltip .content=${r}>
<label
class=${`session-filter-check session-filter-toggle${e[t]?` session-filter-check--active`:``}`}
>
<input
name=${t}
class="session-filter-check__input"
type="checkbox"
.checked=${e[t]}
@change=${e=>{e.currentTarget instanceof HTMLInputElement&&s(t,e.currentTarget.checked)}}
/>
<span class="session-filter-check__mark" aria-hidden="true">${j.check}</span>
<span class="session-filter-check__label">${n}</span>
</label>
</openclaw-tooltip>
`)}
</div>
<label class="session-groupby">
<span class="session-groupby__label">${k(`sessionsView.groupBy`)}</span>
<select
class="session-groupby__select"
@change=${t=>{t.currentTarget instanceof HTMLSelectElement&&e.onGroupByChange(Mt(t.currentTarget.value))}}
>
${Pt.filter(t=>t!==`person`||e.personGroupingAvailable).map(t=>N`
<option value=${t} ?selected=${e.groupBy===t}>
${k(Fn[t])}
</option>
`)}
</select>
</label>
${e.groupBy===`category`?N`
<button
class="btn btn--sm"
?disabled=${!!e.groupWriteDisabledReason}
title=${e.groupWriteDisabledReason??P}
@click=${()=>e.onRequestNewCategory()}
>
${j.plus} ${k(`sessionsView.newGroup`)}
</button>
`:P}
</div>
</wa-popover>
`}var Fn;function In(){return(In=e((()=>{F(),xe(),M(),fe(),ht(),i(),K(),ue(),Fn={none:`sessionsView.groupByNone`,category:`sessionsView.groupByCategory`,person:`sessionsView.groupByPerson`,channel:`sessionsView.groupByChannel`,kind:`sessionsView.groupByKind`,agent:`sessionsView.groupByAgent`,date:`sessionsView.groupByDate`}})))()}function Ln(e,t){let n=t.find(t=>t.key===e.sessionKey);return z(n?.label)??z(n?.displayName)??e.sessionKey}function Rn(e){let t=e.transcriptSearchQuery.trim().length>0,n=e.transcriptSearch,r=n.status===`results`?n.results:[],i=n.status===`results`?n.sessions:[],a=n.status===`loading`;return N`
<section
class="sessions-transcript-search"
aria-label=${k(`sessionsView.transcriptSearchTitle`)}
>
<form
class="sessions-transcript-search__form"
role="search"
aria-label=${k(`sessionsView.transcriptSearchTitle`)}
@submit=${n=>{n.preventDefault(),e.transcriptSearchAvailable&&t&&!a&&e.onTranscriptSearch()}}
>
<div class="data-table-search sessions-transcript-search__input">
<input
type="search"
maxlength="4096"
aria-label=${k(`sessionsView.transcriptSearchInputLabel`)}
placeholder=${k(`sessionsView.transcriptSearchPlaceholder`)}
.value=${e.transcriptSearchQuery}
?disabled=${!e.transcriptSearchAvailable}
@input=${t=>{t.currentTarget instanceof HTMLInputElement&&e.onTranscriptSearchChange(t.currentTarget.value)}}
/>
</div>
<button
class="btn primary"
type="submit"
?disabled=${!e.transcriptSearchAvailable||!t||a}
>
${k(a?`sessionsView.transcriptSearchSearching`:`sessionsView.transcriptSearchAction`)}
</button>
${t?N`
<button class="btn" type="button" @click=${e.onClearTranscriptSearch}>
${k(`sessionsView.transcriptSearchClear`)}
</button>
`:P}
</form>
${e.transcriptSearchAvailable?P:N`
<div class="muted" role="status">
${k(`sessionsView.transcriptSearchUnavailable`)}
</div>
`}
<div
class="sessions-transcript-search__status"
aria-live="polite"
aria-busy=${a?`true`:`false`}
>
${a?N`<span class="muted">${k(`sessionsView.transcriptSearchSearching`)}</span>`:P}
${n.status===`error`?N`
<div
class="sessions-transcript-search__notice sessions-transcript-search__notice--danger"
>
<span>${k(`sessionsView.transcriptSearchError`)}: ${n.message}</span>
<button class="btn btn--sm" type="button" @click=${e.onTranscriptSearch}>
${k(`sessionsView.transcriptSearchRetry`)}
</button>
</div>
`:P}
${n.status===`results`&&n.indexing?N`
<div class="sessions-transcript-search__notice">
<span>${k(`sessionsView.transcriptSearchIndexing`)}</span>
<button
class="btn btn--sm"
type="button"
?disabled=${a}
@click=${e.onTranscriptSearch}
>
${k(`sessionsView.transcriptSearchRetry`)}
</button>
</div>
`:P}
${n.status===`results`&&n.archivedTranscriptsExcluded>0?N`<div class="sessions-transcript-search__notice">
${k(`sessionsView.transcriptSearchArchivedExcluded`,{count:String(n.archivedTranscriptsExcluded)})}
</div>`:P}
${n.status===`results`&&r.length===0&&!n.indexing?N`
<div class="sessions-transcript-search__empty" role="status">
${k(`sessionsView.transcriptSearchEmpty`)}
</div>
`:P}
${r.length>0?N`
<div class="sessions-transcript-search__results">
<div class="sessions-transcript-search__summary">
<strong
>${k(`sessionsView.transcriptSearchMatches`,{count:String(r.length)})}</strong
>
${n.status===`results`&&n.truncated?N`<span class="muted"
>${k(`sessionsView.transcriptSearchTruncated`)}</span
>`:P}
</div>
<div class="sessions-transcript-search__list">
${r.map(t=>{let n=t.timestamp>0?de(t.timestamp):k(`common.na`),r=t.timestamp>0?m(t.timestamp):n;return N`
<button
class="sessions-transcript-search__result"
type="button"
@click=${()=>e.onNavigateToChat?.(t.sessionKey)}
>
<span class="sessions-transcript-search__result-header">
<strong>${Ln(t,i)}</strong>
<span class="muted" title=${r}>
${k(`sessionsView.${t.role}`)} · ${n}
</span>
</span>
<span class="sessions-transcript-search__snippet">${t.snippet}</span>
<span class="sessions-transcript-search__key">${t.sessionKey}</span>
</button>
`})}
</div>
</div>
`:P}
</div>
</section>
`}function zn(){return(zn=e((()=>{F(),i(),Be(),y(),Ae()})))()}function Bn(e,t){return Object.hasOwn(e,t)?e[t]??null:null}function Y(e,t=!1){return e.map(e=>({value:e,label:k(e===``?`sessionsView.inherit`:t&&e===`off`?`sessionsView.offExplicit`:`sessionsView.${e}`)}))}function Vn(e){let t=S(e);return N`
<span class="session-avatar session-avatar--${t}" aria-hidden="true">
${ar[t]??j.circle}
${B(e)?N`<span class="session-avatar__status"></span>`:P}
</span>
`}function Hn(e){let t=e.totalTokens;if(typeof t!=`number`||!Number.isFinite(t))return N`<span class="muted">${k(`common.na`)}</span>`;let n=e.totalTokensFresh!==!1,r=`${n?``:`~`}${D(t)}`,i=Kt(e),a=i.tokens>0?i.tokens:null;if(!a)return N`<span class="session-tokens__value">${r}</span>`;let o=Math.min(100,Math.round(t/a*100)),s=n?o>=sr?`danger`:o>=or?`warn`:`ok`:`stale`,c=k(i.fromLastPrompt?n?`sessionsView.promptBudgetUsage`:`sessionsView.promptBudgetUsageApprox`:n?`sessionsView.contextUsage`:`sessionsView.contextUsageApprox`,{percent:String(o),used:t.toLocaleString(),context:a.toLocaleString()});return N`
<openclaw-tooltip .content=${c}>
<div class="session-tokens">
<span class="session-tokens__value"
>${r} / ${D(a)}</span
>
${an({mode:`continuous`,percent:o,tone:s,label:c})}
</div>
</openclaw-tooltip>
`}function Un(e,t,n){let r=e.filter(e=>e.unread===!0&&e.archived!==!0).length,i=e.filter(e=>e.archived===!0).length,a=[[String(t),k(`sessionsView.statusLive`),t>0],[String(r),k(`sessionsView.unread`),r>0]];return n!==`active`&&a.push([String(i),k(`sessionsView.archived`),!1]),N`
<span class="sessions-heading-facts">
${a.map(([e,t,n],r)=>N`
${r>0?N`<span class="sessions-heading-fact__separator" aria-hidden="true">·</span>`:P}
<span
class=${n?`sessions-heading-fact sessions-heading-fact--active`:`sessions-heading-fact`}
>
<strong>${e}</strong> ${t}
</span>
`)}
</span>
`}function Wn(e){return Array.from({length:cr},(t,n)=>N`
<tr class="session-skeleton-row" aria-hidden="true">
${Array.from({length:e},(e,t)=>t===0?N`<td class="data-table-checkbox-col"></td>`:N`<td>
<span
class="session-skeleton ${t===1?`session-skeleton--key`:``}"
style=${`animation-delay: ${n*120}ms`}
></span>
</td>`)}
</tr>
`)}function Gn(e){return $e(e.searchQuery).length>0||H(e.activeMinutes)!==void 0||!e.includeGlobal}function Kn(e){return typeof e!=`number`||!Number.isFinite(e)||e<0?null:He(e)??`0ms`}function qn(e){if(!e)return P;let t=e.status===`active`||e.status===`complete`?`ok`:`warn`,n=L(e);return N`
<openclaw-tooltip .content=${n}>
<span tabindex="0" aria-label=${n}>
${G({kind:t,label:we(e)})}
</span>
</openclaw-tooltip>
`}function Jn(e,t){let n=[{label:k(`sessionsView.key`),value:e.key},{label:k(`sessionsView.kind`),value:S(e)},{label:k(`sessionsView.updated`),value:t},{label:k(`sessionsView.tokens`),value:Le(e)}],r=(e,t)=>{let r=z(t);r&&n.push({label:e,value:r})};r(k(`sessionsView.group`),e.category),r(k(`sessionsView.status`),e.status),e.goal&&n.push({label:k(`sessionsView.goal`),value:L(e.goal)}),r(k(`sessionsView.goalNote`),e.goal?.lastStatusNote),r(k(`sessionsView.model`),e.model),r(k(`sessionsView.provider`),e.modelProvider),r(k(`sessionsView.runtime`),Ke(e.agentRuntime)),r(k(`sessionsView.runDuration`),Kn(e.runtimeMs)),r(k(`sessionsView.surface`),e.surface),r(k(`sessionsView.subject`),e.subject),r(k(`sessionsView.room`),e.room),r(k(`sessionsView.space`),e.space),r(k(`sessionsView.sessionId`),e.sessionId),e.archiveReason&&n.push({label:k(`sessionsView.archiveReason`),value:$t(e.archiveReason)});for(let[t,r]of[[k(`sessionsView.activeRun`),e.hasActiveRun],[k(`sessionsView.archived`),e.archived],[k(`sessionsView.pinned`),e.pinned]])typeof r==`boolean`&&n.push({label:t,value:k(r?`common.yes`:`common.no`)});return n}function X(e){return e.groupBy===`category`?8:7}function Yn(e,t){let{id:n}=e;if(t.groupBy===`date`)return k({today:`sessionsView.dateToday`,yesterday:`sessionsView.dateYesterday`,week:`sessionsView.dateThisWeek`,older:`sessionsView.dateOlder`}[n]??`sessionsView.dateNoActivity`);if(n===``)return k(`sessionsView.ungrouped`);if(t.groupBy===`agent`){let e=Bn(t.agentIdentityById,n),r=z(e?.name);if(r){let t=z(e?.emoji);return t?`${t} ${r}`:r}}if(t.groupBy===`person`){let t=e.rows[0]?.owner?.actor;return t?.identity?.type===`profile`?Ne({id:t.identity.id,name:t.label?.trim()||n}):t?.label?.trim()||n}return n}function Z(e,t){e.currentTarget?.classList.toggle(`session-drop-target--active`,t)}function Xn(e,t){if(e.groupBy!==`category`||e.groupWriteDisabledReason)return{dragover:P,dragleave:P,drop:P};let n=e=>e.dataTransfer?.types.includes(q)===!0;return{dragover:e=>{n(e)&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`),Z(e,!0))},dragleave:e=>Z(e,!1),drop:r=>{if(!n(r))return;r.preventDefault(),Z(r,!1);let i=r.dataTransfer?.getData(q);i&&e.onAssignCategory(i,t)}}}function Zn(e,t){let n=Yn(e,t),r=e.rows.length===1?k(`sessionsView.groupRowCountOne`,{count:`1`}):k(`sessionsView.groupRowCount`,{count:String(e.rows.length)}),i=Xn(t,e.id===``?null:e.id);return N`
<tr
class="session-group-row"
@dragover=${i.dragover}
@dragleave=${i.dragleave}
@drop=${i.drop}
>
<td colspan=${X(t)}>
<div class="session-group-row__header">
<span class="session-group-row__icon" aria-hidden="true">${j.folder}</span>
<span class="session-group-row__label">${n}</span>
<span class="session-group-row__count">${r}</span>
</div>
</td>
</tr>
`}function Qn(e){return e instanceof Element&&!!e.closest(`a, button, input, label, select, textarea`)}function $n(e){let t=e.result?.sessions??[],n=t.filter(B).length,r=t.filter(e=>e.archived===!0).length,i=N`
${k(`sessionsView.title`)}
${e.result?N`
<openclaw-tooltip .content=${k(`sessionsView.store`,{path:e.result.path})}>
<span class="settings-count">${t.length}</span>
</openclaw-tooltip>
`:P}
${e.result?Un(t,n,e.statusFilter):P}
`,a=N`
${e.statusFilter===`archived`?N`
<button
class="btn danger"
?disabled=${e.loading||r===0||!!e.deleteArchivedDisabledReason}
title=${e.deleteArchivedDisabledReason??P}
@click=${e.onDeleteAllArchived}
>
${j.trash} ${k(`sessionsView.deleteAllArchived`)}
</button>
`:P}
<button class="btn" ?disabled=${e.refreshing} @click=${e.onRefresh}>
${e.refreshing?k(`common.loading`):k(`common.refresh`)}
</button>
`,o=[e.error?N`<div class="sessions-error" role="alert">${e.error}</div>`:P,dt({title:k(`sessionsView.transcriptSearchTitle`)},Rn(e)),dt({title:i,actions:a},er(e))];return ot(o,{wide:!0})}function er(e){let t=e.result?.sessions??[],n=e.sortDir===`asc`?1:-1,r=t.toSorted((t,r)=>{let i=(r.pinnedAt??0)-(t.pinnedAt??0);return i===0?(e.sortColumn===`kind`?S(t).localeCompare(S(r)):e.sortColumn===`key`?t.key.localeCompare(r.key):e.sortColumn===`updated`?(t.updatedAt??0)-(r.updatedAt??0):(t.totalTokens??t.inputTokens??t.outputTokens??0)-(r.totalTokens??r.inputTokens??r.outputTokens??0))*n:i}),i=r.length,a=Math.max(1,Math.ceil(i/e.pageSize)),o=Math.min(e.page,a-1),s=e.groupBy===`none`?null:Ht({rows:r,mode:e.groupBy,knownCategories:e.knownCategories}),c=(s?s.flatMap(e=>e.rows):r).slice(o*e.pageSize,(o+1)*e.pageSize),l=t.length===0&&Gn(e),u=e.statusFilter===`archived`?k(`sessionsView.noArchivedSessions`):e.statusFilter===`active`?k(`sessionsView.noActiveSessions`):k(`sessionsView.noSessions`),d=(t,n,r=``)=>{let i=e.sortColumn===t,a=i&&e.sortDir===`asc`?`desc`:`asc`;return N`
<th
class=${r}
data-sortable
data-sort-dir=${i?e.sortDir:``}
aria-sort=${i?e.sortDir===`asc`?`ascending`:`descending`:P}
@click=${()=>e.onSortChange(t,i?a:`desc`)}
>
<button class="data-table-sort-button" type="button">
${n}
<span class="data-table-sort-icon" aria-hidden="true">${j.arrowUpDown}</span>
</button>
</th>
`},f=l?k(`sessionsView.noSessionsMatchFilters`):u,p=s?new Set(c.map(e=>e.key)):null;return N`
<div
class="sessions-toolbar sessions-filter-bar"
role="group"
aria-label=${k(`sessionsView.filterControls`)}
>
<div class="data-table-search sessions-toolbar__search">
${j.search}
<input
type="text"
aria-label=${k(`sessionsView.searchPlaceholder`)}
placeholder=${k(`sessionsView.searchPlaceholder`)}
.value=${e.searchQuery}
@input=${t=>e.onSearchChange(t.target.value)}
/>
</div>
${ut({value:e.statusFilter,ariaLabel:k(`sessionsView.sessionState`),className:`sessions-view-segment`,options:[{value:`active`,label:k(`common.active`)},{value:`archived`,label:k(`sessionsView.archived`),title:k(`sessionsView.archivedOnlyTooltip`)},{value:`all`,label:k(`sessionsView.all`)}],onChange:t=>e.onStatusFilterChange(t)})}
${Pn(e)}
</div>
${e.selectedKeys.size>0?N`
<div class="data-table-bulk-bar">
<span>${k(`sessionsView.selected`,{count:String(e.selectedKeys.size)})}</span>
<button class="btn btn--sm" @click=${e.onDeselectAll}>
${k(`common.unselect`)}
</button>
<button
class="btn btn--sm danger"
?disabled=${e.loading||!!e.deleteSelectedDisabledReason}
title=${e.deleteSelectedDisabledReason??P}
@click=${e.onDeleteSelected}
>
${j.trash} ${k(`sessionsView.deleteSelected`)}
</button>
</div>
`:P}
<div class="data-table-container">
<table class="data-table sessions-table">
<thead>
<tr>
<th class="data-table-checkbox-col">
${c.length>0?N`<input
type="checkbox"
.checked=${c.length>0&&c.every(t=>e.selectedKeys.has(t.key))}
.indeterminate=${c.some(t=>e.selectedKeys.has(t.key))&&!c.every(t=>e.selectedKeys.has(t.key))}
@change=${()=>{c.every(t=>e.selectedKeys.has(t.key))?e.onDeselectPage(c.map(e=>e.key)):e.onSelectPage(c.map(e=>e.key))}}
aria-label=${k(`sessionsView.selectAllOnPage`)}
/>`:P}
</th>
${d(`key`,k(`sessionsView.key`),`data-table-key-col`)}
${e.groupBy===`category`?N`<th>${k(`sessionsView.group`)}</th>`:P}
${d(`kind`,k(`sessionsView.kind`))}
<th class="session-status-col">${k(`sessionsView.status`)}</th>
${d(`updated`,k(`sessionsView.updated`))}
${d(`tokens`,k(`sessionsView.tokens`))}
<th class="session-actions-col">
<span class="sr-only">${k(`sessionsView.actions`)}</span>
</th>
</tr>
</thead>
<tbody>
${e.loading&&!e.result?Wn(X(e)):c.length===0&&(e.loading||e.error||!e.result)?P:c.length===0?N`
<tr>
<td
colspan=${X(e)}
class="data-table-empty-cell"
>
<div class="data-table-empty-state" role="status" aria-live="polite">
<div class="data-table-empty-state__message">
${l?j.search:j.messageSquare}
<span>${f}</span>
</div>
${l?N`
<button class="btn btn--sm" @click=${e.onClearFilters}>
${k(`sessionsView.showAll`)}
</button>
`:P}
</div>
</td>
</tr>
`:s?s.flatMap(t=>{let n=t.rows.filter(e=>p?.has(e.key));if(n.length===0&&t.rows.length>0)return[];let r=n.flatMap(t=>tr(t,e));return r.unshift(Zn(t,e)),r}):c.flatMap(t=>tr(t,e))}
</tbody>
</table>
</div>
${i>0?N`
<div class="data-table-pagination">
<div class="data-table-pagination__info">
${k(`sessionsView.pagination`,{start:String(o*e.pageSize+1),end:String(Math.min((o+1)*e.pageSize,i)),total:String(i)})}
</div>
<div class="data-table-pagination__controls">
<select
class="data-table-pagination__size"
aria-label=${k(`sessionsView.pageSize`)}
.value=${String(e.pageSize)}
@change=${t=>e.onPageSizeChange(Number(t.target.value))}
>
${ir.map(t=>N`<option value=${t} ?selected=${t===e.pageSize}>
${k(`sessionsView.rowsPerPage`,{count:String(t)})}
</option>`)}
</select>
${e.result?.hasMore&&e.result.nextOffset!=null?N` <button ?disabled=${e.loading} @click=${e.onLoadMore}>
${k(`chat.selectors.loadMoreRosterSessions`)}
</button>`:P}
<button ?disabled=${o<=0} @click=${()=>e.onPageChange(o-1)}>
${k(`common.previous`)}
</button>
<button
?disabled=${o>=a-1}
@click=${()=>e.onPageChange(o+1)}
>
${k(`common.next`)}
</button>
</div>
</div>
`:P}
`}function tr(e,t){let n=e.updatedAt?de(e.updatedAt):k(`common.na`),r=t.expandedSessionKey===e.key,i=`session-details-${encodeURIComponent(e.key)}`,a=z(e.displayName)??null,s=z(e.label)??``,c=!!(a&&a!==e.key&&a!==s),l=p(e.key),u=l?Bn(t.agentIdentityById,l.agentId):null,d=z(u?.emoji)??``,f=z(u?.name)??``,m=f&&l?`${d?`${d} `:``}${f} (${l.channel})`:null,h=m??e.key,g=e.kind!==`global`,ee=g?_({face:te(e),sessionKey:e.key,fallbackAgentId:t.agentId,basePath:t.basePath,row:e,mainKey:t.mainKey}).href:null,v=S(e),y=`session-kind session-kind--${v}`,b=[`session-data-row`,`session-data-row--expandable`,t.statusFilter===`all`&&e.archived===!0?`session-data-row--archived`:``,r?`session-data-row--expanded`:``,t.sessionMenu?.key===e.key?`session-data-row--menu-open`:``].filter(Boolean).join(` `),x=k(r?`sessionsView.hideSessionDetails`:`sessionsView.showSessionDetails`,{count:h}),C=t.groupBy===`category`,w=Xn(t,z(e.category)??null),T=n=>Fe(n,n instanceof KeyboardEvent?n.currentTarget.querySelector(`button[aria-haspopup="menu"]`):null,(n,r,i)=>t.onOpenSessionMenu(e,{x:r,y:i},n));return[N`<tr
class=${b}
tabindex="0"
aria-controls=${r?i:P}
draggable=${C?`true`:P}
aria-description=${C?k(`sessionsView.dragSessionHint`):P}
@dragstart=${C?t=>{t.dataTransfer?.setData(q,e.key),t.dataTransfer&&(t.dataTransfer.effectAllowed=`move`)}:P}
@dragover=${w.dragover}
@dragleave=${w.dragleave}
@drop=${w.drop}
@contextmenu=${T}
@click=${n=>{Qn(n.target)||t.onToggleDetails(e.key)}}
@keydown=${n=>{T(n),!n.defaultPrevented&&(Qn(n.target)||(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),t.onToggleDetails(e.key)))}}
>
<td class="data-table-checkbox-col">
<input
type="checkbox"
.checked=${t.selectedKeys.has(e.key)}
@change=${()=>t.onToggleSelect(e.key)}
aria-label=${`${k(`sessionsView.selectSession`)}: ${e.key}`}
/>
</td>
<td class="data-table-key-col">
<openclaw-tooltip .content=${h}>
<div class=${m?`session-key-cell`:`mono session-key-cell`}>
${Vn(e)}
<div class="session-key-cell__text">
<span class="session-key-cell__primary">
${e.unread===!0?N`<span
class="session-unread-dot"
role="img"
aria-label=${k(`sessionsView.unread`)}
></span>`:P}
${g?N`<a
href=${ee}
class="session-link"
@click=${n=>{o(n)&&t.onNavigateToChat&&(n.preventDefault(),t.onNavigateToChat(e.key))}}
>${m??e.key}</a
>`:N`<span>${m??e.key}</span>`}
${s?N`<span class="session-label-chip" title=${s}
>${s}</span
>`:P}
</span>
${e.kind===`global`&&!e.agentId?P:mt(O(e.key)?.agentId??e.agentId)}
${c?N`<span class="muted session-key-display-name">${a}</span>`:P}
</div>
</div>
</openclaw-tooltip>
</td>
${C?kn(e,t):P}
<td>
<span class=${y}>${v}</span>
</td>
<td class="session-status-col">
<div class="session-status-stack">
${jn(e)} ${qn(e.goal)}
${t.statusFilter===`all`&&e.archived===!0?G({kind:`muted`,label:k(`sessionsView.archived`)}):P}
</div>
</td>
<td>${n}</td>
<td class="session-token-cell">${Hn(e)}</td>
<td class="session-actions-cell">
<div class="session-actions">
<button
class="session-details-toggle"
type="button"
aria-expanded=${String(r)}
aria-controls=${r?i:P}
aria-label=${x}
@click=${n=>{n.stopPropagation(),t.onToggleDetails(e.key)}}
>
${j.chevronDown}
</button>
<button
class="icon-btn"
type="button"
title=${k(`chat.sidebar.openSessionMenu`)}
aria-label=${k(`chat.sidebar.openSessionMenu`)}
aria-haspopup="menu"
aria-expanded=${String(t.sessionMenu?.key===e.key)}
@click=${n=>{n.stopPropagation();let r=n.currentTarget,i=r.getBoundingClientRect();t.onOpenSessionMenu(e,{x:i.right,y:i.bottom+4},r)}}
>
${j.moreHorizontal}
</button>
</div>
</td>
</tr>`,...r?[E()]:[]];function E(){let r=t.labelDisabledReason?.(e),o=e.thinkingLevel??``,s=o?Oe(o):``,l=e.fastMode===void 0?``:Xt(e.fastMode),u=ke({catalog:[],session:e,defaults:t.result?.defaults,sessionKey:e.key,sessionsResult:null}),d=[{label:k(`sessionsView.thinking`),current:s,options:[{value:``,label:u.inherited.displayLabel},...u.options],onChange:n=>t.onPatch(e.key,{thinkingLevel:n||null})},{label:k(`sessionsView.fast`),current:l,options:Y(rr),onChange:n=>t.onPatch(e.key,{fastMode:We(n)??null})},{label:k(`sessionsView.verbose`),current:e.verboseLevel??``,options:Y(nr,!0),onChange:n=>t.onPatch(e.key,{verboseLevel:n||null})},{label:k(`sessionsView.reasoning`),current:e.reasoningLevel??``,options:Y(Q),onChange:n=>t.onPatch(e.key,{reasoningLevel:n||null})}];return N`<tr id=${i} class="session-details-row">
<td colspan=${X(t)}>
<div class="session-details-panel">
<div class="session-details-panel__hero">
<div>
<div class="session-details-panel__eyebrow">${k(`sessionsView.sessionDetails`)}</div>
<div class="session-details-panel__title">${m??e.key}</div>
${c?N`<div class="muted session-details-panel__subtitle">${a}</div>`:P}
</div>
<div class="session-details-panel__badges">
${jn(e)} ${qn(e.goal)}
<span class=${y}>${S(e)}</span>
</div>
</div>
<div class="session-details-section">
<div class="session-details-panel__eyebrow">${k(`sessionsView.overrides`)}</div>
<div class="session-overrides-grid">
<label class="session-override-field">
<span class="session-override-field__label">${k(`sessionsView.label`)}</span>
<input
class="settings-input"
.value=${e.label??``}
?disabled=${t.loading||!!r}
title=${r??P}
placeholder=${k(`sessionsView.optionalPlaceholder`)}
@change=${n=>{let r=z(n.target.value)??null;t.onPatch(e.key,{label:r},{sessionScope:!0})}}
/>
</label>
${d.map(({label:e,current:n,options:r,onChange:i})=>{let a=!n||r.some(e=>e.value===n)?r:[...r,{value:n,label:Ie(n)}];return N`
<label class="session-override-field">
<span class="session-override-field__label">${e}</span>
<select
class="settings-select"
?disabled=${t.loading||!!t.patchAdminDisabledReason}
title=${t.patchAdminDisabledReason??P}
@change=${e=>i(e.target.value)}
>
${a.map(e=>N`
<option value=${e.value} ?selected=${n===e.value}>
${e.label}
</option>
`)}
</select>
</label>
`})}
</div>
</div>
<div class="session-details-grid">
${Jn(e,n).map(e=>N`
<div class="session-detail-stat">
<div class="session-detail-stat__label">${e.label}</div>
<openclaw-tooltip .content=${e.value}>
<div class="session-detail-stat__value">${e.value}</div>
</openclaw-tooltip>
</div>
`)}
</div>
</div>
</td>
</tr>`}}var nr,rr,Q,ir,ar,or,sr,cr;function lr(){return(lr=e((()=>{Ge(),F(),qe(),Zt(),bt(),on(),M(),W(),i(),fe(),pt(),De(),ze(),y(),Pe(),Ue(),Re(),x(),Lt(),K(),u(),Qt(),g(),An(),Nn(),In(),zn(),nr=[``,`off`,`on`,`full`],rr=[``,`auto`,`on`,`off`],Q=[``,`off`,`on`,`stream`],ir=[10,25,50,100],ar={cron:j.clock,direct:j.messageSquare,group:j.users,global:j.globe,unknown:j.circle},or=65,sr=85,cr=4})))()}var ur,dr,$;function fr(){return(fr=e((()=>{Xe(),tt(),Ge(),F(),Se(),_e(),ge(),he(),xt(),rn(),lt(),wt(),it(),rt(),Et(),cn(),W(),_t(),i(),d(),Ve(),A(),R(),w(),c(),Gt(),qt(),ce(),Jt(),u(),g(),At(),ue(),tn(),Dt(),It(),ee(),t(),Nt(),fn(),mn(),_n(),yn(),xn(),wn(),On(),lr(),ur=`https://docs.openclaw.ai/concepts/session`,dr=200,$=class extends r{constructor(...e){super(...e),this.result=null,this.loading=!1,this.refreshing=!1,this.error=null,this.activeMinutes=``,this.limit=`50`,this.includeGlobal=!0,this.includeUnknown=!1,this.statusFilter=`active`,this.searchQuery=``,this.transcriptSearchQuery=``,this.submittedTranscriptSearchQuery=``,this.sortColumn=`updated`,this.sortDir=`desc`,this.groupBy=Sn(),this.page=0,this.pageSize=25,this.selectedSessions=new Map,this.sessionMenu=null,this.sessionMenuWork=null,this.expandedSessionKey=null,this.deepLinkSessionKey=null,this.pageEpoch=0,this.pluginActionLifetime=new AbortController,this.routeDataEnabled=!0,this.sessionMutationPending=!1,this.sessionMenuTrigger=null,this.sessionMenuWorkVersion=0,this.inputDialog=new bn(e=>{this.error=e}),this.observeAgentScope=Me(()=>{this.retirePageOperations(),this.resetTranscriptSearchState(this.transcriptSearchQuery),this.deepLinkSessionKey||(this.page=0,this.selectedSessions=new Map,this.routeDataEnabled=!1,this.clearSearchTimer(),this.bindSessionList()),this.requestUpdate()}),this.subscriptions=new ne(this).watchStore(()=>this.context?.agentIdentity).effect(()=>this.context?.agentSelection,e=>this.observeAgentScope(e)).watchStore(()=>this.context?.runtimeConfig).watchStore(()=>this.context?.plugins),this.gatewayLifecycle=new jt(this,{getGateway:()=>this.context?.gateway,onIdentityChange:()=>{let e=this.listBinding?.sessions.listSnapshot(this.listBinding.query).result;this.resetProviderState(),this.appliedListResult=e},invalidateRequests:()=>this.invalidatePageWork()}),this.transcriptSearchTask=new nt(this,{args:()=>{let e=this.context,t=e?.gateway.snapshot;return[t?.phase===`connected`?t.client??null:null,this.submittedTranscriptSearchQuery,e??null,e?.agentSelection.state.scopeId??null]},task:async([e,t,n,r],{signal:i})=>{if(!e||!t||!n)return et;let{sessions:a,results:o,indexing:s=!1,truncated:c=!1,archivedTranscriptsExcluded:l=0}=await en({client:e,query:t,listOptions:this.sessionListOptions(n,``),isCurrent:()=>!i.aborted});return{sessions:a,results:o,indexing:s,truncated:c,archivedTranscriptsExcluded:l}}})}willUpdate(e){let t=this.context?.sessions;t&&this.listBinding&&this.listBinding.sessions!==t&&(this.unsubscribeList?.(),this.unsubscribeList=void 0,this.listBinding=void 0,this.invalidatePageWork(),this.resetProviderState()),(e.has(`routeData`)||e.has(`context`))&&this.applyRouteData(),this.bindSessionList()}disconnectedCallback(){this.unsubscribeList?.(),this.unsubscribeList=void 0,this.listBinding=void 0,this.subscriptions.clear(),this.invalidatePageWork(),this.inputDialog.abort(),super.disconnectedCallback()}retirePageOperations(){this.pluginActionLifetime.abort(),this.pluginActionLifetime=new AbortController,this.pageEpoch+=1,this.sessionMutationPending=!1,this.closeSessionMenu()}invalidatePageWork(){this.retirePageOperations(),this.clearSearchTimer(),this.listRequest=void 0,this.resetTranscriptSearchState(this.transcriptSearchQuery),this.loading=!1,this.refreshing=!1}resetProviderState(){this.result=null,this.error=null,this.loading=!1,this.refreshing=!1,this.resetTranscriptSearchState(``),this.selectedSessions=new Map,this.expandedSessionKey=null,this.deepLinkSessionKey=null,this.appliedListResult=void 0}captureRequestScope(){let e=this.context;if(!this.isConnected||!e)return null;let t=e.gateway,n=this.gatewayLifecycle.gateway===t?this.gatewayLifecycle.client:null;return!this.gatewayLifecycle.connected||!n?null:{epoch:this.pageEpoch,context:e,gateway:t,sessions:e.sessions,client:n}}isRequestScopeCurrent(e){let t=this.context,n=t?.gateway;return this.isConnected&&this.pageEpoch===e.epoch&&t===e.context&&n===e.gateway&&t.sessions===e.sessions&&n.snapshot.phase===`connected`&&n.snapshot.client===e.client}mutationDisabledReason(e){let t=v(this.context?.gateway.snapshot,e);return t.allowed?void 0:t.reason}requireMutationAccess(e,t){let n=v(e.gateway.snapshot,t);return n.allowed?!0:(this.error=n.reason,!1)}selectedDeleteDisabledReason(){for(let e of this.selectedSessions.values()){let t=this.mutationDisabledReason({method:`sessions.delete`,params:{key:e.key,...e.archived===!0?{archivedOnly:!0}:{}}});if(t)return t}}applyRouteData(){let e=this.routeData,t=this.context;e&&t&&(e!==this.appliedRouteData&&(this.appliedRouteData=e,this.routeDataEnabled=!0),this.routeDataEnabled&&(this.statusFilter=e.statusFilter,this.activeMinutes=``,this.limit=`50`,this.includeGlobal=!0,this.includeUnknown=!!e.expandedSessionKey,e.expandedSessionKey&&(this.searchQuery=``,this.page=0,this.selectedSessions=new Map),this.expandedSessionKey=e.expandedSessionKey,this.deepLinkSessionKey=e.expandedSessionKey))}sessionAgentId(e,t=this.context){if(!t)return;let{agentId:n}=l({assistantAgentId:t.agentSelection.state.selectedId,hello:t.gateway.snapshot.hello},e);return n}sessionPathAgentId(e,t){return this.sessionAgentId(e,t)??n(t)}sessionListOptions(e,t=this.searchQuery){return vn(e,{activeMinutes:H(this.activeMinutes),limit:H(this.limit)??50,includeGlobal:this.includeGlobal,includeUnknown:this.includeUnknown,statusFilter:this.statusFilter,deepLinkSessionKey:this.deepLinkSessionKey,search:t})}bindSessionList(e=!0){let t=this.context;if(!t||!this.isConnected)return;let n=t.sessions,r=this.sessionListOptions(t),i=JSON.stringify(r),a=this.listBinding,o=JSON.stringify(this.sessionListOptions(t,``));(a?.sessions!==n||a.key!==i)&&(a?.sessions===n&&n.listSnapshot(a.query).loading&&this.loadSessionList(a),this.unsubscribeList?.(),this.unsubscribeList=void 0,(a?.sessions!==n||a.transcriptKey!==o)&&this.resetTranscriptSearchState(this.transcriptSearchQuery),this.result=null,this.error=null,this.selectedSessions=new Map,this.page=0,this.listBinding={sessions:n,query:r,key:i,transcriptKey:o},this.appliedListResult=void 0);let s=this.listBinding;if(this.unsubscribeList||(this.loading=t.gateway.snapshot.phase===`connected`,!this.captureRequestScope()||this.searchTimer!==void 0||this.listRequest))return s;let c=e=>{this.applyListSnapshot(s,e)};this.unsubscribeList=n.subscribeList(r,c);let l=n.listSnapshot(r);return c(l),e&&(!l.result||l.loading)&&this.loadSessionList(s),s}applyListSnapshot(e,t){if(this.listBinding!==e||this.context?.sessions!==e.sessions)return;this.loading=t.loading,this.error=t.error;let n=t.result;n&&(n!==this.appliedListResult&&(this.appliedListResult=n,this.result=f(n,{archivedFilter:this.statusFilter}),dn(this.context?.agentIdentity,this.result)),!t.loading&&!t.error&&this.result&&this.selectedSessions.size>0&&(this.selectedSessions=Tn(this.selectedSessions,this.result.sessions,t=>e.sessions.deletionState(t.key,this.sessionAgentId(t.key),t.sessionId)===`pending`||e.sessions.archiveVisibility(t.key)===`pending`)))}async refreshSessionList(e=this.captureRequestScope()){if(!e)return;this.routeDataEnabled=!1,this.clearSearchTimer();let t=this.bindSessionList(!1);t&&t.sessions===e.sessions&&this.isRequestScopeCurrent(e)&&(await this.loadSessionList(t,{force:!0}),this.isRequestScopeCurrent(e)&&this.listBinding===t&&this.applyListSnapshot(t,t.sessions.listSnapshot(t.query)))}loadSessionList(e,t={}){if(this.listRequest)return t.force&&this.unsubscribeList&&e.sessions.refreshList({...e.query,...t}),this.listRequest;if(!this.captureRequestScope())return Promise.resolve();let n,r=new Promise(e=>{n=e}).finally(()=>{this.listRequest===r&&(this.listRequest=void 0,this.refreshing=!1,this.bindSessionList())});return this.listRequest=r,this.refreshing=!0,n(e.sessions.refreshList({...e.query,...t})),r}clearSearchTimer(){clearTimeout(this.searchTimer),this.searchTimer=void 0}adoptCurrentListSnapshot(){let e=this.listBinding;e&&this.applyListSnapshot(e,e.sessions.listSnapshot(e.query))}resetTranscriptSearchState(e){this.transcriptSearchQuery=e,this.submittedTranscriptSearchQuery=``,this.transcriptSearchTask.run()}updateTranscriptSearchQuery(e){e!==this.transcriptSearchQuery&&this.resetTranscriptSearchState(e)}async runTranscriptSearch(){let e=this.transcriptSearchQuery.trim();if(!e){this.resetTranscriptSearchState(``);return}this.captureRequestScope()&&(this.transcriptSearchQuery=e,this.submittedTranscriptSearchQuery=e,await this.transcriptSearchTask.run())}updateFilters(e){this.activeMinutes=e.activeMinutes,this.limit=e.limit,this.includeGlobal=e.includeGlobal,this.includeUnknown=e.includeUnknown,this.page=0,this.selectedSessions=new Map,this.deepLinkSessionKey=null,this.refreshSessionList()}updateStatusFilter(e){let t=this.context;e!==this.statusFilter&&t&&(this.statusFilter=e,this.clearSearchTimer(),this.page=0,this.selectedSessions=new Map,this.deepLinkSessionKey=null,this.loading=!0,this.error=null,t.navigate(`sessions`,e===`active`?void 0:{search:`?status=${e}`}))}updateSelection(e,t){this.selectedSessions=En(this.selectedSessions,this.result?.sessions??[],e,t)}async deleteSelected(){let e=[...this.selectedSessions.values()];if(e.length===0||this.loading||this.sessionMutationPending)return;let t=this.captureRequestScope();if(!t)return;let n=k(e.length===1?`sessionsView.deleteSelectedConfirmOne`:`sessionsView.deleteSelectedConfirm`,{count:String(e.length)});await U({message:n,confirmLabel:k(`common.delete`),danger:!0,signal:this.pluginActionLifetime.signal})&&this.isRequestScopeCurrent(t)&&await this.deleteSessions(e.filter(e=>this.selectedSessions.get(e.key)===e))}async deleteSessions(e,t={}){if(e.length===0||this.loading||this.sessionMutationPending)return;let n=this.captureRequestScope();if(!n)return;let r=e.map(e=>({key:e.key,agentId:this.sessionAgentId(e.key,n.context),...t,...e.sessionId?{expectedSessionId:e.sessionId}:{},...e.archived===!0?{archivedOnly:!0}:{}}));for(let e of r)if(!this.requireMutationAccess(n,{method:`sessions.delete`,params:e}))return;await this.runSessionMutation(n,async()=>{let t=async()=>{let t=await n.sessions.deleteMany(r);if(e.length===1&&t.errors.length>0)throw t.errors[0].error;return t},i=e[0],o=e.length===1?await Ot({action:`delete`,session:{...i,label:i.label||i.displayName||i.key,agentId:r[0].agentId},scope:{...n,signal:this.pluginActionLifetime.signal},isCurrent:()=>this.isRequestScopeCurrent(n),request:t}):await t();if(this.isRequestScopeCurrent(n)&&o){if(o.preservedWorktrees.length>0&&window.alert(Tt(o.preservedWorktrees)),o.deleted.length>0){let e=new Set(o.deleted),t=new Map(this.selectedSessions);for(let e of o.deleted)t.delete(e);this.selectedSessions=t,this.expandedSessionKey&&e.has(this.expandedSessionKey)&&(this.expandedSessionKey=null),this.deepLinkSessionKey&&e.has(this.deepLinkSessionKey)&&(this.deepLinkSessionKey=null);let r=o.deleted.find(e=>C(e,n.gateway.snapshot.sessionKey));if(r){let e=O(r)?.agentId??n.context.agentSelection.state.selectedId??`main`;ye({selection:n.context.agentSelection,gateway:n.gateway,agentId:e,sessionKey:Je({agentId:e,mainKey:a({agentsList:n.context.agents.state.agentsList,hello:n.gateway.snapshot.hello})})})}}return await this.refreshSessionList(n),o.errors.length>0?o.errors.map(({error:e})=>kt(e)).join(`; `):void 0}})}async deleteAllArchived(){let e=this.captureRequestScope(),t=this.pluginActionLifetime.signal;if(!e||this.loading||this.sessionMutationPending)return;let n;try{let{search:t,agentId:r,...i}=this.sessionListOptions(e.context),a=e.context.agentSelection.state.scopeId?.trim(),o={...i,...a?{agentId:a}:{}},s=await Ut({list:t=>e.sessions.list({...o,limit:1e3,offset:t}),isCurrent:()=>this.isRequestScopeCurrent(e),missingResultError:e.sessions.state.error??`archived session enumeration returned no result`,stalledPaginationError:`archived session enumeration did not advance`,incompletePaginationError:`archived session enumeration was incomplete`});if(!s)return;n=s}catch(t){this.isRequestScopeCurrent(e)&&(this.error=T(t));return}let r=n.filter(e=>e.archived===!0);r.length!==0&&await U({message:k(`sessionsView.deleteAllArchivedConfirm`,{count:String(r.length)}),confirmLabel:k(`common.delete`),danger:!0,signal:t})&&this.isRequestScopeCurrent(e)&&await this.deleteSessions(r,{deleteTranscript:!0})}async deleteSessionFromMenu(e){let t=z(e.label)??e.key,n=this.captureRequestScope();n&&await U({message:k(`sessionsView.deleteSessionConfirm`,{session:t}),confirmLabel:k(`common.delete`),danger:!0,signal:this.pluginActionLifetime.signal})&&this.isRequestScopeCurrent(n)&&await this.deleteSessions([e])}async stopCloudWorker(e){let t=z(e.label)??e.key,n=st(e.placement);if(!n||n.blocksActiveRun&&e.hasActiveRun===!0)return;let r=this.captureRequestScope();r&&await U({message:k(`sessionsView.stopCloudWorkerConfirm`,{session:t}),confirmLabel:k(`sessionsView.stopCloudWorkerConfirmAction`),danger:!0,signal:this.pluginActionLifetime.signal})&&this.isRequestScopeCurrent(r)&&this.requireMutationAccess(r,n)&&await this.runSessionMutation(r,async()=>{let t=O(e.key)?.agentId;await nn(r.client,{key:e.key,...t?{agentId:t}:{}},r.context.placementStartup),this.isRequestScopeCurrent(r)&&await this.refreshSessionList(r)})}async runSessionMutation(e,t){this.sessionMutationPending=!0;let n;try{n=await t()}catch(t){this.isRequestScopeCurrent(e)&&(n=T(t))}finally{this.isRequestScopeCurrent(e)&&(this.sessionMutationPending=!1,this.adoptCurrentListSnapshot(),n&&(this.error=n))}}knownCategories(){return hn(this.result,this.context?.sessions.state.groups??[])}setGroupBy(e){this.groupBy=e,this.page=0,Cn(e)}async rememberCustomGroup(e,t=this.captureRequestScope()){return t?this.requireMutationAccess(t,{method:`sessions.groups.put`,requiredScope:`operator.write`})?gn({name:e,knownCategories:this.knownCategories(),sessions:t.sessions,isCurrent:()=>this.isRequestScopeCurrent(t),onError:e=>{this.error=e}}):`failed`:`stale`}assignCategory(e,t){let n=this.result?.sessions.find(t=>t.key===e);n&&(n.category?.trim()||null)!==t&&(t&&this.rememberCustomGroup(t),this.patchSession(e,{category:t}))}async requestNewCategory(e){let t=this.result?.sessions.find(t=>t.key===e);if(e&&!t?.sessionId){this.error=k(`common.refresh`);return}await this.inputDialog.open(()=>({title:k(`sessionsView.newGroupTitle`),label:k(`sessionsView.newGroupPrompt`),submitLabel:k(`sessionsView.newGroupCreate`),requireValue:!0,submit:e=>this.writeNewCategory(e,t)}))}async writeNewCategory(e,t){this.error=null;let n=this.captureRequestScope();if(!n)return k(`sessionsView.newGroupFailed`);let r=await this.rememberCustomGroup(e,n);if(r!==`completed`)return r===`failed`?this.error??k(`sessionsView.newGroupFailed`):k(`sessionsView.newGroupStale`);if(!t)return null;let i=await this.patchSession(t.key,{category:e},n,t.sessionId);return i===`failed`?this.error??k(`sessionsView.newGroupFailed`):i===`stale`?k(`sessionsView.newGroupStale`):null}async renameSession(e){let t=this.captureRequestScope();if(!t){this.error=k(`sessionsView.actionRequiresConnection`);return}let n=Bt(e),r=this.pluginActionLifetime.signal,i=await this.inputDialog.open(()=>({signal:r,title:k(`sessionsView.renameSessionPrompt`),defaultValue:n}));if(i===null||!this.isRequestScopeCurrent(t))return;let a=Wt(i,n,e.label);a&&await this.patchSession(e.key,a,t,e.sessionId,{sessionScope:!0})}async patchSession(e,t,n=this.captureRequestScope(),r,i={}){if(!n)return this.error=k(`sessionsView.actionRequiresConnection`),`failed`;if(typeof t.archived==`boolean`&&!r?.trim())return this.error=`Session lifecycle action requires a durable session identity.`,`failed`;let a=this.sessionAgentId(e,n.context),o=this.result?.sessions.find(t=>t.key===e);if(!this.requireMutationAccess(n,{method:`sessions.patch`,sessionScope:i.sessionScope,session:o,params:{key:e,...t,...a?{agentId:a}:{}}}))return`failed`;try{let s=()=>n.sessions.patch(e,t,{agentId:a,...r?{expectedSessionId:r}:{}}),c=t.archived===!0?await Ot({action:`archive`,session:{key:e,sessionId:r,label:o?.label||o?.displayName||e,agentId:a},scope:{...n,signal:this.pluginActionLifetime.signal},isCurrent:()=>this.isRequestScopeCurrent(n),request:s}):await s();if(c&&i.onConfirmed?.(c),!this.isRequestScopeCurrent(n))return`stale`;if(!c)return this.error=n.sessions.state.error,`failed`;if(await this.refreshSessionList(n),!this.isRequestScopeCurrent(n))return`stale`;let l=new Map(this.selectedSessions);return l.delete(e),this.selectedSessions=l,`completed`}catch(e){return this.isRequestScopeCurrent(n)?(this.error=T(e),`failed`):`stale`}}async archiveSessionWithUndo(e){let t=this.captureRequestScope();if(!t)return;let n=pn(t.sessions,e,this.sessionAgentId(e.key,t.context));if(!n)return;let r=t.sessions.beginArchive(e.key,e.sessionId);if(r)try{await this.patchSession(e.key,{archived:!0},t,e.sessionId,{onConfirmed:n,sessionScope:!0})}finally{r()}}async forkSession(e,t=!1){let n=this.captureRequestScope();if(!n)return;let r=this.sessionAgentId(e,n.context),i={parentSessionKey:e,fork:!0,...t?{forkFrom:`last-completed`}:{},...r?{agentId:r}:{}};if(this.requireMutationAccess(n,{method:`sessions.create`,params:i}))try{let e=await n.sessions.create(i);if(!this.isRequestScopeCurrent(n))return;e?n.context.navigate(`chat`,{..._({context:n.context,face:`chat`,sessionKey:e,agentId:r??this.sessionPathAgentId(e,n.context)}).options,hash:``}):n.sessions.state.error&&(this.error=n.sessions.state.error)}catch(e){this.isRequestScopeCurrent(n)&&(this.error=T(e))}}async toggleSessionDetails(e){if(!this.context)return;let t=this.deepLinkSessionKey!==null;if(this.deepLinkSessionKey=null,t&&this.refreshSessionList(),this.expandedSessionKey===e){this.expandedSessionKey=null;return}this.expandedSessionKey=e}openSessionMenu(e,t,n){if(this.sessionMenu?.key===e.key&&this.sessionMenu.sessionId===e.sessionId&&n){this.closeSessionMenu();return}this.sessionMenu={key:e.key,sessionId:e.sessionId,...t},this.sessionMenuTrigger=n,this.loadSessionMenuWork(e)}closeSessionMenu(){this.context&&Vt(this.context.gateway).unwatch(this),this.sessionMenu=null,this.sessionMenuTrigger=null,this.sessionMenuWorkVersion+=1,this.sessionMenuWork=null}loadSessionMenuWork(e){let t=++this.sessionMenuWorkVersion;if(!e.worktree){this.sessionMenuWork=null;return}this.sessionMenuWork={loading:!0,pullRequestUrl:null,worktreePath:null};let n=this.captureRequestScope();if(!n){this.sessionMenuWork={loading:!1,pullRequestUrl:null,worktreePath:null};return}let r=Vt(n.context.gateway),i=b(e.key,this.sessionAgentId(e.key,n.context));at({client:n.client,loadPullRequests:Te(n.context.gateway.snapshot,`controlUi.sessionPullRequests.subscribe`,`operator.read`)?()=>r.load(this,i):void 0,worktreeId:e.worktree.id,execNode:e.execNode}).then(e=>{t===this.sessionMenuWorkVersion&&(this.sessionMenuWork={loading:!1,...e})})}renderSessionMenu(){let e=this.sessionMenu,t=this.context,n=e?this.result?.sessions.find(t=>t.key===e.key&&t.sessionId===e.sessionId):null;return!e||!t||!n?P:Dn({context:t,row:n,menu:e,trigger:this.sessionMenuTrigger,disabled:this.loading,groups:this.knownCategories(),work:this.sessionMenuWork,onClose:()=>this.closeSessionMenu(),onAction:r=>{switch(r.kind){case`open-pr`:E(r.url);break;case`open-in`:je(r.editor,r.path);break;case`copy-session-id`:case`copy-session-link`:case`copy-session-preview-link`:case`copy-markdown`:case`open-new-tab`:case`open-new-window`:case`split-right`:case`split-below`:zt(r.kind,{context:t,session:n,agentId:n.agentId,isCurrent:()=>this.isConnected&&this.context===t});break;case`toggle-pin`:this.patchSession(n.key,{pinned:n.pinned!==!0},void 0,void 0,{sessionScope:!0});break;case`toggle-involving-me`:{let e=this.captureRequestScope();if(!e||!n.sessionId){this.error=k(`sessionsView.actionRequiresConnection`);break}se(e.client,{key:n.key,expectedSessionId:n.sessionId,agentId:n.agentId??this.sessionAgentId(n.key,e.context),hidden:!n.hiddenFromInvolvingMe}).then(async()=>{this.isRequestScopeCurrent(e)&&await this.refreshSessionList(e)}).catch(t=>{this.isRequestScopeCurrent(e)&&(this.error=T(t))});break}case`toggle-unread`:this.patchSession(n.key,{unread:n.unread!==!0});break;case`rename`:this.renameSession(n);break;case`set-color`:this.patchSession(n.key,{color:r.color});break;case`set-icon`:this.patchSession(n.key,{icon:r.icon});break;case`reset-appearance`:this.patchSession(n.key,{icon:null,color:null});break;case`fork`:this.forkSession(n.key,n.hasActiveRun===!0);break;case`plugin`:this.runPluginAction(r.id,e);break;case`move-to-group`:this.assignCategory(n.key,r.category);break;case`new-group`:this.requestNewCategory(n.key);break;case`toggle-archived`:n.archived===!0?this.patchSession(n.key,{archived:!1},void 0,n.sessionId,{sessionScope:!0}):this.archiveSessionWithUndo(n);break;case`assign-owner`:{let e=this.captureRequestScope();if(!e){this.error=k(`sessionsView.actionRequiresConnection`);break}if(!this.requireMutationAccess(e,{method:`sessions.assignOwner`,params:{key:n.key,owner:r.owner},requiredScope:`operator.write`}))break;this.runSessionMutation(e,async()=>await e.sessions.assignOwner(n.key,r.owner)||!this.isRequestScopeCurrent(e)?void 0:e.sessions.state.error??void 0);break}case`stop-cloud-worker`:this.stopCloudWorker(n);break;case`delete`:this.deleteSessionFromMenu(n)}}})}render(){let e=this.context,t=(this.result?.owners?.length??0)>1;return e?N`
${sn({active:`sessions`,title:me(`sessions`),subtitle:N`${pe(`sessions`)} ${ct(ur)}`,actions:yt({agents:e.agents.state.agentsList?.agents??[],selection:e.agentSelection}),onSelect:t=>{t!==`sessions`&&e.navigate(t)}})}
${St($n({loading:this.loading,refreshing:this.refreshing,result:this.result,error:this.error,activeMinutes:this.activeMinutes,limit:this.limit,includeGlobal:this.includeGlobal,includeUnknown:this.includeUnknown,statusFilter:this.statusFilter,basePath:e.basePath,agentId:n(e),mainKey:a({agentsList:e.agents.state.agentsList,hello:e.gateway.snapshot.hello}),searchQuery:this.searchQuery,transcriptSearchAvailable:e.gateway.snapshot.phase===`connected`,transcriptSearchQuery:this.transcriptSearchQuery,transcriptSearch:this.transcriptSearchTask.render({initial:()=>({status:`idle`}),pending:()=>({status:`loading`}),complete:e=>({status:`results`,...e}),error:e=>({status:`error`,message:T(e)})}),agentIdentityById:un(this.result,t=>e.agentIdentity.get(t)??void 0),sortColumn:this.sortColumn,sortDir:this.sortDir,groupBy:t||this.groupBy!==`person`?this.groupBy:`none`,personGroupingAvailable:t,knownCategories:this.knownCategories(),page:this.page,pageSize:this.pageSize,selectedKeys:new Set(this.selectedSessions.keys()),sessionMenu:this.sessionMenu,expandedSessionKey:this.expandedSessionKey,labelDisabledReason:e=>this.mutationDisabledReason({method:`sessions.patch`,params:{key:e.key,label:null},sessionScope:!0,session:e}),patchAdminDisabledReason:this.mutationDisabledReason({method:`sessions.patch`,params:{key:``,thinkingLevel:null}}),groupWriteDisabledReason:this.mutationDisabledReason({method:`sessions.groups.put`,requiredScope:`operator.write`}),deleteArchivedDisabledReason:this.mutationDisabledReason({method:`sessions.delete`,params:{key:``,archivedOnly:!0,deleteTranscript:!0}}),deleteSelectedDisabledReason:this.selectedDeleteDisabledReason(),onFiltersChange:e=>this.updateFilters(e),onClearFilters:()=>{this.activeMinutes=``,this.limit=`50`,this.includeGlobal=!0,this.includeUnknown=!1,this.searchQuery=``,this.page=0,this.selectedSessions=new Map,this.deepLinkSessionKey=null,this.refreshSessionList()},onSearchChange:e=>{this.routeDataEnabled=!1,this.deepLinkSessionKey=null,this.searchQuery=e,this.page=0,this.selectedSessions=new Map,this.clearSearchTimer(),this.captureRequestScope()&&(this.searchTimer=setTimeout(()=>{this.searchTimer=void 0,this.bindSessionList()},dr)),this.bindSessionList()},onTranscriptSearchChange:e=>this.updateTranscriptSearchQuery(e),onTranscriptSearch:()=>void this.runTranscriptSearch(),onClearTranscriptSearch:()=>this.resetTranscriptSearchState(``),onSortChange:(e,t)=>{this.sortColumn=e,this.sortDir=t,this.page=0},onGroupByChange:e=>this.setGroupBy(e),onAssignCategory:(e,t)=>this.assignCategory(e,t),onRequestNewCategory:e=>void this.requestNewCategory(e),onLoadMore:()=>{let e=this.listBinding,t=this.result?.nextOffset;e&&this.result?.hasMore&&t!=null&&!this.loading&&this.loadSessionList(e,{offset:t,append:!0})},onPageChange:e=>{this.page=e},onPageSizeChange:e=>{this.pageSize=e,this.page=0},onRefresh:()=>void this.refreshSessionList(),onStatusFilterChange:e=>this.updateStatusFilter(e),onDeleteAllArchived:()=>void this.deleteAllArchived(),onPatch:(e,t,n)=>void this.patchSession(e,t,void 0,void 0,n),onToggleSelect:e=>this.updateSelection([e],`toggle`),onSelectPage:e=>this.updateSelection(e,`select`),onDeselectPage:e=>this.updateSelection(e,`deselect`),onDeselectAll:()=>{this.selectedSessions=new Map},onDeleteSelected:()=>void this.deleteSelected(),onNavigateToChat:t=>{let n=s(e,t),r=_({context:e,face:n,sessionKey:t,agentId:this.sessionPathAgentId(t,e),preferenceDerivedFace:!0});e.navigate(n,r.options)},onOpenSessionMenu:(e,t,n)=>this.openSessionMenu(e,t,n),onToggleDetails:e=>void this.toggleSessionDetails(e)}),{id:`sessions-hub-panel`})}
${this.renderSessionMenu()}
`:N``}async runPluginAction(e,t){let n=this.captureRequestScope();if(n)try{await Yt({runtime:n.context.plugins,id:e,placement:`session`,sessionKey:t.key,session:this.result?.sessions.find(e=>e.key===t.key&&e.sessionId===t.sessionId),signal:this.pluginActionLifetime.signal})}catch(e){this.isRequestScopeCurrent(n)&&(this.error=T(e))}}},V([Ye({context:ve,subscribe:!0})],$.prototype,`context`,void 0),V([Ce({attribute:!1})],$.prototype,`routeData`,void 0),V([I()],$.prototype,`result`,void 0),V([I()],$.prototype,`loading`,void 0),V([I()],$.prototype,`refreshing`,void 0),V([I()],$.prototype,`error`,void 0),V([I()],$.prototype,`activeMinutes`,void 0),V([I()],$.prototype,`limit`,void 0),V([I()],$.prototype,`includeGlobal`,void 0),V([I()],$.prototype,`includeUnknown`,void 0),V([I()],$.prototype,`statusFilter`,void 0),V([I()],$.prototype,`searchQuery`,void 0),V([I()],$.prototype,`transcriptSearchQuery`,void 0),V([I()],$.prototype,`submittedTranscriptSearchQuery`,void 0),V([I()],$.prototype,`sortColumn`,void 0),V([I()],$.prototype,`sortDir`,void 0),V([I()],$.prototype,`groupBy`,void 0),V([I()],$.prototype,`page`,void 0),V([I()],$.prototype,`pageSize`,void 0),V([I()],$.prototype,`selectedSessions`,void 0),V([I()],$.prototype,`sessionMenu`,void 0),V([I()],$.prototype,`sessionMenuWork`,void 0),V([I()],$.prototype,`expandedSessionKey`,void 0),customElements.get(`openclaw-sessions-page`)||customElements.define(`openclaw-sessions-page`,$)})))()}fr();