UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

256 lines • 55.1 kB
import{n as e}from"./rolldown-runtime-8BhlS34s.js";import{Au as t,Ct as n,Ic as r,Jl as i,Lc as a,Nu as o,Ot as s,Ou as c,Pu as l,Tu as u,W as d,Zl as f,_u as p,ac as m,dl as h,ft as g,fu as _,hl as ee,k as te,kl as ne,ku as re,lc as ie,ll as ae,mt as oe,nc as se,uu as ce,vu as le,z as ue,zu as v}from"./control-ui-core-CBJ5efDh.js";import{Aa as de,Ai as fe,Co as pe,Da as me,Fi as he,H as ge,J as y,Qr as _e,So as ve,U as ye,V as be,Va as xe,W as Se,Y as Ce,Zr as we,aa as Te,bo as Ee,ca as b,dr as De,ei as Oe,go as ke,ki as Ae,la as je,na as Me,ni as Ne,qr as Pe,ra as x,sa as S,ta as Fe,ua as Ie,ui as Le,ur as C,wr as Re,yr as ze,za as Be}from"./control-ui-core-DtLivg_r.js";import{E as Ve,G as w,J as T,W as E,X as He,Z as Ue,at as D,k as We,q as Ge,rt as O}from"./lit-runtime-IOnANfcZ.js";import"./control-ui-boot-shared-CkXlyZBY.js";import{J as Ke}from"./control-ui-boot-chat-Ye5j4vAg.js";import{d as qe,l as Je}from"./gateway-runtime-C77LeWZN.js";import{aa as k,da as Ye,ga as Xe,ha as Ze,ia as A,ma as Qe}from"./control-ui-boot-shared-UG5ko-VG.js";import{Po as $e,Ur as et,Wr as tt,Zr as j,jo as M}from"./ui-CmSP4d14.js";import{Fi as nt,Fr as rt,Li as it,Pr as at,Xi as ot,Yi as st,ct,ut as lt}from"./control-ui-boot-shared-XreXSF7h.js";import{$r as ut,Bt as dt,Co as ft,H as pt,Ir as mt,Lr as ht,Ml as gt,Nl as _t,Nr as vt,Rr as yt,To as bt,U as xt,Vt as St,ei as Ct}from"./control-ui-boot-shared-dOnP4mAA.js";import{it as wt}from"./control-ui-boot-shared-Q8KG_noF.js";import{N as Tt,P as Et}from"./markdown-runtime-ORQpioyT.js";import"./control-ui-boot-shared-styles-BXPMRytW.js";import{_ as Dt,g as Ot,v as kt}from"./control-ui-boot-chat-k_u3nGjS.js";import{B as At,D as jt,E as Mt,F as Nt,G as Pt,I as Ft,K as It,L as Lt,O as Rt,Q as zt,R as Bt,V as N,W as Vt,Z as Ht,ft as Ut,ht as Wt,k as Gt,mt as Kt,pt as qt,z as P}from"./control-ui-boot-new-CkyIHJ_L.js";import{n as Jt,t as Yt}from"./transcript-search-BXRa7Hst.js";import"./control-ui-boot-new-styles-cChqenO3.js";import{n as Xt,t as Zt}from"./en-apps-CQuXDReT.js";import{n as Qt,t as $t}from"./settings-navigation-D9H_ojii.js";import{a as en,o as tn}from"./settings-targets-Dyt-IAqP.js";import{n as nn,t as rn}from"./consent-dialog-DytMih5L.js";var F;function I(){return(I=e((()=>{F=class{constructor(e,t,n){this.read=e,this.restore=t,this.notify=n,this.remember=!1,this.saving=!1,this.failed=!1,this.selection=null,this.edited=!1,this.scope=``,this.generation=0,this.pending=null}get available(){let{draft:e}=this.read();return e?.gateway.connected===!0&&e.gateway.preferenceState?.mode===`remote`}begin(){if(this.saving||this.failed){this.restore(this.selection);return}this.edited=!1,this.observed=void 0,this.selection=null,this.remember=!1,this.failed=!1,this.synchronize()}synchronize(){let{draft:e,context:t}=this.read();if(!e||!t)return;let n=t.gateway,r=JSON.stringify([n.connection.gatewayUrl,n.snapshot.selfUser?.id??``,n.snapshot.hello?.auth?.recoveryScope??``]);n.snapshot.phase===`connected`&&(this.scope!==r||this.source!==n)&&(this.scope=r,this.source=n,this.generation+=1,this.edited=!1,this.observed=void 0,this.saving=!1,this.failed=!1,this.remember=!1,this.selection=null,this.pending=null);let i=e.gateway.preferenceState;if(i!==this.binding){let e=this.saving;this.binding=i,this.observed=void 0,this.generation+=1,this.saving=!1,e&&(this.failed=!0,this.remember=!1,this.notify())}let a=i?.mode===`remote`?i.palettePreference:null;this.observed!==a&&i?.mode!==`loading`&&e.agentsReady()&&(this.observed=a,!(this.edited||e.submission.submitting||e.submission.pendingPlacement.sessionKey||e.submission.submissionOutcomeUnknown)&&(this.selection=a,this.remember=this.selection!==null,this.restore(this.selection),this.notify()))}changed(){this.edited=!0,this.selection=this.capture(),this.failed&&this.pending&&(this.pending=this.selection),this.remember&&this.save(this.selection),this.notify()}setRemember(e){this.available&&(this.edited=!0,this.remember=e,this.selection=e?this.capture():null,e||this.restore(null),this.save(this.selection),this.notify())}retry(){this.failed&&this.available&&this.save(this.pending)}capture(){let e=this.read().draft?.place;if(!e?.agentId)return null;let t=e.preferenceSelection();return delete t.worktreeName,{agentId:e.agentId,selection:t}}async save(e){let{draft:t}=this.read();if(!t)return;let n=++this.generation,r=t.gateway.preferenceState;this.pending=e,this.saving=!0,this.failed=!1;let i=await t.gateway.savePalettePreference(e);n===this.generation&&r===t.gateway.preferenceState&&(this.saving=!1,this.failed=!i,!i&&e&&!r?.palettePreference&&(this.remember=!1),i&&(this.remember=e!==null),this.notify())}}})))()}var L,R;function z(){return(z=e((()=>{E(),Ve(),je(),b(),Fe(),ct(),l(),A(),Ze(),c(),At(),Ht(),Mt(),Rt(),Xe(),k(),L=Ie(He`<path d="M4 7h8m4 0h4M4 17h2m4 0h10"/><circle cx="14" cy="7" r="2"/><circle cx="8" cy="17" r="2"/>`),R=class{constructor(e,t){this.host=e,this.id=t,this.open=!1,this.places=!1,this.query=``}close(){this.open=!1,this.places=!1,this.query=``,this.host.requestUpdate()}async showPlaces(e,t=!1){this.places=e,this.query=``,this.host.requestUpdate(),await this.host.updateComplete;let n=e?t?`back`:`search`:`workspace`;this.host.querySelector(`.palette-session-settings__`+n)?.focus({preventScroll:!0})}keydown(e){if(e.defaultPrevented||e.isComposing||e.keyCode===229||e.composedPath().some(e=>e instanceof Element&&e.matches(`wa-dropdown[open]`)))return;if(e.key===`Escape`){e.preventDefault(),e.stopPropagation(),this.places?this.showPlaces(!1):(this.close(),this.host.querySelector(`#`+this.id+`-settings-trigger`)?.focus({preventScroll:!0}));return}if(![`ArrowDown`,`ArrowUp`].includes(e.key)||!(e.currentTarget instanceof HTMLElement)||e.composedPath().some(e=>e instanceof Element&&e.tagName===`WA-DROPDOWN`))return;let t=[...e.currentTarget.querySelectorAll(`button:not(:disabled), input:not(:disabled)`)],n=t.findIndex(e=>e===this.host.ownerDocument.activeElement);t.length&&(e.preventDefault(),e.stopPropagation(),t[(n+(e.key===`ArrowDown`?1:-1)+t.length)%t.length]?.focus())}render(e){let{draft:t,context:n,preferences:r,onChange:i}=e,{place:a,gateway:o,submission:s}=t,c=s.submitting||!!s.pendingPlacement.sessionKey||!!s.submissionOutcomeUnknown,l=Gt({environments:a.canWrite()?o.environments:[],cloudProfiles:a.isAdmin()?o.cloudProfiles:[],cloudProfileId:a.cloudProfileId,...a.cloudSelection,deviceId:a.deviceId,autoDevice:a.autoDevice,devicePlacement:a.devicePlacementRuntime()?.devicePlacement,deviceDisabledReason:a.modelControl.devicePlacementUnsupportedReason()??o.deviceCatalogDisabledReason}),d=l.kind===`local`?o.gatewayName||v(`newSession.local`):l.label,f=[l.operatingSystems.find(e=>e.id===l.selectedOsId)?.label,l.cloudMachines.find(e=>e.id===l.selectedMachineId)?.label].filter(Boolean).join(` · `),p=zt({folder:a.folder,workspace:a.workspacePath(),projectId:t.browser.projectId,selectedRemoteProject:t.browser.remoteProject,projects:t.browser.projects,recents:[],projectQuery:``,freshWorkspace:a.freshWorkspace}),m=[{id:`local`,label:o.gatewayName||v(`newSession.local`),remote:!1,selected:!a.remotePlacement,select:()=>a.selectDevice(``)},...l.devices.map(e=>({id:`device:`+e.deviceId,label:e.label,remote:!0,selected:a.deviceId===e.deviceId,disabledReason:e.disabledReason,select:()=>a.selectDevice(e.deviceId)})),...l.devices.length?[{id:`auto-device`,label:v(`newSession.autoDevice`),remote:!0,selected:a.autoDevice,disabledReason:l.autoDeviceDisabledReason,select:()=>a.selectDevice(``,!0)}]:[],...l.cloudProfiles.map(e=>({id:`cloud:`+e.id,label:v(`newSession.cloudWorker`,{profile:e.id}),remote:!0,selected:a.cloudProfileId===e.id,disabledReason:a.modelControl.cloudRuntimeUnsupportedReason(e),select:()=>a.selectCloudProfile(e.id)}))],h=(e,t)=>{c||e.disabledReason||(e.select(),t?a.selectProjectId(t):e.remote?a.selectNewWorkspace():a.applyFolder(a.workspacePath()),i(),this.showPlaces(!1))},g=this.query.trim().toLocaleLowerCase(),_=m.map(e=>({machine:e,choices:[{id:``,label:e.remote?v(`newSession.newWorkspace`):ie(a.workspacePath())||v(`newSession.folderPlaceholder`)},...t.browser.projects.map(e=>({id:e.id,label:e.displayName}))].filter(t=>!g||(e.label+` `+t.label).toLocaleLowerCase().includes(g))})).filter(e=>e.choices.length);return T`
      <button
        id=${this.id+`-settings-trigger`}
        class="palette-session-settings__trigger"
        type="button"
        aria-label=${v(`commandPalette.newSessionSettings`)}
        title=${v(`commandPalette.newSessionSettings`)}
        aria-haspopup="dialog"
        aria-expanded=${String(this.open)}
      >
        ${L}
      </button>
      <wa-popover
        ${We(lt)}
        class="palette-session-settings"
        for=${this.id+`-settings-trigger`}
        placement="bottom-end"
        without-arrow
        .open=${this.open}
        @wa-show=${N(()=>{this.open=!0,this.host.requestUpdate()})}
        @wa-hide=${N(()=>this.close())}
      >
        <div
          class="palette-session-settings__content"
          @keydown=${e=>this.keydown(e)}
        >
          ${this.places?T`
                  <div class="palette-session-settings__heading">
                    <button
                      type="button"
                      class="palette-session-settings__back"
                      aria-label=${v(`common.back`)}
                      @click=${()=>this.showPlaces(!1)}
                    >
                      ${S.arrowLeft}</button
                    ><span>${v(`newSession.projects`)}</span>
                  </div>
                  <input
                    class="palette-session-settings__search"
                    type="search"
                    aria-label=${v(`common.search`)}
                    placeholder=${v(`common.search`)}
                    .value=${this.query}
                    @input=${e=>{e.currentTarget instanceof HTMLInputElement&&(this.query=e.currentTarget.value,this.host.requestUpdate())}}
                  />
                  <div class="palette-session-settings__choices">
                    ${_.map(({machine:e,choices:n})=>T` <section aria-label=${e.label}>
                        <div class="palette-session-settings__machine">${e.label}</div>
                        ${n.map(n=>{let r=e.selected&&(n.id?t.browser.projectId===n.id:!t.browser.projectId&&(e.remote?a.freshWorkspace:a.folder===a.workspacePath()));return T`<button
                            type="button"
                            class="palette-session-settings__row"
                            data-machine=${e.id}
                            data-project=${n.id}
                            aria-pressed=${String(r)}
                            title=${e.disabledReason??w}
                            ?disabled=${c||!!e.disabledReason}
                            @click=${()=>h(e,n.id)}
                          >
                            <span class="palette-session-settings__icon"
                              >${n.id?S.gitBranch:S.folder}</span
                            ><span class="palette-session-settings__label">${n.label}</span
                            ><span class="palette-session-settings__check"
                              >${r?S.check:w}</span
                            >
                          </button>`})}
                        ${e.disabledReason?T`<div class="palette-session-settings__unavailable">${e.disabledReason}</div>`:w}
                      </section>`)}
                    ${_.length?w:T`<div class="palette-session-settings__unavailable">${v(`newSession.environmentSearchEmpty`)}</div>`}
                    ${o.cloudProfilesPending?T`<div role="status" class="palette-session-settings__unavailable">${v(`common.loading`)}</div>`:w}
                  </div>
                  ${a.isAdmin()?T`<button class="palette-session-settings__row" type="button" ?disabled=${c} @click=${e.onConnectMachine}><span class="palette-session-settings__icon">${S.plus}</span><span>${v(`newSession.connectMachine`)}</span></button>`:w}
                `:T`
                  <div class="palette-session-settings__title">
                    ${v(`commandPalette.newSessionSettings`)}
                  </div>
                  <div class="palette-session-settings__agent">
                    ${jt({agents:a.agents(),variant:`default`,agentId:a.agentId,agentIdentity:n?.agentIdentity,disabled:c,onSelect:e=>{a.selectAgentId(e),i()},onOpenChange:e.onAgentPickerOpen})}
                  </div>
                  <button
                    class="palette-session-settings__row palette-session-settings__workspace"
                    type="button"
                    ?disabled=${c}
                    @click=${e=>this.showPlaces(!0,e.detail>0)}
                  >
                    <span class="palette-session-settings__icon">${S.folder}</span
                    ><span class="palette-session-settings__copy"
                      ><span class="palette-session-settings__label">${p.label}</span
                      ><span class="palette-session-settings__secondary"
                        >${d}${f?` · `+f:``}</span
                      ></span
                    ><span class="palette-session-settings__chevron">${S.chevronRight}</span>
                  </button>
                  ${a.checkoutVisible&&!a.remoteRepository?T`<button
                          class="palette-session-settings__row palette-session-settings__worktree"
                          type="button"
                          role="switch"
                          aria-checked=${String(a.worktree)}
                          aria-label=${v(`newSession.checkoutWorktree`)}
                          title=${a.remotePlacement?v(`newSession.checkoutRemoteLocked`):a.worktreeAvailable()?w:v(`newSession.gitCheckUnavailable`)}
                          ?disabled=${c||a.remotePlacement}
                          @click=${()=>{a.selectWorktree(!a.worktree),i()}}
                        >
                          <span class="palette-session-settings__icon">${S.gitBranch}</span
                          ><span>${v(`newSession.checkoutWorktree`)}</span
                          ><span class="palette-session-settings__switch" aria-hidden="true"></span>
                        </button>`:w}
                `}
          ${!this.places||r.failed?T`<div class="palette-session-settings__footer">
                  ${this.places?w:T`<label
                          class="palette-session-settings__remember"
                          title=${r.available?w:v(`commandPalette.rememberUnavailable`)}
                          ><input
                            type="checkbox"
                            .checked=${r.remember}
                            ?disabled=${c||!r.available}
                            @change=${e=>{e.currentTarget instanceof HTMLInputElement&&r.setRemember(e.currentTarget.checked)}}
                          /><span
                            >${Te(v(`commandPalette.rememberSettings`,{shortcut:`{shortcut}`}),x(u.commandPalette,{inline:!0}))}</span
                          ></label
                        >`}
                  ${r.failed?T`<div class="palette-session-settings__error" role="alert">${v(`commandPalette.settingsSaveFailed`)} <button type="button" class="btn btn--sm" @click=${()=>r.retry()}>${v(`common.retry`)}</button></div>`:w}
                </div>`:w}
        </div>
      </wa-popover>
    `}}})))()}var B;function V(){return(V=e((()=>{E(),De(),l(),A(),se(),p(),a(),ut(),ct(),ht(),qt(),Bt(),Nt(),At(),I(),z(),Pt(),k(),B=class e{static{this.nextId=0}constructor(t,n,i){this.host=t,this.read=n,this.callbacks=i,this.agentPickerOpen=!1,this.idPrefix=`palette-session-${++e.nextId}`,this.pasteImages=e=>{this.synchronizePresentationScope();let t=this.attachmentProps();this.read().open&&!this.messageLocked&&t&&mt(e,t,{imagesOnly:!0})},this.preferences=new F(()=>({draft:this.draft,context:this.read().context}),e=>this.restoreSettings(e),()=>t.requestUpdate()),this.settings=new R(t,this.idPrefix),this.connectMachine=new Ut(()=>({client:this.draft?.gateway.client??null,connected:this.draft?.gateway.connected??!1}),()=>t.requestUpdate()),this.subscriptions=new r(t).watchStore(()=>this.draft&&this.read().context?.agents).watchStore(()=>this.draft&&this.read().context?.agentIdentity).watchStore(()=>this.draft&&this.read().context?.sessions).watch(()=>this.draft&&this.read().context?.config,(e,t)=>e.subscribe(()=>t())),t.addController(this)}get message(){return this.draft?.submission.message??``}get mentions(){return this.draft?.submission.mentions??[]}get mentionDirectory(){return this.draft&&this.read().open&&!this.messageLocked?Ft({context:this.read().context,agentId:this.draft.place.agentId,draftOwnerKey:this.idPrefix,visibility:this.draft.submission.visibility}):void 0}get submitting(){return this.draft?.submission.submitting??!1}get messageLocked(){return this.submitting||!!(this.coldSubmitReadSignal||this.draft?.submission.pendingPlacement.sessionKey)}get hasPrompt(){return!!(this.message.trim()||this.draft?.submission.attachmentDraft.attachments.length)}get canSubmit(){return!this.coldSubmitReadSignal&&this.hasPrompt&&!!this.draft?.submission.canSubmit()}get error(){let e=this.draft?.submission;return e?.error??e?.blockedSubmitNotice()??(e?.submissionOutcomeUnknown?e.submitDisabledReason():null)??(this.preferences.failed?v(`commandPalette.settingsSaveFailed`):null)}get disabledReason(){return this.draft?.submission.submitDisabledReason()}setMessage(e,t){this.draft&&!this.messageLocked&&((e!==this.message||t!==void 0&&t!==this.mentions)&&(this.rejectedOpen=void 0,this.draft.submission.clearError()),this.draft.submission.setMessage(e,t))}attachmentProps(){let e=this.draft?.submission.attachmentDraft;if(!e)return;let t=e.reads.readSignal;return{uploadConfig:this.read().context?.config,attachments:e.attachments,attachmentReads:e.reads,attachmentLimits:Ct(this.read().context?.gateway.snapshot.hello?.policy),disabled:this.messageLocked,getAttachments:()=>e.attachments,readSignal:t,onPendingReadsChange:n=>e.reads.updatePending(t,n),onAttachmentsChange:n=>{t.aborted||!this.read().open||this.submitting||this.draft?.submission.pendingPlacement.sessionKey||(this.rejectedOpen=void 0,this.draft?.submission.clearError(),e.replace(n))}}}adoptImageFiles(e,t=!1){let n=this.attachmentProps();if(!this.read().open||this.messageLocked||!n)return;let r=vt(e,n);t&&r===e.length&&(this.coldSubmitReadSignal=n.readSignal,this.host.requestUpdate())}renderAttachments(){let e=this.attachmentProps(),t=e?yt(e):w;return t===w?w:T`<div class="cmd-palette__attachments">${t}</div>`}open(){if(this.synchronizePresentationScope(),this.draft&&(this.submitting||this.draft.submission.pendingPlacement.sessionKey||this.draft.submission.submissionOutcomeUnknown||this.draft.submission.error))return;let e=this.read().context?.agentSelection.state.selectedId??``;this.data={agentId:e,requestedAgentId:e,catalogId:``,catalogLabel:``,startTerminal:!1},this.draft||=new Lt(this.host,()=>({context:this.read().context,data:this.data,isConnected:this.host.isConnected}),{requestUpdate:()=>this.host.requestUpdate(),onMessageChange:e=>this.callbacks.onMessageChange?.(e),querySelector:e=>this.host.querySelector(e),activeElement:()=>this.host.ownerDocument.activeElement,body:()=>this.host.ownerDocument.body,pickerIdPrefix:this.idPrefix,preferenceScope:`palette`,readPalettePreference:()=>this.preferences.selection,closeTransientUi:()=>P(this.host),onInvalidate:()=>this.connectMachine.close(),onRecoveryReady:(e,t)=>this.bindOwner(e,t),onAccepted:e=>this.accepted(e),retainRejectedPrompt:!0}),this.rejectedOpen=void 0,this.coldSubmitReadSignal=void 0,this.draft.place.resetDraft(),this.draft.submission.resetDraft(),this.draft.place.setAgentsHydrated(this.draft.agentsReady()),this.preferences.begin(),this.draft.place.adoptAgentDefaults(),this.host.requestUpdate()}close(){this.coldSubmitReadSignal=void 0;let e=this.draft?.submission;e&&!this.submitting&&!e.pendingPlacement.sessionKey&&!e.submissionOutcomeUnknown&&!e.error?e.attachmentDraft.reset():e?.attachmentDraft.reads.abortReads(),this.settings.close(),this.draft?.browser.close(),this.connectMachine.close(),P(this.host)}async submit(){this.synchronizePresentationScope(),this.read().open&&!this.coldSubmitReadSignal&&this.hasPrompt&&this.draft&&await this.draft.submission.submit(void 0,!0)}hostUpdate(){this.synchronizePresentationScope()}synchronizePresentationScope(){let e=this.read().context?.gateway,t=e?C(e):void 0,n=this.presentationScope!==void 0&&this.presentationScope!==t;this.presentationScope=t,n&&(this.close(),this.rejectedOpen=void 0,this.owner=void 0,this.draft?.gateway.invalidateDiscovery(!0,`gateway-changed`),this.draft?.submission.releasePendingPlacementOwner(),this.draft?.submission.resetDraft(),this.draft?.submission.restoreMessage(``),this.callbacks.onMessageChange?.(``))}hostUpdated(){let e=this.draft;if(!e)return;this.connectMachine.open&&!e.place.isAdmin()&&this.connectMachine.close(),this.preferences.synchronize(),e.synchronizeSelections(),e.submission.resumeInterruptedSubmission();let t=e.submission.attachmentDraft;if(this.coldSubmitReadSignal&&(this.coldSubmitReadSignal.aborted||t.reads.pendingReads===0)){let e=!this.coldSubmitReadSignal.aborted&&!t.reads.project(t.attachments).some(e=>e.state===`error`);this.coldSubmitReadSignal=void 0,this.host.requestUpdate(),e&&this.submit()}this.read().open&&this.read().context?.agentIdentity.ensure(this.agentPickerOpen?e.place.agents().map(e=>e.id):[e.place.agentId])}hostDisconnected(){this.disconnect()}disconnect(){this.close(),this.subscriptions.clear(),this.draft?.disconnect()}renderControls(){let e=this.draft;return e?this.settings.render({draft:e,context:this.read().context,preferences:this.preferences,onAgentPickerOpen:e=>{this.agentPickerOpen=e,this.host.requestUpdate()},onChange:()=>this.preferences.changed(),onConnectMachine:()=>{e.place.isAdmin()&&(this.settings.close(),e.browser.close(),this.connectMachine.start())}}):w}restoreSettings(e){if(!this.draft||!this.data||this.messageLocked)return;let t=this.read().context?.agentSelection.state.selectedId??``,n=e?.agentId??t;this.data={...this.data,agentId:n,requestedAgentId:n},this.draft.place.resetDraft(),this.draft.place.setAgentsHydrated(this.draft.agentsReady()),this.draft.place.adoptAgentDefaults(),this.draft.place.restorePreferenceSelections()}renderRecovery(){return this.rejectedOpen?T`<button class="btn btn--sm" type="button" @click=${this.rejectedOpen}>
          ${v(`sessionsView.openSession`)}
        </button>`:w}renderAuxiliary(){return this.connectMachine.render(this.read().open&&(this.draft?.place.isAdmin()??!1),()=>{this.callbacks.onClose(),this.read().context?.navigate(`devices`)})}bindOwner(e,t){let n=this.read().context?.gateway;n&&(this.owner&&(this.owner.gateway!==n||this.owner.url!==e||this.owner.scope!==t)&&(this.rejectedOpen=void 0,this.draft?.submission.restoreMessage(``)),this.owner={gateway:n,url:e,scope:t})}accepted(e){let t=this.read().context;if(!t)return;let n=Vt(t),r=t.sessions.state.result?.sessions.find(t=>t.key===e.key),i=e.initialRun.status===`rejected`?e.initialRun.error:v(e.initialRun.status===`started`?`sessionsView.statusRunning`:`sessionsView.statusIdle`),a=()=>{this.read().context===t&&n()&&(It(t,e.key,e.agentId),e.initialRun.status===`rejected`&&this.callbacks.onClose())};le({fifo:!0,message:`${m(e.key,r)}: ${i}`,actionLabel:v(`sessionsView.openSession`),onAction:a}),e.initialRun.status===`rejected`?(this.rejectedOpen=a,this.host.requestUpdate()):this.callbacks.onClose()}}})))()}function an(e){let t=dn.get(e);return t?v(t):e}function H(e,t,n,r={}){return{...r,id:`nav-${r.id??e}`,label:t,icon:n,category:`navigation`,action:`nav:${e}`}}function on(e,t){return[H(`new-session`,v(`newSession.title`),`plus`),H(`sessions`,v(`palette.items.sessions`),`fileText`),H(`meetings`,v(`tabs.meetings`),`book`,{description:v(`subtitles.meetings`)}),H(`cron`,v(`palette.items.scheduled`),`scrollText`),H(`skills`,v(`palette.items.skills`),`zap`),H(`plugins`,v(`palette.items.plugins`),`plug`),H(`apps`,v(`palette.items.apps`),`layoutGrid`),H(`appearance`,v(`palette.items.settings`),`settings`,{id:`settings`}),H(`agents`,v(`palette.items.agents`),`folder`),{id:`slash:verbose`,label:`/verbose`,icon:`terminal`,category:`search`,action:`/verbose full`,description:v(`palette.descriptions.verboseMode`)},...[[e,`desktop`,`palette.items.desktop`,`monitor`],[t,`custodian`,`nav.askOpenClaw`,`lobster`]].flatMap(([e,t,n,r])=>e?[{id:`panel-${t}`,label:t===`custodian`?we():v(n),icon:r,category:`navigation`,action:`panel:${t}`}]:[])]}function sn(e){let t=on(e.desktopAvailable,e.custodianAvailable).filter(t=>e.includeSlashCommands||t.category!==`search`);if(!e.query)return t;let n=M(e.query),r=t=>{let r=M(t.label);return r===n?3:r.startsWith(n)?2:r.includes(n)||M(t.description).includes(n)||M(t.searchText).includes(n)||e.primaryModelSearch&&M(t.primaryModel).includes(n)?1:0},i=t.filter(e=>r(e)>0),a=e.catalogItems.map(e=>({item:e,rank:r(e)})).filter(({rank:e})=>e>0).toSorted((e,t)=>t.rank-e.rank||e.item.label.localeCompare(t.item.label)).slice(0,fn).map(({item:e})=>e);return[...e.sessionItems,...i,...a]}function cn(e,t=null){let n=xe(e,t).flatMap(e=>e.routes).concat(me).map(e=>({id:`settings-${e}`,label:Qt(e),icon:`settings`,category:`settings`,action:`nav:${e}`,description:Be(e),searchText:e})),r=pn.map(e=>({id:`app-${e}`,label:v(`appsPage.cards.${e}.title`),icon:`layoutGrid`,category:`apps`,action:`nav:apps`,description:v(`appsPage.cards.${e}.desc`),searchText:e})),i=en.meetingCapture;return[...n,...e?[{id:`settings-meeting-capture`,label:v(i.labelKey),icon:`settings`,category:`settings`,action:`nav:${i.routeId}`,search:i.search,hash:i.hash,searchText:i.aliases}]:[],...r]}async function ln(e){let t=async(t,n)=>e.methodAvailable(t)?e.client.request(t,n).catch(()=>null):null,[n,r,i,a]=await Promise.all([e.agents().catch(()=>null),e.methodAvailable(`cron.list`)?oe(e.client).catch(()=>null):null,t(`skills.status`,{agentId:e.agentId}),t(`plugins.list`,{})]);return[...(n?.agents??[]).map(e=>({id:`agent-${e.id}`,label:e.identity?.name??e.name??e.id,icon:`bot`,category:`agents`,action:`nav:agents`,agentId:e.id,description:e.id,searchText:[e.id,e.workspace,e.identity?.theme].filter(Boolean).join(` `),primaryModel:e.model?.primary})),...(r?.jobs??[]).map(e=>({id:`automation-${e.id}`,label:e.displayName??e.name,icon:`calendarClock`,category:`automations`,action:`nav:cron`,searchText:[e.id,e.declarationKey,e.name,e.agentId].filter(Boolean).join(` `)})),...(i?.skills??[]).map(e=>({id:`skill-${e.skillKey}`,label:e.name,icon:`zap`,category:`skills`,action:`nav:skills`,description:e.description,searchText:[e.skillKey,e.source].filter(Boolean).join(` `)})),...(a?.plugins??[]).map(e=>({id:`plugin-${e.id}`,label:e.name,icon:`plug`,category:`plugins`,action:e.installed?`nav:plugin-settings`:`nav:plugins`,pluginId:e.id,catalogId:e.installed?void 0:e.catalogId,hasPluginIcon:e.hasIcon,description:e.description,searchText:[e.id,e.packageName,e.category,e.kind?.join(` `)].filter(Boolean).join(` `)}))]}function un(e){return e.models.map(e=>({id:`model-${JSON.stringify([e.provider,e.id])}`,label:e.name||e.id,icon:`brain`,category:`models`,action:`nav:model-providers`,description:e.provider,searchText:[e.id,e.provider,e.alias,e.tags?.join(` `)].filter(Boolean).join(` `)}))}var dn,fn,pn;function U(){return(U=e((()=>{de(),l(),Zt(),A(),g(),$t(),tn(),_e(),k(),Xt(),dn=new Map([[`search`,`palette.categories.search`],[`navigation`,`palette.categories.navigation`],[`skills`,`palette.categories.skills`],[`agents`,`palette.items.agents`],[`apps`,`palette.items.apps`],[`automations`,`palette.items.scheduled`],[`models`,`routeTitles.modelProviders`],[`plugins`,`palette.items.plugins`],[`settings`,`palette.items.settings`],[`chats`,`sessionsView.title`],[`messages`,`palette.categories.messages`]]),fn=10,pn=[`ios`,`android`,`appleWatch`,`wearOs`,`macos`,`windows`,`linux`,`chrome`,`plugins`]})))()}function mn(e){return M(e).replace(/[\p{P}\s]+/gu,` `).trim()}function hn(){return(hn=e((()=>{})))()}function gn(e,t,n,r){let i=[r,e.label,e.subject,e.category],a=[...i,e.key,e.kind,e.model,e.modelProvider,e.owner?.actor.label,e.owner?.actor.id,e.createdActor?.label,e.createdActor?.id].map(e=>M(e)).filter(Boolean),o=n?i.map(mn):[];return a.some(e=>e===t)||o.some(e=>e===n)?3:a.some(e=>e.startsWith(t))||o.some(e=>e.startsWith(n))?2:a.some(e=>e.includes(t))||o.some(e=>e.includes(n))?1:0}function _n(e){let{visibleRows:t,visibleKeys:n,transcriptResult:r}=e,i=M(e.search),a=mn(e.search),o=Ke(r?.results??[],e=>e.sessionKey),s=new Map(t.map(e=>[e.key,e]));for(let e of r?.sessions??[])s.has(e.key)||s.set(e.key,e);return[...s.values()].map(e=>{let t=m(e.key,e),r=gn(e,i,a,t);return{row:e,label:t,rawMetadataRank:r,metadataRank:Math.max(+!!n.has(e.key),r),transcriptHit:o.get(e.key)}}).filter(({metadataRank:e,transcriptHit:t})=>e>0||t).toSorted((e,t)=>{let n=t.metadataRank-e.metadataRank;return n===0?(t.transcriptHit?.score??-1/0)-(e.transcriptHit?.score??-1/0)||(t.row.updatedAt??0)-(e.row.updatedAt??0):n}).slice(0,10).map(({row:e,label:t,rawMetadataRank:n,transcriptHit:r})=>({id:`session-${e.key}`,label:t,icon:`messageSquare`,category:r&&n===0?`messages`:`chats`,action:`${W}${e.key}`,session:e,description:r&&n===0?te(r.snippet.replace(/\s+/gu,` `).trim(),vn):void 0}))}var W,vn;function G(){return(G=e((()=>{hn(),d(),se(),W=`session:`,vn=160})))()}function K(e,t){let n=t.trim();return n?new RegExp(wt(n),`iu`).exec(e):null}function q(e,t){let n=K(e,t),r=n?.index??-1;return n?T`${e.slice(0,r)}<mark>${e.slice(r,r+n[0].length)}</mark>${e.slice(r+n[0].length)}`:e}function yn(e,t){function n(e,n){return e&&K(e,t)&&!n?` (${e})`:``}function r(e){let i=[],a=!1;for(let o of e){if(o.nesting===-1)break;if(o.nesting===1||o.type===`image`){let s=r(o.type===`image`?(o.children??[]).values():e);switch(a||=s.matched,o.type){case`strong_open`:i.push(T`<strong>${s.parts}</strong>`);break;case`em_open`:i.push(T`<em>${s.parts}</em>`);break;case`s_open`:i.push(T`<s>${s.parts}</s>`);break;case`image`:case`link_open`:{let e=n(String(o.attrGet(o.type===`image`?`src`:`href`)??``),s.matched);i.push(...s.parts,q(e,t)),a||=e.length>0;break}default:i.push(...s.parts)}}else o.type===`code_inline`?(i.push(T`<code>${q(o.content,t)}</code>`),a||=K(o.content,t)!==null):o.type===`softbreak`||o.type===`hardbreak`?i.push(` `):(i.push(q(o.content,t)),a||=K(o.content,t)!==null)}return{parts:i,matched:a}}return r((J.parseInline(e,{})[0]?.children??[]).values()).parts}function bn(e,t,n,r,i={},a){let o=e.session,s=o?.owner?.actor,c=n?h(n,r):void 0,l=e.pluginId;return T`
    ${n?T`<span class="cmd-palette__avatar" aria-hidden="true">
            ${it({id:n.id,avatar:_(n,r),textAvatar:ee(n,r)})}
            ${s?.id?T`<span class="cmd-palette__owner">${rt({...s,id:s.id})}</span>`:w}
          </span>`:l?nn(l,e.label,{iconUrl:i[l],onIconError:()=>a?.(l),className:`cmd-palette__plugin-icon`}):T`<span class="nav-item__icon" aria-hidden="true"
              >${e.id===`panel-custodian`?ot():S[e.icon]}</span
            >`}
    <span class="cmd-palette__item-copy">
      <span class="cmd-palette__item-heading">
        <span class="cmd-palette__item-title">${q(e.label,t)}</span>
        ${o?.updatedAt?T`<span class="cmd-palette__item-time">${ue(o.updatedAt,{fallback:``})}</span>`:w}
      </span>
      ${o?T`<span class="cmd-palette__item-meta">${c}${s?.id?T`<span aria-hidden="true"> · </span>${v(`sessionsView.ownedBy`,{name:s.label||s.id})}`:w}</span>`:w}
      ${e.description?T`<span class="cmd-palette__item-desc">${o?yn(e.description,t):q(e.description,t)}</span>`:w}
    </span>
  `}var J;function xn(){return(xn=e((()=>{E(),Et(),l(),ae(),ce(),d(),rn(),b(),nt(),at(),st(),J=new Tt({html:!1,linkify:!1}),J.normalizeLink=e=>e,J.normalizeLinkText=e=>e})))()}function Sn(e){let t=new Map;for(let n of e){let e=t.get(n.category)??[];e.push(n),t.set(n.category,e)}return[...t.entries()]}function Cn(e,t){if(!(t.draft.submitting||t.searchDebouncing)){if(e.action.startsWith(`nav:`)){let n=e.action.slice(4);e.agentId?t.onNavigate?.(n,{pathname:Ee(e.agentId,null,t.basePath)}):e.catalogId?t.onNavigate?.(n,{pathname:ve(e.catalogId,t.basePath)}):e.pluginId&&n===`plugin-settings`?t.onNavigate?.(n,{pathname:pe(e.pluginId,t.basePath)}):e.search||e.hash?t.onNavigate?.(n,{search:e.search,hash:e.hash}):t.onNavigate?.(n)}else e.action.startsWith(`session:`)?t.onSelectSession?.(e.action.slice(W.length)):e.action===`panel:desktop`?window.dispatchEvent(new CustomEvent(Ne,{detail:{open:!0}})):e.action===`panel:custodian`?window.dispatchEvent(new CustomEvent(Oe,{detail:{open:!0}})):t.onSlashCommand?.(e.action);t.onToggle()}}function wn(){requestAnimationFrame(()=>{document.querySelector(`.cmd-palette__item--active`)?.scrollIntoView({block:`nearest`})})}function Tn(e,t){let n=t();if(e.defaultPrevented)return;if(n.composing||e.isComposing||e.keyCode===229){e.stopPropagation();return}if(!(e.target instanceof HTMLTextAreaElement)||e.target.id!==X)return;if(e.key===`Enter`&&e.repeat){e.preventDefault();return}if(!n.draft.messageLocked&&!e.shiftKey&&!e.altKey&&!e.metaKey&&!e.ctrlKey&&n.mentionMenu.handleKeydown(e,n.mentionHost,n.requestUpdate)){e.stopPropagation();return}if(re(u.modifiedEnter,e)){e.preventDefault(),e.stopPropagation(),n.draft.submit();return}if(e.shiftKey||e.altKey||e.metaKey||e.ctrlKey)return;if(e.key===`Escape`){e.preventDefault(),e.stopPropagation(),n.onToggle();return}if(n.draft.submitting)return;e.key===`Enter`&&n.searchDebouncing&&(n.onFlushSearch(),n=t());let{items:r,activeIndex:i}=On(n),a=n.searchDebouncing?[]:r;if(e.key===`Enter`){e.preventDefault();let t=a[i];t&&Cn(t,n);return}if(a.length===0||n.query.includes(`
`)||e.key!==`ArrowDown`&&e.key!==`ArrowUp`)return;e.preventDefault();let o=e.key===`ArrowDown`?1:-1;n.onActiveIdChange(a[(i+o+a.length)%a.length].id),wn()}function En(e){return`cmd-palette-option-${e}`}function Dn(e,t){return t===`all`||e.category===(t===`sessions`?`chats`:`messages`)}function On(e){let t=e.promptMode||e.mentionMenu.open||e.draft.mentions.length>0,n=t?[]:sn({...e,query:e.searchQuery,includeSlashCommands:!!e.onSlashCommand}),r=Sn(n.filter(t=>Dn(t,e.filter))),i=r.flatMap(([,e])=>e);return{hideSearch:t,matches:n,grouped:r,items:i,activeIndex:Math.max(0,i.findIndex(t=>t.id===e.activeId))}}function Y(e,t){return T`<span class="cmd-palette__hint">${e}${` `}<span>${t}</span></span>`}function kn(e){let t=e();if(!t.open)return w;let n=t.mentionMenu.open,r=bt(t.mentionHost.paneId,`mention-menu-listbox`),i=bt(t.mentionHost.paneId,`mention-announcement`),{hideSearch:a,matches:o,grouped:s,items:c,activeIndex:l}=On(t),d=[t.sessionSearchFailed?v(`palette.searchFailed`):t.sessionSearchIndexing?v(`palette.searchIndexing`):t.sessionSearchPartial?v(`palette.searchPartial`):null,t.archivedTranscriptsExcluded>0?v(`sessionsView.transcriptSearchArchivedExcluded`,{count:String(t.archivedTranscriptsExcluded)}):null].filter(e=>!!e),p=!t.searchDebouncing&&c[l]?En(l):void 0,m=v(`palette.placeholder`),h=v(t.draft.submitting?`palette.startingSession`:`palette.startSession`),g=t.composing||!t.draft.canSubmit,_=t.draft.disabledReason??(t.draft.hasPrompt?void 0:v(`palette.promptRequired`)),ee=x(u.modifiedEnter),te=!!t.searchQuery.trim()&&!t.sessionSearchPending&&!t.catalogSearchPending&&!t.modelSearchError&&!t.sessionSearchFailed&&!t.sessionSearchPartial&&!t.sessionSearchIndexing&&t.archivedTranscriptsExcluded===0;return T`
    <openclaw-modal-dialog
      class="cmd-palette-overlay palette"
      label=${m}
      style=${Se}
      @modal-cancel=${e=>{if(t.composing||t.mentionMenu.open){e.preventDefault(),t.composing||(t.mentionMenu.close(),t.requestUpdate());return}if(t.draft.submitting){e.preventDefault();return}t.onToggle()}}
    >
      <div
        class="cmd-palette ${a?`cmd-palette--prompt`:``}"
        @click=${e=>e.stopPropagation()}
        @keydown=${t=>Tn(t,e)}
      >
        ${ye({value:t.query,placeholder:m,onInputRef:t.onInputRef,onValueChange:t.onQueryChange,onBeforeInput:t.onBeforeInput,onSelectionChange:t.onSelectionChange,onCompositionStart:t.onCompositionStart,onCompositionEnd:t.onCompositionEnd,onPaste:t.draft.pasteImages,disabled:t.draft.submitting,readOnly:t.draft.messageLocked,controls:n?r:a?void 0:Z,activeDescendant:n?(t.draft.mentions.length<10?t.mentionMenu.activeId(t.mentionHost.paneId):null)??void 0:p,describedBy:n?i:a?void 0:`cmd-palette-keys`,actions:T`
            <openclaw-tooltip content=${_??v(`palette.startSessionBackground`)}>
              <button
                type="button"
                class="cmd-palette__create"
                aria-label=${v(`palette.startSessionBackground`)}
                aria-busy=${String(t.draft.submitting)}
                ?disabled=${g}
                @click=${()=>{t.composing||t.draft.submit()}}
              >
                ${h}${ee}
              </button>
            </openclaw-tooltip>
            ${t.draft.renderControls()}
          `})}
        ${t.draft.mentions.length?T`<div class="cmd-palette__mentions" ?inert=${t.draft.messageLocked}>
                ${xt(t.query,t.draft.mentions,()=>{t.draft.setMessage(t.query,[]),t.requestUpdate(),t.mentionHost.getTextarea()?.focus({preventScroll:!0})},t.mentionMenu.selectedAvatarUrls)}
              </div>`:w}
        ${t.draft.renderAttachments()}
        ${t.mentionMenu.render(t.mentionHost,t.requestUpdate)}
        <span
          id=${i}
          class="sr-only"
          role="status"
          aria-live="polite"
          aria-atomic="true"
          >${t.mentionMenu.activeLabel()}</span
        >
        <div
          class="cmd-palette__search"
          ?inert=${a}
          aria-hidden=${a?`true`:w}
        >
          <div class="cmd-palette__search-content">
            ${a?Ge:T`
                    ${t.searchQuery.trim()&&t.onSelectSession?T`<div
                            class="cmd-palette__filters"
                            role="group"
                            aria-label=${v(`palette.filterLabel`)}
                          >
                            ${[`all`,`sessions`,`messages`].map(e=>T`<button type="button" class="cmd-palette__filter" aria-pressed=${t.filter===e?`true`:`false`} @click=${()=>t.onFilterChange(e)}>${v(`palette.filters.${e}`)}<span>${o.filter(t=>Dn(t,e)).length}</span></button>`)}
                          </div>`:w}
                    ${t.sessionSearchPending||t.catalogSearchPending?T`<div class="cmd-palette__empty" role="status">
                            ${v(t.sessionSearchPending?`palette.searchingSessions`:`palette.searchingCommands`)}
                          </div>`:w}
                    <div
                      id=${Z}
                      class="cmd-palette__results"
                      ?hidden=${c.length===0}
                      role="listbox"
                      aria-label=${m}
                      aria-busy=${t.searchDebouncing||t.sessionSearchPending||t.catalogSearchPending?`true`:`false`}
                    >
                      ${s.map(([e,n])=>T`
                          <div class="cmd-palette__group-label">
                            ${an(e)}<span
                              class="cmd-palette__group-count"
                              >${n.length}</span
                            >
                          </div>
                          ${n.map(e=>{let n=c.indexOf(e),r=n===l,i=e.session?f(e.session,t.defaultAgentId):e.agentId,a=i?t.agents.find(e=>e.id===i)??{id:i}:void 0;return T`
                              <div
                                id=${En(n)}
                                class="cmd-palette__item ${e.session?`cmd-palette__item--session`:``} ${r?`cmd-palette__item--active`:``}"
                                role="option"
                                aria-selected=${r?`true`:`false`}
                                aria-disabled=${t.draft.submitting||t.searchDebouncing?`true`:w}
                                @click=${n=>{n.stopPropagation(),Cn(e,t)}}
                                @mouseenter=${()=>t.onActiveIdChange(e.id)}
                              >
                                ${bn(e,t.searchQuery,a,t.agentIdentity?.get(i),t.pluginIconUrls,t.onPluginIconError)}
                              </div>
                            `})}
                        `)}
                    </div>
                    ${t.modelSearchError?T`<div class="cmd-palette__source-error" role="status">${t.modelSearchError}</div>`:w}
                    ${d.map(e=>T`<div class="cmd-palette__source-error" role="status">${e}</div>`)}
                    ${c.length===0&&te?T`<div class="cmd-palette__no-results" role="status">
                            <span class="cmd-palette__no-results-icon" aria-hidden="true"
                              >${S.messageSquarePlus}</span
                            >
                            <h2>${v(`palette.noResults`)}</h2>
                            <p>
                              ${Te(v(`palette.noResultsStart`,{shortcut:`{shortcut}`}),x(u.modifiedEnter,{inline:!0}))}
                            </p>
                          </div>`:w}
                    <div id="cmd-palette-keys" class="cmd-palette__footer">
                      ${c.length>0&&!t.query.includes(`
`)?T`${Y(Me([`↑`,`↓`]),v(`palette.footer.navigate`))}
                            ${Y(Me(`↵`),v(`palette.footer.select`))}`:w}
                      ${Y(x(u.newline),v(`palette.footer.newline`))}
                    </div>
                  `}
          </div>
        </div>
        ${t.draft.error?T`<div class="cmd-palette__creation-error" role="alert">${t.draft.error}</div>`:w}
        ${t.draft.renderRecovery()===w?w:T`<div class="cmd-palette__footer">${t.draft.renderRecovery()}</div>`}
      </div>
    </openclaw-modal-dialog>
    ${t.draft.renderAuxiliary()}
  `}var X,Z;function An(){return(An=e((()=>{E(),ke(),l(),A(),Ye(),c(),ne(),ft(),pt(),U(),y(),ge(),xn(),G(),b(),Fe(),Pe(),he(),Le(),k(),X=be,Z=`cmd-palette-listbox`})))()}var jn,Mn,Nn,Pn,Q,Fn,$;function In(){return(In=e((()=>{tt(),Ue(),fe(),De(),Re(),l(),Ye(),Je(),n(),Wt(),ne(),Yt(),_t(),o(),a(),St(),V(),Dt(),U(),y(),G(),An(),jn=200,Mn=2,Nn=60,Pn=50,Q={includeGlobal:!1,includeUnknown:!1,configuredAgentsOnly:!0,excludeSubagents:!0,excludeCron:!0,excludeSystem:!0,excludeDock:!0},Fn=3e4,$=class extends t{get query(){return this.draft.message}constructor(){super(),this.desktopAvailable=!1,this.custodianAvailable=!1,this.open=!1,this.pluginIconUrls={},this.pluginIcons=new Ot({getFetchContext:()=>kt(this.context),isConnected:()=>this.isConnected&&this.open&&this.gateway.connected,onUrlsChange:e=>{this.pluginIconUrls=e}}),this.mentionMenu=new dt,this.composing=!1,this.mentionHost={paneId:`command-palette`,getDraft:()=>this.query,getMentions:()=>this.draft.mentions,getTextarea:()=>this.inputElement??null,commitDraft:(e,t)=>this.draft.setMessage(e,t)},this.requestMentionUpdate=()=>{this.mentionMenu.open||this.draft.mentions.length>0?(this.clearSessionSearch(),this.clearCatalogSearch()):this.scheduleSessionSearch(this.query),this.requestUpdate()},this.filter=`all`,this.draft=new B(this,()=>({context:this.context,open:this.open}),{onClose:()=>this.closePalette(),onMessageChange:e=>{let t=e.trim(),n=Array.from(t).length;this.promptMode=t.includes(`
`)||(this.promptMode?n>Pn:n>=Nn),t||(this.filter=`all`),this.scheduleSessionSearch(e)}}),this.searchQuery=``,this.promptMode=!1,this.activeId=null,this.sessionItems=[],this.catalogItems=[],this.sessionSearchPending=!1,this.sessionSearchFailed=!1,this.sessionSearchPartial=!1,this.archivedTranscriptsExcluded=0,this.sessionSearchIndexing=!1,this.subscriptions=new r(this),this.sessionSearchTimer=null,this.sessionSearchId=0,this.modelReader=new Kt(()=>this.requestUpdate()),this.gateway=new gt(this,{getGateway:()=>this.context?.gateway,invalidateRequests:()=>{this.clearSessionSearch(),this.clearCatalogSearch(),this.scheduleSessionSearch(this.query)},onSnapshot:()=>this.synchronizePresentationScope(),ensureInitialData:()=>this.scheduleSessionSearch(this.query)}),this.togglePalette=()=>{if(this.open){this.draft.submitting||this.closePalette();return}this.openPalette()},this.handleInputRef=e=>{this.inputElement?.removeEventListener(`focus`,this.adoptInitialInput),this.inputElement=e instanceof HTMLTextAreaElement?e:void 0,this.inputElement?.addEventListener(`focus`,this.adoptInitialInput)},this.adoptInitialInput=()=>{let e=this.inputElement;if(!this.open||!e?.isConnected||document.activeElement!==e)return;if(this.takeInitialInput){let t=this.takeInitialInput;this.takeInitialInput=void 0;let n=t();if(!n){this.closePalette();return}this.initialInput=n,this.draft.setMessage(n.value),e.value=n.value}let t=this.initialInput;t&&(this.initialInput=void 0,t.returnFocus!==void 0&&e.closest(`openclaw-modal-dialog`)?.setReturnFocusTarget(t.returnFocus),e.setSelectionRange(t.selectionStart,t.selectionEnd,t.selectionDirection),!t.submitRequested&&t.mentionTrigger!==void 0&&t.selectionStart===t.selectionEnd&&t.value.slice(0,t.selectionStart).lastIndexOf(`@`)===t.mentionTrigger&&(this.mentionMenu.syncDirectory(this.draft.mentionDirectory),this.mentionMenu.update(e,this.requestMentionUpdate,`trigger`)),t.imageFiles?.length?this.draft.adoptImageFiles(t.imageFiles,t.submitRequested):t.submitRequested&&this.draft.submit())},this.handleGlobalKeydown=e=>{e.defaultPrevented||this.composing||e.isComposing||e.keyCode===229||Ce(e)&&(e.preventDefault(),this.togglePalette())},this.subscriptions.effect(()=>this.context?.gateway,e=>e.subscribeEvents(t=>{let n=s(t);this.context?.gateway===e&&(t.event===`cron`||t.event===`chat.metadata.changed`||n)&&(n===`clear`&&(this.catalogLoad=void 0,this.catalogItems=[]),this.open?this.ensureCatalogItems(!0):this.clearCatalogSearch())})),this.subscriptions.watchStore(()=>this.context?.agentSelection,()=>{this.clearSessionSearch(),this.clearCatalogSearch(),this.scheduleSessionSearch(this.query)})}connectedCallback(){super.connectedCallback(),document.addEventListener(`keydown`,this.handleGlobalKeydown)}disconnectedCallback(){document.removeEventListener(`keydown`,this.handleGlobalKeydown),this.initialInput=void 0,this.takeInitialInput=void 0,this.inputElement?.removeEventListener(`focus`,this.adoptInitialInput),this.inputElement=void 0,this.open=!1,this.mentionMenu.dispose(),this.composing=!1,this.mentionInput=void 0,this.activeId=null,this.clearSessionSearch(),this.clearCatalogSearch(),super.disconnectedCallback()}openPalette(e){let t=document.activeElement instanceof HTMLElement?document.activeElement:null;this.open=!0,this.mentionMenu.close(),this.draft.open(),this.composing=!1,this.mentionInput=void 0,this.takeInitialInput=typeof e==`function`?e:void 0,this.initialInput=typeof e==`function`?void 0:e??{value:this.query,selectionStart:this.query.length,selectionEnd:this.query.length,selectionDirection:`none`,returnFocus:t},this.initialInput&&this.draft.setMessage(this.initialInput.value),this.activeId=null,this.filter=`all`,this.scheduleSessionSearch(this.query)}synchronizePresentationScope(){let e=this.context?.gateway,t=e?C(e):void 0;this.presentationScope&&this.presentationScope!==t&&(this.closePalette(),this.activeId=null,this.clearCatalogSearch()),this.presentationScope=t}get isOpen(){return this.open}closePalette(){this.mentionMenu.close(),this.composing=!1,this.mentionInput=void 0,this.initialInput=void 0,this.takeInitialInput=void 0,this.open=!1,this.draft.close(),this.clearSessionSearch()}updated(){this.adoptInitialInput();let e=new Set(this.catalogItems.flatMap(e=>e.hasPluginIcon&&e.pluginId?[e.pluginId]:[]));this.pluginIcons.reconcileKeys(e);for(let t of this.querySelectorAll(`.cmd-palette__plugin-icon[data-plugin-icon-id]`)){let n=t.dataset.pluginIconId;n&&e.has(n)&&this.pluginIcons.load(n)}}invalidateSessionSearch(){this.sessionSearchTimer!==null&&(globalThis.clearTimeout(this.sessionSearchTimer),this.sessionSearchTimer=null),this.sessionSearchId+=1}clearSessionSearch(){this.invalidateSessionSearch(),this.sessionItems=[],this.sessionSearchPending=!1,this.sessionSearchFailed=!1,this.sessionSearchPartial=!1,this.archivedTranscriptsExcluded=0,this.sessionSearchIndexing=!1}clearCatalogSearch(){this.modelReader.clear(),this.catalogLoad=void 0,this.catalogItems=[],this.pluginIcons.reset()}ensureCatalogItems(e=!1){let t=this.context,n=t?.gateway,r=n?.snapshot.client;if(!this.open||this.promptMode||this.mentionMenu.open||this.draft.mentions.length>0||!t||!this.gateway.connected||!n||!r)return Promise.resolve();let a=t.agentSelection.state.selectedId??i(n.snapshot),o=this.catalogLoad,s=!e&&o?.client===r&&o.agentId===a&&(o.loadedAt===void 0||Date.now()-o.loadedAt<Fn),c=this.modelReader.bind(n,{agentId:a});if((!s&&!e||c||this.modelReader.failed)&&this.modelReader.read(),s)return o.promise;let l=n.snapshot,u=C(n),d=ln({client:r,agentId:a,agents:()=>t.agents?.ensureList?.()??Promise.resolve(null),methodAvailable:e=>!!qe(l,e)}).then(e=>{this.catalogLoad?.promise===d&&C(n)===u&&this.context?.gateway===n&&this.context?.agentSelection===t.agentSelection&&n.snapshot.client===r&&(this.catalogItems=e,this.catalogLoad={...this.catalogLoad,loadedAt:Date.now()})});return this.catalogLoad={client:r,agentId:a,promise:d},d}scheduleSessionSearch(e,t=!1){if(this.invalidateSessionSearch(),this.promptMode||this.mentionMenu.open||this.draft.mentions.length>0){this.clearSessionSearch(),this.clearCatalogSearch();return}let n=$e(e);if(!this.open||!n){this.clearSessionSearch(),this.searchQuery=e,this.activeId=null;return}if(this.composing)return;let r=()=>{this.clearSessionSearch(),this.searchQuery!==e&&(this.activeId=null),this.searchQuery=e,!(n.length<Mn)&&(this.sessionSearchPending=!!(this.onSelectSession&&this.context?.sessions&&this.gateway.connected),this.ensureCatalogItems(),this.onSelectSession?this.searchSessions(n):this.sessionSearchPending=!1)};t?r():this.sessionSearchTimer=globalThis.setTimeout(r,jn)}async searchSessions(e){let t=this.context,n=t?.sessions,r=t?.gateway,i=r?.snapshot.client;if(!n||r?.snapshot.phase!==`connected`||!i){this.sessionSearchPending=!1;return}let a=++this.sessionSearchId,o=C(r),s=()=>a===this.sessionSearchId&&C(r)===o&&this.open&&this.context?.sessions===n&&this.context?.gateway===r&&this.context?.agentSelection===t?.agentSelection&&r.snapshot.client===i&&r.snapshot.phase===`connected`,c=Jt({client:i,query:e,listOptions:Q,isCurrent:s}).then(e=>({error:!1,result:e})).catch(()=>({error:!0,result:null}));try{let t=await n.list({...Q,source:`command-palette`,search:e,limit:10});if(!s()||!t)return;let r=t.sessions,i=new Set(r.map(e=>e.key)),a=await c;if(!s())return;let o=a.result;this.sessionSearchPartial=a.error,this.archivedTranscriptsExcluded=o?.archivedTranscriptsExcluded??0,this.sessionSearchIndexing=o?.indexing===!0,this.sessionItems=_n({visibleRows:r,visibleKeys:i,transcriptResult:o,search:e})}catch{s()&&(this.sessionSearchFailed=!0)}finally{s()&&(this.sessionSearchPending=!1)}}updateMentionMenu(e){if(this.mentionMenu.syncDirectory(this.draft.mentionDirectory),!this.mentionMenu.open&&!e)return;let t=this.inputElement;if(!t||this.composing||e?.isComposing||e?.inputType===`insertFromPaste`||e?.inputType===`insertFromDrop`){this.mentionMenu.close(),this.requestMentionUpdate();return}this.mentionMenu.update(t,this.requestMentionUpdate,e?e.inputType===`insertText`&&e.data?.includes(`@`)===!0?`trigger`:`input`:`selection`)}render(){this.mentionMenu.syncDirectory(this.draft.mentionDirectory);let e=this.modelReader.snapshot;return kn(()=>({basePath:this.context?.basePath??``,open:this.open,query:this.query,searchQuery:this.searchQuery,searchDebouncing:this.composing||this.query!==this.searchQuery,onFlushSearch:()=>this.scheduleSessionSearch(this.query,!0),promptMode:this.promptMode,mentionMenu:this.mentionMenu,mentionHost:this.mentionHost,requestUpdate:this.requestMentionUpdate,composing:this.composing,onBeforeInput:e=>{let t=this.inputElement;this.mentionInput=t?{value:t.value,start:t.selectionStart,end:t.selectionEnd,inputType:e.inputType}:void 0},onSelectionChange:()=>this.updateMentionMenu(),onCompositionStart:()=>{this.composing=!0,this.invalidateSessionSearch(),this.mentionMenu.close(),this.requestUpdate()},onCompositionEnd:()=>{this.composing=!1,this.updateMentionMenu(),this.scheduleSessionSearch(this.query)},activeId:this.activeId,filter:this.filter,onFilterChange:e=>{this.filter=e,this.activeId=null},agents:this.context?.agents.state.agentsList?.agents??[],agentIdentity:this.context?.agentIdentity,defaultAgentId:this.context?.agentSelection.state.selectedId??i(this.context?.gateway.snapshot??{}),sessionItems:this.sessionItems,modelSearchError:this.modelReader.failed?v(`palette.modelSearchFailed`):null,primaryModelSearch:e.hasSnapshot&&!e.modelSelectionPolicy?.restricted,catalogItems:[...cn(ze(this.context?.gateway.snapshot.hello?.auth??null),this.context?.nativeDeviceSettings),...this.catalogItems,...un(e)],sessionSearchPending:this.sessionSearchPending,catalogSearchPending:!!($e(this.searchQuery)&&!this.promptMode&&(this.catalogLoad&&this.catalogLoad.loadedAt===void 0||this.modelReader.pending)),sessionSearchFailed:this.sessionSearchFailed,sessionSearchPartial:this.sessionSearchPartial,sessionSearchIndexing:this.sessionSearchIndexing,archivedTranscriptsExcluded:this.archivedTranscriptsExcluded,desktopAvailable:this.desktopAvailable,custodianAvailable:this.custodianAvailable,onToggle:this.togglePalette,onQueryChange:(e,t)=>{this.draft.setMessage(e,Qe(this.query,e,this.draft.mentions,this.mentionInput)),this.mentionInput=void 0,this.updateMentionMenu(t)},onActiveIdChange:e=>{this.activeId=e},onNavigate:this.onNavigate,onSelectSession:this.onSelectSession,onSlashCommand:this.onSlashCommand,pluginIconUrls:this.pluginIconUrls,onPluginIconError:e=>this.pluginIcons.handleError(e),onInputRef:this.handleInputRef,draft:this.draft}))}},j([D({attribute:!1})],$.prototype,`onNavigate`,void 0),j([D({attribute:!1})],$.prototype,`onSelectSession`,void 0),j([D({attribute:!1})],$.prototype,`onSlashCommand`,void 0),j([D({attribute:!1})],$.prototype,`desktopAvailable`,void 0),j([D({attribute:!1})],$.prototype,`custodianAvailable`,void 0),j([et({context:Ae,subscribe:!0})],$.prototype,`context`,void 0),j([O()],$.prototype,`open`,void 0),j([O()],$.prototype,`pluginIconUrls`,void 0),j([O()],$.prototype,`composing`,void 0),j([O()],$.prototype,`filter`,void 0),j([O()],$.prototype,`searchQuery`,void 0),j([O()],$.prototype,`promptMode`,void 0),j([O()],$.prototype,`activeId`,void 0),j([O()],$.prototype,`sessionItems`,void 0),j([O()],$.prototype,`catalogItems`,void 0),j([O()],$.prototype,`sessionSearchPending`,void 0),j([O()],$.prototype,`sessionSearchFailed`,void 0),j([O()],$.prototype,`sessionSearchPartial`,void 0),j([O()],$.prototype,`archivedTranscriptsExcluded`,void 0),j([O()],$.prototype,`sessionSearchIndexing`,void 0),j([O()],$.prototype,`sessionSearchTimer`,void 0),j([O()],$.prototype,`catalogLoad`,void 0),customElements.get(`openclaw-command-palette`)||customElements.define(`openclaw-command-palette`,$)})))()}In();export{$ as CommandPalette};