@keyueclaw/web-sdk 0.1.8 → 0.1.10
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.
|
@@ -843,9 +843,9 @@ else:
|
|
|
843
843
|
</div>
|
|
844
844
|
</section>
|
|
845
845
|
</div>
|
|
846
|
-
`}var BA=null,VA=8;function HA(e){if(BA?.disconnect(),BA=null,!(e instanceof HTMLElement))return;let t=()=>{let t=e.parentElement;if(!t)return;let n=0;for(let r of Array.from(t.children)){if(r===e)break;n+=r.offsetHeight}let r=getComputedStyle(t),i=parseFloat(r.paddingTop)+parseFloat(r.paddingBottom),a=Math.max(t.clientHeight-n-i,100);if(e.style.height===a+`px`)return;e.style.height=a+`px`;let o=e.querySelector(`thead`),s=e.querySelector(`tbody`);o&&s&&(s.style.height=Math.max(a-o.offsetHeight-VA,50)+`px`)};BA=new ResizeObserver(t),BA.observe(e.parentElement
|
|
847
|
-
<section class="card">
|
|
848
|
-
<div style="display:flex;align-items:center;gap:12px;margin-bottom:16px;">
|
|
846
|
+
`}var BA=null,VA=8;function HA(e){if(BA?.disconnect(),BA=null,!(e instanceof HTMLElement))return;let t=()=>{let t=e.parentElement;if(!t)return;let n=0;for(let r of Array.from(t.children)){if(r===e)break;n+=r.offsetHeight}let r=getComputedStyle(t),i=parseFloat(r.paddingTop)+parseFloat(r.paddingBottom),a=Math.max(t.clientHeight-n-i,100);if(e.style.height===a+`px`)return;e.style.height=a+`px`;let o=e.querySelector(`thead`),s=e.querySelector(`tbody`);o&&s&&(s.style.height=Math.max(a-o.offsetHeight-VA,50)+`px`)};BA=new ResizeObserver(t),BA.observe(e.parentElement),t()}function UA(e){let t=`background:none;border:none;padding:4px 6px;cursor:pointer;color:#3658ff;display:inline-flex;align-items:center;gap:4px;border-radius:4px;font-size:13px;`,n=new Set(e.selectedIds),r=e.items.filter(e=>n.has(e.id)).length,i=e.items.length>0&&r===e.items.length;return S`
|
|
847
|
+
<section class="card" style="height:100%;overflow:hidden;display:flex;flex-direction:column;box-sizing:border-box;">
|
|
848
|
+
<div style="display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-shrink:0;">
|
|
849
849
|
<input class="input"
|
|
850
850
|
style="flex:1;max-width:300px;height:32px;padding:0 8px;border-radius:8px;box-sizing:border-box;border:1px solid var(--keyueclaw-border-strong);outline:none;box-shadow:none;"
|
|
851
851
|
.value=${e.query} placeholder="搜索接口名称、URL、描述"
|
|
@@ -921,7 +921,7 @@ else:
|
|
|
921
921
|
</div>
|
|
922
922
|
</div>
|
|
923
923
|
|
|
924
|
-
${e.error?S`<div class="callout danger" style="margin-bottom:12px;">${e.error}</div>`:null}
|
|
924
|
+
${e.error?S`<div class="callout danger" style="margin-bottom:12px;flex-shrink:0;">${e.error}</div>`:null}
|
|
925
925
|
|
|
926
926
|
<div ${Ft(HA)} style="overflow:hidden;border:1px solid var(--keyueclaw-border);border-radius:var(--keyueclaw-radius-md);">
|
|
927
927
|
<table style="width:100%;border-collapse:collapse;min-width:960px;table-layout:fixed;">
|
|
@@ -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}`}async function sV(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 cV(e,t,r)}async function cV(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 lV=`skill-creator`;async function uV(e){if(!(await e.request(`agents.list`,{})).agents.some(e=>e.id===lV))try{await e.request(`agents.create`,{name:lV,skills:[lV],templatePrefix:`SKILL_`})}catch{}}function dV(e){return/^(?:typeerror:\s*)?(?:fetch failed|failed to fetch)$/i.test(e.trim())}function fV(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 pV(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 mV(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=pV(e.sessionKey,t),i=pV(e.settings.sessionKey,t),a=pV(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 hV(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=fV({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,xV(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 uV(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&&dV(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&&gV(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 gV(e,t){try{bV(e,t)}catch(e){console.error(`[gateway] handleGatewayEvent error:`,t.event,e)}}function _V(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 vV(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 sV(e,t,{force:!0})})()}else (t.state===`aborted`||t.state===`error`)&&(e.skillAiChatStream=null,e.skillAiChatRunId=null,e.skillAiChatStreamStartedAt=null,e.skillAiChatSending=!1,e.skillAiBuilderBuilding=!1)}function yV(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){vV(n,t);return}}let r=EB(e,t),i=_V(e,t,r);r===`final`&&!i&&GB(t)&&MB(e)}function bV(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`}]}return}}az(e,n);return}if(t.event===`chat`){yV(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 xV(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&&mV(e,n.sessionDefaults),e.updateAvailable=n?.updateAvailable??null}var SV=`/__openclaw/control-ui-config.json`;async function CV(e){if(typeof window>`u`||typeof fetch!=`function`)return;let t=NP(e.basePath??``),n=t?`${t}${SV}`:SV;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 wV(e){return e.replace(/^http:\/\//i,`ws://`).replace(/^https:\/\//i,`wss://`)}function TV(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 EV(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`&&TV(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 DV(e){e.theme=e.settings.theme??`dash`,e.themeMode=e.settings.themeMode??`system`,TV(e,UP(e.theme,e.themeMode)),EV(e)}function OV(e){if(!e.endpoint)return;let t=wV(e.endpoint);e.settings={...e.settings,gatewayUrl:t},e.token&&(rF(t,e.token),e.settings={...e.settings,token:e.token})}var kV=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.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(){OV(this),this.settings={...this.settings,theme:this.theme},this.gatewayBootstrapDone=!1,++this.connectGeneration;let e=this.connectGeneration;DV(this),CV(this).finally(()=>{this.connectGeneration===e&&(this.gatewayBootstrapDone=!0,hV(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`))&&(OV(this),this.endpoint&&hV(this)),e.has(`theme`)&&(this.settings={...this.settings,theme:this.theme},DV(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})],kV.prototype,`endpoint`,void 0),Y([Jk({type:String})],kV.prototype,`token`,void 0),Y([Jk({type:String})],kV.prototype,`theme`,void 0),Y([J()],kV.prototype,`settings`,void 0),Y([J()],kV.prototype,`connected`,void 0),Y([J()],kV.prototype,`hello`,void 0),Y([J()],kV.prototype,`lastError`,void 0),Y([J()],kV.prototype,`lastErrorCode`,void 0),Y([J()],kV.prototype,`themeMode`,void 0),Y([J()],kV.prototype,`themeResolved`,void 0),Y([J()],kV.prototype,`themeOrder`,void 0),Y([J()],kV.prototype,`pendingGatewayUrl`,void 0),Y([J()],kV.prototype,`systemThemeCleanup`,void 0);function AV(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 jV=class extends kV{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.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}`}async function sV(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 cV(e,t,r)}async function cV(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 lV=`skill-creator`;async function uV(e){if(!(await e.request(`agents.list`,{})).agents.some(e=>e.id===lV))try{await e.request(`agents.create`,{name:lV,skills:[lV],templatePrefix:`SKILL_`})}catch{}}function dV(e){return/^(?:typeerror:\s*)?(?:fetch failed|failed to fetch)$/i.test(e.trim())}function fV(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 pV(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 mV(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=pV(e.sessionKey,t),i=pV(e.settings.sessionKey,t),a=pV(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 hV(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=fV({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,xV(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 uV(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&&dV(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&&gV(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 gV(e,t){try{bV(e,t)}catch(e){console.error(`[gateway] handleGatewayEvent error:`,t.event,e)}}function _V(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 vV(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 sV(e,t,{force:!0})})()}else (t.state===`aborted`||t.state===`error`)&&(e.skillAiChatStream=null,e.skillAiChatRunId=null,e.skillAiChatStreamStartedAt=null,e.skillAiChatSending=!1,e.skillAiBuilderBuilding=!1)}function yV(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){vV(n,t);return}}let r=EB(e,t),i=_V(e,t,r);r===`final`&&!i&&GB(t)&&MB(e)}function bV(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`}]}return}}az(e,n);return}if(t.event===`chat`){yV(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 xV(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&&mV(e,n.sessionDefaults),e.updateAvailable=n?.updateAvailable??null}var SV=`/__openclaw/control-ui-config.json`;async function CV(e){if(typeof window>`u`||typeof fetch!=`function`)return;let t=NP(e.basePath??``),n=t?`${t}${SV}`:SV;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 wV(e){return e.replace(/^http:\/\//i,`ws://`).replace(/^https:\/\//i,`wss://`)}function TV(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 EV(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`&&TV(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 DV(e){e.theme=e.settings.theme??`dash`,e.themeMode=e.settings.themeMode??`system`,TV(e,UP(e.theme,e.themeMode)),EV(e)}function OV(e){if(!e.endpoint)return;let t=wV(e.endpoint);e.settings={...e.settings,gatewayUrl:t},e.token&&(rF(t,e.token),e.settings={...e.settings,token:e.token})}var kV=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.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(){OV(this),this.settings={...this.settings,theme:this.theme},this.gatewayBootstrapDone=!1,++this.connectGeneration;let e=this.connectGeneration;DV(this),CV(this).finally(()=>{this.connectGeneration===e&&(this.gatewayBootstrapDone=!0,hV(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`))&&(OV(this),this.endpoint&&hV(this)),e.has(`theme`)&&(this.settings={...this.settings,theme:this.theme},DV(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})],kV.prototype,`endpoint`,void 0),Y([Jk({type:String})],kV.prototype,`token`,void 0),Y([Jk({type:String})],kV.prototype,`theme`,void 0),Y([J()],kV.prototype,`settings`,void 0),Y([J()],kV.prototype,`connected`,void 0),Y([J()],kV.prototype,`hello`,void 0),Y([J()],kV.prototype,`lastError`,void 0),Y([J()],kV.prototype,`lastErrorCode`,void 0),Y([J()],kV.prototype,`themeMode`,void 0),Y([J()],kV.prototype,`themeResolved`,void 0),Y([J()],kV.prototype,`themeOrder`,void 0),Y([J()],kV.prototype,`pendingGatewayUrl`,void 0),Y([J()],kV.prototype,`systemThemeCleanup`,void 0);function AV(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 jV=class extends kV{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`
|
|
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&&AV(e.filename,e.content,e.mimeType)},onExportOne:async e=>{let t=await le(this,{id:e.id,format:`json`});t&&AV(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()}
|
|
@@ -1521,44 +1521,30 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
1521
1521
|
</div>
|
|
1522
1522
|
</div>
|
|
1523
1523
|
</div>
|
|
1524
|
-
`}renderToast(){return this.
|
|
1524
|
+
`}renderToast(){if(!this.apiDefinitionsToast)return C;let e=this.apiDefinitionsToastKind===`success`,t=e?`#16a34a`:`var(--keyueclaw-accent)`;return S`
|
|
1525
1525
|
<div
|
|
1526
1526
|
style="position:fixed;top:32px;left:0;right:0;display:flex;justify-content:center;z-index:9999;pointer-events:none;"
|
|
1527
1527
|
>
|
|
1528
1528
|
<div
|
|
1529
1529
|
style="
|
|
1530
|
-
background:var(--keyueclaw-bg-elevated);border:1px solid
|
|
1530
|
+
background:var(--keyueclaw-bg-elevated);border:1px solid ${t};border-radius:8px;
|
|
1531
1531
|
padding:10px 12px 10px 14px;font-size:14px;color:var(--keyueclaw-text);
|
|
1532
1532
|
box-shadow:0 4px 16px color-mix(in srgb,black 12%,transparent);
|
|
1533
|
-
|
|
1533
|
+
word-break:break-word;max-width:420px;pointer-events:auto;
|
|
1534
1534
|
display:flex;align-items:center;gap:10px;
|
|
1535
1535
|
animation:fade-in .18s ease;
|
|
1536
1536
|
"
|
|
1537
1537
|
>
|
|
1538
|
-
|
|
1539
|
-
width="16"
|
|
1540
|
-
height="16"
|
|
1541
|
-
viewBox="0 0 24 24"
|
|
1542
|
-
fill="none"
|
|
1543
|
-
stroke="var(--keyueclaw-accent)"
|
|
1544
|
-
stroke-width="2"
|
|
1545
|
-
stroke-linecap="round"
|
|
1546
|
-
stroke-linejoin="round"
|
|
1547
|
-
style="flex-shrink:0;"
|
|
1548
|
-
>
|
|
1549
|
-
<circle cx="12" cy="12" r="10"></circle>
|
|
1550
|
-
<line x1="12" y1="8" x2="12" y2="12"></line>
|
|
1551
|
-
<line x1="12" y1="16" x2="12.01" y2="16"></line>
|
|
1552
|
-
</svg>
|
|
1538
|
+
${e?S`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="${t}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex-shrink:0;"><circle cx="12" cy="12" r="10"></circle><polyline points="9 12 11 14 15 10"></polyline></svg>`:S`<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="${t}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex-shrink:0;"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>`}
|
|
1553
1539
|
<span>${this.apiDefinitionsToast}</span>
|
|
1554
1540
|
<button
|
|
1555
1541
|
type="button"
|
|
1556
|
-
style="background:none;border:none;padding:0;cursor:pointer;color:var(--keyueclaw-muted-foreground);display:flex;align-items:center;line-height:1;font-size:16px;margin-left:4px;"
|
|
1542
|
+
style="background:none;border:none;padding:0;cursor:pointer;color:var(--keyueclaw-muted-foreground);display:flex;align-items:center;line-height:1;font-size:16px;margin-left:4px;flex-shrink:0;"
|
|
1557
1543
|
@click=${()=>{this.apiDefinitionsToast=null}}
|
|
1558
1544
|
>
|
|
1559
1545
|
✕
|
|
1560
1546
|
</button>
|
|
1561
1547
|
</div>
|
|
1562
1548
|
</div>
|
|
1563
|
-
|
|
1549
|
+
`}};Y([J()],jV.prototype,`apiDefinitionsLoading`,void 0),Y([J()],jV.prototype,`apiDefinitionsSaving`,void 0),Y([J()],jV.prototype,`apiDefinitionsExporting`,void 0),Y([J()],jV.prototype,`apiDefinitionsImporting`,void 0),Y([J()],jV.prototype,`apiDefinitionsError`,void 0),Y([J()],jV.prototype,`apiDefinitionsSaveAttempted`,void 0),Y([J()],jV.prototype,`apiDefinitionsItems`,void 0),Y([J()],jV.prototype,`apiDefinitionsQuery`,void 0),Y([J()],jV.prototype,`apiDefinitionsHash`,void 0),Y([J()],jV.prototype,`apiDefinitionsMode`,void 0),Y([J()],jV.prototype,`apiDefinitionsEditingId`,void 0),Y([J()],jV.prototype,`apiDefinitionsForm`,void 0),Y([J()],jV.prototype,`apiDefinitionsToast`,void 0),Y([J()],jV.prototype,`apiDefinitionsToastKind`,void 0),Y([J()],jV.prototype,`apiDefinitionsDeleteConfirmItem`,void 0),Y([J()],jV.prototype,`apiDefinitionsSelectedIds`,void 0),Y([J()],jV.prototype,`apiDefinitionsDeleteConfirmItems`,void 0),jV=Y([Gk(`keyueclaw-api-management`)],jV),Object.defineProperty(e,`KeyueClawApiManagementElement`,{enumerable:!0,get:function(){return jV}})});
|
|
1564
1550
|
//# sourceMappingURL=api-management.umd.cjs.map
|