Files
openclaw-config/cache/control-ui-assets/d08fd045b9cb86d13f0b4aa403c8a06ddcd32e533058ae463245169e5cff5e85/assets/mcp-app-view-registration-BaqCYBMP.js
T

72 lines
65 KiB
JavaScript

import{i as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{Fi as n,X as r,Y as i,er as a}from"./control-ui-foundation-CeFMP1Ly.js";import{fs as o,ms as s}from"./control-ui-core-pH6nakZ-.js";import{G as c,J as l,W as u,Z as d,_ as f,at as p,b as m,lt as h,v as ee}from"./lit-runtime-BEtFSUCp.js";import{m as te,p as ne}from"./control-ui-core-DGVkFhVB.js";import{Ht as re,Ut as ie,qt as g}from"./control-ui-core-Br5DB0Zj.js";import{F as ae,I as oe,In as se,Ln as ce,z as le}from"./control-ui-boot-wpHCbPL9.js";import{bo as ue,fo as de,go as fe,po as pe,vo as me,xo as he,yo as ge}from"./control-ui-boot-Cdpgu1Gm.js";import{A as _e,C as ve,D as _,E as v,O as ye,S as y,T as b,_ as x,b as S,c as be,d as C,f as w,g as xe,h as Se,j as Ce,k as we,l as Te,m as Ee,p as De,s as T,u as Oe,v as E,w as D,x as O,y as ke}from"./config-runtime-C4gfjhZc.js";var k,A,Ae,je,Me,Ne,Pe,j,M,Fe,N,P,F,I,L,Ie,Le,Re,ze,Be,Ve,R,He,Ue,We,Ge,Ke,qe,Je,z,B,Ye,Xe,Ze,Qe,$e,et,tt,nt,rt,it,at,V,ot,st,ct,lt,H,U,ut,W,dt,ft,G,pt,mt,ht,gt,_t,vt,yt,bt,xt,St,Ct,K,q,wt,Tt,Et,Dt,Ot,kt,At,jt,Mt,Nt,Pt,Ft,It,Lt,Rt,zt,Bt,Vt,Ht,Ut,Wt,Gt,Kt,qt,Jt,Yt,Xt,Zt,Qt,J,$t,en,tn,nn,rn,an,on,sn,Y,cn,ln,un,dn,fn,pn,mn,hn,gn,_n,vn,yn,bn,xn,Sn,Cn,wn,Tn,En,Dn,On,kn,An,jn,Mn,Nn,Pn,Fn,In,Ln,Rn,zn,Bn,Vn,Hn,Un,Wn,Gn,Kn,qn,Jn,Yn,Xn,Zn,Qn,$n,er,X,tr;function nr(){return(nr=t((()=>{Se(),we(),k=`io.modelcontextprotocol/related-task`,A=De(e=>e!==null&&(typeof e==`object`||typeof e==`function`)),Ae=v([b(),S().int()]),je=b(),E({ttl:S().optional(),pollInterval:S().optional()}),Me=O({ttl:S().optional()}),Ne=O({taskId:b()}),Pe=E({progressToken:Ae.optional(),[k]:Ne.optional()}),j=O({_meta:Pe.optional()}),M=j.extend({task:Me.optional()}),Fe=e=>M.safeParse(e).success,N=O({method:b(),params:j.loose().optional()}),P=O({_meta:Pe.optional()}),F=O({method:b(),params:P.loose().optional()}),I=E({_meta:Pe.optional()}),L=v([b(),S().int()]),Ie=O({jsonrpc:x(`2.0`),id:L,...N.shape}).strict(),Le=e=>Ie.safeParse(e).success,Re=O({jsonrpc:x(`2.0`),...F.shape}).strict(),ze=e=>Re.safeParse(e).success,Be=O({jsonrpc:x(`2.0`),id:L,result:I}).strict(),Ve=e=>Be.safeParse(e).success,(function(e){e[e.ConnectionClosed=-32e3]=`ConnectionClosed`,e[e.RequestTimeout=-32001]=`RequestTimeout`,e[e.ParseError=-32700]=`ParseError`,e[e.InvalidRequest=-32600]=`InvalidRequest`,e[e.MethodNotFound=-32601]=`MethodNotFound`,e[e.InvalidParams=-32602]=`InvalidParams`,e[e.InternalError=-32603]=`InternalError`,e[e.UrlElicitationRequired=-32042]=`UrlElicitationRequired`})(R||={}),He=O({jsonrpc:x(`2.0`),id:L.optional(),error:O({code:S().int(),message:b(),data:_().optional()})}).strict(),Ue=e=>He.safeParse(e).success,We=v([Ie,Re,Be,He]),v([Be,He]),Ge=I.strict(),Ke=P.extend({requestId:L.optional(),reason:b().optional()}),qe=F.extend({method:x(`notifications/cancelled`),params:Ke}),Je=O({src:b(),mimeType:b().optional(),sizes:C(b()).optional(),theme:T([`light`,`dark`]).optional()}),z=O({icons:C(Je).optional()}),B=O({name:b(),title:b().optional()}),Ye=B.extend({...B.shape,...z.shape,version:b(),websiteUrl:b().optional(),description:b().optional()}),Xe=xe(O({applyDefaults:w().optional()}),D(b(),_())),Ze=ve(e=>e&&typeof e==`object`&&!Array.isArray(e)&&Object.keys(e).length===0?{form:{}}:e,xe(O({form:Xe.optional(),url:A.optional()}),D(b(),_()).optional())),Qe=E({list:A.optional(),cancel:A.optional(),requests:E({sampling:E({createMessage:A.optional()}).optional(),elicitation:E({create:A.optional()}).optional()}).optional()}),$e=E({list:A.optional(),cancel:A.optional(),requests:E({tools:E({call:A.optional()}).optional()}).optional()}),et=O({experimental:D(b(),A).optional(),sampling:O({context:A.optional(),tools:A.optional()}).optional(),elicitation:Ze.optional(),roots:O({listChanged:w().optional()}).optional(),tasks:Qe.optional(),extensions:D(b(),A).optional()}),tt=j.extend({protocolVersion:b(),capabilities:et,clientInfo:Ye}),nt=N.extend({method:x(`initialize`),params:tt}),rt=O({experimental:D(b(),A).optional(),logging:A.optional(),completions:A.optional(),prompts:O({listChanged:w().optional()}).optional(),resources:O({subscribe:w().optional(),listChanged:w().optional()}).optional(),tools:O({listChanged:w().optional()}).optional(),tasks:$e.optional(),extensions:D(b(),A).optional()}),it=I.extend({protocolVersion:b(),capabilities:rt,serverInfo:Ye,instructions:b().optional()}),at=F.extend({method:x(`notifications/initialized`),params:P.optional()}),V=N.extend({method:x(`ping`),params:j.optional()}),ot=O({progress:S(),total:y(S()),message:y(b())}),st=O({...P.shape,...ot.shape,progressToken:Ae}),ct=F.extend({method:x(`notifications/progress`),params:st}),lt=j.extend({cursor:je.optional()}),H=N.extend({params:lt.optional()}),U=I.extend({nextCursor:je.optional()}),ut=T([`working`,`input_required`,`completed`,`failed`,`cancelled`]),W=O({taskId:b(),status:ut,ttl:v([S(),be()]),createdAt:b(),lastUpdatedAt:b(),pollInterval:y(S()),statusMessage:y(b())}),dt=I.extend({task:W}),ft=P.merge(W),G=F.extend({method:x(`notifications/tasks/status`),params:ft}),pt=N.extend({method:x(`tasks/get`),params:j.extend({taskId:b()})}),mt=I.merge(W),ht=N.extend({method:x(`tasks/result`),params:j.extend({taskId:b()})}),I.loose(),gt=H.extend({method:x(`tasks/list`)}),_t=U.extend({tasks:C(W)}),vt=N.extend({method:x(`tasks/cancel`),params:j.extend({taskId:b()})}),yt=I.merge(W),bt=O({uri:b(),mimeType:y(b()),_meta:D(b(),_()).optional()}),xt=bt.extend({text:b()}),St=b().refine(e=>{try{return atob(e),!0}catch{return!1}},{message:`Invalid Base64 string`}),Ct=bt.extend({blob:St}),K=T([`user`,`assistant`]),q=O({audience:C(K).optional(),priority:S().min(0).max(1).optional(),lastModified:ye({offset:!0}).optional()}),wt=O({...B.shape,...z.shape,uri:b(),description:y(b()),mimeType:y(b()),size:y(S()),annotations:q.optional(),_meta:y(E({}))}),Tt=O({...B.shape,...z.shape,uriTemplate:b(),description:y(b()),mimeType:y(b()),annotations:q.optional(),_meta:y(E({}))}),Et=H.extend({method:x(`resources/list`)}),Dt=U.extend({resources:C(wt)}),Ot=H.extend({method:x(`resources/templates/list`)}),kt=U.extend({resourceTemplates:C(Tt)}),At=j.extend({uri:b()}),jt=At,Mt=N.extend({method:x(`resources/read`),params:jt}),Nt=I.extend({contents:C(v([xt,Ct]))}),Pt=F.extend({method:x(`notifications/resources/list_changed`),params:P.optional()}),Ft=At,It=N.extend({method:x(`resources/subscribe`),params:Ft}),Lt=At,Rt=N.extend({method:x(`resources/unsubscribe`),params:Lt}),zt=P.extend({uri:b()}),Bt=F.extend({method:x(`notifications/resources/updated`),params:zt}),Vt=O({name:b(),description:y(b()),required:y(w())}),Ht=O({...B.shape,...z.shape,description:y(b()),arguments:y(C(Vt)),_meta:y(E({}))}),Ut=H.extend({method:x(`prompts/list`)}),Wt=U.extend({prompts:C(Ht)}),Gt=j.extend({name:b(),arguments:D(b(),b()).optional()}),Kt=N.extend({method:x(`prompts/get`),params:Gt}),qt=O({type:x(`text`),text:b(),annotations:q.optional(),_meta:D(b(),_()).optional()}),Jt=O({type:x(`image`),data:St,mimeType:b(),annotations:q.optional(),_meta:D(b(),_()).optional()}),Yt=O({type:x(`audio`),data:St,mimeType:b(),annotations:q.optional(),_meta:D(b(),_()).optional()}),Xt=O({type:x(`tool_use`),name:b(),id:b(),input:D(b(),_()),_meta:D(b(),_()).optional()}),Zt=O({type:x(`resource`),resource:v([xt,Ct]),annotations:q.optional(),_meta:D(b(),_()).optional()}),Qt=wt.extend({type:x(`resource_link`)}),J=v([qt,Jt,Yt,Qt,Zt]),$t=O({role:K,content:J}),en=I.extend({description:b().optional(),messages:C($t)}),tn=F.extend({method:x(`notifications/prompts/list_changed`),params:P.optional()}),nn=O({title:b().optional(),readOnlyHint:w().optional(),destructiveHint:w().optional(),idempotentHint:w().optional(),openWorldHint:w().optional()}),rn=O({taskSupport:T([`required`,`optional`,`forbidden`]).optional()}),an=O({...B.shape,...z.shape,description:b().optional(),inputSchema:O({type:x(`object`),properties:D(b(),A).optional(),required:C(b()).optional()}).catchall(_()),outputSchema:O({type:x(`object`),properties:D(b(),A).optional(),required:C(b()).optional()}).catchall(_()).optional(),annotations:nn.optional(),execution:rn.optional(),_meta:D(b(),_()).optional()}),on=H.extend({method:x(`tools/list`)}),sn=U.extend({tools:C(an)}),Y=I.extend({content:C(J).default([]),structuredContent:D(b(),_()).optional(),isError:w().optional()}),Y.or(I.extend({toolResult:_()})),cn=M.extend({name:b(),arguments:D(b(),_()).optional()}),ln=N.extend({method:x(`tools/call`),params:cn}),un=F.extend({method:x(`notifications/tools/list_changed`),params:P.optional()}),O({autoRefresh:w().default(!0),debounceMs:S().int().nonnegative().default(300)}),dn=T([`debug`,`info`,`notice`,`warning`,`error`,`critical`,`alert`,`emergency`]),fn=j.extend({level:dn}),pn=N.extend({method:x(`logging/setLevel`),params:fn}),mn=P.extend({level:dn,logger:b().optional(),data:_()}),hn=F.extend({method:x(`notifications/message`),params:mn}),gn=O({name:b().optional()}),_n=O({hints:C(gn).optional(),costPriority:S().min(0).max(1).optional(),speedPriority:S().min(0).max(1).optional(),intelligencePriority:S().min(0).max(1).optional()}),vn=O({mode:T([`auto`,`required`,`none`]).optional()}),yn=O({type:x(`tool_result`),toolUseId:b().describe(`The unique identifier for the corresponding tool call.`),content:C(J).default([]),structuredContent:O({}).loose().optional(),isError:w().optional(),_meta:D(b(),_()).optional()}),bn=Ee(`type`,[qt,Jt,Yt]),xn=Ee(`type`,[qt,Jt,Yt,Xt,yn]),Sn=O({role:K,content:v([xn,C(xn)]),_meta:D(b(),_()).optional()}),Cn=M.extend({messages:C(Sn),modelPreferences:_n.optional(),systemPrompt:b().optional(),includeContext:T([`none`,`thisServer`,`allServers`]).optional(),temperature:S().optional(),maxTokens:S().int(),stopSequences:C(b()).optional(),metadata:A.optional(),tools:C(an).optional(),toolChoice:vn.optional()}),wn=N.extend({method:x(`sampling/createMessage`),params:Cn}),Tn=I.extend({model:b(),stopReason:y(T([`endTurn`,`stopSequence`,`maxTokens`]).or(b())),role:K,content:bn}),En=I.extend({model:b(),stopReason:y(T([`endTurn`,`stopSequence`,`maxTokens`,`toolUse`]).or(b())),role:K,content:v([xn,C(xn)])}),Dn=O({type:x(`boolean`),title:b().optional(),description:b().optional(),default:w().optional()}),On=O({type:x(`string`),title:b().optional(),description:b().optional(),minLength:S().optional(),maxLength:S().optional(),format:T([`email`,`uri`,`date`,`date-time`]).optional(),default:b().optional()}),kn=O({type:T([`number`,`integer`]),title:b().optional(),description:b().optional(),minimum:S().optional(),maximum:S().optional(),default:S().optional()}),An=O({type:x(`string`),title:b().optional(),description:b().optional(),enum:C(b()),default:b().optional()}),jn=O({type:x(`string`),title:b().optional(),description:b().optional(),oneOf:C(O({const:b(),title:b()})),default:b().optional()}),Mn=O({type:x(`string`),title:b().optional(),description:b().optional(),enum:C(b()),enumNames:C(b()).optional(),default:b().optional()}),Nn=v([An,jn]),Pn=O({type:x(`array`),title:b().optional(),description:b().optional(),minItems:S().optional(),maxItems:S().optional(),items:O({type:x(`string`),enum:C(b())}),default:C(b()).optional()}),Fn=O({type:x(`array`),title:b().optional(),description:b().optional(),minItems:S().optional(),maxItems:S().optional(),items:O({anyOf:C(O({const:b(),title:b()}))}),default:C(b()).optional()}),In=v([Pn,Fn]),Ln=v([Mn,Nn,In]),Rn=v([Ln,Dn,On,kn]),zn=M.extend({mode:x(`form`).optional(),message:b(),requestedSchema:O({type:x(`object`),properties:D(b(),Rn),required:C(b()).optional()})}),Bn=M.extend({mode:x(`url`),message:b(),elicitationId:b(),url:b().url()}),Vn=v([zn,Bn]),Hn=N.extend({method:x(`elicitation/create`),params:Vn}),Un=P.extend({elicitationId:b()}),Wn=F.extend({method:x(`notifications/elicitation/complete`),params:Un}),Gn=I.extend({action:T([`accept`,`decline`,`cancel`]),content:ve(e=>e===null?void 0:e,D(b(),v([b(),S(),w(),C(b())])).optional())}),Kn=O({type:x(`ref/resource`),uri:b()}),qn=O({type:x(`ref/prompt`),name:b()}),Jn=j.extend({ref:v([qn,Kn]),argument:O({name:b(),value:b()}),context:O({arguments:D(b(),b()).optional()}).optional()}),Yn=N.extend({method:x(`completion/complete`),params:Jn}),Xn=I.extend({completion:E({values:C(b()).max(100),total:y(S().int()),hasMore:y(w())})}),Zn=O({uri:b().startsWith(`file://`),name:b().optional(),_meta:D(b(),_()).optional()}),Qn=N.extend({method:x(`roots/list`),params:j.optional()}),$n=I.extend({roots:C(Zn)}),er=F.extend({method:x(`notifications/roots/list_changed`),params:P.optional()}),v([V,nt,Yn,pn,Kt,Ut,Et,Ot,Mt,It,Rt,ln,on,pt,ht,gt,vt]),v([qe,ct,at,er,G]),v([Ge,Tn,En,Gn,$n,mt,_t,dt]),v([V,wn,Hn,Qn,pt,ht,gt,vt]),v([qe,ct,hn,Bt,Pt,un,tn,G,Wn]),v([Ge,it,Xn,en,Wt,Dt,kt,Nt,Y,sn,mt,_t,dt]),X=class e extends Error{constructor(e,t,n){super(`MCP error ${e}: ${t}`),this.code=e,this.data=n,this.name=`McpError`}static fromError(t,n,r){if(t===R.UrlElicitationRequired&&r){let e=r;if(e.elicitations)return new tr(e.elicitations,n)}return new e(t,n,r)}},tr=class extends X{constructor(e,t=`URL elicitation${e.length>1?`s`:``} required`){super(R.UrlElicitationRequired,t,{elicitations:e})}get elicitations(){return this.data?.elicitations??[]}}})))()}function rr(e){return!!e._zod}function ir(e,t){return rr(e)?Ce(e,t):e.safeParse(t)}function ar(e){if(!e)return;let t;if(t=rr(e)?e._zod?.def?.shape:e.shape,t){if(typeof t==`function`)try{return t()}catch{return}return t}}function or(e){if(rr(e)){let t=e._zod?.def;if(t){if(t.value!==void 0)return t.value;if(Array.isArray(t.values)&&t.values.length>0)return t.values[0]}}let t=e._def;if(t){if(t.value!==void 0)return t.value;if(Array.isArray(t.values)&&t.values.length>0)return t.values[0]}let n=e.value;if(n!==void 0)return n}function sr(){return(sr=t((()=>{_e()})))()}function Z(e){return e===`completed`||e===`failed`||e===`cancelled`}function cr(e){let t=ar(e)?.method;if(!t)throw Error(`Schema is missing a method literal`);let n=or(t);if(typeof n!=`string`)throw Error(`Schema method literal must be a string`);return n}function lr(e,t){let n=ir(e,t);if(!n.success)throw n.error;return n.data}function ur(){return(ur=t((()=>{sr()})))()}var dr;function fr(){return(fr=t((()=>{sr(),nr(),ur(),dr=class{constructor(e){this._options=e,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(qe,e=>{this._oncancel(e)}),this.setNotificationHandler(ct,e=>{this._onprogress(e)}),this.setRequestHandler(V,e=>({})),this._taskStore=e?.taskStore,this._taskMessageQueue=e?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(pt,async(e,t)=>{let n=await this._taskStore.getTask(e.params.taskId,t.sessionId);if(!n)throw new X(R.InvalidParams,`Failed to retrieve task: Task not found`);return{...n}}),this.setRequestHandler(ht,async(e,t)=>{let n=async()=>{let r=e.params.taskId;if(this._taskMessageQueue){let e;for(;e=await this._taskMessageQueue.dequeue(r,t.sessionId);){if(e.type===`response`||e.type===`error`){let t=e.message,n=t.id,r=this._requestResolvers.get(n);if(r){if(this._requestResolvers.delete(n),e.type===`response`)r(t);else{let e=t;r(new X(e.error.code,e.error.message,e.error.data))}}else{let t=e.type===`response`?`Response`:`Error`;this._onerror(Error(`${t} handler missing for request ${n}`))}continue}await this._transport?.send(e.message,{relatedRequestId:t.requestId})}}let i=await this._taskStore.getTask(r,t.sessionId);if(!i)throw new X(R.InvalidParams,`Task not found: ${r}`);if(!Z(i.status))return await this._waitForTaskUpdate(r,t.signal),await n();if(Z(i.status)){let e=await this._taskStore.getTaskResult(r,t.sessionId);return this._clearTaskQueue(r),{...e,_meta:{...e._meta,[k]:{taskId:r}}}}return await n()};return await n()}),this.setRequestHandler(gt,async(e,t)=>{try{let{tasks:n,nextCursor:r}=await this._taskStore.listTasks(e.params?.cursor,t.sessionId);return{tasks:n,nextCursor:r,_meta:{}}}catch(e){throw new X(R.InvalidParams,`Failed to list tasks: ${e instanceof Error?e.message:String(e)}`)}}),this.setRequestHandler(vt,async(e,t)=>{try{let n=await this._taskStore.getTask(e.params.taskId,t.sessionId);if(!n)throw new X(R.InvalidParams,`Task not found: ${e.params.taskId}`);if(Z(n.status))throw new X(R.InvalidParams,`Cannot cancel task in terminal status: ${n.status}`);await this._taskStore.updateTaskStatus(e.params.taskId,`cancelled`,`Client cancelled task execution.`,t.sessionId),this._clearTaskQueue(e.params.taskId);let r=await this._taskStore.getTask(e.params.taskId,t.sessionId);if(!r)throw new X(R.InvalidParams,`Task not found after cancellation: ${e.params.taskId}`);return{_meta:{},...r}}catch(e){throw e instanceof X?e:new X(R.InvalidRequest,`Failed to cancel task: ${e instanceof Error?e.message:String(e)}`)}}))}async _oncancel(e){e.params.requestId&&this._requestHandlerAbortControllers.get(e.params.requestId)?.abort(e.params.reason)}_setupTimeout(e,t,n,r,i=!1){this._timeoutInfo.set(e,{timeoutId:setTimeout(r,t),startTime:Date.now(),timeout:t,maxTotalTimeout:n,resetTimeoutOnProgress:i,onTimeout:r})}_resetTimeout(e){let t=this._timeoutInfo.get(e);if(!t)return!1;let n=Date.now()-t.startTime;if(t.maxTotalTimeout&&n>=t.maxTotalTimeout)throw this._timeoutInfo.delete(e),X.fromError(R.RequestTimeout,`Maximum total timeout exceeded`,{maxTotalTimeout:t.maxTotalTimeout,totalElapsed:n});return clearTimeout(t.timeoutId),t.timeoutId=setTimeout(t.onTimeout,t.timeout),!0}_cleanupTimeout(e){let t=this._timeoutInfo.get(e);t&&(clearTimeout(t.timeoutId),this._timeoutInfo.delete(e))}async connect(e){if(this._transport)throw Error(`Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.`);this._transport=e;let t=this.transport?.onclose;this._transport.onclose=()=>{t?.(),this._onclose()};let n=this.transport?.onerror;this._transport.onerror=e=>{n?.(e),this._onerror(e)};let r=this._transport?.onmessage;this._transport.onmessage=(e,t)=>{r?.(e,t),Ve(e)||Ue(e)?this._onresponse(e):Le(e)?this._onrequest(e,t):ze(e)?this._onnotification(e):this._onerror(Error(`Unknown message type: ${JSON.stringify(e)}`))},await this._transport.start()}_onclose(){let e=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let e of this._timeoutInfo.values())clearTimeout(e.timeoutId);this._timeoutInfo.clear();for(let e of this._requestHandlerAbortControllers.values())e.abort();this._requestHandlerAbortControllers.clear();let t=X.fromError(R.ConnectionClosed,`Connection closed`);this._transport=void 0,this.onclose?.();for(let n of e.values())n(t)}_onerror(e){this.onerror?.(e)}_onnotification(e){let t=this._notificationHandlers.get(e.method)??this.fallbackNotificationHandler;t!==void 0&&Promise.resolve().then(()=>t(e)).catch(e=>this._onerror(Error(`Uncaught error in notification handler: ${e}`)))}_onrequest(e,t){let n=this._requestHandlers.get(e.method)??this.fallbackRequestHandler,r=this._transport,i=e.params?._meta?.[k]?.taskId;if(n===void 0){let t={jsonrpc:`2.0`,id:e.id,error:{code:R.MethodNotFound,message:`Method not found`}};i&&this._taskMessageQueue?this._enqueueTaskMessage(i,{type:`error`,message:t,timestamp:Date.now()},r?.sessionId).catch(e=>this._onerror(Error(`Failed to enqueue error response: ${e}`))):r?.send(t).catch(e=>this._onerror(Error(`Failed to send an error response: ${e}`)));return}let a=new AbortController;this._requestHandlerAbortControllers.set(e.id,a);let o=Fe(e.params)?e.params.task:void 0,s=this._taskStore?this.requestTaskStore(e,r?.sessionId):void 0,c={signal:a.signal,sessionId:r?.sessionId,_meta:e.params?._meta,sendNotification:async t=>{if(a.signal.aborted)return;let n={relatedRequestId:e.id};i&&(n.relatedTask={taskId:i}),await this.notification(t,n)},sendRequest:async(t,n,r)=>{if(a.signal.aborted)throw new X(R.ConnectionClosed,`Request was cancelled`);let o={...r,relatedRequestId:e.id};i&&!o.relatedTask&&(o.relatedTask={taskId:i});let c=o.relatedTask?.taskId??i;return c&&s&&await s.updateTaskStatus(c,`input_required`),await this.request(t,n,o)},authInfo:t?.authInfo,requestId:e.id,requestInfo:t?.requestInfo,taskId:i,taskStore:s,taskRequestedTtl:o?.ttl,closeSSEStream:t?.closeSSEStream,closeStandaloneSSEStream:t?.closeStandaloneSSEStream};Promise.resolve().then(()=>{o&&this.assertTaskHandlerCapability(e.method)}).then(()=>n(e,c)).then(async t=>{if(a.signal.aborted)return;let n={result:t,jsonrpc:`2.0`,id:e.id};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:`response`,message:n,timestamp:Date.now()},r?.sessionId):await r?.send(n)},async t=>{if(a.signal.aborted)return;let n={jsonrpc:`2.0`,id:e.id,error:{code:Number.isSafeInteger(t.code)?t.code:R.InternalError,message:t.message??`Internal error`,...t.data!==void 0&&{data:t.data}}};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:`error`,message:n,timestamp:Date.now()},r?.sessionId):await r?.send(n)}).catch(e=>this._onerror(Error(`Failed to send response: ${e}`))).finally(()=>{this._requestHandlerAbortControllers.get(e.id)===a&&this._requestHandlerAbortControllers.delete(e.id)})}_onprogress(e){let{progressToken:t,...n}=e.params,r=Number(t),i=this._progressHandlers.get(r);if(!i){this._onerror(Error(`Received a progress notification for an unknown token: ${JSON.stringify(e)}`));return}let a=this._responseHandlers.get(r),o=this._timeoutInfo.get(r);if(o&&a&&o.resetTimeoutOnProgress)try{this._resetTimeout(r)}catch(e){this._responseHandlers.delete(r),this._progressHandlers.delete(r),this._cleanupTimeout(r),a(e);return}i(n)}_onresponse(e){let t=Number(e.id),n=this._requestResolvers.get(t);if(n){this._requestResolvers.delete(t),Ve(e)?n(e):n(new X(e.error.code,e.error.message,e.error.data));return}let r=this._responseHandlers.get(t);if(r===void 0){this._onerror(Error(`Received a response for an unknown message ID: ${JSON.stringify(e)}`));return}this._responseHandlers.delete(t),this._cleanupTimeout(t);let i=!1;if(Ve(e)&&e.result&&typeof e.result==`object`){let n=e.result;if(n.task&&typeof n.task==`object`){let e=n.task;typeof e.taskId==`string`&&(i=!0,this._taskProgressTokens.set(e.taskId,t))}}i||this._progressHandlers.delete(t),Ve(e)?r(e):r(X.fromError(e.error.code,e.error.message,e.error.data))}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(e,t,n){let{task:r}=n??{};if(!r){try{yield{type:`result`,result:await this.request(e,t,n)}}catch(e){yield{type:`error`,error:e instanceof X?e:new X(R.InternalError,String(e))}}return}let i;try{let r=await this.request(e,dt,n);if(r.task)i=r.task.taskId,yield{type:`taskCreated`,task:r.task};else throw new X(R.InternalError,`Task creation did not return a task`);for(;;){let e=await this.getTask({taskId:i},n);if(yield{type:`taskStatus`,task:e},Z(e.status)){e.status===`completed`?yield{type:`result`,result:await this.getTaskResult({taskId:i},t,n)}:e.status===`failed`?yield{type:`error`,error:new X(R.InternalError,`Task ${i} failed`)}:e.status===`cancelled`&&(yield{type:`error`,error:new X(R.InternalError,`Task ${i} was cancelled`)});return}if(e.status===`input_required`){yield{type:`result`,result:await this.getTaskResult({taskId:i},t,n)};return}let r=e.pollInterval??this._options?.defaultTaskPollInterval??1e3;await new Promise(e=>setTimeout(e,r)),n?.signal?.throwIfAborted()}}catch(e){yield{type:`error`,error:e instanceof X?e:new X(R.InternalError,String(e))}}}request(e,t,n){let{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a,task:o,relatedTask:s}=n??{};return new Promise((c,l)=>{let u=e=>{l(e)};if(!this._transport){u(Error(`Not connected`));return}if(this._options?.enforceStrictCapabilities===!0)try{this.assertCapabilityForMethod(e.method),o&&this.assertTaskCapability(e.method)}catch(e){u(e);return}n?.signal?.throwIfAborted();let d=this._requestMessageId++,f={...e,jsonrpc:`2.0`,id:d};n?.onprogress&&(this._progressHandlers.set(d,n.onprogress),f.params={...e.params,_meta:{...e.params?._meta||{},progressToken:d}}),o&&(f.params={...f.params,task:o}),s&&(f.params={...f.params,_meta:{...f.params?._meta||{},[k]:s}});let p=e=>{this._responseHandlers.delete(d),this._progressHandlers.delete(d),this._cleanupTimeout(d),this._transport?.send({jsonrpc:`2.0`,method:`notifications/cancelled`,params:{requestId:d,reason:String(e)}},{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a}).catch(e=>this._onerror(Error(`Failed to send cancellation: ${e}`))),l(e instanceof X?e:new X(R.RequestTimeout,String(e)))};this._responseHandlers.set(d,e=>{if(!n?.signal?.aborted){if(e instanceof Error)return l(e);try{let n=ir(t,e.result);n.success?c(n.data):l(n.error)}catch(e){l(e)}}}),n?.signal?.addEventListener(`abort`,()=>{p(n?.signal?.reason)});let m=n?.timeout??6e4;this._setupTimeout(d,m,n?.maxTotalTimeout,()=>p(X.fromError(R.RequestTimeout,`Request timed out`,{timeout:m})),n?.resetTimeoutOnProgress??!1);let h=s?.taskId;h?(this._requestResolvers.set(d,e=>{let t=this._responseHandlers.get(d);t?t(e):this._onerror(Error(`Response handler missing for side-channeled request ${d}`))}),this._enqueueTaskMessage(h,{type:`request`,message:f,timestamp:Date.now()}).catch(e=>{this._cleanupTimeout(d),l(e)})):this._transport.send(f,{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a}).catch(e=>{this._cleanupTimeout(d),l(e)})})}async getTask(e,t){return this.request({method:`tasks/get`,params:e},mt,t)}async getTaskResult(e,t,n){return this.request({method:`tasks/result`,params:e},t,n)}async listTasks(e,t){return this.request({method:`tasks/list`,params:e},_t,t)}async cancelTask(e,t){return this.request({method:`tasks/cancel`,params:e},yt,t)}async notification(e,t){if(!this._transport)throw Error(`Not connected`);this.assertNotificationCapability(e.method);let n=t?.relatedTask?.taskId;if(n){let r={...e,jsonrpc:`2.0`,params:{...e.params,_meta:{...e.params?._meta||{},[k]:t.relatedTask}}};await this._enqueueTaskMessage(n,{type:`notification`,message:r,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(e.method)&&!e.params&&!t?.relatedRequestId&&!t?.relatedTask){if(this._pendingDebouncedNotifications.has(e.method))return;this._pendingDebouncedNotifications.add(e.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(e.method),!this._transport)return;let n={...e,jsonrpc:`2.0`};t?.relatedTask&&(n={...n,params:{...n.params,_meta:{...n.params?._meta||{},[k]:t.relatedTask}}}),this._transport?.send(n,t).catch(e=>this._onerror(e))});return}let r={...e,jsonrpc:`2.0`};t?.relatedTask&&(r={...r,params:{...r.params,_meta:{...r.params?._meta||{},[k]:t.relatedTask}}}),await this._transport.send(r,t)}setRequestHandler(e,t){let n=cr(e);this.assertRequestHandlerCapability(n),this._requestHandlers.set(n,(n,r)=>{let i=lr(e,n);return Promise.resolve(t(i,r))})}removeRequestHandler(e){this._requestHandlers.delete(e)}assertCanSetRequestHandler(e){if(this._requestHandlers.has(e))throw Error(`A request handler for ${e} already exists, which would be overridden`)}setNotificationHandler(e,t){let n=cr(e);this._notificationHandlers.set(n,n=>{let r=lr(e,n);return Promise.resolve(t(r))})}removeNotificationHandler(e){this._notificationHandlers.delete(e)}_cleanupTaskProgressHandler(e){let t=this._taskProgressTokens.get(e);t!==void 0&&(this._progressHandlers.delete(t),this._taskProgressTokens.delete(e))}async _enqueueTaskMessage(e,t,n){if(!this._taskStore||!this._taskMessageQueue)throw Error(`Cannot enqueue task message: taskStore and taskMessageQueue are not configured`);let r=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(e,t,n,r)}async _clearTaskQueue(e,t){if(this._taskMessageQueue){let n=await this._taskMessageQueue.dequeueAll(e,t);for(let t of n)if(t.type===`request`&&Le(t.message)){let n=t.message.id,r=this._requestResolvers.get(n);r?(r(new X(R.InternalError,`Task cancelled or completed`)),this._requestResolvers.delete(n)):this._onerror(Error(`Resolver missing for request ${n} during task ${e} cleanup`))}}}async _waitForTaskUpdate(e,t){let n=this._options?.defaultTaskPollInterval??1e3;try{let t=await this._taskStore?.getTask(e);t?.pollInterval&&(n=t.pollInterval)}catch{}return new Promise((e,r)=>{if(t.aborted){r(new X(R.InvalidRequest,`Request cancelled`));return}let i=setTimeout(e,n);t.addEventListener(`abort`,()=>{clearTimeout(i),r(new X(R.InvalidRequest,`Request cancelled`))},{once:!0})})}requestTaskStore(e,t){let n=this._taskStore;if(!n)throw Error(`No task store configured`);return{createTask:async r=>{if(!e)throw Error(`No request provided`);return await n.createTask(r,e.id,{method:e.method,params:e.params},t)},getTask:async e=>{let r=await n.getTask(e,t);if(!r)throw new X(R.InvalidParams,`Failed to retrieve task: Task not found`);return r},storeTaskResult:async(e,r,i)=>{await n.storeTaskResult(e,r,i,t);let a=await n.getTask(e,t);if(a){let t=G.parse({method:`notifications/tasks/status`,params:a});await this.notification(t),Z(a.status)&&this._cleanupTaskProgressHandler(e)}},getTaskResult:e=>n.getTaskResult(e,t),updateTaskStatus:async(e,r,i)=>{let a=await n.getTask(e,t);if(!a)throw new X(R.InvalidParams,`Task "${e}" not found - it may have been cleaned up`);if(Z(a.status))throw new X(R.InvalidParams,`Cannot update task "${e}" from terminal status "${a.status}" to "${r}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await n.updateTaskStatus(e,r,i,t);let o=await n.getTask(e,t);if(o){let t=G.parse({method:`notifications/tasks/status`,params:o});await this.notification(t),Z(o.status)&&this._cleanupTaskProgressHandler(e)}},listTasks:e=>n.listTasks(e,t)}}}})))()}function pr(e,t){return JSON.stringify(e)===JSON.stringify(t)}var mr,hr,gr,Q,_r,vr,yr,br,xr,Sr,Cr,wr,Tr,Er,Dr,Or,kr,Ar,jr,Mr,Nr,Pr,Fr,Ir,Lr,Rr,zr,Br,Vr;function Hr(){return(Hr=t((()=>{nr(),fr(),Se(),(t=>typeof e<`u`?e:typeof Proxy<`u`?new Proxy(t,{get:(t,n)=>(typeof e<`u`?e:t)[n]}):t)(function(t){if(typeof e<`u`)return e.apply(this,arguments);throw Error(`Dynamic require of "`+t+`" is not supported`)}),mr=class extends dr{_registeredMethods=new Set;_eventSlots=new Map;onEventDispatch(e,t){}_ensureEventSlot(e){let t=this._eventSlots.get(e);if(!t){let n=this.eventSchemas[e];if(!n)throw Error(`Unknown event: ${String(e)}`);t={listeners:[]},this._eventSlots.set(e,t);let r=n.shape.method.value;this._registeredMethods.add(r);let i=t;super.setNotificationHandler(n,t=>{let n=t.params;this.onEventDispatch(e,n),i.onHandler?.(n);for(let e of[...i.listeners])e(n)})}return t}setEventHandler(e,t){let n=this._ensureEventSlot(e);n.onHandler&&t&&console.warn(`[MCP Apps] on${String(e)} handler replaced. Use addEventListener("${String(e)}", …) to add multiple listeners without replacing.`),n.onHandler=t}getEventHandler(e){return this._eventSlots.get(e)?.onHandler}addEventListener(e,t){this._ensureEventSlot(e).listeners.push(t)}removeEventListener(e,t){let n=this._eventSlots.get(e);if(!n)return;let r=n.listeners.indexOf(t);r!==-1&&n.listeners.splice(r,1)}setRequestHandler=(e,t)=>{this._assertMethodNotRegistered(e,`setRequestHandler`),super.setRequestHandler(e,t)};setNotificationHandler=(e,t)=>{this._assertMethodNotRegistered(e,`setNotificationHandler`),super.setNotificationHandler(e,t)};warnIfRequestHandlerReplaced(e,t,n){t&&n&&console.warn(`[MCP Apps] ${e} handler replaced. Previous handler will no longer be called.`)}replaceRequestHandler=(e,t)=>{let n=e.shape.method.value;this._registeredMethods.add(n),super.setRequestHandler(e,t)};_assertMethodNotRegistered(e,t){let n=e.shape.method.value;if(this._registeredMethods.has(n))throw Error(`Handler for "${n}" already registered (via ${t}). Use addEventListener() to attach multiple listeners, or the on* setter for replace semantics.`);this._registeredMethods.add(n)}},hr=`2026-01-26`,gr=v([x(`light`),x(`dark`)]).describe(`Color theme preference for the host environment.`),Q=v([x(`inline`),x(`fullscreen`),x(`pip`)]).describe(`Display mode for UI presentation.`),_r=v([x(`--color-background-primary`),x(`--color-background-secondary`),x(`--color-background-tertiary`),x(`--color-background-inverse`),x(`--color-background-ghost`),x(`--color-background-info`),x(`--color-background-danger`),x(`--color-background-success`),x(`--color-background-warning`),x(`--color-background-disabled`),x(`--color-text-primary`),x(`--color-text-secondary`),x(`--color-text-tertiary`),x(`--color-text-inverse`),x(`--color-text-ghost`),x(`--color-text-info`),x(`--color-text-danger`),x(`--color-text-success`),x(`--color-text-warning`),x(`--color-text-disabled`),x(`--color-border-primary`),x(`--color-border-secondary`),x(`--color-border-tertiary`),x(`--color-border-inverse`),x(`--color-border-ghost`),x(`--color-border-info`),x(`--color-border-danger`),x(`--color-border-success`),x(`--color-border-warning`),x(`--color-border-disabled`),x(`--color-ring-primary`),x(`--color-ring-secondary`),x(`--color-ring-inverse`),x(`--color-ring-info`),x(`--color-ring-danger`),x(`--color-ring-success`),x(`--color-ring-warning`),x(`--font-sans`),x(`--font-mono`),x(`--font-weight-normal`),x(`--font-weight-medium`),x(`--font-weight-semibold`),x(`--font-weight-bold`),x(`--font-text-xs-size`),x(`--font-text-sm-size`),x(`--font-text-md-size`),x(`--font-text-lg-size`),x(`--font-heading-xs-size`),x(`--font-heading-sm-size`),x(`--font-heading-md-size`),x(`--font-heading-lg-size`),x(`--font-heading-xl-size`),x(`--font-heading-2xl-size`),x(`--font-heading-3xl-size`),x(`--font-text-xs-line-height`),x(`--font-text-sm-line-height`),x(`--font-text-md-line-height`),x(`--font-text-lg-line-height`),x(`--font-heading-xs-line-height`),x(`--font-heading-sm-line-height`),x(`--font-heading-md-line-height`),x(`--font-heading-lg-line-height`),x(`--font-heading-xl-line-height`),x(`--font-heading-2xl-line-height`),x(`--font-heading-3xl-line-height`),x(`--border-radius-xs`),x(`--border-radius-sm`),x(`--border-radius-md`),x(`--border-radius-lg`),x(`--border-radius-xl`),x(`--border-radius-full`),x(`--border-width-regular`),x(`--shadow-hairline`),x(`--shadow-sm`),x(`--shadow-md`),x(`--shadow-lg`)]).describe(`CSS variable keys available to MCP apps for theming.`),vr=D(_r.describe(`Style variables for theming MCP apps.
Individual style keys are optional - hosts may provide any subset of these values.
Values are strings containing CSS values (colors, sizes, font stacks, etc.).
Note: This type uses \`Record<K, string | undefined>\` rather than \`Partial<Record<K, string>>\`
for compatibility with Zod schema generation. Both are functionally equivalent for validation.`),v([b(),Te()]).describe(`Style variables for theming MCP apps.
Individual style keys are optional - hosts may provide any subset of these values.
Values are strings containing CSS values (colors, sizes, font stacks, etc.).
Note: This type uses \`Record<K, string | undefined>\` rather than \`Partial<Record<K, string>>\`
for compatibility with Zod schema generation. Both are functionally equivalent for validation.`)).describe(`Style variables for theming MCP apps.
Individual style keys are optional - hosts may provide any subset of these values.
Values are strings containing CSS values (colors, sizes, font stacks, etc.).
Note: This type uses \`Record<K, string | undefined>\` rather than \`Partial<Record<K, string>>\`
for compatibility with Zod schema generation. Both are functionally equivalent for validation.`),yr=O({method:x(`ui/open-link`),params:O({url:b().describe(`URL to open in the host's browser`)})}),O({isError:w().optional().describe(`True if the host failed to open the URL (e.g., due to security policy).`)}).passthrough(),O({isError:w().optional().describe(`True if the download failed (e.g., user cancelled or host denied).`)}).passthrough(),O({isError:w().optional().describe(`True if the host rejected or failed to deliver the message.`)}).passthrough(),br=O({method:x(`ui/notifications/sandbox-proxy-ready`),params:O({})}),xr=O({connectDomains:C(b()).optional().describe(`Origins for network requests (fetch/XHR/WebSocket).
- Maps to CSP \`connect-src\` directive
- Empty or omitted → no network connections (secure default)`),resourceDomains:C(b()).optional().describe("Origins for static resources (images, scripts, stylesheets, fonts, media).\n\n- Maps to CSP `img-src`, `script-src`, `style-src`, `font-src`, `media-src` directives\n- Wildcard subdomains supported: `https://*.example.com`\n- Empty or omitted → no network resources (secure default)"),frameDomains:C(b()).optional().describe("Origins for nested iframes.\n\n- Maps to CSP `frame-src` directive\n- Empty or omitted → no nested iframes allowed (`frame-src 'none'`)"),baseUriDomains:C(b()).optional().describe("Allowed base URIs for the document.\n\n- Maps to CSP `base-uri` directive\n- Empty or omitted → only same origin allowed (`base-uri 'self'`)")}),Sr=O({camera:O({}).optional().describe(`Request camera access.
Maps to Permission Policy \`camera\` feature.`),microphone:O({}).optional().describe(`Request microphone access.
Maps to Permission Policy \`microphone\` feature.`),geolocation:O({}).optional().describe(`Request geolocation access.
Maps to Permission Policy \`geolocation\` feature.`),clipboardWrite:O({}).optional().describe(`Request clipboard write access.
Maps to Permission Policy \`clipboard-write\` feature.`)}),Cr=O({method:x(`ui/notifications/size-changed`),params:O({width:S().optional().describe(`New width in pixels.`),height:S().optional().describe(`New height in pixels.`)})}),O({method:x(`ui/notifications/tool-input`),params:O({arguments:D(b(),_().describe(`Complete tool call arguments as key-value pairs.`)).optional().describe(`Complete tool call arguments as key-value pairs.`)})}),O({method:x(`ui/notifications/tool-input-partial`),params:O({arguments:D(b(),_().describe(`Partial tool call arguments (incomplete, may change).`)).optional().describe(`Partial tool call arguments (incomplete, may change).`)})}),O({method:x(`ui/notifications/tool-cancelled`),params:O({reason:b().optional().describe(`Optional reason for the cancellation (e.g., "user action", "timeout").`)})}),wr=O({fonts:b().optional()}),Tr=O({variables:vr.optional().describe(`CSS variables for theming the app.`),css:wr.optional().describe(`CSS blocks that apps can inject.`)}),O({method:x(`ui/resource-teardown`),params:O({})}),Er=D(b(),_()),Dr=O({text:O({}).optional().describe(`Host supports text content blocks.`),image:O({}).optional().describe(`Host supports image content blocks.`),audio:O({}).optional().describe(`Host supports audio content blocks.`),resource:O({}).optional().describe(`Host supports resource content blocks.`),resourceLink:O({}).optional().describe(`Host supports resource link content blocks.`),structuredContent:O({}).optional().describe(`Host supports structured content.`)}),Or=O({method:x(`ui/notifications/request-teardown`),params:O({}).optional()}),kr=O({experimental:D(b(),D(b(),Oe()).describe(`Experimental features keyed by identifier.`)).optional().describe(`Experimental features keyed by identifier.`),openLinks:O({}).optional().describe(`Host supports opening external URLs.`),downloadFile:O({}).optional().describe(`Host supports file downloads via ui/download-file.`),serverTools:O({listChanged:w().optional().describe(`Host supports tools/list_changed notifications.`)}).optional().describe(`Host can proxy tool calls to the MCP server.`),serverResources:O({listChanged:w().optional().describe(`Host supports resources/list_changed notifications.`)}).optional().describe(`Host can proxy resource reads to the MCP server.`),logging:O({}).optional().describe(`Host accepts log messages.`),sandbox:O({permissions:Sr.optional().describe(`Permissions granted by the host (camera, microphone, geolocation).`),csp:xr.optional().describe(`CSP domains approved by the host.`)}).optional().describe(`Sandbox configuration applied by the host.`),updateModelContext:Dr.optional().describe(`Host accepts context updates (ui/update-model-context) to be included in the model's context for future turns.`),message:Dr.optional().describe(`Host supports receiving content messages (ui/message) from the view.`),sampling:O({tools:O({}).optional().describe("Host supports tool use via `tools` and `toolChoice` parameters.")}).optional().describe("Host supports LLM sampling (sampling/createMessage) from the view.\nMirrors the MCP `ClientCapabilities.sampling` shape so hosts can pass it through.")}),Ar=O({experimental:D(b(),D(b(),Oe()).describe(`Experimental features keyed by identifier.`)).optional().describe(`Experimental features keyed by identifier.`),tools:O({listChanged:w().optional().describe(`App supports tools/list_changed notifications.`)}).optional().describe(`App exposes MCP-style tools that the host can call.`),availableDisplayModes:C(Q).optional().describe(`Display modes the app supports.`)}),jr=O({method:x(`ui/notifications/initialized`),params:O({}).optional()}),O({csp:xr.optional().describe(`Content Security Policy configuration for UI resources.`),permissions:Sr.optional().describe(`Sandbox permissions requested by the UI resource.`),domain:b().optional().describe(`Dedicated origin for view sandbox.
Useful when views need stable, dedicated origins for OAuth callbacks, CORS policies, or API key allowlists.
**Host-dependent:** The format and validation rules for this field are determined by each host. Servers MUST consult host-specific documentation for the expected domain format. Common patterns include:
- Hash-based subdomains (e.g., \`{hash}.claudemcpcontent.com\`)
- URL-derived subdomains (e.g., \`www-example-com.oaiusercontent.com\`)
If omitted, host uses default sandbox origin (typically per-conversation).`),prefersBorder:w().optional().describe(`Visual boundary preference - true if view prefers a visible border.
Boolean requesting whether a visible border and background is provided by the host. Specifying an explicit value for this is recommended because hosts' defaults may vary.
- \`true\`: request visible border + background
- \`false\`: request no visible border + background
- omitted: host decides border`)}),Mr=O({method:x(`ui/request-display-mode`),params:O({mode:Q.describe(`The display mode being requested.`)})}),O({mode:Q.describe(`The display mode that was actually set. May differ from requested if not supported.`)}).passthrough(),Nr=v([x(`model`),x(`app`)]).describe(`Tool visibility scope - who can access the tool.`),O({resourceUri:b().optional(),visibility:C(Nr).optional().describe(`Who can access this tool. Default: ["model", "app"]
- "model": Tool visible to and callable by the agent
- "app": Tool callable by the app from this server only`),csp:ke().optional(),permissions:ke().optional()}),O({mimeTypes:C(b()).optional().describe('Array of supported MIME types for UI resources.\nMust include `"text/html;profile=mcp-app"` for MCP Apps support.')}),Pr=O({method:x(`ui/download-file`),params:O({contents:C(v([Zt,Qt])).describe(`Resource contents to download — embedded (inline data) or linked (host fetches). Uses standard MCP resource types.`)})}),Fr=O({method:x(`ui/message`),params:O({role:x(`user`).describe(`Message role, currently only "user" is supported.`),content:C(J).describe(`Message content blocks (text, image, etc.).`)})}),O({method:x(`ui/notifications/sandbox-resource-ready`),params:O({html:b().describe(`HTML content to load into the inner iframe.`),sandbox:b().optional().describe(`Optional override for the inner iframe's sandbox attribute.`),csp:xr.optional().describe(`CSP configuration from resource metadata.`),permissions:Sr.optional().describe(`Sandbox permissions from resource metadata.`)})}),O({method:x(`ui/notifications/tool-result`),params:Y.describe(`Standard MCP tool execution result.`)}),Ir=O({toolInfo:O({id:L.optional().describe(`JSON-RPC id of the tools/call request.`),tool:an.describe(`Tool definition including name, inputSchema, etc.`)}).optional().describe(`Metadata of the tool call that instantiated this App.`),theme:gr.optional().describe(`Current color theme preference.`),styles:Tr.optional().describe(`Style configuration for theming the app.`),displayMode:Q.optional().describe(`How the UI is currently displayed.`),availableDisplayModes:C(Q).optional().describe(`Display modes the host supports.`),containerDimensions:v([O({height:S().describe(`Fixed container height in pixels.`)}),O({maxHeight:v([S(),Te()]).optional().describe(`Maximum container height in pixels.`)})]).and(v([O({width:S().describe(`Fixed container width in pixels.`)}),O({maxWidth:v([S(),Te()]).optional().describe(`Maximum container width in pixels.`)})])).optional().describe(`Container dimensions. Represents the dimensions of the iframe or other
container holding the app. Specify either width or maxWidth, and either height or maxHeight.`),locale:b().optional().describe(`User's language and region preference in BCP 47 format.`),timeZone:b().optional().describe(`User's timezone in IANA format.`),userAgent:b().optional().describe(`Host application identifier.`),platform:v([x(`web`),x(`desktop`),x(`mobile`)]).optional().describe(`Platform type for responsive design decisions.`),deviceCapabilities:O({touch:w().optional().describe(`Whether the device supports touch input.`),hover:w().optional().describe(`Whether the device supports hover interactions.`)}).optional().describe(`Device input capabilities.`),safeAreaInsets:O({top:S().describe(`Top safe area inset in pixels.`),right:S().describe(`Right safe area inset in pixels.`),bottom:S().describe(`Bottom safe area inset in pixels.`),left:S().describe(`Left safe area inset in pixels.`)}).optional().describe(`Mobile safe area boundaries in pixels.`)}).passthrough(),O({method:x(`ui/notifications/host-context-changed`),params:Ir.describe(`Partial context update containing only changed fields.`)}),Lr=O({method:x(`ui/update-model-context`),params:O({content:C(J).optional().describe(`Context content blocks (text, image, etc.).`),structuredContent:D(b(),_().describe(`Structured content for machine-readable context data.`)).optional().describe(`Structured content for machine-readable context data.`)})}),Rr=O({method:x(`ui/initialize`),params:O({appInfo:Ye.describe(`App identification (name and version).`),appCapabilities:Ar.describe(`Features and capabilities this app provides.`),protocolVersion:b().describe(`Protocol version this app supports.`)})}),O({protocolVersion:b().describe(`Negotiated protocol version string (e.g., "2025-11-21").`),hostInfo:Ye.describe(`Host application identification and version.`),hostCapabilities:kr.describe(`Features and capabilities provided by the host.`),hostContext:Ir.describe(`Rich context about the host environment.`)}).passthrough(),zr=class{eventTarget;eventSource;messageListener;constructor(e=window.parent,t){this.eventTarget=e,this.eventSource=t,this.messageListener=e=>{if(t&&e.source!==this.eventSource){console.debug(`Ignoring message from unknown source`,e);return}let n=We.safeParse(e.data);n.success?(console.debug(`Parsed message`,n.data),this.onmessage?.(n.data)):e.data?.jsonrpc===`2.0`?(console.error(`Failed to parse message`,n.error.message,e),this.onerror?.(Error(`Invalid JSON-RPC message received: `+n.error.message))):console.debug(`Ignoring non-JSON-RPC message`,n.error.message,e)}}async start(){window.addEventListener(`message`,this.messageListener)}async send(e,t){e.method!==`ui/notifications/tool-input-partial`&&console.debug(`Sending message`,e),this.eventTarget.postMessage(e,`*`)}async close(){window.removeEventListener(`message`,this.messageListener),this.onclose?.()}onclose;onerror;onmessage;sessionId;setProtocolVersion},Br=[hr],Vr=class extends mr{_client;_hostInfo;_capabilities;_appCapabilities;_hostContext={};_appInfo;_initializedReceived=!1;_baseReplaceRequestHandler=this.replaceRequestHandler;replaceRequestHandler=(e,t)=>{this._baseReplaceRequestHandler(e,(e,n)=>(this._initializedReceived||console.warn(`[ext-apps] AppBridge received '${e.method}' before ui/notifications/initialized. The View is calling host methods before completing the handshake; it should await app.connect() first.`),t(e,n)))};eventSchemas={sizechange:Cr,sandboxready:br,initialized:jr,requestteardown:Or,loggingmessage:hn};constructor(e,t,n,r){super(r),this._client=e,this._hostInfo=t,this._capabilities=n,this.addEventListener(`initialized`,()=>{this._initializedReceived=!0}),this._hostContext=r?.hostContext||{},this.setRequestHandler(Rr,e=>this._oninitialize(e)),this.setRequestHandler(V,(e,t)=>(this.onping?.(e.params,t),{})),this.replaceRequestHandler(Mr,e=>({mode:this._hostContext.displayMode??`inline`}))}getAppCapabilities(){return this._appCapabilities}getAppVersion(){return this._appInfo}onping;get onsizechange(){return this.getEventHandler(`sizechange`)}set onsizechange(e){this.setEventHandler(`sizechange`,e)}get onsandboxready(){return this.getEventHandler(`sandboxready`)}set onsandboxready(e){this.setEventHandler(`sandboxready`,e)}get oninitialized(){return this.getEventHandler(`initialized`)}set oninitialized(e){this.setEventHandler(`initialized`,e)}_onmessage;get onmessage(){return this._onmessage}set onmessage(e){this.warnIfRequestHandlerReplaced(`onmessage`,this._onmessage,e),this._onmessage=e,this.replaceRequestHandler(Fr,async(e,t)=>{if(!this._onmessage)throw Error(`No onmessage handler set`);return this._onmessage(e.params,t)})}_onopenlink;get onopenlink(){return this._onopenlink}set onopenlink(e){this.warnIfRequestHandlerReplaced(`onopenlink`,this._onopenlink,e),this._onopenlink=e,this.replaceRequestHandler(yr,async(e,t)=>{if(!this._onopenlink)throw Error(`No onopenlink handler set`);return this._onopenlink(e.params,t)})}_ondownloadfile;get ondownloadfile(){return this._ondownloadfile}set ondownloadfile(e){this.warnIfRequestHandlerReplaced(`ondownloadfile`,this._ondownloadfile,e),this._ondownloadfile=e,this.replaceRequestHandler(Pr,async(e,t)=>{if(!this._ondownloadfile)throw Error(`No ondownloadfile handler set`);return this._ondownloadfile(e.params,t)})}get onrequestteardown(){return this.getEventHandler(`requestteardown`)}set onrequestteardown(e){this.setEventHandler(`requestteardown`,e)}_onrequestdisplaymode;get onrequestdisplaymode(){return this._onrequestdisplaymode}set onrequestdisplaymode(e){this.warnIfRequestHandlerReplaced(`onrequestdisplaymode`,this._onrequestdisplaymode,e),this._onrequestdisplaymode=e,this.replaceRequestHandler(Mr,async(e,t)=>{if(!this._onrequestdisplaymode)throw Error(`No onrequestdisplaymode handler set`);return this._onrequestdisplaymode(e.params,t)})}get onloggingmessage(){return this.getEventHandler(`loggingmessage`)}set onloggingmessage(e){this.setEventHandler(`loggingmessage`,e)}_onupdatemodelcontext;get onupdatemodelcontext(){return this._onupdatemodelcontext}set onupdatemodelcontext(e){this.warnIfRequestHandlerReplaced(`onupdatemodelcontext`,this._onupdatemodelcontext,e),this._onupdatemodelcontext=e,this.replaceRequestHandler(Lr,async(e,t)=>{if(!this._onupdatemodelcontext)throw Error(`No onupdatemodelcontext handler set`);return this._onupdatemodelcontext(e.params,t)})}_oncalltool;get oncalltool(){return this._oncalltool}set oncalltool(e){this.warnIfRequestHandlerReplaced(`oncalltool`,this._oncalltool,e),this._oncalltool=e,this.replaceRequestHandler(ln,async(e,t)=>{if(!this._oncalltool)throw Error(`No oncalltool handler set`);return this._oncalltool(e.params,t)})}set oncreatesamplingmessage(e){this.setRequestHandler(wn,async(t,n)=>e(t.params,n))}sendToolListChanged(e={}){return this.notification({method:`notifications/tools/list_changed`,params:e})}_onlistresources;get onlistresources(){return this._onlistresources}set onlistresources(e){this.warnIfRequestHandlerReplaced(`onlistresources`,this._onlistresources,e),this._onlistresources=e,this.replaceRequestHandler(Et,async(e,t)=>{if(!this._onlistresources)throw Error(`No onlistresources handler set`);return this._onlistresources(e.params,t)})}_onlistresourcetemplates;get onlistresourcetemplates(){return this._onlistresourcetemplates}set onlistresourcetemplates(e){this.warnIfRequestHandlerReplaced(`onlistresourcetemplates`,this._onlistresourcetemplates,e),this._onlistresourcetemplates=e,this.replaceRequestHandler(Ot,async(e,t)=>{if(!this._onlistresourcetemplates)throw Error(`No onlistresourcetemplates handler set`);return this._onlistresourcetemplates(e.params,t)})}_onreadresource;get onreadresource(){return this._onreadresource}set onreadresource(e){this.warnIfRequestHandlerReplaced(`onreadresource`,this._onreadresource,e),this._onreadresource=e,this.replaceRequestHandler(Mt,async(e,t)=>{if(!this._onreadresource)throw Error(`No onreadresource handler set`);return this._onreadresource(e.params,t)})}sendResourceListChanged(e={}){return this.notification({method:`notifications/resources/list_changed`,params:e})}_onlistprompts;get onlistprompts(){return this._onlistprompts}set onlistprompts(e){this.warnIfRequestHandlerReplaced(`onlistprompts`,this._onlistprompts,e),this._onlistprompts=e,this.replaceRequestHandler(Ut,async(e,t)=>{if(!this._onlistprompts)throw Error(`No onlistprompts handler set`);return this._onlistprompts(e.params,t)})}sendPromptListChanged(e={}){return this.notification({method:`notifications/prompts/list_changed`,params:e})}assertCapabilityForMethod(e){}assertRequestHandlerCapability(e){}assertNotificationCapability(e){}assertTaskCapability(e){throw Error(`Tasks are not supported in MCP Apps`)}assertTaskHandlerCapability(e){throw Error(`Task handlers are not supported in MCP Apps`)}getCapabilities(){return this._capabilities}async _oninitialize(e){let t=e.params.protocolVersion;return this._appInfo!==void 0&&console.warn(`[ext-apps] AppBridge received a second ui/initialize. The View may be double-mounting (e.g. React StrictMode in dev) without closing the previous App instance. Responding normally; the latest appInfo/appCapabilities replace the previous values.`),this._appCapabilities=e.params.appCapabilities,this._appInfo=e.params.appInfo,{protocolVersion:Br.includes(t)?t:hr,hostCapabilities:this.getCapabilities(),hostInfo:this._hostInfo,hostContext:this._hostContext}}setHostContext(e){let t={},n=!1;for(let r of Object.keys(e)){let i=this._hostContext[r],a=e[r];pr(i,a)||(t[r]=a,n=!0)}n&&(this._hostContext=e,this.sendHostContextChange(t))}sendHostContextChange(e){return this.notification({method:`ui/notifications/host-context-changed`,params:e})}sendToolInput(e){return this.notification({method:`ui/notifications/tool-input`,params:e})}sendToolInputPartial(e){return this.notification({method:`ui/notifications/tool-input-partial`,params:e})}sendToolResult(e){return this.notification({method:`ui/notifications/tool-result`,params:e})}sendToolCancelled(e){return this.notification({method:`ui/notifications/tool-cancelled`,params:e})}sendSandboxResourceReady(e){return this.notification({method:`ui/notifications/sandbox-resource-ready`,params:e})}teardownResource(e,t){return this.request({method:`ui/resource-teardown`,params:e},Er,t)}sendResourceTeardown=this.teardownResource;callTool(e,t){return this.request({method:`tools/call`,params:e},Y,t)}listTools(e,t){return this.request({method:`tools/list`,params:e},sn,t)}async connect(e){if(this.transport)throw Error(`AppBridge is already connected. Call close() before connecting again.`);if(this._initializedReceived=!1,this._client){let e=this._client.getServerCapabilities();if(!e)throw Error(`Client server capabilities not available`);e.tools&&(this.oncalltool=async(e,t)=>this._client.request({method:`tools/call`,params:e},Y,{signal:t.signal}),e.tools.listChanged&&this._client.setNotificationHandler(un,e=>this.sendToolListChanged(e.params))),e.resources&&(this.onlistresources=async(e,t)=>this._client.request({method:`resources/list`,params:e},Dt,{signal:t.signal}),this.onlistresourcetemplates=async(e,t)=>this._client.request({method:`resources/templates/list`,params:e},kt,{signal:t.signal}),this.onreadresource=async(e,t)=>this._client.request({method:`resources/read`,params:e},Nt,{signal:t.signal}),e.resources.listChanged&&this._client.setNotificationHandler(Pt,e=>this.sendResourceListChanged(e.params))),e.prompts&&(this.onlistprompts=async(e,t)=>this._client.request({method:`prompts/list`,params:e},Wt,{signal:t.signal}),e.prompts.listChanged&&this._client.setNotificationHandler(tn,e=>this.sendPromptListChanged(e.params)))}return super.connect(e)}}})))()}function Ur(e=document.documentElement){if(!e)return;let t=getComputedStyle(e),n={...Gr};for(let[e,r]of Object.entries(Wr)){let i=t.getPropertyValue(r).trim();i&&(n[e]=i)}return n}var Wr,Gr;function Kr(){return(Kr=t((()=>{Wr={"--color-background-primary":`--card`,"--color-background-secondary":`--bg`,"--color-background-tertiary":`--bg-elevated`,"--color-background-inverse":`--text`,"--color-background-disabled":`--bg-muted`,"--color-background-success":`--ok-subtle`,"--color-background-warning":`--warn-subtle`,"--color-background-danger":`--danger-subtle`,"--color-text-primary":`--text`,"--color-text-secondary":`--muted-strong`,"--color-text-tertiary":`--muted`,"--color-text-inverse":`--bg`,"--color-text-success":`--ok`,"--color-text-warning":`--warn`,"--color-text-danger":`--danger`,"--color-text-info":`--info`,"--color-border-primary":`--border`,"--color-border-secondary":`--border-strong`,"--color-border-inverse":`--bg`,"--color-ring-primary":`--ring`,"--font-text-xs-size":`--control-ui-text-xs`,"--font-text-sm-size":`--control-ui-text-sm`,"--font-text-md-size":`--control-ui-text-md`,"--font-text-lg-size":`--control-ui-text-lg`,"--border-radius-xs":`--radius-sm`,"--border-radius-sm":`--radius-sm`,"--border-radius-md":`--radius`,"--border-radius-lg":`--radius-lg`,"--border-radius-xl":`--radius-xl`,"--border-radius-full":`--radius-full`,"--shadow-sm":`--shadow-sm`,"--shadow-md":`--shadow-md`,"--shadow-lg":`--shadow-lg`},Gr={"--border-width-regular":`1px`,"--font-weight-normal":`400`,"--font-weight-medium":`500`,"--font-weight-semibold":`600`,"--font-weight-bold":`700`,"--font-sans":`system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji"`,"--font-mono":`ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace`}})))()}async function qr(e=window.requestAnimationFrame.bind(window),t=window.setTimeout.bind(window)){await Promise.race([new Promise(t=>{e(()=>{e(()=>t())})}),new Promise(e=>{t(e,1e3)})])}function Jr(e,t){let n=e?.getBoundingClientRect(),r=navigator.maxTouchPoints>0||window.matchMedia?.(`(pointer: coarse)`).matches,i=document.documentElement.dataset.themeMode;return{theme:i===`light`||i===`dark`?i:window.matchMedia?.(`(prefers-color-scheme: dark)`).matches?`dark`:`light`,displayMode:`inline`,availableDisplayModes:[`inline`],containerDimensions:{width:Math.max(1,Math.round(n?.width||window.innerWidth)),height:t},locale:navigator.language||void 0,timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,platform:r&&window.innerWidth<768?`mobile`:`web`,deviceCapabilities:{touch:r,hover:window.matchMedia?.(`(hover: hover)`).matches},safeAreaInsets:{top:0,right:0,bottom:0,left:0},styles:{variables:Ur()}}}var Yr,Xr,$;function Zr(){return(Zr=t((()=>{ce(),ae(),Hr(),nr(),i(),u(),d(),f(),te(),re(),s(),de(),ue(),Kr(),Yr=250,Xr=class extends Vr{setMessageHandler(e){Reflect.set(this,`onmessage`,e)}setUpdateModelContextHandler(e){Reflect.set(this,`onupdatemodelcontext`,e)}setListToolsHandler(e){this.replaceRequestHandler(on,t=>e(t.params))}},$=class extends n{constructor(...e){super(...e),this.sessionKey=``,this.viewId=``,this.height=600,this.fixedHeight=!1,this.title=``,this.i18nController=new ie(this),this.mount=ee(),this.resources=null,this.teardownPromise=null,this.setupTask=new oe(this,{autoRun:`afterUpdate`,args:()=>[this.context?.gateway.snapshot.client??null,this.sessionKey,this.viewId],task:async([e,t,n],{signal:r})=>{if(await this.teardownResources(this.resources),!t||!n)return null;if(!e)throw Error(g(`mcpApp.errors.gatewayUnavailable`));return this.setupResources({client:e,sessionKey:t,viewId:n},r)}})}static{this.styles=h`
:host {
display: block;
width: 100%;
}
.mount {
width: 100%;
min-height: 160px;
}
.mount:empty {
min-height: 0;
}
iframe {
display: block;
width: 100%;
border: 0;
background: var(--board-surface, transparent);
}
.error {
padding: 14px;
color: var(--danger, #dc2626);
font-size: 13px;
}
`}disconnectedCallback(){this.teardown(),super.disconnectedCallback()}updated(e){this.resources&&(this.resources.iframe.title=this.title||g(`mcpApp.title`),(e.has(`height`)||e.has(`fixedHeight`)&&this.fixedHeight)&&(this.resources.frameHeight=this.height,this.resources.iframe.style.height=`${this.height}px`,this.resources.bridge?.setHostContext(Jr(this.mount.value,this.height))))}async request(e,t,n,i){try{let r={sessionKey:e.sessionKey,viewId:e.viewId,...n};return await(i?e.client.request(t,r,{signal:i}):e.client.request(t,r))}catch(e){throw r(e)&&this.dispatchEvent(new CustomEvent(fe,{bubbles:!0,composed:!0})),e}}addResourceCleanup(e,t){return e.cleanups.add(t),()=>{e.cleanups.delete(t)&&t()}}runResourceCleanups(e){for(let t of e.cleanups)e.cleanups.delete(t),t()}async teardownResources(e){if(!e||e.disposed){await this.teardownPromise;return}e.disposed=!0,this.resources===e&&(this.resources=null),this.runResourceCleanups(e);let t=(async()=>{if(e.bridge){let t;try{await Promise.race([e.bridge.teardownResource({}).catch(()=>void 0),new Promise(e=>{t=window.setTimeout(e,Yr)})])}finally{t!==void 0&&window.clearTimeout(t)}}await e.transport?.close().catch(()=>void 0),e.iframe.remove()})();this.teardownPromise=t;try{await t}finally{this.teardownPromise===t&&(this.teardownPromise=null)}}async teardown(){this.setupTask.abort(),await this.teardownResources(this.resources)}restartAfterTeardown(){!this.isConnected||this.resources||this.teardownPromise||this.setupTask.run()}async setupResources(e,t){let{sessionKey:n,viewId:r}=e,i=null;try{let a=await this.request(e,`mcp.app.view`,{},t),o=this.mount.value;if(t.throwIfAborted(),!o)throw Error(g(`mcpApp.errors.mountUnavailable`));let s=document.createElement(`iframe`);s.title=this.title||g(`mcpApp.title`),s.referrerPolicy=`origin`,s.style.height=`${this.height}px`,s.setAttribute(`sandbox`,`allow-scripts allow-same-origin allow-forms`),o.appendChild(s);let c={bridge:null,cleanups:new Set,frameHeight:this.height,iframe:s,transport:null,disposed:!1};i=c,this.resources=c,t.addEventListener(`abort`,()=>void this.teardownResources(c),{once:!0});let l=new Promise((e,t)=>{let n=window.setTimeout(()=>{i(),t(Error(g(`mcpApp.errors.sandboxTimedOut`)))},15e3),r=t=>{t.source===s.contentWindow&&t.data?.method===`ui/notifications/sandbox-proxy-ready`&&(i(),e())},i=this.addResourceCleanup(c,()=>{window.clearTimeout(n),window.removeEventListener(`message`,r)});window.addEventListener(`message`,r)});if(s.src=he(a.sandboxUrl,a.sandboxPort,a.sandboxOrigin,this.context?.gateway.connection.gatewayUrl??``,window.location.origin),await l,t.throwIfAborted(),!s.contentWindow)throw Error(g(`mcpApp.errors.sandboxUnavailable`));let u=new Xr(null,{name:`OpenClaw`,version:`1.0.0`},me(a.csp,a.messageSupported===!0,a.updateModelContextSupported===!0,a.messageSupported===!0),{hostContext:Jr(o,this.height)});c.bridge=u;let d=(t,n)=>this.request(e,t,n),f=()=>{this.teardown()};if(u.onrequestteardown=f,this.addResourceCleanup(c,()=>{u.onrequestteardown===f&&(u.onrequestteardown=void 0)}),a.messageSupported===!0){let e=`${n}\0${r}`;u.setMessageHandler(async({content:t})=>{let n=t.length===1?t[0]:void 0,r=n?.type===`text`?n.text:null;return ge(s,r,e,e=>window.confirm(`${g(`common.confirm`)}:\n\n${e}`))?{}:{isError:!0}})}a.updateModelContextSupported===!0&&u.setUpdateModelContextHandler(async e=>(await d(`mcp.app.updateModelContext`,{...e}),{})),u.oncalltool=async e=>await d(`mcp.app.callTool`,{toolName:e.name,arguments:e.arguments}),u.setListToolsHandler(async e=>await d(`mcp.app.listTools`,e?.cursor?{cursor:e.cursor}:{})),u.onlistresources=async e=>await d(`mcp.app.listResources`,e?.cursor?{cursor:e.cursor}:{}),u.onlistresourcetemplates=async e=>await d(`mcp.app.listResourceTemplates`,e?.cursor?{cursor:e.cursor}:{}),u.onreadresource=async e=>await d(`mcp.app.readResource`,{uri:e.uri}),u.onopenlink=async({url:e})=>pe(e)?{}:{isError:!0},u.onsizechange=({height:e})=>{if(e!==void 0&&!this.fixedHeight){let t=Math.min(1200,Math.max(160,Math.round(e)));c.frameHeight=t,s.style.height=`${t}px`,u.setHostContext(Jr(o,t))}};let p=new Promise(e=>{u.oninitialized=()=>e()}),m=new zr(s.contentWindow,s.contentWindow);c.transport=m,await u.connect(m),t.throwIfAborted(),await u.sendSandboxResourceReady({html:a.html,csp:a.csp});let h,ee=this.addResourceCleanup(c,()=>{h!==void 0&&window.clearTimeout(h)});try{await Promise.race([p,new Promise((e,t)=>{h=window.setTimeout(()=>t(Error(g(`mcpApp.errors.initializationTimedOut`))),15e3)})])}finally{ee()}t.throwIfAborted();let te=()=>u.setHostContext(Jr(o,c.frameHeight)),ne=this.context?.theme.subscribe(te);if(ne&&this.addResourceCleanup(c,ne),typeof ResizeObserver<`u`){let e=new ResizeObserver(te);e.observe(o),this.addResourceCleanup(c,()=>e.disconnect())}return await qr(),t.throwIfAborted(),await u.sendToolInput({arguments:a.toolInput&&typeof a.toolInput==`object`&&!Array.isArray(a.toolInput)?a.toolInput:{}}),await u.sendToolResult(a.toolResult),t.throwIfAborted(),c}catch(e){throw await this.teardownResources(i),e}}render(){let e=this.setupTask.status===le.ERROR?this.setupTask.error:null,t=e?g(`mcpApp.unavailable`,{error:o(e,g(`mcpApp.errors.requestFailed`))}):null;return l`<div ${m(this.mount)} class="mount"></div>
${t?l`<div class="error">${t}</div>`:c}`}},a([se({context:ne,subscribe:!0})],$.prototype,`context`,void 0),a([p({attribute:!1})],$.prototype,`sessionKey`,void 0),a([p({attribute:!1})],$.prototype,`viewId`,void 0),a([p({type:Number})],$.prototype,`height`,void 0),a([p({type:Boolean})],$.prototype,`fixedHeight`,void 0),a([p()],$.prototype,`title`,void 0)})))()}function Qr(){customElements.get(`mcp-app-view`)||customElements.define(`mcp-app-view`,$)}function $r(){return($r=t((()=>{Zr(),Qr()})))()}$r();export{Qr as registerMcpAppView};
//# sourceMappingURL=mcp-app-view-registration-BaqCYBMP.js.map