UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

36 lines 7.09 kB
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{wr as t}from"./control-ui-foundation-Cydpkyqa.js";import{Eo as n,Oo as r,Sc as i,bc as a}from"./control-ui-core-Rwzhj6nO.js";import{$ as o,K as s,X as c,at as l,q as u,st as d}from"./lit-runtime-CV_MH99K.js";import{Qt as f,nn as p,tn as m}from"./control-ui-core-YphAl4aM.js";import{Gt as h,Wt as g,Yt as _,en as v}from"./control-ui-core-vvcQQV2m.js";import{Ft as y,Pt as b}from"./control-ui-boot-shared-BYq7Cchl.js";import{a as x,i as S,r as C}from"./gateway-runtime-Bqqcp9-I.js";import{Cn as w,wn as T,yn as E}from"./control-ui-boot-chat-_QSl8fbH.js";import{t as D}from"./board-view-MrEmUNnS.js";var O;function k(){return(k=e((()=>{y(),s(),o(),p(),h(),_(),T(),r(),C(),i(),D(),O=class extends a{constructor(...e){super(...e),this.sessionKey=null,this.preparedSession=null,this.onDocumentClose=null,this.passive=!1,this.documentState=`loading`,this.activeTabId=``,this.errorText=``,this.provider=null,this.providerLease=null,this.binding=null,this.unsubscribeSnapshot=null,this.unsubscribeLoadError=null,this.unsubscribeEvents=null,this.bindingGeneration=0}connectedCallback(){super.connectedCallback(),this.requestUpdate(`gatewaySnapshot`)}disconnectedCallback(){this.releaseProvider(),super.disconnectedCallback()}updated(e){(e.has(`sessionKey`)||e.has(`preparedSession`)||e.has(`gatewaySnapshot`))&&this.synchronizeProvider()}providerCapabilities(e){let t=m(e.hello?.auth??null);return{canMutate:t,canGrant:f(e.hello?.auth??null),canPinWidgets:t&&S(e,b.BOARD_WIDGET_PUT_CANVAS_DOC)===!0,canPinMcpApps:t&&x(e,`board.widget.appView`)===!0&&x(e,`board.widget.put`)===!0}}synchronizeProvider(){if(!this.isConnected)return;let e=(this.preparedSession?.sessionKey??this.sessionKey)?.trim()??``;if(!e){this.releaseProvider(),this.documentState=`missing-session`;return}let t=this.gatewaySnapshot,n=t?.client;if(!t||!n){this.releaseProvider(),this.documentState=`loading`;return}if(x(t,`board.get`)===!1){this.releaseProvider(),this.documentState=`unavailable`;return}let r=this.providerCapabilities(t),i=JSON.stringify(r);if(this.binding?.client===n&&this.binding.sessionKey===e&&(!this.preparedSession||this.binding.session.agentId===this.preparedSession.agentId)&&this.binding.capabilityKey===i){this.providerLease?.update(n,t.phase===`connected`,r);return}this.releaseProvider(),this.documentState=`loading`;let a=this.bindingGeneration;this.bindProvider({client:n,sessionKey:e,capabilityKey:i},r,a,this.preparedSession)}async bindProvider(e,t,r,i){try{let n=i?null:await e.client.request(`sessions.describe`,{key:e.sessionKey});if(r!==this.bindingGeneration)return;if(!i&&!n?.session){this.documentState=`not-found`;return}let a=this.gatewaySnapshot;if(!a||a.client!==e.client)return;let o=i??{sessionKey:n.session.key,agentId:n.session.agentId},s=E(o,e.client,a.phase===`connected`,t.canPinWidgets,t.canPinMcpApps,t.canMutate,t.canGrant),c=s.provider;this.provider=c,this.providerLease=s,this.binding={...e,session:o},this.unsubscribeSnapshot=c.snapshot$.subscribe(()=>this.reconcileProvider(c)),this.unsubscribeLoadError=c.loadError$.subscribe(()=>this.reconcileProvider(c)),this.unsubscribeEvents=c.events.subscribe(e=>{let t=e.command;t.kind===`focus_tab`&&c.snapshot$.value.tabs.some(e=>e.tabId===t.tabId)&&(this.activeTabId=t.tabId)}),this.reconcileProvider(c)}catch(e){r===this.bindingGeneration&&(this.errorText=n(e),this.documentState=`error`)}}selectAvailableTab(){let e=this.snapshot;e&&(e.tabs.some(e=>e.tabId===this.activeTabId)||(this.activeTabId=e.tabs[0]?.tabId??e.widgets[0]?.tabId??``))}reconcileProvider(e){if(this.provider!==e)return;if(w(e)){this.snapshot=e.snapshot$.value,this.selectAvailableTab(),this.documentState=`ready`;return}let t=e.loadError$.value;t?(this.errorText=t,this.documentState=`error`):(this.errorText=``,this.documentState=`loading`)}releaseProvider(){this.bindingGeneration+=1,this.unsubscribeSnapshot?.(),this.unsubscribeLoadError?.(),this.unsubscribeEvents?.(),this.unsubscribeSnapshot=null,this.unsubscribeLoadError=null,this.unsubscribeEvents=null,this.providerLease?.release(),this.provider=null,this.providerLease=null,this.binding=null,this.snapshot=void 0,this.activeTabId=``,this.errorText=``}renderState(){if(this.documentState===`loading`)return c`<div class="board-document__state" role="status" aria-live="polite"> ${v(`common.loading`)} </div>`;if(this.documentState===`missing-session`)return c`<div class="board-document__state" role="status"> ${v(`dashboardDocument.missingSession`)} </div>`;if(this.documentState===`not-found`)return c`<div class="board-document__state" role="status"> ${v(`dashboardDocument.notFound`)} </div>`;if(this.documentState===`unavailable`)return c`<div class="board-document__state" role="status"> ${v(`dashboardDocument.unavailable`)} </div>`;if(this.documentState===`error`)return c`<div class="board-document__state board-document__state--error" role="alert"> ${v(`dashboardDocument.loadFailed`,{error:this.errorText})} </div>`;let e=this.provider,t=this.snapshot,n=this.binding?.session;if(!e||!t||!n)return u;let r={appViewGeneration:e.appViewGeneration,applyOps:t=>e.applyOps(t),grant:(t,n)=>e.grant(t,n),selectTab:e=>{this.activeTabId=e},frameLoadFailed:t=>e.refreshWidgetFrame(t),...this.passive?{}:{widgetAppView:(t,n)=>e.widgetAppView(t,n),refreshWidgetAppView:(t,n)=>e.refreshWidgetAppView(t,n)}},i=this.passive?{...t,widgets:t.widgets.filter(e=>e.contentKind===`html`)}:t;return c`<openclaw-board-view .active=${!0} .bridgeEnabled=${!this.passive} .fitAutoContent=${!0} .session=${n} .snapshot=${i} .activeTabId=${this.activeTabId} .widgetFrameUrl=${(t,n)=>e.widgetFrameUrl(t,n)} .callbacks=${r} .canMutate=${!this.passive&&e.canMutate} .canGrant=${!this.passive&&e.canGrant} ></openclaw-board-view>`}render(){return c` <main class="board-document" aria-label=${v(`board.label`)}> ${this.onDocumentClose?c`<button class="btn btn--ghost btn--icon board-document__close" type="button" aria-label=${v(`dashboardDocument.close`)} title=${v(`dashboardDocument.close`)} @click=${this.onDocumentClose} > ${g.x} </button>`:u} <div class="board-document__content">${this.renderState()}</div> </main> `}},t([d({attribute:!1})],O.prototype,`gatewaySnapshot`,void 0),t([d({attribute:!1})],O.prototype,`sessionKey`,void 0),t([d({attribute:!1})],O.prototype,`preparedSession`,void 0),t([d({attribute:!1})],O.prototype,`onDocumentClose`,void 0),t([d({type:Boolean})],O.prototype,`passive`,void 0),t([l()],O.prototype,`documentState`,void 0),t([l()],O.prototype,`snapshot`,void 0),t([l()],O.prototype,`activeTabId`,void 0),t([l()],O.prototype,`errorText`,void 0),customElements.get(`openclaw-board-document`)||customElements.define(`openclaw-board-document`,O)})))()}k();export{O as OpenClawBoardDocument}; //# sourceMappingURL=board-document-B_hi1f-Z.js.map