@keyueclaw/web-sdk 0.1.21 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-management.js +2 -2
- package/dist/api-management.js.map +1 -1
- package/dist/api-management.umd.cjs +2 -2
- package/dist/api-management.umd.cjs.map +1 -1
- package/dist/skills.js +2 -2
- package/dist/skills.js.map +1 -1
- package/dist/skills.umd.cjs +2 -2
- package/dist/skills.umd.cjs.map +1 -1
- package/package.json +1 -1
|
@@ -1452,7 +1452,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1452
1452
|
`)}}async function Tz(e,t){try{return await e.request(`sessions.compact`,{key:t}),{content:`Context compacted successfully.`,action:`refresh`}}catch(e){return{content:`Compaction failed: ${String(e)}`}}}async function Ez(e,t,n){if(!n)try{let[n,r]=await Promise.all([e.request(`sessions.list`,{}),e.request(`models.list`,{})]),i=Bz(n,t)?.model||n?.defaults?.model||`default`,a=r?.models?.map(e=>e.id)??[],o=[`**Current model:** \`${i}\``];return a.length>0&&o.push(`**Available:** ${a.slice(0,10).map(e=>`\`${e}\``).join(`, `)}${a.length>10?` +${a.length-10} more`:``}`),{content:o.join(`
|
|
1453
1453
|
`)}}catch(e){return{content:`Failed to get model info: ${String(e)}`}}try{let r=await e.request(`sessions.patch`,{key:t,model:n.trim()}),i=Sz(r.resolved?.model??n.trim(),r.resolved?.modelProvider);return{content:`Model set to \`${n.trim()}\`.`,action:`refresh`,sessionPatch:{modelOverride:xz(i)}}}catch(e){return{content:`Failed to set model: ${String(e)}`}}}async function Dz(e,t,n){let r=n.trim();if(!r)try{let{session:n,models:r}=await Vz(e,t);return{content:Rz(`Current thinking level: ${Hz(n,r)}.`,mz(n?.modelProvider,n?.model))}}catch(e){return{content:`Failed to get thinking level: ${String(e)}`}}let i=dz(r);if(!i)try{let n=await zz(e,t);return{content:`Unrecognized thinking level "${r}". Valid levels: ${mz(n?.modelProvider,n?.model)}.`}}catch(e){return{content:`Failed to validate thinking level: ${String(e)}`}}try{return await e.request(`sessions.patch`,{key:t,thinkingLevel:i}),{content:`Thinking level set to **${i}**.`,action:`refresh`}}catch(e){return{content:`Failed to set thinking level: ${String(e)}`}}}async function Oz(e,t,n){let r=n.trim();if(!r)try{return{content:Rz(`Current verbose level: ${_z((await zz(e,t))?.verboseLevel)??`off`}.`,`on, full, off`)}}catch(e){return{content:`Failed to get verbose level: ${String(e)}`}}let i=_z(r);if(!i)return{content:`Unrecognized verbose level "${r}". Valid levels: off, on, full.`};try{return await e.request(`sessions.patch`,{key:t,verboseLevel:i}),{content:`Verbose mode set to **${i}**.`,action:`refresh`}}catch(e){return{content:`Failed to set verbose mode: ${String(e)}`}}}async function kz(e,t,n){let r=n.trim().toLowerCase();if(!r||r===`status`)try{return{content:Rz(`Current fast mode: ${Uz(await zz(e,t))}.`,`status, on, off`)}}catch(e){return{content:`Failed to get fast mode: ${String(e)}`}}if(r!==`on`&&r!==`off`)return{content:`Unrecognized fast mode "${n.trim()}". Valid levels: status, on, off.`};try{return await e.request(`sessions.patch`,{key:t,fastMode:r===`on`}),{content:`Fast mode ${r===`on`?`enabled`:`disabled`}.`,action:`refresh`}}catch(e){return{content:`Failed to set fast mode: ${String(e)}`}}}async function Az(e,t){try{let n=Bz(await e.request(`sessions.list`,{}),t);if(!n)return{content:`No active session.`};let r=n.inputTokens??0,i=n.outputTokens??0,a=n.totalTokens??r+i,o=n.contextTokens??0,s=o>0?Math.round(r/o*100):null,c=[`**Session Usage**`,`Input: **${Wz(r)}** tokens`,`Output: **${Wz(i)}** tokens`,`Total: **${Wz(a)}** tokens`];return s!==null&&c.push(`Context: **${s}%** of ${Wz(o)}`),n.model&&c.push(`Model: \`${n.model}\``),{content:c.join(`
|
|
1454
1454
|
`)}}catch(e){return{content:`Failed to get usage: ${String(e)}`}}}async function jz(e){try{let t=await e.request(`agents.list`,{}),n=t?.agents??[];if(n.length===0)return{content:`No agents configured.`};let r=[`**Agents** (${n.length})\n`];for(let e of n){let n=e.id===t?.defaultId,i=e.identity?.name||e.name||e.id,a=n?` *(default)*`:``;r.push(`- \`${e.id}\` — ${i}${a}`)}return{content:r.join(`
|
|
1455
|
-
`)}}catch(e){return{content:`Failed to list agents: ${String(e)}`}}}async function Mz(e,t,n){let r=n.trim();if(!r)return{content:"Usage: `/kill <id|all>`"};try{let n=Nz((await e.request(`sessions.list`,{}))?.sessions??[],t,r);if(n.length===0)return{content:r.toLowerCase()===`all`?`No active sub-agent sessions found.`:`No matching sub-agent sessions found for \`${r}\`.`};let i=await Promise.allSettled(n.map(t=>e.request(`chat.abort`,{sessionKey:t}))),a=i.filter(e=>e.status===`rejected`),o=i.filter(e=>e.status===`fulfilled`&&e.value?.aborted!==!1).length;if(o===0){if(a.length===0)return{content:r.toLowerCase()===`all`?`No active sub-agent runs to abort.`:`No active runs matched \`${r}\`.`};throw a[0]?.reason??Error(`abort failed`)}return r.toLowerCase()===`all`?{content:o===n.length?`Aborted ${o} sub-agent session${o===1?``:`s`}.`:`Aborted ${o} of ${n.length} sub-agent sessions.`}:{content:o===n.length?`Aborted ${o} matching sub-agent session${o===1?``:`s`} for \`${r}\`.`:`Aborted ${o} of ${n.length} matching sub-agent sessions for \`${r}\`.`}}catch(e){return{content:`Failed to abort: ${String(e)}`}}}function Nz(e,t,n){let r=n.trim().toLowerCase();if(!r)return[];let i=new Set,a=t.trim().toLowerCase(),o=GA(a)?.agentId??(a===`main`?`main`:void 0),s=Fz(e);for(let t of e){let e=t?.key?.trim();if(!e||!KA(e))continue;let n=e.toLowerCase(),c=GA(n),l=Pz(n,a,s,o,c?.agentId);(r===`all`&&l||l&&n===r||l&&((c?.agentId??``)===r||n.endsWith(`:subagent:${r}`)||n===`subagent:${r}`))&&i.add(e)}return[...i]}function Pz(e,t,n,r,i){if(!r||i!==r)return!1;let a=Lz(t,r),o=new Set,s=Iz(n.get(e)?.spawnedBy);for(;s&&!o.has(s);){if(a.has(s))return!0;o.add(s),s=Iz(n.get(s)?.spawnedBy)}return KA(t)?e.startsWith(`${t}:subagent:`):!1}function Fz(e){let t=new Map;for(let n of e){let e=Iz(n?.key);e&&t.set(e,n)}return t}function Iz(e){return e?.trim().toLowerCase()||void 0}function Lz(e,t){let n=new Set([e]);if(t===`main`){let t=`agent:${vz}:main`;e===`main`?n.add(t):e===t&&n.add(yz)}return n}function Rz(e,t){return`${e}\nOptions: ${t}.`}async function zz(e,t){return Bz(await e.request(`sessions.list`,{}),t)}function Bz(e,t){let n=Iz(t),r=GA(n??``)?.agentId??(n===`main`?`main`:void 0),i=n?Lz(n,r):new Set;return e?.sessions?.find(e=>{let t=Iz(e.key);return t?i.has(t):!1})}async function Vz(e,t){let[n,r]=await Promise.all([e.request(`sessions.list`,{}),e.request(`models.list`,{})]);return{session:Bz(n,t),models:r?.models??[]}}function Hz(e,t){return dz(e?.thinkingLevel)||(!e?.modelProvider||!e.model?`off`:hz({provider:e.modelProvider,model:e.model,catalog:t}))}function Uz(e){return e?.fastMode===!0?`on`:`off`}function Wz(e){return e>=1e6?`${(e/1e6).toFixed(1).replace(/\.0$/,``)}M`:e>=1e3?`${(e/1e3).toFixed(1).replace(/\.0$/,``)}k`:String(e)}var Gz={AUTH_REQUIRED:`AUTH_REQUIRED`,AUTH_UNAUTHORIZED:`AUTH_UNAUTHORIZED`,AUTH_TOKEN_MISSING:`AUTH_TOKEN_MISSING`,AUTH_TOKEN_MISMATCH:`AUTH_TOKEN_MISMATCH`,AUTH_TOKEN_NOT_CONFIGURED:`AUTH_TOKEN_NOT_CONFIGURED`,AUTH_PASSWORD_MISSING:`AUTH_PASSWORD_MISSING`,AUTH_PASSWORD_MISMATCH:`AUTH_PASSWORD_MISMATCH`,AUTH_PASSWORD_NOT_CONFIGURED:`AUTH_PASSWORD_NOT_CONFIGURED`,AUTH_BOOTSTRAP_TOKEN_INVALID:`AUTH_BOOTSTRAP_TOKEN_INVALID`,AUTH_DEVICE_TOKEN_MISMATCH:`AUTH_DEVICE_TOKEN_MISMATCH`,AUTH_RATE_LIMITED:`AUTH_RATE_LIMITED`,AUTH_TAILSCALE_IDENTITY_MISSING:`AUTH_TAILSCALE_IDENTITY_MISSING`,AUTH_TAILSCALE_PROXY_MISSING:`AUTH_TAILSCALE_PROXY_MISSING`,AUTH_TAILSCALE_WHOIS_FAILED:`AUTH_TAILSCALE_WHOIS_FAILED`,AUTH_TAILSCALE_IDENTITY_MISMATCH:`AUTH_TAILSCALE_IDENTITY_MISMATCH`,CONTROL_UI_ORIGIN_NOT_ALLOWED:`CONTROL_UI_ORIGIN_NOT_ALLOWED`,CONTROL_UI_DEVICE_IDENTITY_REQUIRED:`CONTROL_UI_DEVICE_IDENTITY_REQUIRED`,DEVICE_IDENTITY_REQUIRED:`DEVICE_IDENTITY_REQUIRED`,DEVICE_AUTH_INVALID:`DEVICE_AUTH_INVALID`,DEVICE_AUTH_DEVICE_ID_MISMATCH:`DEVICE_AUTH_DEVICE_ID_MISMATCH`,DEVICE_AUTH_SIGNATURE_EXPIRED:`DEVICE_AUTH_SIGNATURE_EXPIRED`,DEVICE_AUTH_NONCE_REQUIRED:`DEVICE_AUTH_NONCE_REQUIRED`,DEVICE_AUTH_NONCE_MISMATCH:`DEVICE_AUTH_NONCE_MISMATCH`,DEVICE_AUTH_SIGNATURE_INVALID:`DEVICE_AUTH_SIGNATURE_INVALID`,DEVICE_AUTH_PUBLIC_KEY_INVALID:`DEVICE_AUTH_PUBLIC_KEY_INVALID`,PAIRING_REQUIRED:`PAIRING_REQUIRED`},Kz=new Set([`retry_with_device_token`,`update_auth_configuration`,`update_auth_credentials`,`wait_then_retry`,`review_auth_configuration`]);function qz(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e.code;return typeof t==`string`&&t.trim().length>0?t:null}function Jz(e){if(!e||typeof e!=`object`||Array.isArray(e))return{};let t=e,n=typeof t.canRetryWithDeviceToken==`boolean`?t.canRetryWithDeviceToken:void 0,r=typeof t.recommendedNextStep==`string`?t.recommendedNextStep.trim():``;return{canRetryWithDeviceToken:n,recommendedNextStep:Kz.has(r)?r:void 0}}function Yz(e){let t=e.scopes.join(`,`),n=e.token??``;return[`v2`,e.deviceId,e.clientId,e.clientMode,e.role,t,String(e.signedAtMs),n,e.nonce].join(`|`)}var Xz={WEBCHAT_UI:`webchat-ui`,CONTROL_UI:`openclaw-control-ui`,WEBCHAT:`webchat`,CLI:`cli`,GATEWAY_CLIENT:`gateway-client`,MACOS_APP:`openclaw-macos`,IOS_APP:`openclaw-ios`,ANDROID_APP:`openclaw-android`,NODE_HOST:`node-host`,TEST:`test`,FINGERPRINT:`fingerprint`,PROBE:`openclaw-probe`},Zz=Xz,Qz={WEBCHAT:`webchat`,CLI:`cli`,UI:`ui`,BACKEND:`backend`,NODE:`node`,PROBE:`probe`,TEST:`test`};new Set(Object.values(Xz)),new Set(Object.values(Qz));var $z=!1;function eB(e){e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=``;for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,`0`);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}function tB(){let e=new Uint8Array(16),t=Date.now();for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256);return e[0]^=t&255,e[1]^=t>>>8&255,e[2]^=t>>>16&255,e[3]^=t>>>24&255,e}function nB(){$z||($z=!0,console.warn(`[uuid] crypto API missing; falling back to weak randomness`))}function rB(e=globalThis.crypto){if(e&&typeof e.randomUUID==`function`)return e.randomUUID();if(e&&typeof e.getRandomValues==`function`){let t=new Uint8Array(16);return e.getRandomValues(t),eB(t)}return nB(),eB(tB())}var iB=class extends Error{constructor(e){super(e.message),this.name=`GatewayRequestError`,this.gatewayCode=e.code,this.details=e.details}};function aB(e){return qz(e?.details)}function oB(e){if(!e)return!1;let t=aB(e);return t===Gz.AUTH_TOKEN_MISSING||t===Gz.AUTH_BOOTSTRAP_TOKEN_INVALID||t===Gz.AUTH_PASSWORD_MISSING||t===Gz.AUTH_PASSWORD_MISMATCH||t===Gz.AUTH_RATE_LIMITED||t===Gz.PAIRING_REQUIRED||t===Gz.CONTROL_UI_DEVICE_IDENTITY_REQUIRED||t===Gz.DEVICE_IDENTITY_REQUIRED}function sB(e){try{let t=new URL(e,window.location.href),n=t.hostname.trim().toLowerCase(),r=n===`localhost`||n===`::1`||n===`[::1]`||n===`127.0.0.1`,i=n.startsWith(`127.`);if(r||i)return!0;let a=new URL(window.location.href);return t.host===a.host}catch{return!1}}var cB=4008,lB=class{constructor(e){this.opts=e,this.ws=null,this.pending=new Map,this.closed=!1,this.lastSeq=null,this.connectNonce=null,this.connectSent=!1,this.connectTimer=null,this.backoffMs=800,this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1}start(){this.closed=!1,this.connect()}stop(){this.closed=!0,this.ws?.close(),this.ws=null,this.pendingConnectError=void 0,this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1,this.flushPending(Error(`gateway client stopped`))}get connected(){return this.ws?.readyState===WebSocket.OPEN}connect(){this.closed||(this.ws=new WebSocket(this.opts.url),this.ws.addEventListener(`open`,()=>this.queueConnect()),this.ws.addEventListener(`message`,e=>this.handleMessage(String(e.data??``))),this.ws.addEventListener(`close`,e=>{let t=String(e.reason??``),n=this.pendingConnectError;this.pendingConnectError=void 0,this.ws=null,this.flushPending(Error(`gateway closed (${e.code}): ${t}`)),this.opts.onClose?.({code:e.code,reason:t,error:n}),!(aB(n)===Gz.AUTH_TOKEN_MISMATCH&&this.deviceTokenRetryBudgetUsed&&!this.pendingDeviceTokenRetry)&&(oB(n)||this.scheduleReconnect())}),this.ws.addEventListener(`error`,()=>{}))}scheduleReconnect(){if(this.closed)return;let e=this.backoffMs;this.backoffMs=Math.min(this.backoffMs*1.7,15e3),window.setTimeout(()=>this.connect(),e)}flushPending(e){for(let[,t]of this.pending)t.reject(e);this.pending.clear()}async sendConnect(){if(this.connectSent)return;this.connectSent=!0,this.connectTimer!==null&&(window.clearTimeout(this.connectTimer),this.connectTimer=null);let e=typeof crypto<`u`&&!!crypto.subtle,t=[`operator.admin`,`operator.approvals`,`operator.pairing`],n=`operator`,r=this.opts.token?.trim()||void 0,i=this.opts.password?.trim()||void 0,a=null,o={authToken:r,authPassword:i,canFallbackToShared:!1};e&&(a=await QN(),o=this.selectConnectAuth({role:n,deviceId:a.deviceId}),this.pendingDeviceTokenRetry&&o.authDeviceToken&&(this.pendingDeviceTokenRetry=!1));let s=o.authToken,c=o.authDeviceToken??o.resolvedDeviceToken,l=s||o.authPassword?{token:s,deviceToken:c,password:o.authPassword}:void 0,u;if(e&&a){let e=Date.now(),r=this.connectNonce??``,i=Yz({deviceId:a.deviceId,clientId:this.opts.clientName??Zz.CONTROL_UI,clientMode:this.opts.mode??Qz.WEBCHAT,role:n,scopes:t,signedAtMs:e,token:s??null,nonce:r}),o=await $N(a.privateKey,i);u={id:a.deviceId,publicKey:a.publicKey,signature:o,signedAt:e,nonce:r}}let d={minProtocol:3,maxProtocol:3,client:{id:this.opts.clientName??Zz.CONTROL_UI,version:this.opts.clientVersion??`control-ui`,platform:this.opts.platform??navigator.platform??`web`,mode:this.opts.mode??Qz.WEBCHAT,instanceId:this.opts.instanceId},role:n,scopes:t,device:u,caps:[`tool-events`],auth:l,userAgent:navigator.userAgent,locale:navigator.language,userPhone:this.opts.phone};this.request(`connect`,d).then(e=>{this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1,e?.auth?.deviceToken&&a&&IM({deviceId:a.deviceId,role:e.auth.role??n,token:e.auth.deviceToken,scopes:e.auth.scopes??[]}),this.backoffMs=800,this.opts.onHello?.(e)}).catch(e=>{let t=e instanceof iB?aB(e):null,i=e instanceof iB?Jz(e.details):{},s=i.recommendedNextStep===`retry_with_device_token`,c=i.canRetryWithDeviceToken===!0||s||t===Gz.AUTH_TOKEN_MISMATCH;!this.deviceTokenRetryBudgetUsed&&!o.authDeviceToken&&r&&a&&o.storedToken&&c&&sB(this.opts.url)&&(this.pendingDeviceTokenRetry=!0,this.deviceTokenRetryBudgetUsed=!0),e instanceof iB?this.pendingConnectError={code:e.gatewayCode,message:e.message,details:e.details}:this.pendingConnectError=void 0,o.canFallbackToShared&&a&&t===Gz.AUTH_DEVICE_TOKEN_MISMATCH&&LM({deviceId:a.deviceId,role:n}),this.ws?.close(cB,`connect failed`)})}handleMessage(e){let t;try{t=JSON.parse(e)}catch{return}let n=t;if(n.type===`event`){let e=t;if(e.event===`connect.challenge`){let t=e.payload,n=t&&typeof t.nonce==`string`?t.nonce:null;n&&(this.connectNonce=n,this.sendConnect());return}let n=typeof e.seq==`number`?e.seq:null;n!==null&&(this.lastSeq!==null&&n>this.lastSeq+1&&this.opts.onGap?.({expected:this.lastSeq+1,received:n}),this.lastSeq=n);try{this.opts.onEvent?.(e)}catch(e){console.error(`[gateway] event handler error:`,e)}return}if(n.type===`res`){let e=t,n=this.pending.get(e.id);if(!n)return;this.pending.delete(e.id),e.ok?n.resolve(e.payload):n.reject(new iB({code:e.error?.code??`UNAVAILABLE`,message:e.error?.message??`request failed`,details:e.error?.details}));return}}selectConnectAuth(e){let t=this.opts.token?.trim()||void 0,n=this.opts.password?.trim()||void 0,r=FM({deviceId:e.deviceId,role:e.role})?.token,i=this.pendingDeviceTokenRetry&&!!t&&!!r&&sB(this.opts.url),a=t||n?void 0:r??void 0;return{authToken:t??a,authDeviceToken:i?r??void 0:void 0,authPassword:n,resolvedDeviceToken:a,storedToken:r??void 0,canFallbackToShared:!!(r&&t)}}request(e,t){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return Promise.reject(Error(`gateway not connected`));let n=rB(),r={type:`req`,id:n,method:e,params:t},i=new Promise((e,t)=>{this.pending.set(n,{resolve:t=>e(t),reject:t})});return this.ws.send(JSON.stringify(r)),i}queueConnect(){this.connectNonce=null,this.connectSent=!1,this.connectTimer!==null&&window.clearTimeout(this.connectTimer),this.connectTimer=window.setTimeout(()=>{this.sendConnect()},750)}};function uB(e){return typeof e==`string`?e:e instanceof Error&&typeof e.message==`string`?e.message:`unknown error`}function dB(e){let t=uB(e.message);switch(aB(e)){case Gz.AUTH_TOKEN_MISMATCH:return`gateway token mismatch`;case Gz.AUTH_UNAUTHORIZED:return`gateway auth failed`;case Gz.AUTH_RATE_LIMITED:return`too many failed authentication attempts`;case Gz.PAIRING_REQUIRED:return`gateway pairing required`;case Gz.CONTROL_UI_DEVICE_IDENTITY_REQUIRED:return`device identity required (use HTTPS/localhost or allow insecure auth explicitly)`;case Gz.CONTROL_UI_ORIGIN_NOT_ALLOWED:return`origin not allowed (open the Control UI from the gateway host or allow it in gateway.controlUi.allowedOrigins)`;case Gz.AUTH_TOKEN_MISSING:return`gateway token missing`;default:break}let n=t.trim().toLowerCase();return n===`fetch failed`||n===`failed to fetch`||n===`connect failed`?`gateway connect failed`:t}function fB(e){return e&&typeof e==`object`?dB(e):uB(e)}var pB=/^\s*NO_REPLY\s*$/;function mB(e){return pB.test(e)}function hB(e){if(!e||typeof e!=`object`)return!1;let t=e;if((typeof t.role==`string`?t.role.toLowerCase():``)!==`assistant`)return!1;if(typeof t.text==`string`)return mB(t.text);let n=yF(e);return typeof n==`string`&&mB(n)}function gB(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(!n||typeof n!=`object`)continue;let r=n;if((typeof r.role==`string`?r.role.toLowerCase():``)!==`assistant`)continue;let i=r.__runLatency&&typeof r.__runLatency==`object`?r.__runLatency:null;return typeof i?.ttftMs==`number`||typeof i?.totalMs==`number`}return!1}function _B(e,t){if(!t)return e;for(let n=e.length-1;n>=0;--n){let r=e[n];if(!r||typeof r!=`object`)continue;let i=r;if((typeof i.role==`string`?i.role.toLowerCase():``)!==`assistant`)continue;let a=[...e];return a[n]={...i,__runLatency:{ttftMs:t.ttftMs,totalMs:t.totalMs}},a}return e}function vB(e){let t=e;t.toolStreamById instanceof Map&&Array.isArray(t.toolStreamOrder)&&Array.isArray(t.chatToolMessages)&&Array.isArray(t.chatStreamSegments)&&$R(t)}async function yB(e,t){if(!(!e.client||!e.connected)){e.chatLoading=!0,e.lastError=null;try{let n=await e.client.request(`chat.history`,{sessionKey:e.sessionKey,limit:200}),r=(Array.isArray(n.messages)?n.messages:[]).filter(e=>!hB(e));e.chatMessages=t?.preserveLastLatency&&!gB(r)?_B(r,e.lastLatency):r,e.chatThinkingLevel=n.thinkingLevel??null,vB(e),e.chatStream=null,e.chatStreamStartedAt=null,t?.preserveLastLatency&&!gB(r)||(e.lastLatency=null)}catch(t){e.lastError=String(t)}finally{e.chatLoading=!1}}}function bB(e){let t=/^data:([^;]+);base64,(.+)$/.exec(e);return t?{mimeType:t[1],content:t[2]}:null}function xB(e,t){if(!e||typeof e!=`object`)return null;let n=e,r=n.role;if(typeof r==`string`){if((t.roleCaseSensitive?r:r.toLowerCase())!==`assistant`)return null}else if(t.roleRequirement===`required`)return null;return t.requireContentArray?Array.isArray(n.content)?n:null:!(`content`in n)&&!(t.allowTextField&&`text`in n)?null:n}function SB(e){return xB(e,{roleRequirement:`required`,roleCaseSensitive:!0,requireContentArray:!0})}function CB(e){return xB(e,{roleRequirement:`optional`,allowTextField:!0})}async function wB(e,t,n,r){if(!e.client||!e.connected)return null;let i=t.trim(),a=n&&n.length>0;if(!i&&!a)return null;let o=Date.now(),s=[];if(i&&s.push({type:`text`,text:i}),a)for(let e of n)s.push({type:`image`,source:{type:`base64`,media_type:e.mimeType,data:e.dataUrl}});r?.optimisticUserMessage!==!1&&(e.chatMessages=[...e.chatMessages,{role:`user`,content:s,timestamp:o}]),e.chatSending=!0,e.lastError=null,e.lastLatency=null;let c=rB();e.chatRunId=c,e.chatStream=``,e.chatStreamStartedAt=o;let l=a?n.map(e=>{let t=bB(e.dataUrl);return t?{type:`image`,mimeType:t.mimeType,content:t.content}:null}).filter(e=>e!==null):void 0;try{return await e.client.request(`chat.send`,{sessionKey:e.sessionKey,message:i,deliver:!1,idempotencyKey:c,attachments:l,clientSentAt:o}),c}catch(t){let n=fB(t);return e.chatRunId=null,e.chatStream=null,e.chatStreamStartedAt=null,e.lastError=n,e.chatMessages=[...e.chatMessages,{role:`assistant`,content:[{type:`text`,text:`Error: `+n}],timestamp:Date.now()}],null}finally{e.chatSending=!1}}async function TB(e){if(!e.client||!e.connected)return!1;let t=e.chatRunId;try{return await e.client.request(`chat.abort`,t?{sessionKey:e.sessionKey,runId:t}:{sessionKey:e.sessionKey}),!0}catch(t){return e.lastError=fB(t),!1}}function EB(e,t){if(!t||t.sessionKey!==e.sessionKey)return null;if(t.runId&&e.chatRunId&&t.runId!==e.chatRunId){if(t.state===`final`){let n=CB(t.message);return n&&!hB(n)?(e.chatMessages=[...e.chatMessages,n],null):`final`}return null}if(t.state===`delta`){t.retract&&(e.chatStream=null);let n=yF(t.message);if(typeof n==`string`&&!mB(n)){let t=e.chatStream??``;(!t||n.length>=t.length)&&(e.chatStream=n)}t.firstTokenAt!=null&&e.chatStreamStartedAt!=null&&!e.lastLatency&&(e.lastLatency={ttftMs:t.firstTokenAt-e.chatStreamStartedAt,totalMs:null})}else if(t.state===`final`){let n=CB(t.message),r=e.chatStreamStartedAt==null?null:{ttftMs:t.firstTokenAt==null?null:t.firstTokenAt-e.chatStreamStartedAt,totalMs:t.endedAt==null?null:t.endedAt-e.chatStreamStartedAt};if(n&&!hB(n))r&&(n.__runLatency=r),e.chatMessages=[...e.chatMessages,n];else if(e.chatStream?.trim()&&!mB(e.chatStream)){let t={role:`assistant`,content:[{type:`text`,text:e.chatStream}],timestamp:Date.now()};r&&(t.__runLatency=r),e.chatMessages=[...e.chatMessages,t]}e.lastLatency=r,e.chatStream=null,e.chatRunId=null,e.chatStreamStartedAt=null}else if(t.state===`aborted`){let n=SB(t.message);if(n&&!hB(n))e.chatMessages=[...e.chatMessages,n];else{let t=e.chatStream??``;t.trim()&&!mB(t)&&(e.chatMessages=[...e.chatMessages,{role:`assistant`,content:[{type:`text`,text:t}],timestamp:Date.now()}])}e.chatStreamStartedAt!=null&&(e.lastLatency={ttftMs:e.lastLatency?.ttftMs??null,totalMs:Date.now()-e.chatStreamStartedAt}),e.chatStream=null,e.chatRunId=null,e.chatStreamStartedAt=null}else t.state===`error`&&(e.chatStream=null,e.chatRunId=null,e.chatStreamStartedAt=null,e.lastError=t.errorMessage??`chat error`);return t.state}async function DB(e){try{return(await e.request(`models.list`,{}))?.models??[]}catch{return[]}}var OB=`/new`,kB=new Set;function AB(e){return e.chatSending||!!e.chatRunId}function jB(e){return!e.connected||e.tab!=null&&e.tab!==`chat`||e.chatLoading||e.chatSending||e.chatRunId||(e.chatQueue?.length??0)>0||e.chatMessages.length>0?!1:!e.chatStream?.trim()}async function MB(e,t){e.chatLoading=!0;try{await yB(e,t)}finally{e.chatLoading=!1}let n=e.sessionKey;if(n){if(e.chatMessages.length>0){kB.delete(n);return}if(jB(e)&&!kB.has(n)){if(kB.add(n),!await wB(e,OB,void 0,{optimisticUserMessage:!1})){kB.delete(n);return}TR(e,n)}}}async function NB(e){e.connected&&(e.chatMessage=``,await TB(e))}async function PB(e,t,n){$R(e),ZA(e);let r=await wB(e,t,n?.attachments),i=!!r;return!i&&n?.previousDraft!=null&&(e.chatMessage=n.previousDraft),!i&&n?.previousAttachments&&(e.chatAttachments=n.previousAttachments),i&&TR(e,e.sessionKey),i&&n?.restoreDraft&&n.previousDraft?.trim()&&(e.chatMessage=n.previousDraft),i&&n?.restoreAttachments&&n.previousAttachments?.length&&(e.chatAttachments=n.previousAttachments),YA(e,!0),i&&!e.chatRunId&&FB(e),i&&n?.refreshSessions&&r&&e.refreshSessionsAfterChat.add(r),i}async function FB(e){if(!e.connected||AB(e))return;let[t,...n]=e.chatQueue;if(!t)return;e.chatQueue=n;let r=!1;try{t.localCommandName?(await IB(e,t.localCommandName,t.localCommandArgs??``),r=!0):r=await PB(e,t.text,{attachments:t.attachments,refreshSessions:t.refreshSessions})}catch(t){e.lastError=String(t)}r?e.chatQueue.length>0&&FB(e):e.chatQueue=[t,...e.chatQueue]}async function IB(e,t,n,r){switch(t){case`stop`:await NB(e);return;case`new`:await PB(e,`/new`,{refreshSessions:!0,previousDraft:r?.previousDraft,restoreDraft:r?.restoreDraft});return;case`reset`:await PB(e,`/reset`,{refreshSessions:!0,previousDraft:r?.previousDraft,restoreDraft:r?.restoreDraft});return;case`clear`:await LB(e);return;case`focus`:e.onSlashAction?.(`toggle-focus`);return;case`export`:e.onSlashAction?.(`export`);return}if(!e.client)return;let i=e.sessionKey,a=await Cz(e.client,i,t,n);a.content&&RB(e,a.content),a.sessionPatch&&`modelOverride`in a.sessionPatch&&(e.chatModelOverrides={...e.chatModelOverrides,[i]:a.sessionPatch.modelOverride??null}),a.action===`refresh`&&await zB(e),YA(e)}async function LB(e){if(!(!e.client||!e.connected)){try{await e.client.request(`sessions.reset`,{key:e.sessionKey}),e.chatMessages=[],e.chatStream=null,e.chatRunId=null,await MB(e)}catch(t){e.lastError=String(t)}YA(e)}}function RB(e,t){e.chatMessages=[...e.chatMessages,{role:`system`,content:t,timestamp:Date.now()}]}async function zB(e,t){await Promise.all([MB(e),aP(e,{activeMinutes:0,limit:0,includeGlobal:!0,includeUnknown:!0}),WB(e),BB(e)]),t?.scheduleScroll!==!1&&YA(e)}async function BB(e){if(!e.client||!e.connected){e.chatModelsLoading=!1,e.chatModelCatalog=[];return}e.chatModelsLoading=!0;try{e.chatModelCatalog=await DB(e.client)}finally{e.chatModelsLoading=!1}}var VB=FB;function HB(e){let t=GA(e.sessionKey);return t?.agentId?t.agentId:(e.hello?.snapshot)?.sessionDefaults?.defaultAgentId?.trim()||`main`}function UB(e,t){let n=NP(e),r=encodeURIComponent(t);return n?`${n}/avatar/${r}?meta=1`:`avatar/${r}?meta=1`}async function WB(e){if(!e.connected){e.chatAvatarUrl=null;return}let t=HB(e);if(!t){e.chatAvatarUrl=null;return}e.chatAvatarUrl=null;let n=UB(e.basePath,t);try{let t=await fetch(n,{method:`GET`});if(!t.ok){e.chatAvatarUrl=null;return}let r=await t.json();e.chatAvatarUrl=(typeof r.avatarUrl==`string`?r.avatarUrl.trim():``)||null}catch{e.chatAvatarUrl=null}}function GB(e){if(!e||e.state!==`final`)return!1;if(!e.message||typeof e.message!=`object`)return!0;let t=e.message,n=typeof t.role==`string`?t.role.toLowerCase():``;return!!(n&&n!==`assistant`)}function KB(e,t){if(typeof e!=`string`)return;let n=e.trim();if(n)return n.length<=t?n:n.slice(0,t)}var qB=50,JB=200;function YB(e){let t=KB(e?.name,qB)??`Assistant`,n=KB(e?.avatar??void 0,JB)??null;return{agentId:typeof e?.agentId==`string`&&e.agentId.trim()?e.agentId.trim():null,name:t,avatar:n}}async function XB(e,t){if(!e.client||!e.connected)return;let n=t?.sessionKey?.trim()||e.sessionKey.trim(),r=n?{sessionKey:n}:{};try{let t=await e.client.request(`agent.identity.get`,r);if(!t)return;let n=YB(t);e.assistantName=n.name,e.assistantAvatar=n.avatar,e.assistantAgentId=n.agentId??null}catch{}}function ZB(e){return typeof e==`object`&&!!e}function QB(e){if(!ZB(e))return null;let t=typeof e.id==`string`?e.id.trim():``,n=e.request;if(!t||!ZB(n))return null;let r=typeof n.command==`string`?n.command.trim():``;if(!r)return null;let i=typeof e.createdAtMs==`number`?e.createdAtMs:0,a=typeof e.expiresAtMs==`number`?e.expiresAtMs:0;return!i||!a?null:{id:t,request:{command:r,cwd:typeof n.cwd==`string`?n.cwd:null,host:typeof n.host==`string`?n.host:null,security:typeof n.security==`string`?n.security:null,ask:typeof n.ask==`string`?n.ask:null,agentId:typeof n.agentId==`string`?n.agentId:null,resolvedPath:typeof n.resolvedPath==`string`?n.resolvedPath:null,sessionKey:typeof n.sessionKey==`string`?n.sessionKey:null},createdAtMs:i,expiresAtMs:a}}function $B(e){if(!ZB(e))return null;let t=typeof e.id==`string`?e.id.trim():``;return t?{id:t,decision:typeof e.decision==`string`?e.decision:null,resolvedBy:typeof e.resolvedBy==`string`?e.resolvedBy:null,ts:typeof e.ts==`number`?e.ts:null}:null}function eV(e){let t=Date.now();return e.filter(e=>e.expiresAtMs>t)}function tV(e,t){let n=eV(e).filter(e=>e.id!==t.id);return n.push(t),n}function nV(e,t){return eV(e).filter(e=>e.id!==t)}var rV={ok:!1,ts:0,durationMs:0,heartbeatSeconds:0,defaultAgentId:``,agents:[],sessions:{path:``,count:0,recent:[]}};async function iV(e){try{return await e.request(`health`,{})??rV}catch{return rV}}async function aV(e){if(!(!e.client||!e.connected)&&!e.healthLoading){e.healthLoading=!0,e.healthError=null;try{e.healthResult=await iV(e.client)}catch(t){e.healthError=String(t)}finally{e.healthLoading=!1}}}function oV(e,t){return`${e}::${t}`}function sV(e,t,n){let r=Array.isArray(n)?new Set(n.map(e=>e.trim()).filter(Boolean)):null,i=`${t}::`,a={},o={};for(let[t,n]of Object.entries(e.skillFilesContents)){let e=t.startsWith(i),o=e?t.slice(i.length):``;e&&(!r||r.size===0||r.has(o))||(a[t]=n)}for(let[t,n]of Object.entries(e.skillFilesDrafts)){let a=t.startsWith(i),s=a?t.slice(i.length):``;if(!(a&&(!r||r.size===0||r.has(s)))){o[t]=n;continue}let c=e.skillFilesContents[t];Object.hasOwn(e.skillFilesDrafts,t)&&n!==c&&(o[t]=n)}e.skillFilesContents=a,e.skillFilesDrafts=o}async function cV(e,t,n){if(!e.client||!e.connected||!n?.force&&e.skillFilesLoading)return;e.skillFilesLoading=!0,e.skillFilesError=null;let r=null;try{let n=await e.client.request(`skills.files.list`,{skillKey:t});n&&(e.skillFilesLists={...e.skillFilesLists,[t]:n},!e.skillFilesActiveName&&n.files.length>0&&(e.skillFilesActiveName=n.files[0].name,r=n.files[0].name))}catch(t){e.skillFilesError=t instanceof Error?t.message:String(t)}finally{e.skillFilesLoading=!1}r&&await lV(e,t,r)}async function lV(e,t,n,r){if(!e.client||!e.connected||!r?.force&&e.skillFilesLoading)return;let i=oV(t,n);if(!(!r?.force&&Object.hasOwn(e.skillFilesContents,i))){e.skillFilesLoading=!0,e.skillFilesError=null;try{let r=await e.client.request(`skills.files.get`,{skillKey:t,name:n});if(r){let t=e.skillFilesContents[i],n=e.skillFilesDrafts[i];e.skillFilesContents={...e.skillFilesContents,[i]:r.content},(!Object.hasOwn(e.skillFilesDrafts,i)||n===t)&&(e.skillFilesDrafts={...e.skillFilesDrafts,[i]:r.content})}}catch(t){e.skillFilesError=t instanceof Error?t.message:String(t)}finally{e.skillFilesLoading=!1}}}var uV=`skill-creator`;async function dV(e){if(!(await e.request(`agents.list`,{})).agents.some(e=>e.id===uV))try{await e.request(`agents.create`,{name:uV,skills:[uV],templatePrefix:`SKILL_`})}catch{}}function fV(e){return/^(?:typeerror:\s*)?(?:fetch failed|failed to fetch)$/i.test(e.trim())}function pV(e){let t=e.serverVersion?.trim();if(!t)return;let n=e.pageUrl??(typeof window>`u`?void 0:window.location.href);if(n)try{let r=new URL(n),i=new URL(e.gatewayUrl,r);return!new Set([`ws:`,`wss:`,`http:`,`https:`]).has(i.protocol)||i.host!==r.host?void 0:t}catch{return}}function mV(e,t){let n=(e??``).trim(),r=t.mainSessionKey?.trim();if(!r)return n;if(!n)return r;let i=t.mainKey?.trim()||`main`,a=t.defaultAgentId?.trim();return n===`main`||n===i||a&&(n===`agent:${a}:main`||n===`agent:${a}:${i}`)?r:n}function hV(e,t){if(!t?.mainSessionKey)return;let n=e.userPhone&&/^\d{7,15}$/.test(e.userPhone)?`agent:phone-${e.userPhone}:webchat`:null;if(n){e.sessionKey!==n&&(e.sessionKey=n);return}let r=mV(e.sessionKey,t),i=mV(e.settings.sessionKey,t),a=mV(e.settings.lastActiveSessionKey,t),o=r||i||e.sessionKey,s={...e.settings,sessionKey:i||o,lastActiveSessionKey:a||o},c=s.sessionKey!==e.settings.sessionKey||s.lastActiveSessionKey!==e.settings.lastActiveSessionKey;o!==e.sessionKey&&(e.sessionKey=o),c&&wR(e,s)}function gV(e){let t=e;t.pendingShutdownMessage=null,e.lastError=null,e.lastErrorCode=null,e.hello=null,e.connected=!1,e.execApprovalQueue=[],e.execApprovalError=null;let n=e.client,r=pV({gatewayUrl:e.settings.gatewayUrl,serverVersion:e.serverVersion}),i=new lB({url:e.settings.gatewayUrl,token:e.settings.token.trim()?e.settings.token:void 0,password:e.password.trim()?e.password:void 0,clientName:`openclaw-control-ui`,clientVersion:r,mode:`webchat`,instanceId:e.clientInstanceId,phone:e.userPhone??void 0,onHello:n=>{e.client===i&&(t.pendingShutdownMessage=null,e.connected=!0,e.lastError=null,e.lastErrorCode=null,e.hello=n,wV(e,n),e.chatRunId=null,e.chatStream=null,e.chatStreamStartedAt=null,$R(e),XB(e),Pj(e),aV(e),hj(e,{quiet:!0}),eP(e,{quiet:!0}),DR(e),(async()=>{e.userPhone&&await i.request(`user.provision`,{}).catch(()=>{}),await dV(i)})())},onClose:({code:n,reason:r,error:a})=>{if(e.client===i)if(e.connected=!1,e.lastErrorCode=aB(a)??(typeof a?.code==`string`?a.code:null),n!==1012){if(a?.message){e.lastError=e.lastErrorCode&&fV(a.message)?fB({message:a.message,details:a.details,code:a.code}):a.message;return}e.lastError=t.pendingShutdownMessage??`disconnected (${n}): ${r||`no reason`}`}else e.lastError=t.pendingShutdownMessage??null,e.lastErrorCode=null},onEvent:t=>{e.client===i&&_V(e,t)},onGap:({expected:t,received:n})=>{e.client===i&&(e.lastError=`event gap detected (expected seq ${t}, got ${n}); refresh recommended`,e.lastErrorCode=null)}});e.client=i,n?.stop(),i.start()}function _V(e,t){try{CV(e,t)}catch(e){console.error(`[gateway] handleGatewayEvent error:`,t.event,e)}}function vV(e,t,n){if(n!==`final`&&n!==`error`&&n!==`aborted`)return!1;let r=e,i=r.toolStreamOrder.length>0;$R(r),VB(e);let a=t?.runId;return a&&e.refreshSessionsAfterChat.has(a)&&(e.refreshSessionsAfterChat.delete(a),n===`final`&&aP(e,{activeMinutes:120})),i&&n===`final`?(MB(e,{preserveLastLatency:!0}),!0):!1}function yV(e,t){if(!(!e.skillAiChatRunId&&t.state!==`delta`))if(t.state===`delta`){let n=yF(t.message);typeof n==`string`&&(e.skillAiChatStream=n)}else if(t.state===`final`){if(t.runId&&t.runId!==e.skillAiChatRunId)return;let n=t.message;if(n&&typeof n==`object`){let t=n;typeof t.role==`string`&&t.role.toLowerCase()===`assistant`&&(e.skillAiChatMessages=[...e.skillAiChatMessages,t])}else e.skillAiChatStream?.trim()&&(e.skillAiChatMessages=[...e.skillAiChatMessages,{role:`assistant`,content:[{type:`text`,text:e.skillAiChatStream}],timestamp:Date.now()}]);e.skillAiChatStream=null,e.skillAiChatRunId=null,e.skillAiChatStreamStartedAt=null,e.skillAiChatSending=!1,e.skillAiBuilderBuilding=!1;let r=e.skillAiBuilderSkillKey,i=new Set(e.skillsReport?.skills.filter(e=>e.source===`openclaw-managed`&&!e.bundled).map(e=>e.skillKey)??[]);(async()=>{await lP(e);let t=e.skillAiBuilderSkillKey??r;if(r&&!e.skillsReport?.skills.some(e=>e.skillKey===r)){let n=(e.skillsReport?.skills??[]).filter(e=>e.source===`openclaw-managed`&&!e.bundled&&!i.has(e.skillKey)).map(e=>e.skillKey);n.length===1&&(e.skillAiBuilderSkillKey=n[0],e.skillFilesActiveKey===r&&(e.skillFilesActiveKey=n[0]),t=n[0])}t&&await xV(e,t)})()}else (t.state===`aborted`||t.state===`error`)&&(e.skillAiChatStream=null,e.skillAiChatRunId=null,e.skillAiChatStreamStartedAt=null,e.skillAiChatSending=!1,e.skillAiBuilderBuilding=!1)}var bV=new Set([`write`,`edit`,`apply_patch`]);async function xV(e,t){sV(e,t),await cV(e,t,{force:!0});let n=new Set(e.skillFilesLists[t]?.files.map(e=>e.name).filter(Boolean)??[]),r=new Set;for(let t of e.skillAiBuilderOpenTabs)n.has(t)&&r.add(t);let i=e.skillFilesActiveName?.trim();i&&n.has(i)&&r.add(i);for(let n of r)await lV(e,t,n,{force:!0})}function SV(e,t){t?.sessionKey&&TR(e,t.sessionKey);let n=e;if(n.skillAiBuilderMode&&n.skillAiBuilderSkillKey&&t){let e=t.sessionKey===`agent:skill-creator:${n.skillAiBuilderSkillKey}`,r=!!n.skillAiChatRunId&&t.runId===n.skillAiChatRunId;if(e||r){yV(n,t);return}}let r=EB(e,t),i=vV(e,t,r);r===`final`&&!i&&GB(t)&&MB(e)}function CV(e,t){if(e.eventLogBuffer=[{ts:Date.now(),event:t.event,payload:t.payload},...e.eventLogBuffer].slice(0,250),(e.tab===`debug`||e.tab===`overview`)&&(e.eventLog=e.eventLogBuffer),t.event===`agent`){if(e.onboarding)return;let n=t.payload;if(n?.stream===`tool`){let t=e,r=n.sessionKey,i=!!r&&t.skillAiBuilderSkillKey!=null&&r===`agent:skill-creator:${t.skillAiBuilderSkillKey}`,a=!!t.skillAiChatRunId&&n.runId===t.skillAiChatRunId;if(t.skillAiBuilderMode&&(i||a)){let e=n.data??{},r=typeof e.toolCallId==`string`?e.toolCallId:``,i=typeof e.name==`string`?e.name:`tool`,a=typeof e.phase==`string`?e.phase:``;if(r){let e=t.skillAiToolCalls??[];e.find(e=>e.toolCallId===r)?a===`result`&&(t.skillAiToolCalls=e.map(e=>e.toolCallId===r?{...e,phase:`done`}:e)):t.skillAiToolCalls=[...e,{toolCallId:r,name:i,phase:`pending`}]}a===`result`&&bV.has(i.trim().toLowerCase())&&t.skillAiBuilderSkillKey&&xV(t,t.skillAiBuilderSkillKey);return}}az(e,n);return}if(t.event===`chat`){SV(e,t.payload);return}if(t.event===`presence`){let n=t.payload;n?.presence&&Array.isArray(n.presence)&&(e.presenceEntries=n.presence,e.presenceError=null,e.presenceStatus=null);return}if(t.event===`shutdown`){let n=t.payload,r=n&&typeof n.reason==`string`&&n.reason.trim()?n.reason.trim():`gateway stopping`,i=typeof n?.restartExpectedMs==`number`?`Restarting: ${r}`:`Disconnected: ${r}`;e.pendingShutdownMessage=i,e.lastError=i,e.lastErrorCode=null;return}if(t.event===`cron`&&e.tab===`cron`&&RR(e),(t.event===`device.pair.requested`||t.event===`device.pair.resolved`)&&eP(e,{quiet:!0}),t.event===`exec.approval.requested`){let n=QB(t.payload);if(n){e.execApprovalQueue=tV(e.execApprovalQueue,n),e.execApprovalError=null;let t=Math.max(0,n.expiresAtMs-Date.now()+500);window.setTimeout(()=>{e.execApprovalQueue=nV(e.execApprovalQueue,n.id)},t)}return}if(t.event===`exec.approval.resolved`){let n=$B(t.payload);n&&(e.execApprovalQueue=nV(e.execApprovalQueue,n.id));return}t.event===`update.available`&&(e.updateAvailable=t.payload?.updateAvailable??null)}function wV(e,t){let n=t.snapshot;n?.presence&&Array.isArray(n.presence)&&(e.presenceEntries=n.presence),n?.health&&(e.debugHealth=n.health,e.healthResult=n.health),n?.sessionDefaults&&hV(e,n.sessionDefaults),e.updateAvailable=n?.updateAvailable??null}var TV=`/__openclaw/control-ui-config.json`;async function EV(e){if(typeof window>`u`||typeof fetch!=`function`)return;let t=NP(e.basePath??``),n=t?`${t}${TV}`:TV;try{let t=await fetch(n,{method:`GET`,headers:{Accept:`application/json`},credentials:`same-origin`});if(!t.ok)return;let r=await t.json(),i=YB({agentId:r.assistantAgentId??null,name:r.assistantName,avatar:r.assistantAvatar??null});e.assistantName=i.name,e.assistantAvatar=i.avatar,e.assistantAgentId=i.agentId??null,e.serverVersion=r.serverVersion??null}catch{}}function DV(e){return e.replace(/^http:\/\//i,`ws://`).replace(/^https:\/\//i,`wss://`)}function OV(e,t){e.themeResolved=t;let n=t.endsWith(`light`)?`light`:`dark`;e.dataset.theme=t,e.dataset.themeMode=n,e.style.colorScheme=n}function kV(e){if(e.themeMode!==`system`){e.systemThemeCleanup?.(),e.systemThemeCleanup=null;return}if(e.systemThemeCleanup||typeof globalThis.matchMedia!=`function`)return;let t=globalThis.matchMedia(`(prefers-color-scheme: light)`),n=()=>{e.themeMode===`system`&&OV(e,UP(e.theme,`system`))};if(typeof t.addEventListener==`function`){t.addEventListener(`change`,n),e.systemThemeCleanup=()=>t.removeEventListener(`change`,n);return}try{t.addListener(n),e.systemThemeCleanup=()=>t.removeListener(n)}catch{}}function AV(e){e.theme=e.settings.theme??`dash`,e.themeMode=e.settings.themeMode??`system`,OV(e,UP(e.theme,e.themeMode)),kV(e)}function jV(e){if(!e.endpoint)return;let t=DV(e.endpoint);e.settings={...e.settings,gatewayUrl:t},e.token&&(rF(t,e.token),e.settings={...e.settings,token:e.token})}var MV=class extends bt{constructor(...e){super(...e),this.endpoint=``,this.token=``,this.theme=`dash`,this.clientInstanceId=rB(),this.connectGeneration=0,this.settings=aF(),this.connected=!1,this.hello=null,this.lastError=null,this.lastErrorCode=null,this.themeMode=`system`,this.themeResolved=`dash-dark`,this.themeOrder=[...LP],this.pendingGatewayUrl=null,this.systemThemeCleanup=null,this.pendingGatewayToken=null,this.basePath=``,this.client=null,this.password=``,this.serverVersion=null,this.assistantName=``,this.assistantAvatar=null,this.assistantAgentId=null,this.noUrlSync=!0,this.chatRunId=null,this.chatQueue=[],this.refreshSessionsAfterChat=new Set,this.eventLogBuffer=[],this.eventLog=[],this.presenceEntries=[],this.presenceError=null,this.presenceStatus=null,this.agentsLoading=!1,this.agentsList=null,this.agentsError=null,this.healthLoading=!1,this.healthResult=null,this.healthError=null,this.debugHealth=null,this.execApprovalQueue=[],this.execApprovalError=null,this.updateAvailable=null,this.gatewayBootstrapDone=!1}createRenderRoot(){return this}beforeGatewayConnectSetup(){}afterGatewayConnected(){}shouldReconnectOnPropChange(){return this.gatewayBootstrapDone}startEmbeddedGatewayConnection(){jV(this),this.settings={...this.settings,theme:this.theme},this.gatewayBootstrapDone=!1,++this.connectGeneration;let e=this.connectGeneration;AV(this),EV(this).finally(()=>{this.connectGeneration===e&&(this.gatewayBootstrapDone=!0,gV(this))})}stopEmbeddedGatewayConnection(){this.connectGeneration+=1,this.client?.stop(),this.client=null,this.connected=!1,OR(this)}handleEmbeddedGatewayUpdates(e){this.shouldReconnectOnPropChange()&&(e.has(`endpoint`)||e.has(`token`))&&(jV(this),this.endpoint&&gV(this)),e.has(`theme`)&&(this.settings={...this.settings,theme:this.theme},AV(this)),e.has(`connected`)&&this.connected&&this.afterGatewayConnected()}connectedCallback(){super.connectedCallback(),this.beforeGatewayConnectSetup(),this.startEmbeddedGatewayConnection()}disconnectedCallback(){super.disconnectedCallback(),this.stopEmbeddedGatewayConnection()}updated(e){super.updated(e),this.handleEmbeddedGatewayUpdates(e)}};Y([Jk({type:String})],MV.prototype,`endpoint`,void 0),Y([Jk({type:String})],MV.prototype,`token`,void 0),Y([Jk({type:String})],MV.prototype,`theme`,void 0),Y([J()],MV.prototype,`settings`,void 0),Y([J()],MV.prototype,`connected`,void 0),Y([J()],MV.prototype,`hello`,void 0),Y([J()],MV.prototype,`lastError`,void 0),Y([J()],MV.prototype,`lastErrorCode`,void 0),Y([J()],MV.prototype,`themeMode`,void 0),Y([J()],MV.prototype,`themeResolved`,void 0),Y([J()],MV.prototype,`themeOrder`,void 0),Y([J()],MV.prototype,`pendingGatewayUrl`,void 0),Y([J()],MV.prototype,`systemThemeCleanup`,void 0);function NV(e,t,n=`text/plain`){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,a.click(),URL.revokeObjectURL(i)}var PV=class extends MV{constructor(...e){super(...e),this.sessionKey=`main`,this.tab=`apiManagement`,this.toolStreamById=new Map,this.toolStreamOrder=[],this.toolStreamSyncTimer=null,this.chatToolMessages=[],this.chatStreamSegments=[],this.chatStream=null,this.chatStreamStartedAt=null,this.apiDefinitionsLoading=!1,this.apiDefinitionsSaving=!1,this.apiDefinitionsExporting=!1,this.apiDefinitionsImporting=!1,this.apiDefinitionsError=null,this.apiDefinitionsSaveAttempted=!1,this.apiDefinitionsItems=[],this.apiDefinitionsQuery=``,this.apiDefinitionsHash=null,this.apiDefinitionsMode=`list`,this.apiDefinitionsEditingId=null,this.apiDefinitionsForm=l(),this.apiDefinitionsToast=null,this.apiDefinitionsToastKind=`error`,this.apiDefinitionsDeleteConfirmItem=null,this.apiDefinitionsSelectedIds=[],this.apiDefinitionsDeleteConfirmItems=null}afterGatewayConnected(){p(this)}render(){let e=this.apiDefinitionsForm;return S`
|
|
1455
|
+
`)}}catch(e){return{content:`Failed to list agents: ${String(e)}`}}}async function Mz(e,t,n){let r=n.trim();if(!r)return{content:"Usage: `/kill <id|all>`"};try{let n=Nz((await e.request(`sessions.list`,{}))?.sessions??[],t,r);if(n.length===0)return{content:r.toLowerCase()===`all`?`No active sub-agent sessions found.`:`No matching sub-agent sessions found for \`${r}\`.`};let i=await Promise.allSettled(n.map(t=>e.request(`chat.abort`,{sessionKey:t}))),a=i.filter(e=>e.status===`rejected`),o=i.filter(e=>e.status===`fulfilled`&&e.value?.aborted!==!1).length;if(o===0){if(a.length===0)return{content:r.toLowerCase()===`all`?`No active sub-agent runs to abort.`:`No active runs matched \`${r}\`.`};throw a[0]?.reason??Error(`abort failed`)}return r.toLowerCase()===`all`?{content:o===n.length?`Aborted ${o} sub-agent session${o===1?``:`s`}.`:`Aborted ${o} of ${n.length} sub-agent sessions.`}:{content:o===n.length?`Aborted ${o} matching sub-agent session${o===1?``:`s`} for \`${r}\`.`:`Aborted ${o} of ${n.length} matching sub-agent sessions for \`${r}\`.`}}catch(e){return{content:`Failed to abort: ${String(e)}`}}}function Nz(e,t,n){let r=n.trim().toLowerCase();if(!r)return[];let i=new Set,a=t.trim().toLowerCase(),o=GA(a)?.agentId??(a===`main`?`main`:void 0),s=Fz(e);for(let t of e){let e=t?.key?.trim();if(!e||!KA(e))continue;let n=e.toLowerCase(),c=GA(n),l=Pz(n,a,s,o,c?.agentId);(r===`all`&&l||l&&n===r||l&&((c?.agentId??``)===r||n.endsWith(`:subagent:${r}`)||n===`subagent:${r}`))&&i.add(e)}return[...i]}function Pz(e,t,n,r,i){if(!r||i!==r)return!1;let a=Lz(t,r),o=new Set,s=Iz(n.get(e)?.spawnedBy);for(;s&&!o.has(s);){if(a.has(s))return!0;o.add(s),s=Iz(n.get(s)?.spawnedBy)}return KA(t)?e.startsWith(`${t}:subagent:`):!1}function Fz(e){let t=new Map;for(let n of e){let e=Iz(n?.key);e&&t.set(e,n)}return t}function Iz(e){return e?.trim().toLowerCase()||void 0}function Lz(e,t){let n=new Set([e]);if(t===`main`){let t=`agent:${vz}:main`;e===`main`?n.add(t):e===t&&n.add(yz)}return n}function Rz(e,t){return`${e}\nOptions: ${t}.`}async function zz(e,t){return Bz(await e.request(`sessions.list`,{}),t)}function Bz(e,t){let n=Iz(t),r=GA(n??``)?.agentId??(n===`main`?`main`:void 0),i=n?Lz(n,r):new Set;return e?.sessions?.find(e=>{let t=Iz(e.key);return t?i.has(t):!1})}async function Vz(e,t){let[n,r]=await Promise.all([e.request(`sessions.list`,{}),e.request(`models.list`,{})]);return{session:Bz(n,t),models:r?.models??[]}}function Hz(e,t){return dz(e?.thinkingLevel)||(!e?.modelProvider||!e.model?`off`:hz({provider:e.modelProvider,model:e.model,catalog:t}))}function Uz(e){return e?.fastMode===!0?`on`:`off`}function Wz(e){return e>=1e6?`${(e/1e6).toFixed(1).replace(/\.0$/,``)}M`:e>=1e3?`${(e/1e3).toFixed(1).replace(/\.0$/,``)}k`:String(e)}var Gz={AUTH_REQUIRED:`AUTH_REQUIRED`,AUTH_UNAUTHORIZED:`AUTH_UNAUTHORIZED`,AUTH_TOKEN_MISSING:`AUTH_TOKEN_MISSING`,AUTH_TOKEN_MISMATCH:`AUTH_TOKEN_MISMATCH`,AUTH_TOKEN_NOT_CONFIGURED:`AUTH_TOKEN_NOT_CONFIGURED`,AUTH_PASSWORD_MISSING:`AUTH_PASSWORD_MISSING`,AUTH_PASSWORD_MISMATCH:`AUTH_PASSWORD_MISMATCH`,AUTH_PASSWORD_NOT_CONFIGURED:`AUTH_PASSWORD_NOT_CONFIGURED`,AUTH_BOOTSTRAP_TOKEN_INVALID:`AUTH_BOOTSTRAP_TOKEN_INVALID`,AUTH_DEVICE_TOKEN_MISMATCH:`AUTH_DEVICE_TOKEN_MISMATCH`,AUTH_RATE_LIMITED:`AUTH_RATE_LIMITED`,AUTH_TAILSCALE_IDENTITY_MISSING:`AUTH_TAILSCALE_IDENTITY_MISSING`,AUTH_TAILSCALE_PROXY_MISSING:`AUTH_TAILSCALE_PROXY_MISSING`,AUTH_TAILSCALE_WHOIS_FAILED:`AUTH_TAILSCALE_WHOIS_FAILED`,AUTH_TAILSCALE_IDENTITY_MISMATCH:`AUTH_TAILSCALE_IDENTITY_MISMATCH`,CONTROL_UI_ORIGIN_NOT_ALLOWED:`CONTROL_UI_ORIGIN_NOT_ALLOWED`,CONTROL_UI_DEVICE_IDENTITY_REQUIRED:`CONTROL_UI_DEVICE_IDENTITY_REQUIRED`,DEVICE_IDENTITY_REQUIRED:`DEVICE_IDENTITY_REQUIRED`,DEVICE_AUTH_INVALID:`DEVICE_AUTH_INVALID`,DEVICE_AUTH_DEVICE_ID_MISMATCH:`DEVICE_AUTH_DEVICE_ID_MISMATCH`,DEVICE_AUTH_SIGNATURE_EXPIRED:`DEVICE_AUTH_SIGNATURE_EXPIRED`,DEVICE_AUTH_NONCE_REQUIRED:`DEVICE_AUTH_NONCE_REQUIRED`,DEVICE_AUTH_NONCE_MISMATCH:`DEVICE_AUTH_NONCE_MISMATCH`,DEVICE_AUTH_SIGNATURE_INVALID:`DEVICE_AUTH_SIGNATURE_INVALID`,DEVICE_AUTH_PUBLIC_KEY_INVALID:`DEVICE_AUTH_PUBLIC_KEY_INVALID`,PAIRING_REQUIRED:`PAIRING_REQUIRED`},Kz=new Set([`retry_with_device_token`,`update_auth_configuration`,`update_auth_credentials`,`wait_then_retry`,`review_auth_configuration`]);function qz(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e.code;return typeof t==`string`&&t.trim().length>0?t:null}function Jz(e){if(!e||typeof e!=`object`||Array.isArray(e))return{};let t=e,n=typeof t.canRetryWithDeviceToken==`boolean`?t.canRetryWithDeviceToken:void 0,r=typeof t.recommendedNextStep==`string`?t.recommendedNextStep.trim():``;return{canRetryWithDeviceToken:n,recommendedNextStep:Kz.has(r)?r:void 0}}function Yz(e){let t=e.scopes.join(`,`),n=e.token??``;return[`v2`,e.deviceId,e.clientId,e.clientMode,e.role,t,String(e.signedAtMs),n,e.nonce].join(`|`)}var Xz={WEBCHAT_UI:`webchat-ui`,CONTROL_UI:`openclaw-control-ui`,WEBCHAT:`webchat`,CLI:`cli`,GATEWAY_CLIENT:`gateway-client`,MACOS_APP:`openclaw-macos`,IOS_APP:`openclaw-ios`,ANDROID_APP:`openclaw-android`,NODE_HOST:`node-host`,TEST:`test`,FINGERPRINT:`fingerprint`,PROBE:`openclaw-probe`},Zz=Xz,Qz={WEBCHAT:`webchat`,CLI:`cli`,UI:`ui`,BACKEND:`backend`,NODE:`node`,PROBE:`probe`,TEST:`test`};new Set(Object.values(Xz)),new Set(Object.values(Qz));var $z=!1;function eB(e){e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=``;for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,`0`);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}function tB(){let e=new Uint8Array(16),t=Date.now();for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256);return e[0]^=t&255,e[1]^=t>>>8&255,e[2]^=t>>>16&255,e[3]^=t>>>24&255,e}function nB(){$z||($z=!0,console.warn(`[uuid] crypto API missing; falling back to weak randomness`))}function rB(e=globalThis.crypto){if(e&&typeof e.randomUUID==`function`)return e.randomUUID();if(e&&typeof e.getRandomValues==`function`){let t=new Uint8Array(16);return e.getRandomValues(t),eB(t)}return nB(),eB(tB())}var iB=class extends Error{constructor(e){super(e.message),this.name=`GatewayRequestError`,this.gatewayCode=e.code,this.details=e.details}};function aB(e){return qz(e?.details)}function oB(e){if(!e)return!1;let t=aB(e);return t===Gz.AUTH_TOKEN_MISSING||t===Gz.AUTH_BOOTSTRAP_TOKEN_INVALID||t===Gz.AUTH_PASSWORD_MISSING||t===Gz.AUTH_PASSWORD_MISMATCH||t===Gz.AUTH_RATE_LIMITED||t===Gz.PAIRING_REQUIRED||t===Gz.CONTROL_UI_DEVICE_IDENTITY_REQUIRED||t===Gz.DEVICE_IDENTITY_REQUIRED}function sB(e){try{let t=new URL(e,window.location.href),n=t.hostname.trim().toLowerCase(),r=n===`localhost`||n===`::1`||n===`[::1]`||n===`127.0.0.1`,i=n.startsWith(`127.`);if(r||i)return!0;let a=new URL(window.location.href);return t.host===a.host}catch{return!1}}var cB=4008,lB=class{constructor(e){this.opts=e,this.ws=null,this.pending=new Map,this.closed=!1,this.lastSeq=null,this.connectNonce=null,this.connectSent=!1,this.connectTimer=null,this.backoffMs=800,this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1}start(){this.closed=!1,this.connect()}stop(){this.closed=!0,this.ws?.close(),this.ws=null,this.pendingConnectError=void 0,this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1,this.flushPending(Error(`gateway client stopped`))}get connected(){return this.ws?.readyState===WebSocket.OPEN}connect(){this.closed||(this.ws=new WebSocket(this.opts.url),this.ws.addEventListener(`open`,()=>this.queueConnect()),this.ws.addEventListener(`message`,e=>this.handleMessage(String(e.data??``))),this.ws.addEventListener(`close`,e=>{let t=String(e.reason??``),n=this.pendingConnectError;this.pendingConnectError=void 0,this.ws=null,this.flushPending(Error(`gateway closed (${e.code}): ${t}`)),this.opts.onClose?.({code:e.code,reason:t,error:n}),!(aB(n)===Gz.AUTH_TOKEN_MISMATCH&&this.deviceTokenRetryBudgetUsed&&!this.pendingDeviceTokenRetry)&&(oB(n)||this.scheduleReconnect())}),this.ws.addEventListener(`error`,()=>{}))}scheduleReconnect(){if(this.closed)return;let e=this.backoffMs;this.backoffMs=Math.min(this.backoffMs*1.7,15e3),window.setTimeout(()=>this.connect(),e)}flushPending(e){for(let[,t]of this.pending)t.reject(e);this.pending.clear()}async sendConnect(){if(this.connectSent)return;this.connectSent=!0,this.connectTimer!==null&&(window.clearTimeout(this.connectTimer),this.connectTimer=null);let e=typeof crypto<`u`&&!!crypto.subtle,t=[`operator.admin`,`operator.approvals`,`operator.pairing`],n=`operator`,r=this.opts.token?.trim()||void 0,i=this.opts.password?.trim()||void 0,a=null,o={authToken:r,authPassword:i,canFallbackToShared:!1};e&&(a=await QN(),o=this.selectConnectAuth({role:n,deviceId:a.deviceId}),this.pendingDeviceTokenRetry&&o.authDeviceToken&&(this.pendingDeviceTokenRetry=!1));let s=o.authToken,c=o.authDeviceToken??o.resolvedDeviceToken,l=s||o.authPassword?{token:s,deviceToken:c,password:o.authPassword}:void 0,u;if(e&&a){let e=Date.now(),r=this.connectNonce??``,i=Yz({deviceId:a.deviceId,clientId:this.opts.clientName??Zz.CONTROL_UI,clientMode:this.opts.mode??Qz.WEBCHAT,role:n,scopes:t,signedAtMs:e,token:s??null,nonce:r}),o=await $N(a.privateKey,i);u={id:a.deviceId,publicKey:a.publicKey,signature:o,signedAt:e,nonce:r}}let d={minProtocol:3,maxProtocol:3,client:{id:this.opts.clientName??Zz.CONTROL_UI,version:this.opts.clientVersion??`control-ui`,platform:this.opts.platform??navigator.platform??`web`,mode:this.opts.mode??Qz.WEBCHAT,instanceId:this.opts.instanceId},role:n,scopes:t,device:u,caps:[`tool-events`],auth:l,userAgent:navigator.userAgent,locale:navigator.language,userPhone:this.opts.phone};this.request(`connect`,d).then(e=>{this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1,e?.auth?.deviceToken&&a&&IM({deviceId:a.deviceId,role:e.auth.role??n,token:e.auth.deviceToken,scopes:e.auth.scopes??[]}),this.backoffMs=800,this.opts.onHello?.(e)}).catch(e=>{let t=e instanceof iB?aB(e):null,i=e instanceof iB?Jz(e.details):{},s=i.recommendedNextStep===`retry_with_device_token`,c=i.canRetryWithDeviceToken===!0||s||t===Gz.AUTH_TOKEN_MISMATCH;!this.deviceTokenRetryBudgetUsed&&!o.authDeviceToken&&r&&a&&o.storedToken&&c&&sB(this.opts.url)&&(this.pendingDeviceTokenRetry=!0,this.deviceTokenRetryBudgetUsed=!0),e instanceof iB?this.pendingConnectError={code:e.gatewayCode,message:e.message,details:e.details}:this.pendingConnectError=void 0,o.canFallbackToShared&&a&&t===Gz.AUTH_DEVICE_TOKEN_MISMATCH&&LM({deviceId:a.deviceId,role:n}),this.ws?.close(cB,`connect failed`)})}handleMessage(e){let t;try{t=JSON.parse(e)}catch{return}let n=t;if(n.type===`event`){let e=t;if(e.event===`connect.challenge`){let t=e.payload,n=t&&typeof t.nonce==`string`?t.nonce:null;n&&(this.connectNonce=n,this.sendConnect());return}let n=typeof e.seq==`number`?e.seq:null;n!==null&&(this.lastSeq!==null&&n>this.lastSeq+1&&this.opts.onGap?.({expected:this.lastSeq+1,received:n}),this.lastSeq=n);try{this.opts.onEvent?.(e)}catch(e){console.error(`[gateway] event handler error:`,e)}return}if(n.type===`res`){let e=t,n=this.pending.get(e.id);if(!n)return;this.pending.delete(e.id),e.ok?n.resolve(e.payload):n.reject(new iB({code:e.error?.code??`UNAVAILABLE`,message:e.error?.message??`request failed`,details:e.error?.details}));return}}selectConnectAuth(e){let t=this.opts.token?.trim()||void 0,n=this.opts.password?.trim()||void 0,r=FM({deviceId:e.deviceId,role:e.role})?.token,i=this.pendingDeviceTokenRetry&&!!t&&!!r&&sB(this.opts.url),a=t||n?void 0:r??void 0;return{authToken:t??a,authDeviceToken:i?r??void 0:void 0,authPassword:n,resolvedDeviceToken:a,storedToken:r??void 0,canFallbackToShared:!!(r&&t)}}request(e,t){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return Promise.reject(Error(`gateway not connected`));let n=rB(),r={type:`req`,id:n,method:e,params:t},i=new Promise((e,t)=>{this.pending.set(n,{resolve:t=>e(t),reject:t})});return this.ws.send(JSON.stringify(r)),i}queueConnect(){this.connectNonce=null,this.connectSent=!1,this.connectTimer!==null&&window.clearTimeout(this.connectTimer),this.connectTimer=window.setTimeout(()=>{this.sendConnect()},750)}};function uB(e){return typeof e==`string`?e:e instanceof Error&&typeof e.message==`string`?e.message:`unknown error`}function dB(e){let t=uB(e.message);switch(aB(e)){case Gz.AUTH_TOKEN_MISMATCH:return`gateway token mismatch`;case Gz.AUTH_UNAUTHORIZED:return`gateway auth failed`;case Gz.AUTH_RATE_LIMITED:return`too many failed authentication attempts`;case Gz.PAIRING_REQUIRED:return`gateway pairing required`;case Gz.CONTROL_UI_DEVICE_IDENTITY_REQUIRED:return`device identity required (use HTTPS/localhost or allow insecure auth explicitly)`;case Gz.CONTROL_UI_ORIGIN_NOT_ALLOWED:return`origin not allowed (open the Control UI from the gateway host or allow it in gateway.controlUi.allowedOrigins)`;case Gz.AUTH_TOKEN_MISSING:return`gateway token missing`;default:break}let n=t.trim().toLowerCase();return n===`fetch failed`||n===`failed to fetch`||n===`connect failed`?`gateway connect failed`:t}function fB(e){return e&&typeof e==`object`?dB(e):uB(e)}var pB=/^\s*NO_REPLY\s*$/;function mB(e){return pB.test(e)}function hB(e){if(!e||typeof e!=`object`)return!1;let t=e;if((typeof t.role==`string`?t.role.toLowerCase():``)!==`assistant`)return!1;if(typeof t.text==`string`)return mB(t.text);let n=yF(e);return typeof n==`string`&&mB(n)}function gB(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(!n||typeof n!=`object`)continue;let r=n;if((typeof r.role==`string`?r.role.toLowerCase():``)!==`assistant`)continue;let i=r.__runLatency&&typeof r.__runLatency==`object`?r.__runLatency:null;return typeof i?.ttftMs==`number`||typeof i?.totalMs==`number`}return!1}function _B(e,t){if(!t)return e;for(let n=e.length-1;n>=0;--n){let r=e[n];if(!r||typeof r!=`object`)continue;let i=r;if((typeof i.role==`string`?i.role.toLowerCase():``)!==`assistant`)continue;let a=[...e];return a[n]={...i,__runLatency:{ttftMs:t.ttftMs,totalMs:t.totalMs}},a}return e}function vB(e){let t=e;t.toolStreamById instanceof Map&&Array.isArray(t.toolStreamOrder)&&Array.isArray(t.chatToolMessages)&&Array.isArray(t.chatStreamSegments)&&$R(t)}async function yB(e,t){if(!(!e.client||!e.connected)){e.chatLoading=!0,e.lastError=null;try{let n=await e.client.request(`chat.history`,{sessionKey:e.sessionKey,limit:200}),r=(Array.isArray(n.messages)?n.messages:[]).filter(e=>!hB(e));e.chatMessages=t?.preserveLastLatency&&!gB(r)?_B(r,e.lastLatency):r,e.chatThinkingLevel=n.thinkingLevel??null,vB(e),e.chatStream=null,e.chatStreamStartedAt=null,t?.preserveLastLatency&&!gB(r)||(e.lastLatency=null)}catch(t){e.lastError=String(t)}finally{e.chatLoading=!1}}}function bB(e){let t=/^data:([^;]+);base64,(.+)$/.exec(e);return t?{mimeType:t[1],content:t[2]}:null}function xB(e,t){if(!e||typeof e!=`object`)return null;let n=e,r=n.role;if(typeof r==`string`){if((t.roleCaseSensitive?r:r.toLowerCase())!==`assistant`)return null}else if(t.roleRequirement===`required`)return null;return t.requireContentArray?Array.isArray(n.content)?n:null:!(`content`in n)&&!(t.allowTextField&&`text`in n)?null:n}function SB(e){return xB(e,{roleRequirement:`required`,roleCaseSensitive:!0,requireContentArray:!0})}function CB(e){return xB(e,{roleRequirement:`optional`,allowTextField:!0})}async function wB(e,t,n,r){if(!e.client||!e.connected)return null;let i=t.trim(),a=n&&n.length>0;if(!i&&!a)return null;let o=Date.now(),s=[];if(i&&s.push({type:`text`,text:i}),a)for(let e of n)s.push({type:`image`,source:{type:`base64`,media_type:e.mimeType,data:e.dataUrl}});r?.optimisticUserMessage!==!1&&(e.chatMessages=[...e.chatMessages,{role:`user`,content:s,timestamp:o}]),e.chatSending=!0,e.lastError=null,e.lastLatency=null;let c=rB();e.chatRunId=c,e.chatStream=``,e.chatStreamStartedAt=o;let l=a?n.map(e=>{let t=bB(e.dataUrl);return t?{type:`image`,mimeType:t.mimeType,content:t.content}:null}).filter(e=>e!==null):void 0;try{return await e.client.request(`chat.send`,{sessionKey:e.sessionKey,message:i,deliver:!1,idempotencyKey:c,attachments:l,clientSentAt:o}),c}catch(t){let n=fB(t);return e.chatRunId=null,e.chatStream=null,e.chatStreamStartedAt=null,e.lastError=n,e.chatMessages=[...e.chatMessages,{role:`assistant`,content:[{type:`text`,text:`Error: `+n}],timestamp:Date.now()}],null}finally{e.chatSending=!1}}async function TB(e){if(!e.client||!e.connected)return!1;let t=e.chatRunId;try{return await e.client.request(`chat.abort`,t?{sessionKey:e.sessionKey,runId:t}:{sessionKey:e.sessionKey}),!0}catch(t){return e.lastError=fB(t),!1}}function EB(e,t){if(!t||t.sessionKey!==e.sessionKey)return null;if(t.runId&&e.chatRunId&&t.runId!==e.chatRunId){if(t.state===`final`){let n=CB(t.message);return n&&!hB(n)?(e.chatMessages=[...e.chatMessages,n],null):`final`}return null}if(t.state===`delta`){t.retract&&(e.chatStream=null);let n=yF(t.message);if(typeof n==`string`&&!mB(n)){let t=e.chatStream??``;(!t||n.length>=t.length)&&(e.chatStream=n)}t.firstTokenAt!=null&&e.chatStreamStartedAt!=null&&!e.lastLatency&&(e.lastLatency={ttftMs:t.firstTokenAt-e.chatStreamStartedAt,totalMs:null})}else if(t.state===`final`){let n=CB(t.message),r=e.chatStreamStartedAt==null?null:{ttftMs:t.firstTokenAt==null?null:t.firstTokenAt-e.chatStreamStartedAt,totalMs:t.endedAt==null?null:t.endedAt-e.chatStreamStartedAt};if(n&&!hB(n))r&&(n.__runLatency=r),e.chatMessages=[...e.chatMessages,n];else if(e.chatStream?.trim()&&!mB(e.chatStream)){let t={role:`assistant`,content:[{type:`text`,text:e.chatStream}],timestamp:Date.now()};r&&(t.__runLatency=r),e.chatMessages=[...e.chatMessages,t]}e.lastLatency=r,e.chatStream=null,e.chatRunId=null,e.chatStreamStartedAt=null}else if(t.state===`aborted`){let n=SB(t.message);if(n&&!hB(n))e.chatMessages=[...e.chatMessages,n];else{let t=e.chatStream??``;t.trim()&&!mB(t)&&(e.chatMessages=[...e.chatMessages,{role:`assistant`,content:[{type:`text`,text:t}],timestamp:Date.now()}])}e.chatStreamStartedAt!=null&&(e.lastLatency={ttftMs:e.lastLatency?.ttftMs??null,totalMs:Date.now()-e.chatStreamStartedAt}),e.chatStream=null,e.chatRunId=null,e.chatStreamStartedAt=null}else t.state===`error`&&(e.chatStream=null,e.chatRunId=null,e.chatStreamStartedAt=null,e.lastError=t.errorMessage??`chat error`);return t.state}async function DB(e){try{return(await e.request(`models.list`,{}))?.models??[]}catch{return[]}}var OB=`/new`,kB=new Set;function AB(e){return e.chatSending||!!e.chatRunId}function jB(e){return!e.connected||e.tab!=null&&e.tab!==`chat`||e.chatLoading||e.chatSending||e.chatRunId||(e.chatQueue?.length??0)>0||e.chatMessages.length>0?!1:!e.chatStream?.trim()}async function MB(e,t){e.chatLoading=!0;try{await yB(e,t)}finally{e.chatLoading=!1}let n=e.sessionKey;if(n){if(e.chatMessages.length>0){kB.delete(n);return}if(jB(e)&&!kB.has(n)){if(kB.add(n),!await wB(e,OB,void 0,{optimisticUserMessage:!1})){kB.delete(n);return}TR(e,n)}}}async function NB(e){e.connected&&(e.chatMessage=``,await TB(e))}async function PB(e,t,n){$R(e),ZA(e);let r=await wB(e,t,n?.attachments),i=!!r;return!i&&n?.previousDraft!=null&&(e.chatMessage=n.previousDraft),!i&&n?.previousAttachments&&(e.chatAttachments=n.previousAttachments),i&&TR(e,e.sessionKey),i&&n?.restoreDraft&&n.previousDraft?.trim()&&(e.chatMessage=n.previousDraft),i&&n?.restoreAttachments&&n.previousAttachments?.length&&(e.chatAttachments=n.previousAttachments),YA(e,!0),i&&!e.chatRunId&&FB(e),i&&n?.refreshSessions&&r&&e.refreshSessionsAfterChat.add(r),i}async function FB(e){if(!e.connected||AB(e))return;let[t,...n]=e.chatQueue;if(!t)return;e.chatQueue=n;let r=!1;try{t.localCommandName?(await IB(e,t.localCommandName,t.localCommandArgs??``),r=!0):r=await PB(e,t.text,{attachments:t.attachments,refreshSessions:t.refreshSessions})}catch(t){e.lastError=String(t)}r?e.chatQueue.length>0&&FB(e):e.chatQueue=[t,...e.chatQueue]}async function IB(e,t,n,r){switch(t){case`stop`:await NB(e);return;case`new`:await PB(e,`/new`,{refreshSessions:!0,previousDraft:r?.previousDraft,restoreDraft:r?.restoreDraft});return;case`reset`:await PB(e,`/reset`,{refreshSessions:!0,previousDraft:r?.previousDraft,restoreDraft:r?.restoreDraft});return;case`clear`:await LB(e);return;case`focus`:e.onSlashAction?.(`toggle-focus`);return;case`export`:e.onSlashAction?.(`export`);return}if(!e.client)return;let i=e.sessionKey,a=await Cz(e.client,i,t,n);a.content&&RB(e,a.content),a.sessionPatch&&`modelOverride`in a.sessionPatch&&(e.chatModelOverrides={...e.chatModelOverrides,[i]:a.sessionPatch.modelOverride??null}),a.action===`refresh`&&await zB(e),YA(e)}async function LB(e){if(!(!e.client||!e.connected)){try{await e.client.request(`sessions.reset`,{key:e.sessionKey}),e.chatMessages=[],e.chatStream=null,e.chatRunId=null,await MB(e)}catch(t){e.lastError=String(t)}YA(e)}}function RB(e,t){e.chatMessages=[...e.chatMessages,{role:`system`,content:t,timestamp:Date.now()}]}async function zB(e,t){await Promise.all([MB(e),aP(e,{activeMinutes:0,limit:0,includeGlobal:!0,includeUnknown:!0}),WB(e),BB(e)]),t?.scheduleScroll!==!1&&YA(e)}async function BB(e){if(!e.client||!e.connected){e.chatModelsLoading=!1,e.chatModelCatalog=[];return}e.chatModelsLoading=!0;try{e.chatModelCatalog=await DB(e.client)}finally{e.chatModelsLoading=!1}}var VB=FB;function HB(e){let t=GA(e.sessionKey);return t?.agentId?t.agentId:(e.hello?.snapshot)?.sessionDefaults?.defaultAgentId?.trim()||`main`}function UB(e,t){let n=NP(e),r=encodeURIComponent(t);return n?`${n}/avatar/${r}?meta=1`:`avatar/${r}?meta=1`}async function WB(e){if(!e.connected){e.chatAvatarUrl=null;return}let t=HB(e);if(!t){e.chatAvatarUrl=null;return}e.chatAvatarUrl=null;let n=UB(e.basePath,t);try{let t=await fetch(n,{method:`GET`});if(!t.ok){e.chatAvatarUrl=null;return}let r=await t.json();e.chatAvatarUrl=(typeof r.avatarUrl==`string`?r.avatarUrl.trim():``)||null}catch{e.chatAvatarUrl=null}}function GB(e){if(!e||e.state!==`final`)return!1;if(!e.message||typeof e.message!=`object`)return!0;let t=e.message,n=typeof t.role==`string`?t.role.toLowerCase():``;return!!(n&&n!==`assistant`)}function KB(e,t){if(typeof e!=`string`)return;let n=e.trim();if(n)return n.length<=t?n:n.slice(0,t)}var qB=50,JB=200;function YB(e){let t=KB(e?.name,qB)??`Assistant`,n=KB(e?.avatar??void 0,JB)??null;return{agentId:typeof e?.agentId==`string`&&e.agentId.trim()?e.agentId.trim():null,name:t,avatar:n}}async function XB(e,t){if(!e.client||!e.connected)return;let n=t?.sessionKey?.trim()||e.sessionKey.trim(),r=n?{sessionKey:n}:{};try{let t=await e.client.request(`agent.identity.get`,r);if(!t)return;let n=YB(t);e.assistantName=n.name,e.assistantAvatar=n.avatar,e.assistantAgentId=n.agentId??null}catch{}}function ZB(e){return typeof e==`object`&&!!e}function QB(e){if(!ZB(e))return null;let t=typeof e.id==`string`?e.id.trim():``,n=e.request;if(!t||!ZB(n))return null;let r=typeof n.command==`string`?n.command.trim():``;if(!r)return null;let i=typeof e.createdAtMs==`number`?e.createdAtMs:0,a=typeof e.expiresAtMs==`number`?e.expiresAtMs:0;return!i||!a?null:{id:t,request:{command:r,cwd:typeof n.cwd==`string`?n.cwd:null,host:typeof n.host==`string`?n.host:null,security:typeof n.security==`string`?n.security:null,ask:typeof n.ask==`string`?n.ask:null,agentId:typeof n.agentId==`string`?n.agentId:null,resolvedPath:typeof n.resolvedPath==`string`?n.resolvedPath:null,sessionKey:typeof n.sessionKey==`string`?n.sessionKey:null},createdAtMs:i,expiresAtMs:a}}function $B(e){if(!ZB(e))return null;let t=typeof e.id==`string`?e.id.trim():``;return t?{id:t,decision:typeof e.decision==`string`?e.decision:null,resolvedBy:typeof e.resolvedBy==`string`?e.resolvedBy:null,ts:typeof e.ts==`number`?e.ts:null}:null}function eV(e){let t=Date.now();return e.filter(e=>e.expiresAtMs>t)}function tV(e,t){let n=eV(e).filter(e=>e.id!==t.id);return n.push(t),n}function nV(e,t){return eV(e).filter(e=>e.id!==t)}var rV={ok:!1,ts:0,durationMs:0,heartbeatSeconds:0,defaultAgentId:``,agents:[],sessions:{path:``,count:0,recent:[]}};async function iV(e){try{return await e.request(`health`,{})??rV}catch{return rV}}async function aV(e){if(!(!e.client||!e.connected)&&!e.healthLoading){e.healthLoading=!0,e.healthError=null;try{e.healthResult=await iV(e.client)}catch(t){e.healthError=String(t)}finally{e.healthLoading=!1}}}function oV(e,t){return`${e}::${t}`}function sV(e,t,n){let r=Array.isArray(n)?new Set(n.map(e=>e.trim()).filter(Boolean)):null,i=`${t}::`,a={},o={};for(let[t,n]of Object.entries(e.skillFilesContents)){let e=t.startsWith(i),o=e?t.slice(i.length):``;e&&(!r||r.size===0||r.has(o))||(a[t]=n)}for(let[t,n]of Object.entries(e.skillFilesDrafts)){let a=t.startsWith(i),s=a?t.slice(i.length):``;if(!(a&&(!r||r.size===0||r.has(s)))){o[t]=n;continue}let c=e.skillFilesContents[t];Object.hasOwn(e.skillFilesDrafts,t)&&n!==c&&(o[t]=n)}e.skillFilesContents=a,e.skillFilesDrafts=o}async function cV(e,t,n){if(!e.client||!e.connected||!n?.force&&e.skillFilesLoading)return;e.skillFilesLoading=!0,e.skillFilesError=null;let r=null;try{let n=await e.client.request(`skills.files.list`,{skillKey:t});n&&(e.skillFilesLists={...e.skillFilesLists,[t]:n},!e.skillFilesActiveName&&n.files.length>0&&(e.skillFilesActiveName=n.files[0].name,r=n.files[0].name))}catch(t){e.skillFilesError=t instanceof Error?t.message:String(t)}finally{e.skillFilesLoading=!1}r&&await lV(e,t,r)}async function lV(e,t,n,r){if(!e.client||!e.connected||!r?.force&&e.skillFilesLoading)return;let i=oV(t,n);if(!(!r?.force&&Object.hasOwn(e.skillFilesContents,i))){e.skillFilesLoading=!0,e.skillFilesError=null;try{let r=await e.client.request(`skills.files.get`,{skillKey:t,name:n});if(r){let t=e.skillFilesContents[i],n=e.skillFilesDrafts[i];e.skillFilesContents={...e.skillFilesContents,[i]:r.content},(!Object.hasOwn(e.skillFilesDrafts,i)||n===t)&&(e.skillFilesDrafts={...e.skillFilesDrafts,[i]:r.content})}}catch(t){e.skillFilesError=t instanceof Error?t.message:String(t)}finally{e.skillFilesLoading=!1}}}var uV=`skill-creator`;async function dV(e){if(!(await e.request(`agents.list`,{})).agents.some(e=>e.id===uV))try{await e.request(`agents.create`,{name:uV,skills:[uV],templatePrefix:`SKILL_`})}catch{}}function fV(e){return/^(?:typeerror:\s*)?(?:fetch failed|failed to fetch)$/i.test(e.trim())}function pV(e){let t=e.serverVersion?.trim();if(!t)return;let n=e.pageUrl??(typeof window>`u`?void 0:window.location.href);if(n)try{let r=new URL(n),i=new URL(e.gatewayUrl,r);return!new Set([`ws:`,`wss:`,`http:`,`https:`]).has(i.protocol)||i.host!==r.host?void 0:t}catch{return}}function mV(e,t){let n=(e??``).trim(),r=t.mainSessionKey?.trim();if(!r)return n;if(!n)return r;let i=t.mainKey?.trim()||`main`,a=t.defaultAgentId?.trim();return n===`main`||n===i||a&&(n===`agent:${a}:main`||n===`agent:${a}:${i}`)?r:n}function hV(e,t){if(!t?.mainSessionKey)return;let n=e.userPhone&&/^\d{7,15}$/.test(e.userPhone)?`agent:phone-${e.userPhone}:webchat`:null;if(n){e.sessionKey!==n&&(e.sessionKey=n);return}let r=mV(e.sessionKey,t),i=mV(e.settings.sessionKey,t),a=mV(e.settings.lastActiveSessionKey,t),o=r||i||e.sessionKey,s={...e.settings,sessionKey:i||o,lastActiveSessionKey:a||o},c=s.sessionKey!==e.settings.sessionKey||s.lastActiveSessionKey!==e.settings.lastActiveSessionKey;o!==e.sessionKey&&(e.sessionKey=o),c&&wR(e,s)}function gV(e){let t=e;t.pendingShutdownMessage=null,e.lastError=null,e.lastErrorCode=null,e.hello=null,e.connected=!1,e.execApprovalQueue=[],e.execApprovalError=null;let n=e.client,r=pV({gatewayUrl:e.settings.gatewayUrl,serverVersion:e.serverVersion}),i=new lB({url:e.settings.gatewayUrl,token:e.settings.token.trim()?e.settings.token:void 0,password:e.password.trim()?e.password:void 0,clientName:`openclaw-control-ui`,clientVersion:r,mode:`webchat`,instanceId:e.clientInstanceId,phone:e.userPhone??void 0,onHello:n=>{e.client===i&&(t.pendingShutdownMessage=null,e.connected=!0,e.lastError=null,e.lastErrorCode=null,e.hello=n,wV(e,n),e.chatRunId=null,e.chatStream=null,e.chatStreamStartedAt=null,$R(e),XB(e),Pj(e),aV(e),hj(e,{quiet:!0}),eP(e,{quiet:!0}),DR(e),(async()=>{e.userPhone&&await i.request(`user.provision`,{}).catch(()=>{}),await dV(i)})())},onClose:({code:n,reason:r,error:a})=>{if(e.client===i)if(e.connected=!1,e.lastErrorCode=aB(a)??(typeof a?.code==`string`?a.code:null),n!==1012){if(a?.message){e.lastError=e.lastErrorCode&&fV(a.message)?fB({message:a.message,details:a.details,code:a.code}):a.message;return}e.lastError=t.pendingShutdownMessage??`disconnected (${n}): ${r||`no reason`}`}else e.lastError=t.pendingShutdownMessage??null,e.lastErrorCode=null},onEvent:t=>{e.client===i&&_V(e,t)},onGap:({expected:t,received:n})=>{e.client===i&&(e.lastError=`event gap detected (expected seq ${t}, got ${n}); refresh recommended`,e.lastErrorCode=null)}});e.client=i,n?.stop(),i.start()}function _V(e,t){try{CV(e,t)}catch(e){console.error(`[gateway] handleGatewayEvent error:`,t.event,e)}}function vV(e,t,n){if(n!==`final`&&n!==`error`&&n!==`aborted`)return!1;let r=e,i=r.toolStreamOrder.length>0;$R(r),VB(e);let a=t?.runId;return a&&e.refreshSessionsAfterChat.has(a)&&(e.refreshSessionsAfterChat.delete(a),n===`final`&&aP(e,{activeMinutes:120})),i&&n===`final`?(MB(e,{preserveLastLatency:!0}),!0):!1}function yV(e,t){if(!(!e.skillAiChatRunId&&t.state!==`delta`))if(t.state===`delta`){let n=yF(t.message);typeof n==`string`&&(e.skillAiChatStream=n)}else if(t.state===`final`){if(t.runId&&t.runId!==e.skillAiChatRunId)return;let n=t.message;if(n&&typeof n==`object`){let t=n;typeof t.role==`string`&&t.role.toLowerCase()===`assistant`&&(e.skillAiChatMessages=[...e.skillAiChatMessages,t])}else e.skillAiChatStream?.trim()&&(e.skillAiChatMessages=[...e.skillAiChatMessages,{role:`assistant`,content:[{type:`text`,text:e.skillAiChatStream}],timestamp:Date.now()}]);e.skillAiChatStream=null,e.skillAiChatRunId=null,e.skillAiChatStreamStartedAt=null,e.skillAiChatSending=!1,e.skillAiBuilderBuilding=!1;let r=e.skillAiBuilderSkillKey,i=new Set(e.skillsReport?.skills.filter(e=>e.source===`openclaw-managed`&&!e.bundled).map(e=>e.skillKey)??[]);(async()=>{await lP(e);let t=e.skillAiBuilderSkillKey??r;if(r&&!e.skillsReport?.skills.some(e=>e.skillKey===r)){let n=(e.skillsReport?.skills??[]).filter(e=>e.source===`openclaw-managed`&&!e.bundled&&!i.has(e.skillKey)).map(e=>e.skillKey);n.length===1&&(e.skillAiBuilderSkillKey=n[0],e.skillFilesActiveKey===r&&(e.skillFilesActiveKey=n[0]),t=n[0])}t&&await xV(e,t)})()}else (t.state===`aborted`||t.state===`error`)&&(e.skillAiChatStream=null,e.skillAiChatRunId=null,e.skillAiChatStreamStartedAt=null,e.skillAiChatSending=!1,e.skillAiBuilderBuilding=!1)}var bV=new Set([`write`,`edit`,`apply_patch`]);async function xV(e,t){sV(e,t),await cV(e,t,{force:!0});let n=new Set(e.skillFilesLists[t]?.files.map(e=>e.name).filter(Boolean)??[]),r=new Set;for(let t of e.skillAiBuilderOpenTabs)n.has(t)&&r.add(t);let i=e.skillFilesActiveName?.trim();i&&n.has(i)&&r.add(i);for(let n of r)await lV(e,t,n,{force:!0})}function SV(e,t){t?.sessionKey&&TR(e,t.sessionKey);let n=e;if(n.skillAiBuilderMode&&n.skillAiBuilderSkillKey&&t){let e=t.sessionKey===`agent:skill-creator:${n.skillAiBuilderSkillKey}`,r=!!n.skillAiChatRunId&&t.runId===n.skillAiChatRunId;if(e||r){yV(n,t);return}}let r=EB(e,t),i=vV(e,t,r);r===`final`&&!i&&GB(t)&&MB(e)}function CV(e,t){if(e.eventLogBuffer=[{ts:Date.now(),event:t.event,payload:t.payload},...e.eventLogBuffer].slice(0,250),(e.tab===`debug`||e.tab===`overview`)&&(e.eventLog=e.eventLogBuffer),t.event===`agent`){if(e.onboarding)return;let n=t.payload;if(n?.stream===`tool`){let t=e,r=n.sessionKey,i=!!r&&t.skillAiBuilderSkillKey!=null&&r===`agent:skill-creator:${t.skillAiBuilderSkillKey}`,a=!!t.skillAiChatRunId&&n.runId===t.skillAiChatRunId;if(t.skillAiBuilderMode&&(i||a)){let e=n.data??{},r=typeof e.toolCallId==`string`?e.toolCallId:``,i=typeof e.name==`string`?e.name:`tool`,a=typeof e.phase==`string`?e.phase:``;if(r){let e=t.skillAiToolCalls??[];e.find(e=>e.toolCallId===r)?a===`result`&&(t.skillAiToolCalls=e.map(e=>e.toolCallId===r?{...e,phase:`done`}:e)):t.skillAiToolCalls=[...e,{toolCallId:r,name:i,phase:`pending`}]}a===`result`&&bV.has(i.trim().toLowerCase())&&t.skillAiBuilderSkillKey&&xV(t,t.skillAiBuilderSkillKey);return}}az(e,n);return}if(t.event===`chat`){SV(e,t.payload);return}if(t.event===`presence`){let n=t.payload;n?.presence&&Array.isArray(n.presence)&&(e.presenceEntries=n.presence,e.presenceError=null,e.presenceStatus=null);return}if(t.event===`shutdown`){let n=t.payload,r=n&&typeof n.reason==`string`&&n.reason.trim()?n.reason.trim():`gateway stopping`,i=typeof n?.restartExpectedMs==`number`?`Restarting: ${r}`:`Disconnected: ${r}`;e.pendingShutdownMessage=i,e.lastError=i,e.lastErrorCode=null;return}if(t.event===`cron`&&e.tab===`cron`&&RR(e),(t.event===`device.pair.requested`||t.event===`device.pair.resolved`)&&eP(e,{quiet:!0}),t.event===`exec.approval.requested`){let n=QB(t.payload);if(n){e.execApprovalQueue=tV(e.execApprovalQueue,n),e.execApprovalError=null;let t=Math.max(0,n.expiresAtMs-Date.now()+500);window.setTimeout(()=>{e.execApprovalQueue=nV(e.execApprovalQueue,n.id)},t)}return}if(t.event===`exec.approval.resolved`){let n=$B(t.payload);n&&(e.execApprovalQueue=nV(e.execApprovalQueue,n.id));return}t.event===`update.available`&&(e.updateAvailable=t.payload?.updateAvailable??null)}function wV(e,t){let n=t.snapshot;n?.presence&&Array.isArray(n.presence)&&(e.presenceEntries=n.presence),n?.health&&(e.debugHealth=n.health,e.healthResult=n.health),n?.sessionDefaults&&hV(e,n.sessionDefaults),e.updateAvailable=n?.updateAvailable??null}var TV=`/__openclaw/control-ui-config.json`;async function EV(e){if(typeof window>`u`||typeof fetch!=`function`)return;let t=NP(e.basePath??``),n=t?`${t}${TV}`:TV;try{let t=await fetch(n,{method:`GET`,headers:{Accept:`application/json`},credentials:`same-origin`});if(!t.ok)return;let r=await t.json(),i=YB({agentId:r.assistantAgentId??null,name:r.assistantName,avatar:r.assistantAvatar??null});e.assistantName=i.name,e.assistantAvatar=i.avatar,e.assistantAgentId=i.agentId??null,e.serverVersion=r.serverVersion??null}catch{}}function DV(e){return e.replace(/^http:\/\//i,`ws://`).replace(/^https:\/\//i,`wss://`)}function OV(e,t){e.themeResolved=t;let n=t.endsWith(`light`)?`light`:`dark`;e.dataset.theme=t,e.dataset.themeMode=n,e.style.colorScheme=n}function kV(e){if(e.themeMode!==`system`){e.systemThemeCleanup?.(),e.systemThemeCleanup=null;return}if(e.systemThemeCleanup||typeof globalThis.matchMedia!=`function`)return;let t=globalThis.matchMedia(`(prefers-color-scheme: light)`),n=()=>{e.themeMode===`system`&&OV(e,UP(e.theme,`system`))};if(typeof t.addEventListener==`function`){t.addEventListener(`change`,n),e.systemThemeCleanup=()=>t.removeEventListener(`change`,n);return}try{t.addListener(n),e.systemThemeCleanup=()=>t.removeListener(n)}catch{}}function AV(e){e.theme=e.settings.theme??`dash`,e.themeMode=e.settings.themeMode??`system`,OV(e,UP(e.theme,e.themeMode)),kV(e)}function jV(e){if(!e.endpoint)return;let t=DV(e.endpoint);e.settings={...e.settings,gatewayUrl:t},e.token&&(rF(t,e.token),e.settings={...e.settings,token:e.token})}var MV=class extends bt{constructor(...e){super(...e),this.endpoint=``,this.token=``,this.theme=`dash`,this.clientInstanceId=rB(),this.connectGeneration=0,this.settings=aF(),this.connected=!1,this.hello=null,this.lastError=null,this.lastErrorCode=null,this.themeMode=`system`,this.themeResolved=`dash-dark`,this.themeOrder=[...LP],this.pendingGatewayUrl=null,this.systemThemeCleanup=null,this.pendingGatewayToken=null,this.basePath=``,this.client=null,this.password=``,this.serverVersion=null,this.assistantName=``,this.assistantAvatar=null,this.assistantAgentId=null,this.noUrlSync=!0,this.chatRunId=null,this.chatQueue=[],this.refreshSessionsAfterChat=new Set,this.eventLogBuffer=[],this.eventLog=[],this.presenceEntries=[],this.presenceError=null,this.presenceStatus=null,this.agentsLoading=!1,this.agentsList=null,this.agentsError=null,this.healthLoading=!1,this.healthResult=null,this.healthError=null,this.debugHealth=null,this.execApprovalQueue=[],this.execApprovalError=null,this.updateAvailable=null,this.gatewayBootstrapDone=!1}createRenderRoot(){return this}beforeGatewayConnectSetup(){}afterGatewayConnected(){}shouldReconnectOnPropChange(){return this.gatewayBootstrapDone}startEmbeddedGatewayConnection(){jV(this),this.settings={...this.settings,theme:this.theme},this.gatewayBootstrapDone=!1,++this.connectGeneration;let e=this.connectGeneration;AV(this),EV(this).finally(()=>{this.connectGeneration===e&&(this.gatewayBootstrapDone=!0,gV(this))})}stopEmbeddedGatewayConnection(){this.connectGeneration+=1,this.client?.stop(),this.client=null,this.connected=!1,OR(this)}handleEmbeddedGatewayUpdates(e){this.shouldReconnectOnPropChange()&&(e.has(`endpoint`)||e.has(`token`))&&(jV(this),this.endpoint&&gV(this)),e.has(`theme`)&&(this.settings={...this.settings,theme:this.theme},AV(this)),e.has(`connected`)&&this.connected&&this.afterGatewayConnected()}connectedCallback(){super.connectedCallback(),this.beforeGatewayConnectSetup(),this.startEmbeddedGatewayConnection()}disconnectedCallback(){super.disconnectedCallback(),this.stopEmbeddedGatewayConnection()}updated(e){super.updated(e),this.handleEmbeddedGatewayUpdates(e)}};Y([Jk({type:String})],MV.prototype,`endpoint`,void 0),Y([Jk({type:String})],MV.prototype,`token`,void 0),Y([Jk({type:String})],MV.prototype,`theme`,void 0),Y([J()],MV.prototype,`settings`,void 0),Y([J()],MV.prototype,`connected`,void 0),Y([J()],MV.prototype,`hello`,void 0),Y([J()],MV.prototype,`lastError`,void 0),Y([J()],MV.prototype,`lastErrorCode`,void 0),Y([J()],MV.prototype,`themeMode`,void 0),Y([J()],MV.prototype,`themeResolved`,void 0),Y([J()],MV.prototype,`themeOrder`,void 0),Y([J()],MV.prototype,`pendingGatewayUrl`,void 0),Y([J()],MV.prototype,`systemThemeCleanup`,void 0);function NV(e,t,n=`text/plain`){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,a.click(),URL.revokeObjectURL(i)}var PV=class extends MV{constructor(...e){super(...e),this.sessionKey=`main`,this.tab=`apiManagement`,this.toolStreamById=new Map,this.toolStreamOrder=[],this.toolStreamSyncTimer=null,this.chatToolMessages=[],this.chatStreamSegments=[],this.chatStream=null,this.chatStreamStartedAt=null,this.apiDefinitionsLoading=!1,this.apiDefinitionsSaving=!1,this.apiDefinitionsExporting=!1,this.apiDefinitionsImporting=!1,this.apiDefinitionsError=null,this.apiDefinitionsSaveAttempted=!1,this.apiDefinitionsItems=[],this.apiDefinitionsPath=null,this.apiDefinitionsQuery=``,this.apiDefinitionsHash=null,this.apiDefinitionsMode=`list`,this.apiDefinitionsEditingId=null,this.apiDefinitionsForm=l(),this.apiDefinitionsToast=null,this.apiDefinitionsToastKind=`error`,this.apiDefinitionsDeleteConfirmItem=null,this.apiDefinitionsSelectedIds=[],this.apiDefinitionsDeleteConfirmItems=null}afterGatewayConnected(){p(this)}render(){let e=this.apiDefinitionsForm;return S`
|
|
1456
1456
|
<div class="keyueclaw-api-management-scope content--api">
|
|
1457
1457
|
${WA({loading:this.apiDefinitionsLoading,saving:this.apiDefinitionsSaving,exporting:this.apiDefinitionsExporting,importing:this.apiDefinitionsImporting,error:this.apiDefinitionsError,saveAttempted:this.apiDefinitionsSaveAttempted,mode:this.apiDefinitionsMode,query:this.apiDefinitionsQuery,items:this.apiDefinitionsItems,selectedIds:this.apiDefinitionsSelectedIds,form:e,onQueryChange:async e=>{this.apiDefinitionsQuery=e,await p(this)},onRefresh:()=>p(this),onCreate:()=>m(this),onEdit:e=>h(this,e),onDelete:e=>{this.apiDefinitionsDeleteConfirmItem=e},onExportAll:async()=>{let e=await le(this,{format:`json`,ids:this.apiDefinitionsSelectedIds.length>0?this.apiDefinitionsSelectedIds:void 0});e&&NV(e.filename,e.content,e.mimeType)},onExportOne:async e=>{let t=await le(this,{id:e.id,format:`json`});t&&NV(t.filename,t.content,t.mimeType)},onImport:e=>{de(this,e)},onToggleSelectAll:e=>{this.apiDefinitionsSelectedIds=e?this.apiDefinitionsItems.map(e=>e.id):[]},onToggleSelectOne:(e,t)=>{let n=new Set(this.apiDefinitionsSelectedIds);t?n.add(e):n.delete(e),this.apiDefinitionsSelectedIds=[...n]},onDeleteSelected:()=>{let e=this.apiDefinitionsItems.filter(e=>this.apiDefinitionsSelectedIds.includes(e.id));e.length>0&&(this.apiDefinitionsDeleteConfirmItems=e)},onCancelEdit:()=>{this.apiDefinitionsSaveAttempted=!1,g(this)},onFormPatch:e=>_(this,e),onSave:()=>{if(this.apiDefinitionsSaveAttempted=!0,!e.name.trim()||!e.url.trim())return;let t=e.headers.map(e=>e.name.trim().toLowerCase()).filter(Boolean),n=new Set(t);e.headers.some(e=>!!(e.name.trim()||e.description.trim()||(e.example??``).trim())&&(!e.name.trim()||!e.description.trim()))||n.size!==t.length||[...e.inputParams,...e.outputParams].some(e=>!e.name.trim()||!e.description.trim())||oe(this)},onAddHeader:()=>y(this),onAddInputParam:()=>v(this),onAddOutputParam:()=>b(this),onUpdateHeader:(e,t)=>ee(this,e,t),onUpdateInputParam:(e,t)=>te(this,e,t),onUpdateOutputParam:(e,t)=>ne(this,e,t),onRemoveHeader:e=>re(this,e),onRemoveInputParam:e=>ie(this,e),onRemoveOutputParam:e=>ae(this,e)})}
|
|
1458
1458
|
${this.renderDeleteConfirm()}
|
|
@@ -1546,5 +1546,5 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1546
1546
|
</button>
|
|
1547
1547
|
</div>
|
|
1548
1548
|
</div>
|
|
1549
|
-
`}};Y([J()],PV.prototype,`apiDefinitionsLoading`,void 0),Y([J()],PV.prototype,`apiDefinitionsSaving`,void 0),Y([J()],PV.prototype,`apiDefinitionsExporting`,void 0),Y([J()],PV.prototype,`apiDefinitionsImporting`,void 0),Y([J()],PV.prototype,`apiDefinitionsError`,void 0),Y([J()],PV.prototype,`apiDefinitionsSaveAttempted`,void 0),Y([J()],PV.prototype,`apiDefinitionsItems`,void 0),Y([J()],PV.prototype,`apiDefinitionsQuery`,void 0),Y([J()],PV.prototype,`apiDefinitionsHash`,void 0),Y([J()],PV.prototype,`apiDefinitionsMode`,void 0),Y([J()],PV.prototype,`apiDefinitionsEditingId`,void 0),Y([J()],PV.prototype,`apiDefinitionsForm`,void 0),Y([J()],PV.prototype,`apiDefinitionsToast`,void 0),Y([J()],PV.prototype,`apiDefinitionsToastKind`,void 0),Y([J()],PV.prototype,`apiDefinitionsDeleteConfirmItem`,void 0),Y([J()],PV.prototype,`apiDefinitionsSelectedIds`,void 0),Y([J()],PV.prototype,`apiDefinitionsDeleteConfirmItems`,void 0),PV=Y([Gk(`keyueclaw-api-management`)],PV),Object.defineProperty(e,`KeyueClawApiManagementElement`,{enumerable:!0,get:function(){return PV}})});
|
|
1549
|
+
`}};Y([J()],PV.prototype,`apiDefinitionsLoading`,void 0),Y([J()],PV.prototype,`apiDefinitionsSaving`,void 0),Y([J()],PV.prototype,`apiDefinitionsExporting`,void 0),Y([J()],PV.prototype,`apiDefinitionsImporting`,void 0),Y([J()],PV.prototype,`apiDefinitionsError`,void 0),Y([J()],PV.prototype,`apiDefinitionsSaveAttempted`,void 0),Y([J()],PV.prototype,`apiDefinitionsItems`,void 0),Y([J()],PV.prototype,`apiDefinitionsPath`,void 0),Y([J()],PV.prototype,`apiDefinitionsQuery`,void 0),Y([J()],PV.prototype,`apiDefinitionsHash`,void 0),Y([J()],PV.prototype,`apiDefinitionsMode`,void 0),Y([J()],PV.prototype,`apiDefinitionsEditingId`,void 0),Y([J()],PV.prototype,`apiDefinitionsForm`,void 0),Y([J()],PV.prototype,`apiDefinitionsToast`,void 0),Y([J()],PV.prototype,`apiDefinitionsToastKind`,void 0),Y([J()],PV.prototype,`apiDefinitionsDeleteConfirmItem`,void 0),Y([J()],PV.prototype,`apiDefinitionsSelectedIds`,void 0),Y([J()],PV.prototype,`apiDefinitionsDeleteConfirmItems`,void 0),PV=Y([Gk(`keyueclaw-api-management`)],PV),Object.defineProperty(e,`KeyueClawApiManagementElement`,{enumerable:!0,get:function(){return PV}})});
|
|
1550
1550
|
//# sourceMappingURL=api-management.umd.cjs.map
|