openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
784 lines • 93.7 kB
JavaScript
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{Bi as t,Gi as n,Qi as r,R as i,Ui as a,Yi as o,hn as s,wr as c,z as l}from"./control-ui-foundation-Cydpkyqa.js";import{As as u,Bn as d,Dn as f,Do as p,En as m,Eo as h,Ls as g,Mn as _,Nn as v,On as y,Oo as b,Sc as x,Tn as S,Xn as C,Yn as w,Zn as T,_s as E,as as D,bc as ee,bs as O,cc as te,cs as ne,ds as k,fs as A,gs as re,hs as ie,is as ae,k as j,kc as M,kn as oe,ms as se,ns as ce,os as N,ps as le,qn as ue,rs as P,sc as de,uc as fe,us as pe,vn as me,vr as he,vs as ge,w as _e,wn as ve,wr as ye,xn as be,ys as F,zn as xe}from"./control-ui-core-Rwzhj6nO.js";import{$ as Se,K as I,X as L,_ as Ce,at as R,q as z,r as we,st as Te,t as Ee,v as De}from"./lit-runtime-CV_MH99K.js";import{$n as Oe,An as ke,Yn as Ae,_ as je,_n as Me,g as Ne,jn as Pe}from"./control-ui-core-YphAl4aM.js";import{Gt as Fe,Ht as Ie,Rt as Le,Wt as B,Yt as V,en as H}from"./control-ui-core-vvcQQV2m.js";import{n as Re,r as ze}from"./gateway-runtime-Bqqcp9-I.js";import{$n as Be,Or as Ve,Ti as He,_i as Ue,dn as We,er as Ge,fi as Ke,ii as U,kr as qe,li as Je,si as Ye,un as Xe}from"./control-ui-boot-shared-DfZ39Yj9.js";import{$ as Ze,G as W,J as G,L as K,Q as Qe,V as q,W as $e,X as J,tt as et,z as tt}from"./control-ui-boot-chat-_QSl8fbH.js";import{Is as nt,Ls as rt,ui as it}from"./control-ui-boot-shared-CXVvK2AW.js";import{D as at}from"./control-ui-boot-new-Bj2SAUyl.js";import"./control-ui-boot-chat-BhPddYSI.js";import{n as ot,t as st}from"./hub-tabs-DLM-pY5z.js";import{n as ct,t as lt}from"./settings-workspace-Bseic8Tf.js";import{c as ut,o as dt,s as ft,t as pt}from"./github-identity-view-B8sN2SqT.js";import{a as mt,i as ht,n as gt,r as _t}from"./tool-catalog-4WDY1rLB.js";import{n as vt,t as yt}from"./model-picker-CB45-l8O.js";import{n as bt,t as xt}from"./cron-jobs-pagination-BDvDbGGq.js";import{a as St,n as Ct,r as wt,s as Tt,t as Et}from"./presenter-DkWDWjgv.js";import{a as Dt,n as Ot,o as kt,r as At,s as jt,t as Mt}from"./skills-shared-DpaM2QiY.js";async function Nt(e,t,n,r){let i=r.kind===`write`,a=i?`agentFileSaving`:`agentFilesLoading`,o=e.client,s=e.agents;if(!o||!e.connected||e[a])return!1;if(r.kind===`read`&&!r.force&&Object.hasOwn(e.agentFileContents,n))return!0;let c=e.requestGeneration,l=()=>e.client===o&&e.agents===s&&e.connected&&e.requestGeneration===c,u=()=>{e.agentFileWriteRevisions.set(n,(e.agentFileWriteRevisions.get(n)??0)+1)};i&&u();let d=e.agentFileWriteRevisions.get(n),f=()=>l()&&(i||e.agentFileWriteRevisions.get(n)===d);e[a]=!0,e.agentFilesError=null;try{let a=await o.request(i?`agents.files.set`:`agents.files.get`,{agentId:t,name:n,...r.kind===`write`?{content:r.content}:{}});if(a?.file&&f()){let t=r.kind===`write`?r.content:a.file.content??``,o=e.agentFileContents[n]??``,c=e.agentFileDrafts[n];return e.agentFileContents={...e.agentFileContents,[n]:t},(!Object.hasOwn(e.agentFileDrafts,n)||c===(i?t:o))&&(e.agentFileDrafts={...e.agentFileDrafts,[n]:t}),e.agentFilesError=null,s.recordFile(a),!0}}catch(t){return f()&&(e.agentFilesError=h(t)),!1}finally{l()&&(i&&u(),e[a]=!1)}return!1}function Pt(e,t,n,r){return Nt(e,t,n,{kind:`read`,force:r?.force})}function Ft(e,t,n,r){return Nt(e,t,n,{kind:`write`,content:r})}function It(){return(It=e((()=>{b()})))()}function Lt(e){return e&&e.length<=Vt?e:null}function Rt(e){return new Promise(t=>{let n=new FileReader;n.addEventListener(`load`,()=>t(Lt(typeof n.result==`string`?n.result:null))),n.addEventListener(`error`,()=>t(null)),n.readAsDataURL(e)})}async function zt(e){if(!e.type.startsWith(`image/`)||e.size>2097152)return null;try{let t=await createImageBitmap(e),n=Math.min(1,Bt/Math.max(t.width,t.height)),r=Math.max(1,Math.round(t.width*n)),i=Math.max(1,Math.round(t.height*n)),a=document.createElement(`canvas`);a.width=r,a.height=i;let o=a.getContext(`2d`);if(!o)return Rt(e);o.drawImage(t,0,0,r,i),t.close();let s=a.toDataURL(`image/webp`,.8);return Lt(s.startsWith(`data:image/webp`)?s:a.toDataURL(`image/png`))}catch{return Rt(e)}}var Bt,Vt;function Ht(){return(Ht=e((()=>{s(),Bt=96,Vt=16e3})))()}function Ut(e){let t=(Y.get(e)??0)+1;return Y.set(e,t),t}function Wt(e){Ut(e),e.identityDraft={name:null,emoji:null,avatar:null},e.identitySaving=!1,e.identityError=null}function Gt(e,t,n){e.identityDraft={...e.identityDraft,[t]:n},e.identityError=null}function Kt(e,t){let n=Ut(e);zt(t).then(t=>{Y.get(e)===n&&(t?(e.identityDraft={...e.identityDraft,avatar:t},e.identityError=null):e.identityError=H(`agents.identity.imageUnusable`))})}async function qt(e){let{host:t,expectedClient:n,agentId:r,agents:i,agentIdentity:a,runtimeConfig:o}=e,s=t.identityDraft,c=s.name?.trim(),l=s.emoji?.trim(),u=s.avatar??void 0;if(!(s.name!==null&&!c||s.emoji!==null&&!l)){if(!c&&!l&&!u){Wt(t);return}t.identitySaving=!0,t.identityError=null;try{let s=await o.runExternalMutation(e=>{if(e!==n)throw Error(`Connection changed before the agent identity update started.`);return y(e,{agentId:r,name:c,emoji:l,avatar:u})},{canDispatch:e.canDispatch,dispatchError:`Access changed before the agent identity update started.`});if(!s.ok)throw Error(s.error);let d=s.refresh.ok?[]:[s.refresh.error];a.invalidate([r]);try{await i.refreshList()}catch(e){d.push(`Agent identity was saved, but the agent list refresh failed: ${h(e)}`)}try{await a.ensure([r])}catch(e){d.push(`Agent identity was saved, but the identity refresh failed: ${h(e)}`)}e.isCurrent()&&(Wt(t),e.onSaved(),t.identityError=d.length>0?d.join(` `):null)}catch(n){e.isCurrent()&&(t.identityError=h(n))}finally{e.isCurrent()&&(t.identitySaving=!1)}}}function Jt(e,t){let n=e.snapshot.pinnedAgentIds,r=n.includes(t)?n.filter(e=>e!==t):[...n,t];e.update({pinnedAgentIds:r})}var Y;function Yt(){return(Yt=e((()=>{V(),ve(),b(),Ht(),Y=new WeakMap})))()}function Xt(e){return{path:[...e.path,`model`],existing:e.entry.model}}function Zt(e,t,n,r){n&&r?e.patchForm(t,{primary:n,fallbacks:r}):n?e.patchForm(t,n):r?e.patchForm(t,{fallbacks:r}):e.removeFormValue(t)}function Qt(e){if(typeof e==`string`)return{primary:e.trim()||null,fallbacks:null};if(e&&typeof e==`object`){let t=e;return{primary:typeof t.primary==`string`&&t.primary.trim()||null,fallbacks:Array.isArray(t.fallbacks)?t.fallbacks:null}}return{primary:null,fallbacks:null}}function $t(e,t,n){let r=e.agentEntry(t,{ensure:!!n});if(!r)return;let i=Xt(r);Zt(e,i.path,n,Qt(i.existing).fallbacks)}function en(e,t,r){let i=F(e.state),a=n(r),o=k(i,t),s=se(o.entry?.model,o.defaults?.model),c=e.agentEntry(t),l=a.length>0||(s?.length??0)>0||c?c??e.agentEntry(t,{ensure:!0}):null;if(!l)return;let u=Xt(l),d=Qt(u.existing).primary??E(o.entry?.model)??E(o.defaults?.model)??null;Zt(e,u.path,d,a.length>0?a:null)}function tn(){return(tn=e((()=>{t(),N(),O()})))()}function nn(e,t,n){let r=t?.canonicalLocation;if(!r)return``;let i=`${t.location.pathname}${t.location.search}${t.location.hash}`;return n!==i&&e.replace(`agents`,r),i}function rn(e,t,n,r){n!==t&&e.navigate(`agents`,{pathname:Oe(t,r===`files`?null:r,e.basePath)})}function an(e,t,n,r){!t||r===n||e.navigate(`agents`,{pathname:Oe(t,r,e.basePath)})}function on(){return(on=e((()=>{Ae(),M()})))()}async function sn(e,t){let n=e.client;if(!n||!e.connected||e.agentSkillsLoading)return;let r=e.requestGeneration,i=()=>e.client===n&&e.connected&&e.requestGeneration===r;e.agentSkillsLoading=!0,e.agentSkillsError=null;try{let r=await ye(n,t);r&&i()&&(e.agentSkillsReport=r,e.agentSkillsAgentId=t)}catch(t){i()&&(e.agentSkillsError=h(t))}finally{i()&&(e.agentSkillsLoading=!1)}}async function cn(e,t,n=()=>!0){let r=e.agentEntry(t);if(!r||!Array.isArray(r.entry.skills)||!n())return!1;let i=r.path[2];return typeof i==`string`&&e.patch({raw:{agents:{entries:{[i]:{skills:null}}}},note:`Reset agent skills to inherited defaults`,replacePaths:[`agents.entries.${i}.skills`],canDispatch:n})}function ln(){return(ln=e((()=>{b(),he()})))()}function un(e){let{agent:t,configForm:n,agentFilesList:r,configLoading:i,configSaving:o,configDirty:s,onConfigReload:c,onConfigSave:l,onModelChange:u,onModelFallbacksChange:d,onSelectPanel:f}=e,p=P(t,n,r,e.defaultId,e.agentIdentity),m=p.isDefault,h=k(n,t.id),g=t.model,_=re(h.defaults?.model??g),v=E(h.entry?.model),y=E(h.defaults?.model)||(_===`-`?null:pe(_))||(n?null:E(g)),b=v??y??null,x=m?b:v,S=se(h.entry?.model,h.defaults?.model)??(n?null:ie(g))??[],C=!e.canUpdateConfig||!n||i||o,w=t.thinkingDefault??`-`,T=e.identityDraft,D=T.name??e.agentIdentity?.name??t.identity?.name??t.name??``,ee=T.emoji??e.agentIdentity?.emoji??t.identity?.emoji??``,O=T.avatar??fe(t,e.agentIdentity),te=le(t,e.agentIdentity)??(de(D||t.id)||`?`),ne=T.name!==null||T.emoji!==null||T.avatar!==null,A=T.name!==null&&!T.name.trim()||T.emoji!==null&&!T.emoji.trim(),j=e.identitySaving||!e.canUpdateIdentity,M=t=>{let n=t.target,r=n.files?.[0];n.value=``,r&&e.onIdentityAvatarSelect(r)},oe=e=>{let n=S.filter((t,n)=>n!==e);d(t.id,n)},ce=e=>{let n=e.target;if(e.key===`Enter`||e.key===`,`){e.preventDefault();let r=a(n.value);r.length>0&&(d(t.id,[...S,...r]),n.value=``)}};return L`
${J({title:H(`agents.identity.title`),description:H(`agents.identity.subtitle`)},L`
<div class="settings-row settings-row--stacked">
<div class="agent-identity-editor">
<span class="agent-identity-editor__avatar" aria-hidden="true">
${O?L`<img src=${O} alt="" decoding="async" />`:L`<span class="agent-identity-editor__avatar-text"
>${te}</span
>`}
</span>
<div class="agent-identity-editor__fields">
<label class="field">
<span>${H(`agents.identity.name`)}</span>
<input
type="text"
maxlength="64"
.value=${D}
placeholder=${H(`agents.identity.namePlaceholder`)}
?disabled=${j}
@input=${t=>e.onIdentityFieldChange(`name`,t.target.value)}
/>
</label>
<label class="field agent-identity-editor__emoji">
<span>${H(`agents.identity.emoji`)}</span>
<input
type="text"
maxlength="8"
.value=${ee}
placeholder="🦞"
?disabled=${j}
@input=${t=>e.onIdentityFieldChange(`emoji`,t.target.value)}
/>
</label>
</div>
</div>
${e.identityError?L`<div class="settings-row__desc" role="alert" style="color: var(--danger);">
${e.identityError}
</div>`:z}
<div class="agent-identity-editor__actions">
<label class="btn btn--sm">
${H(O?`agents.identity.replaceImage`:`agents.identity.chooseImage`)}
<input
type="file"
accept="image/*"
hidden
?disabled=${j}
@change=${M}
/>
</label>
<button
type="button"
class="btn btn--sm primary"
?disabled=${j||!ne||A}
@click=${()=>e.onIdentitySave()}
>
${e.identitySaving?H(`common.saving`):H(`common.save`)}
</button>
</div>
<div class="settings-row__desc agent-identity-editor__hint">
${H(`agents.identity.fileHint`)}
</div>
</div>
`)}
${J({title:H(`agents.overview.title`),description:H(`agents.overview.subtitle`)},L`
<dl class="settings-kv">
<dt>${H(`agents.context.workspace`)}</dt>
<dd>
<openclaw-tooltip .content=${H(`agents.context.openFilesTab`)}>
<button
type="button"
class="workspace-link mono"
@click=${()=>f(`files`)}
aria-label=${H(`agents.context.openFilesTab`)}
>
${p.workspace}
</button>
</openclaw-tooltip>
</dd>
<dt>${H(`agents.context.primaryModel`)}</dt>
<dd><code>${p.model}</code></dd>
<dt>${H(`agents.context.runtime`)}</dt>
<dd><code>${p.runtime}</code></dd>
<dt>${H(`agents.context.thinkingDefault`)}</dt>
<dd><code>${w}</code></dd>
<dt>${H(`agents.context.skillsFilter`)}</dt>
<dd>${p.skillsLabel}</dd>
</dl>
`)}
${s?L`<div class="callout warn">${H(`agents.overview.unsavedConfig`)}</div>`:z}
${J({title:H(`agents.overview.modelSelection`),actions:L`
<button
type="button"
class="btn btn--sm"
?disabled=${i}
@click=${c}
>
${H(`common.reloadConfig`)}
</button>
<button
type="button"
class="btn btn--sm primary"
?disabled=${!e.canUpdateConfig||o||!s}
@click=${l}
>
${H(o?`common.saving`:`common.save`)}
</button>
`},L`
${qe({status:{error:e.modelCatalogError,hasLoaded:e.modelCatalog.length>0,stale:!!(e.modelCatalogError&&e.modelCatalog.length>0)},onRetry:e.onModelCatalogRetry})}
${G({title:H(m?`agents.overview.primaryModelDefault`:`agents.overview.primaryModel`),control:vt({label:H(m?`agents.overview.primaryModelDefault`:`agents.overview.primaryModel`),value:x??``,options:[{value:``,label:m?H(`agents.overview.notSet`):y?H(`agents.overview.inheritDefaultModel`,{model:y}):H(`agents.overview.inheritDefault`)},...ae(n,b??void 0,e.modelCatalog,t.id)],disabled:C,onChange:e=>u(t.id,e||null),onOpen:e.onModelCatalogRetry})})}
${G({title:H(`agents.overview.fallbacks`),stacked:!0,control:L`
<div
class="agent-chip-input"
@click=${e=>{let t=e.currentTarget.querySelector(`input`);t&&t.focus()}}
>
${S.map((e,t)=>L`
<span class="chip">
${e}
<button
type="button"
class="chip-remove"
?disabled=${C}
@click=${()=>oe(t)}
>
×
</button>
</span>
`)}
<input
?disabled=${C}
placeholder=${S.length===0?`provider/model`:``}
@keydown=${ce}
@blur=${e=>{let n=e.target,r=a(n.value);r.length>0&&(d(t.id,[...S,...r]),n.value=``)}}
/>
</div>
`})}
`)}
`}function dn(e,t,n){return J({title:H(`agents.context.title`),description:t},L`
<dl class="settings-kv">
<dt>${H(`agents.context.workspace`)}</dt>
<dd>
<button type="button" class="workspace-link mono" @click=${()=>n(`files`)}>
${e.workspace}
</button>
</dd>
<dt>${H(`agents.context.primaryModel`)}</dt>
<dd><code>${e.model}</code></dd>
<dt>${H(`agents.context.runtime`)}</dt>
<dd><code>${e.runtime}</code></dd>
<dt>${H(`agents.context.identityName`)}</dt>
<dd>${e.identityName}</dd>
<dt>${H(`agents.context.identityAvatar`)}</dt>
<dd>${e.identityAvatar}</dd>
<dt>${H(`agents.context.skillsFilter`)}</dt>
<dd>${e.skillsLabel}</dd>
<dt>${H(`agents.context.default`)}</dt>
<dd>${e.isDefault?H(`common.yes`):H(`common.no`)}</dd>
</dl>
`)}function fn(){return(fn=e((()=>{t(),I(),yt(),Ve(),K(),Ie(),V(),N(),te()})))()}function pn(e,t){if(!(e instanceof HTMLElement))return;let n=H(t?`agents.files.collapsePreview`:`agents.files.expandPreview`);e.classList.toggle(`is-fullscreen`,t),e.setAttribute(`aria-pressed`,String(t)),e.setAttribute(`aria-label`,n),e.setAttribute(`title`,n)}function mn(e){e.querySelector(`.md-preview-dialog__panel`)?.classList.remove(`fullscreen`),pn(e.querySelector(`.md-preview-expand-btn`),!1),e.classList.remove(`fullscreen`)}function hn(){return(hn=e((()=>{V()})))()}function gn(e){let t=e.trim();return t?t.split(/\s+/).length:0}function _n(e){return e.length===0?0:e.split(/\r?\n/).length}function vn(e){return e<=0?H(`agents.files.emptyDraft`):H(`agents.files.minRead`,{count:String(Math.max(1,Math.round(e/220)))})}function yn(e){let t=e.split(`.`).pop()?.trim().toLowerCase();return t===`md`||t===`markdown`?H(`agents.files.markdownPreview`):t?H(`agents.files.extensionPreview`,{ext:t.toUpperCase()}):H(`agents.files.preview`)}function bn(e,t){let n=e.trim(),r=t?.trim();if(!n)return``;if(r&&n===r)return`.`;if(r&&n.startsWith(`${r}/`))return n.slice(r.length+1)||`.`;let i=n.split(/[\\/]+/);for(let e=i.length-1;e>=0;--e){let t=i[e];if(t)return t}return n}function xn(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)||`preview`}function Sn(e,t){let n=e.channelMeta?.find(e=>e.id===t);return n?.label?n.label:e.channelLabels?.[t]??t}function Cn(e){if(!e)return[];let t=new Set;for(let n of e.channelOrder??[])t.add(n);for(let n of e.channelMeta??[])t.add(n.id);for(let n of Object.keys(e.channelAccounts??{}))t.add(n);let n=[],r=e.channelOrder?.length?e.channelOrder:Array.from(t);for(let e of r)t.has(e)&&(n.push(e),t.delete(e));for(let e of t)n.push(e);return n.map(t=>({id:t,label:Sn(e,t),accounts:e.channelAccounts?.[t]??[]}))}function wn(e){let t=0,n=0,r=0;for(let i of e){let e=i.probe&&typeof i.probe==`object`&&`ok`in i.probe?!!i.probe.ok:!1,a=typeof i.connected==`boolean`||typeof i.running==`boolean`;(i.connected===!0||i.running===!0||!a&&e)&&(t+=1),i.configured&&(n+=1),i.enabled&&(r+=1)}return{total:e.length,connected:t,configured:n,enabled:r}}function Tn(e){let t=Cn(e.snapshot),n=e.lastSuccess?_e(e.lastSuccess):H(`common.never`);return L`
${dn(e.context,H(`agents.context.configurationSubtitle`),e.onSelectPanel)}
${e.error?L`<div class="callout danger">${e.error}</div>`:z}
${e.snapshot?z:L`<div class="callout info">${H(`agents.channels.loadHint`)}</div>`}
${J({title:H(`agents.channels.title`),description:L`${H(`agents.channels.subtitle`)}
${H(`agents.channels.lastRefresh`,{time:n})}`,actions:L`
<button class="btn btn--sm" ?disabled=${e.loading} @click=${e.onRefresh}>
${e.loading?H(`common.refreshing`):H(`common.refresh`)}
</button>
`},t.length===0?q(H(`agents.channels.empty`)):t.map(t=>{let n=wn(t.accounts),r=n.total?H(`agents.channels.connectedCount`,{connected:String(n.connected),total:String(n.total)}):H(`agents.channels.noAccounts`),i=n.configured?H(`agents.channels.configuredCount`,{count:String(n.configured)}):H(`agents.channels.notConfigured`),a=n.total?H(`agents.channels.enabledCount`,{count:String(n.enabled)}):H(`common.disabled`),o=be({configForm:e.configForm,channelId:t.id,fields:On}),s=[t.id,i,a,...o.map(e=>`${e.label}: ${e.value}`)];return G({title:t.label,description:s.join(` · `),control:L`
${n.configured===0?L`
<a
class="settings-row__value"
href="https://docs.openclaw.ai/channels"
target="_blank"
rel="noopener"
>${H(`agents.channels.setupGuide`)}</a
>
`:z}
${Qe({kind:n.connected>0?`ok`:n.total?`warn`:`muted`,label:r})}
`})}))}
`}function En(e){return L`
${dn(e.context,H(`agents.context.schedulingSubtitle`),e.onSelectPanel)}
${e.error?L`<div class="callout danger">${e.error}</div>`:z}
${J({title:H(`agents.cronPanel.schedulerTitle`),description:H(`agents.cronPanel.schedulerSubtitle`),actions:L`
<button class="btn btn--sm" ?disabled=${e.loading} @click=${e.onRefresh}>
${e.loading?H(`common.refreshing`):H(`common.refresh`)}
</button>
`},L`
${G({title:H(`common.enabled`),control:et(e.status?e.status.enabled?H(`common.yes`):H(`common.no`):H(`common.na`))})}
${G({title:H(`agents.cronPanel.jobs`),control:et(e.scopedTotal??H(`common.na`))})}
${G({title:H(`agents.cronPanel.nextWake`),control:et(St(e.status?.enabled===!1?null:e.scopedNextWakeAtMs))})}
`)}
${J({title:H(`agents.cronPanel.agentJobsTitle`),description:H(`agents.cronPanel.agentJobsSubtitle`)},e.jobs.length===0?q(H(`agents.cronPanel.noJobs`)):L`
${e.jobs.map(t=>{let n=[t.description,Ct(t),t.sessionTarget,wt(t),Et(t)].filter(Boolean);return G({title:t.name,description:n.join(` · `),control:L`
${Qe({kind:t.enabled?`ok`:`warn`,label:t.enabled?H(`common.enabled`):H(`common.disabled`)})}
<button
class="btn btn--sm"
?disabled=${!e.canRunNow||!t.enabled}
@click=${()=>e.onRunNow(t.id)}
>
${H(`agents.cronPanel.runNow`)}
</button>
`})})}
${bt({jobsShown:e.jobs.length,jobsTotal:e.jobsTotal,hasMore:e.jobsHasMore,loading:e.loading,loadingMore:e.jobsLoadingMore,onLoadMore:e.onLoadMore})}
`)}
`}function Dn(e){let t=e.agentFilesList?.agentId===e.agentId?e.agentFilesList:null,n=t?.files??[],r=e.agentFileActive??null,i=e=>e.missing&&e.expectedAbsent===!0&&e.name!==r,a=n.filter(e=>!i(e)),o=n.filter(i),s=r?n.find(e=>e.name===r)??null:null,c=r?e.agentFileContents[r]??``:``,l=r?e.agentFileDrafts[r]??c:``,u=r?l!==c:!1,d=s?We(l,{codeBlockChrome:`none`,mode:`document`}):``,f=D(new TextEncoder().encode(l).length),p=gn(l),m=_n(l),h=s?bn(s.path,t?.workspace):``,g=s?`agent-file-preview-title-${xn(s.name)}`:``,_=s?.missing?H(`agents.files.willCreateOnSave`):H(u?`agents.files.liveDraftPreview`:`agents.files.savedPreview`),v=s?.missing?`is-missing`:u?`is-dirty`:`is-synced`,y=s?.updatedAtMs?H(`agents.files.updated`,{time:_e(s.updatedAtMs)}):s?.missing?H(`agents.files.notCreatedYet`):H(`agents.files.updatedUnknown`);return L`
${e.agentFilesError?L`<div class="callout danger">${e.agentFilesError}</div>`:z}
${J({title:H(`agents.files.coreFilesTitle`),description:t?L`${H(`agents.files.coreFilesSubtitle`)} ${H(`agents.files.workspace`)}:
<code>${t.workspace}</code>`:H(`agents.files.coreFilesSubtitle`),actions:L`
<button
class="btn btn--sm"
?disabled=${e.agentFilesLoading}
@click=${()=>e.onLoadFiles(e.agentId)}
>
${e.agentFilesLoading?H(`common.loading`):H(`common.refresh`)}
</button>
`},t?n.length===0?q(H(`agents.files.empty`)):L`
<div class="agents-panel-body">
<div class="agent-file-tabs">
${ot({id:`agent-files`,active:r,tabs:a.map(t=>({value:t.name,label:t.name.replace(/\.md$/i,``),badge:t.missing&&t.expectedAbsent!==!0?H(`agents.files.missing`):void 0,disabled:e.agentFilesLoading})),ariaLabel:H(`agents.files.coreFilesTitle`),panelId:`agent-file-panel`,variant:`sub`,onSelect:e.onSelectFile})}
${o.length===0?z:L`
<select
class="agent-tab-add"
aria-label=${H(`agents.files.addFile`)}
.value=${``}
?disabled=${e.agentFilesLoading}
@change=${t=>{let n=t.target,r=n.value;n.value=``,r&&e.onSelectFile(r)}}
>
<option value="">${H(`agents.files.addFile`)}</option>
${o.map(e=>L`<option value=${e.name}>
${e.name.replace(/\.md$/i,``)}
</option>`)}
</select>
`}
</div>
<div
id="agent-file-panel"
role="tabpanel"
aria-labelledby=${r?`agent-files-tab-${r}`:z}
>
${s?L`
<div class="agent-file-header">
<div>
<div class="agent-file-sub mono">${s.path}</div>
</div>
<div class="agent-file-actions">
<button
class="btn btn--sm"
@click=${e=>{e.currentTarget.closest(`.settings-group`)?.querySelector(`openclaw-modal-dialog`)?.show()}}
>
${B.eye} ${H(`agents.files.preview`)}
</button>
<button
class="btn btn--sm"
?disabled=${!e.canWrite||!u}
@click=${()=>e.onFileReset(s.name)}
>
${H(`common.reset`)}
</button>
<button
class="btn btn--sm primary"
?disabled=${!e.canWrite||e.agentFileSaving||!u}
@click=${()=>e.onFileSave(s.name)}
>
${e.agentFileSaving?H(`common.saving`):H(`common.save`)}
</button>
</div>
</div>
${s.missing?L`<div class="callout info">
${s.expectedAbsent===!0?H(`agents.files.createHint`):H(`agents.files.missingHint`)}
</div>`:z}
<label class="field agent-file-field">
<span>${H(`agents.files.content`)}</span>
<textarea
class="agent-file-textarea"
?disabled=${!e.canWrite}
.value=${l}
@input=${t=>e.onFileDraftChange(s.name,t.target.value)}
></textarea>
</label>
<openclaw-modal-dialog
manual
label=${s.name}
style="--openclaw-modal-width: min(1040px, calc(100vw - 32px));"
@modal-cancel=${e=>{mn(e.currentTarget)}}
>
<div class="md-preview-dialog__panel">
<div class="md-preview-dialog__header">
<div class="md-preview-dialog__header-main">
<div class="md-preview-dialog__eyebrow">
${B.scrollText}
<span>${yn(s.name)}</span>
</div>
<div class="md-preview-dialog__title-wrap">
<div
id=${g}
class="md-preview-dialog__title"
translate="no"
>
${s.name}
</div>
<div class="md-preview-dialog__path mono" translate="no">
${h}
</div>
</div>
</div>
<div class="md-preview-dialog__actions">
<openclaw-tooltip .content=${H(`agents.files.expandPreview`)}>
<button
type="button"
class="btn btn--sm md-preview-icon-btn md-preview-expand-btn"
aria-label=${H(`agents.files.expandPreview`)}
aria-pressed="false"
@click=${e=>{let t=e.currentTarget,n=t.closest(`.md-preview-dialog__panel`);if(!n)return;let r=n.classList.toggle(`fullscreen`);t.closest(`openclaw-modal-dialog`)?.classList.toggle(`fullscreen`,r),pn(t,r)}}
>
<span class="when-normal" aria-hidden="true"
>${B.maximize}</span
><span class="when-fullscreen" aria-hidden="true"
>${B.minimize}</span
>
</button>
</openclaw-tooltip>
<openclaw-tooltip .content=${H(`agents.files.editFile`)}>
<button
type="button"
class="btn btn--sm md-preview-icon-btn"
aria-label=${H(`agents.files.editFile`)}
@click=${e=>{let t=e.currentTarget.closest(`openclaw-modal-dialog`);t?.hide(),t&&mn(t),document.querySelector(`.agent-file-textarea`)?.focus()}}
>
<span aria-hidden="true">${B.edit}</span>
</button>
</openclaw-tooltip>
<openclaw-tooltip .content=${H(`agents.files.closePreview`)}>
<button
type="button"
class="btn btn--sm md-preview-icon-btn"
aria-label=${H(`agents.files.closePreview`)}
@click=${e=>{let t=e.currentTarget.closest(`openclaw-modal-dialog`);t?.hide(),t&&mn(t)}}
>
<span aria-hidden="true">${B.x}</span>
</button>
</openclaw-tooltip>
</div>
</div>
<div class="md-preview-dialog__meta">
<div class="md-preview-dialog__chip ${v}">
<strong>${_}</strong>
</div>
<div class="md-preview-dialog__chip">
<strong>${vn(p)}</strong>
<span
>${H(`agents.files.words`,{count:String(p)})}</span
>
</div>
<div class="md-preview-dialog__chip">
<strong>${m}</strong>
<span>${H(`agents.files.lines`)}</span>
</div>
<div class="md-preview-dialog__chip">
<strong>${f}</strong>
<span>${y}</span>
</div>
</div>
<div class="md-preview-dialog__body">
<article class="md-preview-dialog__reader sidebar-markdown">
${we(d)}
</article>
</div>
</div>
</openclaw-modal-dialog>
`:L`<div class="muted">${H(`agents.files.selectFile`)}</div>`}
</div>
</div>
`:q(H(`agents.files.loadHint`)))}
`}var On;function kn(){return(kn=e((()=>{I(),Ee(),xt(),st(),Fe(),Xe(),Le(),Ie(),K(),V(),N(),me(),j(),Tt(),hn(),fn(),On=[`groupPolicy`,`streamMode`,`dmPolicy`]})))()}var An,jn,Mn,Nn,Pn,Fn,In,Ln,Rn,zn,Bn,Vn,Hn,Un;function Wn(){return(Wn=e((()=>{An=`Run shell now.`,jn=`Inspect/control exec sessions.`,Mn=`Schedule reminders, automations, wake events.`,Nn=`List visible sessions; filters/previews.`,Pn=`Read sanitized session history.`,Fn=`Search past session transcripts.`,In=`Run same-Gateway session/agent.`,Ln=`Spawn hidden subagent (ephemeral) or visible work session (durable).`,Rn=`Wait for collector subagents.`,zn=`Show session status/model/usage.`,Bn=`Ask the user and wait for an answer.`,Vn=`Suggest follow-up work for operator approval.`,Hn=`Withdraw a pending task suggestion.`,Un=`Author reusable skills under the available tool's publication and review policy. Read one complete artifact when it fits the model budget.`})))()}var Gn;function Kn(){return(Kn=e((()=>{Gn=`automations`})))()}function qn(e){return X.filter(t=>t.profiles.includes(e)).map(e=>e.id)}function Jn(){let e=new Map;for(let t of X){let n=`group:${t.sectionId}`,r=e.get(n)??[];r.push(t.id),e.set(n,r)}return{"group:openclaw":X.filter(e=>e.includeInOpenClawGroup).map(e=>e.id),...Object.fromEntries(e.entries())}}function Yn(e){if(!e)return;let t=Zn[e];if(t&&!(!t.allow&&!t.deny))return{allow:t.allow?[...t.allow]:void 0,deny:t.deny?[...t.deny]:void 0}}var Xn,X,Zn,Qn;function $n(){return($n=e((()=>{Wn(),Kn(),Xn=[{id:`fs`,label:`Files`},{id:`runtime`,label:`Runtime`},{id:`web`,label:`Web`},{id:`memory`,label:`Memory`},{id:`sessions`,label:`Sessions`},{id:`ui`,label:`UI`},{id:`messaging`,label:`Messaging`},{id:`automation`,label:`Automation`},{id:`nodes`,label:`Nodes`},{id:`agents`,label:`Agents`},{id:`media`,label:`Media`}],X=[{id:`read`,description:`Read file contents`,sectionId:`fs`,profiles:[`coding`]},{id:`write`,description:`Create or overwrite files`,sectionId:`fs`,profiles:[`coding`]},{id:`edit`,description:`Make precise edits`,sectionId:`fs`,profiles:[`coding`]},{id:`apply_patch`,description:`Patch files`,sectionId:`fs`,profiles:[`coding`]},{id:`exec`,description:An,sectionId:`runtime`,profiles:[`coding`]},{id:`process`,description:jn,sectionId:`runtime`,profiles:[`coding`]},{id:`code_execution`,description:`Run sandboxed remote analysis`,sectionId:`runtime`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`secrets`,description:`Request and manage write-only credentials`,sectionId:`runtime`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`web_search`,description:`Search the web`,sectionId:`web`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`web_fetch`,description:`Fetch web content`,sectionId:`web`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`x_search`,description:`Search X posts`,sectionId:`web`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`memory_search`,description:`Semantic search`,sectionId:`memory`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`memory_get`,description:`Read memory files`,sectionId:`memory`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`sessions`,description:`Session settings: label, pin, archive, groups`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`sessions_list`,description:Nn,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`sessions_history`,description:Pn,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`sessions_search`,description:Fn,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`conversations_list`,description:`List exact external conversation addresses`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`conversations_send`,description:`Send to an exact external conversation`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`conversations_turn`,description:`Send and wait for a correlated external reply`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`sessions_send`,description:In,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`sessions_spawn`,description:Ln,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`github_identity_status`,description:`Inspect the effective GitHub identity and credential health`,sectionId:`sessions`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`github_publish`,description:`Publish the reconciled session worktree as a draft GitHub pull request`,sectionId:`sessions`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`agents_wait`,description:Rn,sectionId:`sessions`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`sessions_yield`,description:`End turn to receive sub-agent results`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`subagents`,description:`Background work: subagents, media gen, automation runs. list/cancel.`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`session_status`,description:zn,sectionId:`sessions`,profiles:[`minimal`,`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`suggest_task`,description:Vn,sectionId:`sessions`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`dismiss_task`,description:Hn,sectionId:`sessions`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`browser`,description:`Control web browser`,sectionId:`ui`,profiles:[],includeInOpenClawGroup:!0},{id:`screen`,description:`Drive operator web UI`,sectionId:`ui`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`dashboard`,description:`Read and arrange the session dashboard`,sectionId:`ui`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`terminal`,description:`Use shared operator terminals with policy-governed input`,sectionId:`ui`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`portal`,description:`Expose local web apps through the gateway`,sectionId:`ui`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`canvas`,description:`Control node Canvas surfaces when the Canvas plugin is enabled`,sectionId:`ui`,profiles:[]},{id:`show_widget`,description:`Show an interactive widget on chat or an auto-fitting dashboard`,sectionId:`ui`,profiles:[],includeInOpenClawGroup:!0},{id:`message`,description:`Send messages`,sectionId:`messaging`,profiles:[`messaging`],includeInOpenClawGroup:!0},{id:`heartbeat_respond`,description:`Accept heartbeat outcomes for post-turn handling`,sectionId:`automation`,profiles:[],includeInOpenClawGroup:!0},{id:Gn,description:Mn,sectionId:`automation`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`gateway`,description:`Read Gateway config/schema; owner-only OpenClaw self-update`,sectionId:`automation`,profiles:[],includeInOpenClawGroup:!0},{id:`nodes`,description:`Nodes + devices`,sectionId:`nodes`,profiles:[],includeInOpenClawGroup:!0},{id:`computer`,description:`Control a paired computer node desktop`,sectionId:`nodes`,profiles:[],includeInOpenClawGroup:!0},{id:`mobile_ui`,description:`Observe and control a paired Android app`,sectionId:`nodes`,profiles:[],includeInOpenClawGroup:!0},{id:`agents_list`,description:`List agents`,sectionId:`agents`,profiles:[],includeInOpenClawGroup:!0},{id:`get_goal`,description:`Get current thread goal`,sectionId:`agents`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`create_goal`,description:`Create a thread goal`,sectionId:`agents`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`update_goal`,description:`Complete or block a thread goal`,sectionId:`agents`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`progress_card`,description:`Maintain the session progress card`,sectionId:`agents`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`ask_user`,description:Bn,sectionId:`agents`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`skill_workshop`,description:Un,sectionId:`agents`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`view_image`,description:`Image understanding`,sectionId:`media`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`image_generate`,description:`Image generation`,sectionId:`media`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`music_generate`,description:`Music generation`,sectionId:`media`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`video_generate`,description:`Video generation`,sectionId:`media`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`tts`,description:`Text-to-speech conversion`,sectionId:`media`,profiles:[],includeInOpenClawGroup:!0}],new Map(X.map(e=>[e.id,e])),Xn.map(({id:e,label:t})=>({id:e,label:t,tools:X.filter(t=>t.sectionId===e)})),Zn={minimal:{allow:qn(`minimal`)},coding:{allow:[...qn(`coding`),`bundle-mcp`]},messaging:{allow:[...qn(`messaging`),`bundle-mcp`]},full:{allow:[`*`]}},Qn=Jn()})))()}function Z(e){let t=r(e);return rr.get(t)??t}function er(e){return e?e.map(Z).filter(Boolean):[]}function tr(e){let t=er(e),n=[];for(let e of t){let t=Object.hasOwn(ir,e)?ir[e]:void 0;if(t){n.push(...t);continue}n.push(e)}return o(n)}function nr(e){return Yn(e)}var rr,ir;function ar(){return(ar=e((()=>{t(),$n(),rr=new Map([[`bash`,`exec`],[`apply-patch`,`apply_patch`],[`cron`,`automations`]]),ir={...Qn}})))()}function or(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function sr(e){let t=e.normalize(e.raw);return t?t===`*`?{kind:`all`}:t.includes(`*`)?{kind:`regex`,value:RegExp(`^${or(t).replaceAll(`\\*`,`.*`)}$`)}:{kind:`exact`,value:t}:{kind:`exact`,value:``}}function cr(e){return Array.isArray(e.raw)?e.raw.map(t=>sr({raw:t,normalize:e.normalize})).filter(e=>e.kind!==`exact`||e.value):[]}function Q(e,t){for(let n of t)if(n.kind===`all`||n.kind===`exact`&&e===n.value||n.kind===`regex`&&n.value.test(e))return!0;return!1}function lr(e){return Array.isArray(e)?cr({raw:tr(e),normalize:Z}):[]}function ur(e,t){if(!t)return!0;let n=Z(e);if(Q(n,lr(t.deny)))return!1;let r=lr(t.allow);return!!(r.length===0||Q(n,r)||n===`apply_patch`&&Q(`exec`,r))}function dr(e,t){if(!Array.isArray(t)||t.length===0)return!1;let n=Z(e),r=lr(t);return!!(Q(n,r)||n===`apply_patch`&&Q(`exec`,r))}function fr(){return(fr=e((()=>{ar()})))()}function pr(e){return e.length===0?z:L`
<div class="agent-tool-badges">
${e.map(e=>L`<span class="settings-row__value">${e}</span>`)}
</div>
`}function mr(e,t){let n=t.source??e.source,r=t.pluginId??e.pluginId,i=[];return n===`plugin`&&r?i.push(H(`agentTools.plugin`,{id:r})):n===`core`&&i.push(H(`agentTools.builtIn`)),t.optional&&i.push(H(`agentTools.optional`)),i}function hr(e){let t=mr(e.section,e.tool);return e.activeEntry&&t.unshift(H(`agentTools.liveNow`)),t}function gr(e){return e.denied?H(`agentTools.disabledByOverride`):e.allowed&&e.baseAllowed?H(`agentTools.enabledByProfile`):e.allowed?H(`agentTools.enabledByOverride`):H(`agentTools.notIncluded`)}function _r(e,t){let n=t.source??e.source,r=t.pluginId??e.pluginId;return n===`plugin`&&r?H(`agentTools.plugin`,{id:r}):H(`agentTools.builtIn`)}function vr(e){return e.denied?H(`agentTools.overrideOff`):e.allowed&&e.baseAllowed?H(`agentTools.enabled`):e.allowed?H(`agentTools.overrideOn`):H(`agentTools.profileOff`)}function yr(e){return e.activeEntry?H(`agentTools.liveNow`):e.runtimeSessionMatchesSelectedAgent?H(`agentTools.notLive`):H(`agentTools.otherAgent`)}function br(e){return`agent-tool-${Z(e).replace(/[^a-z0-9_-]+/g,`-`)}`}function xr(e){return(e??[]).flatMap(e=>e.tools)}function Sr(e){let t=e.currentTarget;if(!(!(t instanceof HTMLDetailsElement)||t.open))for(let e of t.querySelectorAll(`.agent-tool-card[open]`))e.open=!1}function Cr(e,t){let n=document.getElementById(t);if(!(n instanceof HTMLDetailsElement))return;e.preventDefault();let r=n.closest(`.agent-tools-group`);r&&(r.open=!0),n.open=!0;let i=new URL(window.location.href);i.hash=t,window.history.replaceState(null,``,i),requestAnimationFrame(()=>{n.scrollIntoView?.({block:`center`,behavior:it()}),n.querySelector(`summary`)?.focus()})}function wr(e){let t=e?.notices??[];return t.length===0?z:L`
<div class="agent-tools-notices">
${t.map(e=>L`
<div
class="callout ${e.severity===`warning`?`warning`:`info`}"
style="margin-top: 12px"
>
${p(e.message)}
</div>
`)}
</div>
`}function Tr(e){return e.source===`plugin`?e.pluginId?H(`agentTools.connectedSource`,{id:e.pluginId}):H(`agentTools.connected`):e.source===`channel`?e.channelId?H(`agentTools.channelSource`,{id:e.channelId}):H(`agentTools.channel`):e.source===`mcp`?`MCP`:H(`agentTools.builtIn`)}function Er(e){let t=k(e.configForm,e.agentId),n=t.entry?.tools??{},r=t.globalTools??{},i=n.profile??r.profile??`full`,a=_t(e.toolsCatalogResult),o=ht(e.toolsCatalogResult),s=n.profile?H(`agentTools.profileSourceAgent`):r.profile?H(`agentTools.profileSourceGlobal`):H(`agentTools.profileSourceDefault`),c=Array.isArray(n.allow)&&n.allow.length>0,l=Array.isArray(r.allow)&&r.allow.length>0,u=e.canUpdateConfig&&!!e.configForm&&!e.configLoading&&!e.configSaving&&!c&&!(e.toolsCatalogLoading&&!e.toolsCatalogResult&&!e.toolsCatalogError),d=c?[]:Array.isArray(n.alsoAllow)?n.alsoAllow:[],f=c?[]:Array.isArray(n.deny)?n.deny:[],p=c?{allow:n.allow??[],deny:n.deny??[]}:nr(i),m=o.flatMap(e=>e.tools.map(e=>e.id)),h=e=>{let t=ur(e,p),n=dr(e,d),r=dr(e,f);return{allowed:(t||n)&&!r,baseAllowed:t,denied:r}},g=m.filter(e=>h(e).allowed).length,_=e.runtimeSessionMatchesSelectedAgent&&!e.toolsEffectiveError?xr(e.toolsEffectiveResult?.groups):[],v=Array.from(new Map(_.map(e=>[Z(e.id),e])).values()),y=v.slice(0,Ar),b=Math.max(0,v.length-y.length),x=v.length,S=new Map(_.map(e=>[Z(e.id),e])),C=new Set(S.keys()),w=e=>e.toSorted((e,t)=>{let n=Z(e.id),r=Z(t.id),i=+!!C.has(n),a=+!!C.has(r);if(i!==a)return a-i;let o=+!!h(e.id).allowed,s=+!!h(t.id).allowed;return o===s?e.label.localeCompare(t.label):s-o}),T=(t,n)=>{let r=new Set(d.map(e=>Z(e)).filter(e=>e.length>0)),i=new Set(f.map(e=>Z(e)).filter(e=>e.length>0)),a=h(t).baseAllowed,o=Z(t);n?(i.delete(o),a||r.add(o)):(r.delete(o),i.add(o)),e.onOverridesChange(e.agentId,[...r],[...i])},E=t=>{let n=new Set(d.map(e=>Z(e)).filter(e=>e.length>0)),r=new Set(f.map(e=>Z(e)).filter(e=>e.length>0));for(let e of m){let i=h(e).baseAllowed,a=Z(e);t?(r.delete(a),i||n.add(a)):(n.delete(a),r.add(a))}e.onOverridesChange(e.agentId,[...n],[...r])},D=e.runtimeSessionMatchesSelectedAgent?e.toolsEffectiveLoading&&!e.toolsEffectiveResult&&!e.toolsEffectiveError?$e({label:H(`agentTools.loadingAvailable`),rows:2}):e.toolsEffectiveError?q(H(`agentTools.availableError`)):(e.toolsEffectiveResult?.groups?.length??0)===0?q(H(`agentTools.noAvailable`)):L`
<div class="agents-panel-body">
<div class="agent-tools-runtime">
${y.map(e=>{let t=br(e.id);return L`
<a
class="agent-tools-runtime-chip"
href="#${t}"
@click=${e=>Cr(e,t)}
>
<span class="mono" translate="no">${e.label}</span>
<span class="agent-tools-runtime-chip__meta"
>${Tr(e)}</span
>
</a>
`})}
${b>0?L`
<span
class="agent-tools-runtime-chip agent-tools-runtime-chip--more"
title=${H(`agentTools.moreLiveTitle`,{count:String(b)})}
>
${H(`agentTools.moreLive`,{count:String(b)})}
</span>
`:z}
</div>
</div>
`:q(H(`agentTools.switchAgent`));return L`
${e.configForm?z:L`<div class="callout info">${H(`agentTools.loadConfig`)}</div>`}
${c?L`<div class="callout info">${H(`agentTools.explicitAllowlist`)}</div>`:z}
${l?L`<div class="callout info">${H(`agentTools.globalAllowlist`)}</div>`:z}
${e.toolsCatalogError?L`<div class="callout info">${H(`agentTools.catalogFallback`)}</div>`:z}
${J({title:H(`agentTools.title`),description:L`${H(`agentTools.subtitle`)}
<span class="mono"
>${H(`agentTools.enabledSummary`,{enabled:String(g),total:String(m.length)})}</span
>`,actions:L`
<button class="btn btn--sm" ?disabled=${!u} @click=${()=>E(!0)}>
${H(`agentTools.enableAll`)}
</button>
<button class="btn btn--sm" ?disabled=${!u} @click=${()=>E(!1)}>
${H(`agentTools.disableAll`)}
</button>
<button
class="btn btn--sm"
?disabled=${e.configLoading}
@click=${e.onConfigReload}
>
${H(`common.reloadConfig`)}
</button>
<button
class="btn btn--sm primary"
?disabled=${!e.canUpdateConfig||e.configSaving||!e.configDirty}
@click=${e.onConfigSave}
>
${e.configSaving?H(`common.saving`):H(`common.save`)}
</button>
`},L`
<dl class="settings-kv">
<dt>${H(`agentTools.profile`)}</dt>
<dd><code>${i}</code></dd>
<dt>${H(`agentTools.source`)}</dt>
<dd>${s}</dd>
<dt>${H(`agentTools.enabled`)}</dt>
<dd><code>${g}/${m.length}</code></dd>
<dt>${H(`agentTools.live`)}</dt>
<dd><code>${x}</code></dd>
<dt>${H(`agentTools.status`)}</dt>
<dd>
${e.configSaving?H(`agentTools.statusSaving`):e.configDirty?H(`agentTools.statusUnsaved`):H(`agentTools.statusSaved`)}
</dd>
</dl>
${G({title:H(`agentTools.quickPresets`),stacked:!0,control:L`
<div class="agent-tools-buttons">
${a.map(t=>L`
<button
class="btn btn--sm ${i===t.id?`active`:``}"
?disabled=${!u}
@click=${()=>e.onProfileChange(e.agentId,t.id,!0)}
>
${t.label}
</button>
`)}
<button
class="btn btn--sm"
?disabled=${!u}
@click=${()=>e.onProfileChange(e.agentId,null,!1)}
>
${H(`agentTools.inherit`)}
</button>
</div>
`})}
`)}
${J({title:H(`agentTools.availableNow`),description:L`${H(`agentTools.availableNowSubtitle`)}
<span class="mono">${e.runtimeSessionKey||H(`agentTools.noSession`)}</span>`},L`${wr(e.toolsEffectiveResult)}${D}`)}
${dt(e.githubIdentity,e.onOpenGitHubConnections)}
${J({title:H(`agentTools.catalogTitle`)},L`
${e.toolsCatalogLoading&&!e.toolsCatalogResult&&!e.toolsCatalogError?$e({label:H(`agentTools.loadingCatalog`)}):z}
<div
class="agents-panel-body agent-tools-grid"
?hidden=${e.toolsCatalogLoading&&!e.toolsCatalogResult&&!e.toolsCatalogError}
>
${o.map(t=>{let n=w(t.tools),r=t.tools.filter(e=>h(e.id).allowed).length,i=t.tools.filter(e=>C.has(Z(e.id))).length,a=n.slice(0,4),o=Math.max(0,n.length-a.length);return L`
<details class="agent-tools-group" @toggle=${Sr}>
<summary class="agent-tools-group__summary">
<span class="agent-tools-group__summary-main">
<span class="agent-tools-group__title">
${t.label}
${t.source===`plugin`&&t.pluginId?L`<span class="settings-row__value"
>${H(`agentTools.plugin`,{id:t.pluginId})}</span
>`:z}
</span>
<span
class="agent-tools-group__preview"
aria-label=${H(`agentTools.toolPreview`)}
>
${a.map(e=>L`<span class="mono" translate="no" title=${e.label}
>${e.label}</span
>`)}
${o>0?L`<span
>${H(`agentTools.more`,{count:String(o)})}</span
>`:z}
</span>
</span>
<span class="agent-tools-group__counts">
<span
>${H(t.tools.length===1?`agentTools.toolsOne`:`agentTools.tools`,{count:String(t.tools.length)})}</span
>
<span
>${H(r===1?`agentTools.enabledToolsOne`:`agentTools.enabledTools`,{count:String(r)})}</span
>
${i>0?L`<span
>${H(i===1?`agentTools.liveToolsOne`:`agentTools.liveTools`,{count:String(i)})}</span
>`:z}
</span>
</summary>
<div class="agent-tools-list agent-tools-list--stacked">
${n.map(n=>{let r=br(n.id),i=h(n.id),a=S.get(Z(n.id))??null,o=n.defaultProfiles??[],s=hr({section:t,tool:n,activeEntry:a}),c=vr(i),l=yr({activeEntry:a,runtimeSessionMatchesSelectedAgent:e.runtimeSessionMatchesSelectedAgent});return L`
<details class="agent-tool-card" id=${r}>
<summary class="agent-tool-summary">
<div class="agent-tool-summary__main">
<div class="agent-tool-summary__title-row">
<span class="agent-tool-title mono" translate="no"
>${n.label}</span
>
</div>
<div class="agent-tool-sub">${n.description}</div>
</div>
<dl class="agent-tool-summary__facts">
<div class="agent-tool-summary__fact">
<dt class="label">${H(`agentTools.access`)}</dt>
<dd>${c}</dd>
</div>
<div class="agent-tool-summary__fact">
<dt class="label">${H(`agentTools.session`)}</dt>
<dd>${l}</dd>
</div>
</dl>
<div class="agent-tool-summary__badges">
${pr(s)}
</div>
<span
class="agent-tool-toggle"
@click=${e=>e.stopPropagation()}
@keydown=${e=>e.stopPropagation()}
>
${Ze({checked:i.allowed,disabled:!u,ariaLabel:H(i.allowed?`agentTools.disableNamed`:`agentTools.enableNamed`,{name:n.label}),onChange:e=>T(n.id,e)})}
</span>
</summary>
<div class="agent-tool-details">
<div class="agent-tool-details-strip">
<div class="agent-tool-detail agent-tool-detail--inline">
<div class="label">${H(`agentTools.access`)}</div>
<div>${gr(i)}</div>
</div>
<div class="agent-tool-detail agent-tool-detail--inline">
<div class="label">${H(`agentTools.source`)}</div>
<div>${_r(t,n)}</div>
</div>
${o.length>0?L`
<div class="agent-tool-detail agent-tool-detail--inline">
<div class="label">${H(`agentTools.defaultPresets`)}</div>
<div class="agent-tool-badges">
${o.map(e=>L`<span class="settings-row__value"
>${e}</span
>`)}
</div>
</div>
`:z}
<div class="agent-tool-detail agent-tool-detail--inline">
<div class="label">${H(`agentTools.session`)}</div>
<div>
${a?H(`agentTools.availableVia`,{source:Tr(a)}):e.runtimeSessionMatchesSelectedAgent?H(`agentTools.unavailableSession`):H(`agentTools.inspectAgent`)}
</div>
</div>
<a class="agent-tool-jump" href="#${r}">
${H(`agentTools.linkTool`)}
</a>
</div>
</div>
</details>
`})}
</div>
</details>
`})}
</div>
`)}
`}function Dr(e){let t=e.canUpdateConfig&&!!e.configForm&&!e.configLoading&&!e.configSaving,i=k(e.configForm,e.agentId),a=Array.isArray(i.entry?.skills)?n(i.entry.skills):void 0,o=A(e.configForm,e.agentId),s=new Set(o??[]),c=o!==void 0,l=a===void 0&&c,u=e.canPatchConfig&&a!==void 0&&!!e.configForm&&!e.configLoading&&!e.configSaving,d=!!(e.report&&e.activeAgentId===e.agentId),f=d?e.report?.skills??[]:[],p=r(e.filter),m=p?f.filter(e=>r([e.name,e.description,e.source].join(` `)).includes(p)):f,h=kt(m),g=c?f.filter(e=>s.has(e.name)).length:f.length,_=f.length;return L`
${e.configForm?z:L`<div class="callout info">${H(`agents.skillsPanel.loadConfig`)}</div>`}
${c?L`<div class="callout info">
${H(l?`agents.skillsPanel.inheritedAllowlist`:`agents.skillsPanel.customAllowlist`)}
</div>`:L`<div class="callout info">${H(`agents.skillsPanel.allEnabled`)}</div>`}
${!d&&!e.loading?L`<div class="callout info">${H(`agents.skillsPanel.loadAgent`)}</div>`:z}
${e.error?L`<div class="callout danger">${e.error}</div>`:z}
${J({title:H(`agents.skillsPanel.title`),description:L`${H(`agents.skillsPanel.subtitle`)}
${_>0?L`<span class="mono">${g}/${_}</span>`:z}`,actions:L`
<button
class="btn btn--sm"
?disabled=${!t}
@click=${()=>e.onDisableAll(e.agentId)}
>
${H(`agentTools.disableAll`)}
</button>
<button
class="btn btn--sm"
?disabled=${!u}
@click=${()=>e.onClear(e.agentId)}
>
${H(`common.reset`)}
</button>
<button
class="btn btn--sm"
?disabled=${e.configLoading}
@click=${e.onConfigReload}
>
${H(`common.reloadConfig`)}
</button>
<button class="btn btn--sm" ?disabled=${e.loading} @click=${e.onRefresh}>
${e.loading?H(`common.loading`):H(`common.refresh`)}
</button>
<button
class="btn btn--sm primary"
?disabled=${!e.canUpdateConfig||e.configSaving||!e.configDirty}
@click=${e.onConfigSave}
>
${e.configSaving?H(`common.saving`):H(`common.save`)}
</button>
`},L`
${G({title:H(`agents.skillsPanel.filter`),description:H(`agents.skillsPanel.shown`,{count:String(m.length)}),control:L`
<input
class="settings-input"
.value=${e.filter}
@input=${t=>e.onFilterChange(t.target.value)}
placeholder=${H(`agents.skillsPanel.searchPlaceholder`)}
autocomplete="off"
name="agent-skills-filter"
/>
`})}
${m.length===0?q(H(`agents.skillsPanel.empty`)):L`
<div class="agents-panel-body agent-skills-groups">
${h.map(n=>Or(n,{agentId:e.agentId,allowSet:s,usingAllowlist:c,editable:t,filterActive:!!p,onToggle:e.onToggle}))}
</div>
`}
`)}
`}function Or(e,t){let n=!t.filterActive&&(e.id===`workspace`||e.id===`built-in`);return L`
<details class="agent-skills-group" ?open=${!n}>
<summary class="agent-skills-header">
<span>${e.label}</span>
<span class="muted">${e.skills.length}</span>
</summary>
<div class="list skills-grid">
${e.skills.map(e=>kr(e,{agentId:t.agentId,allowSet:t.allowSet,usingAllowlist:t.usingAllowlist,editable:t.editable,onToggle:t.onToggle}))}
</div>
</details>
`}function kr(e,t){let n=!t.usingAllowlist||t.allowSet.has(e.name),r=Mt(e),i=Ot(e);return L`
<div class="settings-row agent-skill-row">
<div class="settings-row__text">
<span class="settings-row__title"
>${e.emoji?`${e.emoji} `:``}${e.name}</span
>
<span class="settings-row__desc">${e.description}</span>
${Dt({skill:e})}
${r.length>0?L`<span class="settings-row__desc">
${H(`agents.skillsPanel.missing`,{items:r.join(`, `)})}
</span>`:z}
${i.length>0?L`<span class="settings-row__desc">
${H(`agents.skillsPanel.reason`,{items:i.join(`, `)})}
</span>`:z}
</div>
<div class="settings-row__control">
${Ze({checked:n,disabled:!t.editable,ariaLabel:e.name,onChange:n=>t.onToggle(t.agentId,e.name,n)})}
</div>
</div>
`}var Ar;function jr(){return(jr=e((()=>{t(),I(),ar(),K(),pt(),V(),N(),gt(),b(),jt(),At(),fr(),Ar=12})))()}function Mr(e){let t=new Map(e.map(e=>[e.id,e])),n=new Map,r=[];for(let i of e){let e=i.creatorAgentId;if(e&&e!==i.id&&t.has(e)){let t=n.get(e)??[];t.push(i),n.set(e,t)}else r.push(i)}let i=[],a=new Set,o=(e,t)=>{if(!a.has(e.id)){a.add(e.id),i.push({agent:e,...t>0&&e.creatorAgentId?{creatorAgentId:e.creatorAgentId}:{}});for(let r of n.get(e.id)??[])o(r,t+1)}};return r.forEach(e=>o(e,0)),e.forEach(e=>o(e,0)),i}function Nr(e){let t=e.agentsList?.agents??[],n=e.agentsList?.defaultId??null,r=e.selectedAgentId??n??t[0]?.id??null,i=r?t.find(e=>e.id===r)??null:null,a=Mr(t).map(({agent:e,creatorAgentId:t})=>({value:e.id,label:ne(e),agent:e,description:t?H(`agents.createdBy`,{id:t}):void 0,badge:ce(e.id,n)??void 0})),o=r&&e.agentSkills.agentId===r?e.agentSkills.report?.skills?.length??null:null,s=e.channels.snapshot?Object.keys(e.channels.snapshot.channelAccounts??{}).length:null,c=r?e.cron.jobsTotal:null,l={files:e.agentFiles.list?.files?.length??null,skills:o,channels:s,cron:c||null};return L`
<div class="agents-layout">
<section class="agents-toolbar">
<div class="agents-toolbar-row">
${a.length>1?L`
<div class="agents-control-select">
<openclaw-agent-select
.options=${a}
.value=${r??``}
.accessibleLabel=${H(`usage.filters.agent`)}
.identityById=${e.agentIdentityById}
.disabled=${e.loading}
.onSelect=${e.onSelectAgent}
.onCreateAgent=${e.access.canCreateAgent?e.onCreateAgent:null}
></openclaw-agent-select>
</div>
`:z}
<div class="agents-toolbar-actions">
${a.length<=1&&e.access.canCreateAgent?L`
<button
class="btn btn--sm btn--ghost agents-create-btn"
?disabled=${e.loading}
@click=${e.onCreateAgent}
>
${H(`custodian.newAgent`)}
</button>
`:z}
${i?L`
${De(i.id,L`
<button
type="button"
class="btn btn--sm btn--ghost"
@click=${e=>void Be(e,i.id,H(`agents.copyId`))}
>
<span data-copy-label>${H(`agents.copyId`)}</span>
</button>
`)}
<button
type="button"
class="btn btn--sm btn--ghost"
?disabled=${!e.access.canUpdateConfig||!!(n&&i.id===n)}
@click=${()=>e.onSetDefault(i.id)}
>
${n&&i.id===n?H(`agents.default`):H(`agents.setDefault`)}
</button>
<button
type="button"
class="btn btn--sm btn--ghost"
@click=${()=>e.onTogglePinnedAgent(i.id)}
>
${e.pinnedAgentIds.includes(i.id)?H(`agents.unpinFromSwitcher`):H(`agents.pinToSwitcher`)}
</button>
`:z}
<button
class="btn btn--sm agents-refresh-btn"
?disabled=${e.loading}
@click=${e.onRefresh}
>
${e.loading?H(`common.loading`):H(`common.refresh`)}
</button>
</div>
</div>
${e.error?L`<div class="callout danger" style="margin-top: 8px;">${e.error}</div>`:z}
</section>
<section class="agents-main">
<div class="settings-group">
${W({title:H(`agents.defaults.title`),description:H(`agents.defaults.description`),onClick:e.onOpenAgentDefaults})}
</div>
${i?L`
${Pr(e.activePanel,t=>e.onSelectPanel(t),l)}
<div
id="agent-panel"
class="settings-stack"
role="tabpanel"
aria-labelledby=${`agents-tab-${e.activePanel}`}
>
${e.config.error?L`<div class="callout danger" role="alert">${e.config.error}</div>`:z}
${e.activePanel===`overview`?De(i.id,un({agent:i,basePath:e.basePath,defaultId:n,configForm:e.config.form,agentFilesList:e.agentFiles.list,agentIdentity:e.agentIdentityById[i.id]??null,agentIdentityError:e.agentIdentityError,agentIdentityLoading:e.agentIdentityLoading,identityDraft:e.identityDraft,identitySaving:e.identitySaving,identityError:e.identityError,canUpdateConfig:e.access.canUpdateConfig,canUpdateIdentity:e.access.canUpdateIdentity,configLoading:e.config.loading,configSaving:e.config.saving,configDirty:e.config.dirty,modelCatalog:e.modelCatalog,modelCatalogError:e.modelCatalogError,onConfigReload:e.onConfigReload,onConfigSave:e.onConfigSave,onIdentityFieldChange:e.onIdentityFieldChange,onIdentityAvatarSelect:e.onIdentityAvatarSelect,onIdentitySave:e.onIdentitySave,onModelChange:e.onModelChange,onModelFallbacksChange:e.onModelFallbacksChange,onModelCatalogRetry:e.onModelCatalogRetry,onSelectPanel:e.onSelectPanel})):z}
${e.activePanel===`files`?Dn({agentId:i.id,agentFilesList:e.agentFiles.list,agentFilesLoading:e.agentFiles.loading,agentFilesError:e.agentFiles.error,agentFileActive:e.agentFiles.active,agentFileContents:e.agentFiles.contents,agentFileDrafts:e.agentFiles.drafts,agentFileSaving:e.agentFiles.saving,canWrite:e.access.canWriteFiles,onLoadFiles:e.onLoadFiles,onSelectFile:e.onSelectFile,onFileDraftChange:e.onFileDraftChange,onFileReset:e.onFileReset,onFileSave:e.onFileSave}):z}
${e.activePanel===`tools`?Er({agentId:i.id,configForm:e.config.form,configLoading:e.config.loading,configSaving:e.config.saving,configDirty:e.config.dirty,toolsCatalogLoading:e.toolsCatalog.loading,toolsCatalogError:e.toolsCatalog.error,toolsCatalogResult:e.toolsCatalog.result,toolsEffectiveLoading:e.toolsEffective.loading,toolsEffectiveError:e.toolsEffective.error,toolsEffectiveResult:e.toolsEffective.result,runtimeSessionKey:e.runtimeSessionKey,runtimeSessionMatchesSelectedAgent:e.runtimeSessionMatchesSelectedAgent,canUpdateConfig:e.access.canUpdateConfig,githubIdentity:e.githubIdentity,onOpenGitHubConnections:e.onOpenGitHubConnections,onProfileChange:e.onToolsProfileChange,onOverridesChange:e.onToolsOverridesChange,onConfigReload:e.onConfigReload,onConfigSave:e.onConfigSave}):z}
${e.activePanel===`skills`?Dr({agentId:i.id,report:e.agentSkills.report,loading:e.agentSkills.loading,error:e.agentSkills.error,activeAgentId:e.agentSkills.agentId,configForm:e.config.form,configLoading:e.config.loading,configSaving:e.config.saving,configDirty:e.config.dirty,filter:e.agentSkills.filter,canPatchConfig:e.access.canPatchConfig,canUpdateConfig:e.access.canUpdateConfig,onFilterChange:e.onSkillsFilterChange,onRefresh:e.onSkillsRefresh,onToggle:e.onAgentSkillToggle,onClear:e.onAgentSkillsClear,onDisableAll:e.onAgentSkillsDisableAll,onConfigReload:e.onConfigReload,onConfigSave:e.onConfigSave}):z}
${e.activePanel===`channels`?Tn({context:P(i,e.config.form,e.agentFiles.list,n,e.agentIdentityById[i.id]??null),configForm:e.config.form,snapshot:e.channels.snapshot,loading:e.channels.loading,error:e.channels.error,lastSuccess:e.channels.lastSuccess,onRefresh:e.onChannelsRefresh,onSelectPanel:e.onSelectPanel}):z}
${e.activePanel===`cron`?En({context:P(i,e.config.form,e.agentFiles.list,n,e.agentIdentityById[i.id]??null),agentId:i.id,jobs:e.cron.jobs,jobsTotal:e.cron.jobsTotal,jobsHasMore:e.cron.jobsHasMore,jobsLoadingMore:e.cron.jobsLoadingMore,status:e.cron.status,scopedTotal:e.cron.scopedTotal,scopedNextWakeAtMs:e.cron.scopedNextWakeAtMs,loading:e.cron.loading,error:e.cron.error,canRunNow:e.access.canRunCron,onRefresh:e.onCronRefresh,onLoadMore:e.onCronLoadMore,onRunNow:e.onCronRunNow,onSelectPanel:e.onSelectPanel}):z}
${e.activePanel===`memory`?L`
<div class="settings-group agent-memory-import-row">
${W({title:H(`tabs.memory`),description:H(`subtitles.memory`),onClick:()=>e.onOpenMemorySettings?.()})}
${W({title:H(`tabs.memoryImport`),description:H(`subtitles.memoryImport`),onClick:()=>e.onOpenMemoryImport?.()})}
</div>
<openclaw-agent-memory-panel
.agentId=${i.id}
></openclaw-agent-memory-panel>
`:z}
</div>
`:J({title:H(`agents.selectTitle`)},q(H(`agents.selectSubtitle`)))}
</section>
</div>
`}function Pr(e,t,n){let r=[{id:`overview`,label:H(`agents.tabs.overview`)},{id:`files`,label:H(`agents.tabs.files`)},{id:`tools`,label:H(`agents.tabs.tools`)},{id:`skills`,label:H(`agents.tabs.skills`)},{id:`channels`,label:H(`agents.tabs.channels`)},{id:`cron`,label:H(`agents.tabs.cronJobs`)},{id:`memory`,label:H(`agents.tabs.memory`)}];return ot({id:`agents`,active:e,tabs:r.map(e=>({value:e.id,label:e.label,count:n[e.id]})),ariaLabel:H(`tabs.agents`),panelId:`agent-panel`,onSelect:t})}function Fr(){return(Fr=e((()=>{I(),Ce(),at(),Ge(),st(),K(),V(),N(),mt(),fn(),kn(),jr()})))()}var Ir,$;function Lr(){return(Lr=e((()=>{l(),I(),Se(),Me(),je(),K(),lt(),ut(),V(),N(),ve(),M(),ue(),O(),Ye(),b(),ze(),u(),rt(),x(),d(),It(),Yt(),tn(),on(),ln(),Fr(),Ir=`https://docs.openclaw.ai/concepts/multi-agent`,$=class extends ee{constructor(...e){super(...e),this.agentsList=null,this.agentsSelectedId=null,this.toolsCatalogLoading=!1,this.toolsCatalogLoadingAgentId=null,this.toolsCatalogError=null,this.toolsCatalogResult=null,this.toolsEffectiveLoading=!1,this.toolsEffectiveLoadingKey=null,this.toolsEffectiveResultKey=null,this.toolsEffectiveError=null,this.toolsEffectiveResult=null,this.chatModelCatalog=[],this.chatModelCatalogError=null,this.agentFilesLoading=!1,this.agentFilesError=null,this.agentFilesList=null,this.agentFileContents={},this.agentFileDrafts={},this.agentFileActive=null,this.agentFileSaving=!1,this.agentFileWriteRevisions=new Map,this.agentIdentityLoading=!1,this.agentIdentityError=null,this.identityDraft={name:null,emoji:null,avatar:null},this.identitySaving=!1,this.identityError=null,this.agentSkillsLoading=!1,this.agentSkillsError=null,this.agentSkillsReport=null,this.agentSkillsAgentId=null,this.skillsFilter=``,this.cron=U(),this.routeDataInitialized=!1,this.hasBoundAgents=!1,this.agentsSource=null,this.hasBoundAgentIdentity=!1,this.agentIdentitySource=null,this.hasBoundSessions=!1,this.sessionsSource=null,this.chatModelCatalogAgentId=null,this.chatModelCatalogRequest=null,this.normalizedLocation=``,this.githubProfileId=null,this.githubIdentity=new ft({requestUpdate:()=>this.requestUpdate(),runExternalMutation:(e,t)=>this.context.runtimeConfig.runExternalMutation(e,t)}),this.gateway=new nt(this,{getGateway:()=>this.context?.gateway,onIdentityChange:()=>this.resetForClientChange(),invalidateRequests:e=>{e.identityChanged||(this.invalidateTransientRequests(),this.chatModelCatalog=[],this.chatModelCatalogAgentId=null,this.chatModelCatalogError=null)},onSnapshot:()=>this.syncGatewayState(),ensureInitialData:()=>this.ensureInitialData()}),this.subscriptions=new xe(this).effect(()=>this.context?.agents,e=>{let t=this.hasBoundAgents;this.hasBoundAgents=!0,this.agentsSource=e,t&&this.resetForAgentsSourceChange(),this.syncAgentState(e),this.ensureInitialData();let n=e.subscribe(()=>{this.agentsSource===e&&this.context.agents===e&&(this.syncAgentState(e),this.ensureAgentIdentities(),this.loadActivePanelData(),this.requestUpdate())});return()=>{n(),this.agentsSource===e&&(this.agentsSource=null)}}).effect(()=>this.context?.agentIdentity,e=>{let t=this.hasBoundAgentIdentity;this.hasBoundAgentIdentity=!0,this.agentIdentitySource=e,t&&(this.invalidateTransientRequests(),this.agentIdentityError=null),this.ensureAgentIdentities(),this.ensureInitialData();let n=e.subscribe(()=>{this.agentIdentitySource===e&&this.context.agentIdentity===e&&this.requestUpdate()});return()=>{n(),this.agentIdentitySource===e&&(this.agentIdentitySource=null)}}).watch(()=>this.context?.channels,(e,t)=>e.subscribe(t)).watch(()=>this.context?.navigation,(e,t)=>e.subscribe(t)).watch(()=>this.context?.runtimeConfig,(e,t)=>e.subscribe(t)).effect(()=>this.context?.sessions,e=>{let t=this.hasBoundSessions;this.hasBoundSessions=!0,this.sessionsSource=e,t&&(this.invalidateTransientRequests(),v(this),this.loadActivePanelData());let n=e.subscribe(()=>{this.sessionsSource===e&&this.context.sessions===e&&(_(this),this.requestUpdate())});return()=>{n(),this.sessionsSource===e&&(this.sessionsSource=null)}})}get sessions(){return this.context.sessions}get agents(){return this.context.agents}get client(){return this.gateway.client}get connected(){return this.gateway.connected}get requestGeneration(){return this.gateway.epoch}get sessionsResult(){return this.context.sessions.state.result}get sessionKey(){return this.context.gateway.snapshot.sessionKey}get agentsPanel(){return this.routeData?.panel??`files`}connectedCallback(){super.connectedCallback(),this.syncCanonicalLocation()}disconnectedCallback(){this.githubIdentity.dispose(),this.subscriptions.clear(),super.disconnectedCallback()}willUpdate(e){e.has(`routeData`)&&(this.applyRouteData(),this.syncCanonicalLocation(),this.ensureInitialData())}syncGatewayState(){(this.cron.client!==this.client||this.cron.connected!==this.connected)&&(this.cron={...this.cron,client:this.client,connected:this.connected})}canCall(e,t){return Re(this.context?.gateway?.snapshot,e,t)}syncAgentState(e=this.context.agents){let t=e.state;this.agentsList=t.agentsList?ge(t.agentsList):null,this.agentsList&&this.ensureSelectedAgentInList(this.agentsList),this.syncCurrentAgentFiles(e)}ensureSelectedAgentInList(e,t=this.routeData?.requestedAgentId??this.agentsSelectedId){let n=t&&e.agents.some(e=>e.id===t)?t:e.defaultId??e.agents[0]?.id??null;n!==this.agentsSelectedId&&(this.agentsSelectedId=n,this.resetSelectionState())}syncCurrentAgentFiles(e=this.context.agents){let t=this.resolveSelectedAgentId();if(!t||this.agentsPanel!==`files`)return;let n=e.files(t);n.list&&(this.agentFilesList=n.list,this.selectDefaultAgentFile(t))}async selectDefaultAgentFile(e,t=!1){let n=this.agentFilesList?.files??[];(!this.agentFileActive||!n.some(e=>e.name===this.agentFileActive))&&(this.agentFileActive=n.find(e=>e.name===`AGENTS.md`)?.name??null),this.agentFileActive&&await Pt(this,e,this.agentFileActive,{force:t})}resetForClientChange(){this.agentsList=null,this.agentsSelectedId=null,this.chatModelCatalog=[],this.chatModelCatalogAgentId=null,this.chatModelCatalogError=null,this.resetSelectionState()}resetForAgentsSourceChange(){this.agentsList=null,this.agentsSelectedId=null,this.resetSelectionState()}invalidateTransientRequests(){this.gateway.invalidate(),this.agentFilesLoading=!1,this.agentFileSaving=!1,this.agentIdentityLoading=!1,this.agentSkillsLoading=!1,this.toolsCatalogLoading=!1,this.toolsCatalogLoadingAgentId=null,v(this),this.cron={...this.cron,cronLoading:!1,cronJobsLoadingMore:!1,cronJobsReloadPending:!1,cronJobsReloadPendingTableFilters:!1,cronRunsLoadingMore:!1,cronBusy:!1}}applyRouteData(){let e=this.routeData;e&&(this.routeDataInitialized=!0,this.gateway.isRouteDataCurrent(e)&&e.agentsList&&(this.agentsList=e.agentsList),this.agentsList&&this.ensureSelectedAgentInList(this.agentsList,e.requestedAgentId))}syncCanonicalLocation(){this.normalizedLocation=nn(this.context,this.routeData,this.normalizedLocation)}resolveSelectedAgentId(){return this.agentsSelectedId??this.agentsList?.defaultId??this.agentsList?.agents?.[0]?.id??null}chatAgentId(){return g(this.sessionKey)?.agentId??this.context.gateway.snapshot.assistantAgentId??this.agentsList?.defaultId??`main`}agentIdentityById(){return Object.fromEntries(this.context.agentIdentity.entries().map(e=>[e.agentId,e]))}ensureInitialData(){if(!(!this.connected||!this.client||!this.routeDataInitialized)){if(!this.context.runtimeConfig.state.configSnapshot&&!this.context.runtimeConfig.state.configLoading&&this.context.runtimeConfig.ensureLoaded(),!this.agentsList&&!this.context.agents.state.agentsLoading){this.loadAgentsAndCommit();return}this.ensureAgentIdentities(),this.loadActivePanelData()}}isCurrentRequest(e,t,n,r={}){return this.client===e&&this.connected&&this.requestGeneration===t&&(!r.agents||this.context.agents===r.agents)&&(!r.agentIdentity||this.context.agentIdentity===r.agentIdentity)&&(!r.sessions||this.context.sessions===r.sessions)&&(!n||this.resolveSelectedAgentId()===n)}ensureAgentIdentities(){let e=this.client,t=this.context.agentIdentity,n=this.agentsList?.agents.map(e=>e.id).filter(e=>!t.get(e))??[];if(!e||!this.connected||n.length===0||this.agentIdentityLoading)return;let r=this.requestGeneration;this.agentIdentityLoading=!0,this.agentIdentityError=null,t.ensure(n).catch(n=>{this.isCurrentRequest(e,r,void 0,{agentIdentity:t})&&(this.agentIdentityError=h(n))}).finally(()=>{this.isCurrentRequest(e,r,void 0,{agentIdentity:t})&&(this.agentIdentityLoading=!1)})}loadActivePanelData(){let e=this.resolveSelectedAgentId();if(e){if(this.agentsPanel===`overview`){this.ensureModelCatalog();return}if(this.agentsPanel===`files`&&this.agentFilesList?.agentId!==e){this.loadAgentFiles(e);return}if(this.agentsPanel===`skills`&&this.agentSkillsAgentId!==e){sn(this,e);return}if(this.agentsPanel===`tools`){this.syncGitHubIdentity(e),this.toolsCatalogResult?.agentId!==e&&!this.toolsCatalogLoading&&S(this,e),this.loadEffectiveToolsForAgent(e),this.githubIdentity.statusReadable&&!this.githubIdentity.status&&!this.githubIdentity.loading&&!this.githubIdentity.error&&this.githubIdentity.verify();return}if(this.agentsPanel===`channels`&&!this.context.channels.state.channelsSnapshot){this.context.channels.refresh(!1);return}this.agentsPanel===`cron`&&(this.cron.cronAgentId!==e&&(this.cron=U({client:this.client,connected:this.connected}),this.cron.cronAgentId=e),!this.cron.cronLoading&&!this.cron.cronStatus&&this.refreshCron())}}syncGitHubIdentity(e){let t=this.context.gateway.snapshot,n=t.selfUser?.id??null;n!==this.githubProfileId&&(this.githubIdentity.dispose(),this.githubProfileId=n);let r=(e,n)=>Re(t,e,n,{requireAdvertisement:!1});this.githubIdentity.sync({client:this.client,connected:this.connected,target:e?{kind:`shared`,scope:`agent`,agentId:e,config:F(this.context.runtimeConfig.state)}:null,statusReadable:r(`tools.github.status`,`operator.read`),configurable:r(`tools.github.configure`,`operator.admin`),authorizable:[`tools.github.authorize.start`,`tools.github.authorize.poll`,`tools.github.authorize.cancel`].every(e=>r(e,`operator.admin`)),clientRevision:this.requestGeneration})}ensureModelCatalog(e={}){let t=this.client,n=this.resolveSelectedAgentId();if(!t||!this.connected||!n)return;if(!e.refresh){let e=C(t,{agentId:n});if(e){this.chatModelCatalog=e.models??[],this.chatModelCatalogAgentId=n,this.chatModelCatalogError=null;return}}let r=this.requestGeneration,i=this.chatModelCatalogRequest;if(i?.client===t&&i.generation===r&&i.agentId===n)return;this.chatModelCatalogAgentId!==n&&(this.chatModelCatalog=[]);let a={client:t,generation:r,agentId:n};this.chatModelCatalogRequest=a,this.chatModelCatalogError=null,(e.refresh?T(t,{agentId:n}):w(t,{agentId:n})).then(e=>{if(this.isCurrentRequest(t,r,n)){let t=e.models??[];this.chatModelCatalog=t,this.chatModelCatalogAgentId=n,this.chatModelCatalogError=null}}).catch(e=>{this.isCurrentRequest(t,r,n)&&(this.chatModelCatalogAgentId=null,this.chatModelCatalogError=h(e))}).finally(()=>{this.chatModelCatalogRequest===a&&(this.chatModelCatalogRequest=null)})}async loadAgentsAndCommit(){let e=this.client,t=this.requestGeneration,n=this.context.agents;e&&(await n.ensureList(),this.isCurrentRequest(e,t,void 0,{agents:n})&&(this.syncAgentState(n),this.ensureAgentIdentities(),this.loadActivePanelData()))}async loadAgentFiles(e,t=!1){let n=this.client,r=this.context.agents;if(!n||!this.connected||this.agentFilesLoading)return;if(r.files(e).list&&!t){this.syncCurrentAgentFiles(r);return}let i=this.requestGeneration;this.agentFilesLoading=!0,this.agentFilesError=null;try{let a=t?await r.refreshFiles(e):await r.ensureFiles(e);if(!this.isCurrentRequest(n,i,e,{agents:r}))return;this.agentFilesList=a??r.files(e).list}finally{this.isCurrentRequest(n,i,e,{agents:r})&&(this.agentFilesLoading=!1)}this.isCurrentRequest(n,i,e,{agents:r})&&await this.selectDefaultAgentFile(e,t)}async refreshCron(){let e=this.cron;!e.connected||!e.client||e.cronLoading||await Promise.all([this.runCronTask(e=>Ke(e)),this.runCronTask(e=>He(e)),this.runCronTask(e=>Je(e,{tableFilters:!0}))])}async runCronTask(e){let t=this.cron;try{let n=e(t);return this.cron===t&&this.requestUpdate(),await n}finally{this.cron===t&&this.requestUpdate()}}saveIdentityDraft(){if(!this.canCall(`agents.update`,`operator.admin`))return;let e=this.client,t=this.resolveSelectedAgentId();if(!e||!t||this.identitySaving)return;let n=this.requestGeneration,r=this.context.agents,i=this.context.agentIdentity;qt({host:this,expectedClient:e,agentId:t,agents:r,agentIdentity:i,runtimeConfig:this.context.runtimeConfig,canDispatch:()=>this.canCall(`agents.update`,`operator.admin`),isCurrent:()=>this.isCurrentRequest(e,n,t,{agents:r,agentIdentity:i}),onSaved:()=>this.syncAgentState(r)})}resetSelectionState(){this.gateway.invalidate(),this.chatModelCatalog=[],this.chatModelCatalogAgentId=null,this.chatModelCatalogError=null,this.agentFilesList=null,this.agentFilesError=null,this.agentFileActive=null,this.agentFileContents={},this.agentFileDrafts={},this.agentFileWriteRevisions.clear(),this.agentFilesLoading=!1,this.agentFileSaving=!1,this.agentSkillsReport=null,this.agentSkillsLoading=!1,this.agentSkillsError=null,this.agentSkillsAgentId=null,this.agentIdentityLoading=!1,this.agentIdentityError=null,Wt(this),this.toolsCatalogResult=null,this.toolsCatalogError=null,this.toolsCatalogLoading=!1,this.toolsCatalogLoadingAgentId=null,v(this),this.cron=U({client:this.client,connected:this.connected})}toolsPath(e,t){let n=this.context.runtimeConfig.agentEntry(e,{ensure:t});return n?[...n.path,`tools`]:null}loadEffectiveToolsForAgent(e){if(e!==this.chatAgentId()){v(this);return}let t=oe(this,{agentId:e,sessionKey:this.sessionKey});this.toolsEffectiveResultKey===t&&!this.toolsEffectiveError||m(this,{agentId:e,sessionKey:this.sessionKey})}refreshAgents(){let e=this.client,t=this.requestGeneration,n=this.context.agents;e&&(async()=>{await n.refreshList(),this.isCurrentRequest(e,t,void 0,{agents:n})&&(this.syncAgentState(n),this.loadActivePanelData())})()}saveAgentConfig(){if(!this.canCall(`config.set`,`operator.admin`))return;let e=this.client,t=this.requestGeneration,n=this.context.agents;if(!e)return;let r=this.agentsSelectedId;(async()=>{await this.context.runtimeConfig.save()&&(await n.refreshList(),this.isCurrentRequest(e,t,void 0,{agents:n})&&(this.syncAgentState(n),r&&this.agentsList?.agents.some(e=>e.id===r)&&(this.agentsSelectedId=r),this.ensureAgentIdentities(),this.loadActivePanelData()))})()}setDefaultAgent(e){if(!this.canCall(`config.set`,`operator.admin`))return;let t=this.client,n=this.requestGeneration,r=this.context.agents,i=this.context.runtimeConfig;if(!t)return;let a=()=>this.context.runtimeConfig===i&&this.isCurrentRequest(t,n,void 0,{agents:r})&&this.canCall(`config.set`,`operator.admin`);(async()=>{await i.ensureLoaded(),a()&&await f(i,e,()=>r.refreshList(),a)})()}saveSelectedAgentFile(e,t,n){this.canCall(`agents.files.set`,`operator.admin`)&&Ft(this,e,t,n)}reloadConfig(){this.context.runtimeConfig.refresh({discardPendingChanges:!0})}clearAgentSkills(e){if(!this.canCall(`config.patch`,`operator.admin`))return;let t=this.client,n=this.requestGeneration,r=this.context.agents,i=this.context.runtimeConfig;if(!t)return;let a=()=>this.context.runtimeConfig===i&&this.isCurrentRequest(t,n,e,{agents:r})&&this.canCall(`config.patch`,`operator.admin`);cn(i,e,a).then(t=>{if(a()){if(!t){this.agentSkillsError=i.state.lastError??H(`agents.skillsPanel.updateError`);return}this.agentSkillsError=null,sn(this,e)}})}runCronJobNow(e){this.canCall(`cron.run`,`operator.admin`)&&this.cron.cronJobs.some(t=>t.id===e)&&this.runCronTask(t=>Ue(t,e,`force`))}render(){let e=this.context.runtimeConfig.state,t=this.context.agents.state,n=this.resolveSelectedAgentId(),r=F(e),i={canCreateAgent:this.canCall(`openclaw.chat`,`operator.admin`),canPatchConfig:this.canCall(`config.patch`,`operator.admin`),canUpdateConfig:this.canCall(`config.set`,`operator.admin`),canUpdateIdentity:this.canCall(`agents.update`,`operator.admin`),canWriteFiles:this.canCall(`agents.files.set`,`operator.admin`),canRunCron:this.canCall(`cron.run`,`operator.admin`)};return this.syncGitHubIdentity(n),L`
<section class="content-header">
<div>
<div class="page-title">${Pe(`agents`)}</div>
<div class="page-subtitle">
${ke(`agents`)} ${tt(Ir)}
</div>
</div>
</section>
${ct(Nr({access:i,basePath:this.context.basePath,loading:t.agentsLoading,error:t.agentsError,agentsList:this.agentsList,selectedAgentId:n,activePanel:this.agentsPanel,config:{form:r,loading:e.configLoading,saving:e.configSaving,dirty:e.configFormDirty,error:e.lastError},channels:{snapshot:this.context.channels.state.channelsSnapshot,loading:this.context.channels.state.channelsLoading,error:this.context.channels.state.channelsError,lastSuccess:this.context.channels.state.channelsLastSuccess},cron:{status:this.cron.cronStatus,jobs:this.cron.cronJobs,jobsTotal:this.cron.cronJobsTotal,jobsHasMore:this.cron.cronJobsHasMore,jobsLoadingMore:this.cron.cronJobsLoadingMore,scopedTotal:this.cron.cronScopedTotal,scopedNextWakeAtMs:this.cron.cronScopedNextWakeAtMs,loading:this.cron.cronLoading,error:this.cron.cronError},agentFiles:{list:this.agentFilesList,loading:this.agentFilesLoading,error:this.agentFilesError??this.context.agents.files(n).error,active:this.agentFileActive,contents:this.agentFileContents,drafts:this.agentFileDrafts,saving:this.agentFileSaving},agentIdentityLoading:this.agentIdentityLoading,agentIdentityError:this.agentIdentityError,agentIdentityById:this.agentIdentityById(),identityDraft:this.identityDraft,identitySaving:this.identitySaving,identityError:this.identityError,agentSkills:{report:this.agentSkillsReport,loading:this.agentSkillsLoading,error:this.agentSkillsError,agentId:this.agentSkillsAgentId,filter:this.skillsFilter},toolsCatalog:{loading:this.toolsCatalogLoading,error:this.toolsCatalogError,result:this.toolsCatalogResult},toolsEffective:{loading:this.toolsEffectiveLoading,error:this.toolsEffectiveError,result:this.toolsEffectiveResult},githubIdentity:this.githubIdentity,onOpenGitHubConnections:()=>this.context.navigate(`profile`,{hash:`#settings-profile-github-connections`}),runtimeSessionKey:this.sessionKey,runtimeSessionMatchesSelectedAgent:n===this.chatAgentId(),modelCatalog:this.chatModelCatalog,modelCatalogError:this.chatModelCatalogError,pinnedAgentIds:this.context.navigation.snapshot.pinnedAgentIds,onTogglePinnedAgent:e=>Jt(this.context.navigation,e),onRefresh:()=>this.refreshAgents(),onSelectAgent:e=>rn(this.context,e,n,this.agentsPanel),onCreateAgent:()=>{this.canCall(`openclaw.chat`,`operator.admin`)&&this.context.navigate(`custodian`,{search:`?intent=new-agent`})},onSelectPanel:e=>an(this.context,n,this.agentsPanel,e),onLoadFiles:e=>void this.loadAgentFiles(e,!0),onSelectFile:e=>{this.agentFileActive=e,n&&Pt(this,n,e)},onFileDraftChange:(e,t)=>{this.agentFileDrafts={...this.agentFileDrafts,[e]:t}},onFileReset:e=>{this.agentFileDrafts={...this.agentFileDrafts,[e]:this.agentFileContents[e]??``}},onFileSave:e=>{n&&this.saveSelectedAgentFile(n,e,this.agentFileDrafts[e]??this.agentFileContents[e]??``)},onToolsProfileChange:(e,t,n)=>{if(!this.canCall(`config.set`,`operator.admin`))return;let r=this.toolsPath(e,!!(t||n));r&&(t?this.context.runtimeConfig.patchForm([...r,`profile`],t):this.context.runtimeConfig.removeFormValue([...r,`profile`]),n&&this.context.runtimeConfig.removeFormValue([...r,`allow`]))},onToolsOverridesChange:(e,t,n)=>{if(!this.canCall(`config.set`,`operator.admin`))return;let r=this.toolsPath(e,t.length>0||n.length>0);r&&(t.length?this.context.runtimeConfig.patchForm([...r,`alsoAllow`],t):this.context.runtimeConfig.removeFormValue([...r,`alsoAllow`]),n.length?this.context.runtimeConfig.patchForm([...r,`deny`],n):this.context.runtimeConfig.removeFormValue([...r,`deny`]))},onConfigReload:()=>this.reloadConfig(),onConfigSave:()=>this.saveAgentConfig(),onIdentityFieldChange:(e,t)=>{this.canCall(`agents.update`,`operator.admin`)&&Gt(this,e,t)},onIdentityAvatarSelect:e=>{this.canCall(`agents.update`,`operator.admin`)&&Kt(this,e)},onIdentitySave:()=>this.saveIdentityDraft(),onChannelsRefresh:()=>void this.context.channels.refresh(!1),onOpenMemoryImport:()=>this.context.navigate(`memory-import`),onOpenMemorySettings:()=>this.context.navigate(`memory`),onOpenAgentDefaults:()=>this.context.navigate(`ai-agents`),onCronRefresh:()=>void this.refreshCron(),onCronLoadMore:()=>void this.runCronTask(e=>Je(e,{append:!0,tableFilters:!0})),onCronRunNow:e=>this.runCronJobNow(e),onSkillsFilterChange:e=>this.skillsFilter=e,onSkillsRefresh:()=>{n&&sn(this,n)},onAgentSkillToggle:(e,t,n)=>{if(!this.canCall(`config.set`,`operator.admin`))return;let r=this.context.runtimeConfig.agentEntry(e,{ensure:!0});if(!r||!t.trim())return;let i=A(F(this.context.runtimeConfig.state),e)??this.agentSkillsReport?.agentSkillFilter??this.agentSkillsReport?.skills?.map(e=>e.name).filter(Boolean)??[],a=new Set(i);n?a.add(t.trim()):a.delete(t.trim()),this.context.runtimeConfig.patchForm([...r.path,`skills`],[...a])},onAgentSkillsClear:e=>this.clearAgentSkills(e),onAgentSkillsDisableAll:e=>{if(!this.canCall(`config.set`,`operator.admin`))return;let t=this.context.runtimeConfig.agentEntry(e,{ensure:!0});t&&this.context.runtimeConfig.patchForm([...t.path,`skills`],[])},onModelChange:(e,t)=>{this.canCall(`config.set`,`operator.admin`)&&($t(this.context.runtimeConfig,e,t),_(this))},onModelCatalogRetry:()=>this.ensureModelCatalog({refresh:!0}),onModelFallbacksChange:(e,t)=>{this.canCall(`config.set`,`operator.admin`)&&en(this.context.runtimeConfig,e,t)},onSetDefault:e=>this.setDefaultAgent(e)}))}
`}},c([i({context:Ne,subscribe:!0})],$.prototype,`context`,void 0),c([Te({attribute:!1})],$.prototype,`routeData`,void 0),c([R()],$.prototype,`agentsList`,void 0),c([R()],$.prototype,`agentsSelectedId`,void 0),c([R()],$.prototype,`toolsCatalogLoading`,void 0),c([R()],$.prototype,`toolsCatalogLoadingAgentId`,void 0),c([R()],$.prototype,`toolsCatalogError`,void 0),c([R()],$.prototype,`toolsCatalogResult`,void 0),c([R()],$.prototype,`toolsEffectiveLoading`,void 0),c([R()],$.prototype,`toolsEffectiveLoadingKey`,void 0),c([R()],$.prototype,`toolsEffectiveResultKey`,void 0),c([R()],$.prototype,`toolsEffectiveError`,void 0),c([R()],$.prototype,`toolsEffectiveResult`,void 0),c([R()],$.prototype,`chatModelCatalog`,void 0),c([R()],$.prototype,`chatModelCatalogError`,void 0),c([R()],$.prototype,`agentFilesLoading`,void 0),c([R()],$.prototype,`agentFilesError`,void 0),c([R()],$.prototype,`agentFilesList`,void 0),c([R()],$.prototype,`agentFileContents`,void 0),c([R()],$.prototype,`agentFileDrafts`,void 0),c([R()],$.prototype,`agentFileActive`,void 0),c([R()],$.prototype,`agentFileSaving`,void 0),c([R()],$.prototype,`agentIdentityLoading`,void 0),c([R()],$.prototype,`agentIdentityError`,void 0),c([R()],$.prototype,`identityDraft`,void 0),c([R()],$.prototype,`identitySaving`,void 0),c([R()],$.prototype,`identityError`,void 0),c([R()],$.prototype,`agentSkillsLoading`,void 0),c([R()],$.prototype,`agentSkillsError`,void 0),c([R()],$.prototype,`agentSkillsReport`,void 0),c([R()],$.prototype,`agentSkillsAgentId`,void 0),c([R()],$.prototype,`skillsFilter`,void 0),c([R()],$.prototype,`cron`,void 0),customElements.get(`openclaw-agents-page`)||customElements.define(`openclaw-agents-page`,$)})))()}Lr();
//# sourceMappingURL=agents-page-BkQsD12g.js.map