@rubytech/taskmaster 1.0.30 → 1.0.32
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/agents/workspace.js +7 -1
- package/dist/build-info.json +3 -3
- package/dist/cli/program/register.maintenance.js +3 -1
- package/dist/commands/uninstall.js +77 -8
- package/dist/control-ui/assets/{index-BZ2Jt_PC.js → index-D9HCutTJ.js} +294 -215
- package/dist/control-ui/assets/index-D9HCutTJ.js.map +1 -0
- package/dist/control-ui/index.html +1 -1
- package/dist/gateway/server-methods/system.js +47 -0
- package/dist/gateway/server-methods.js +2 -1
- package/extensions/diagnostics-otel/node_modules/.bin/acorn +0 -0
- package/extensions/googlechat/node_modules/.bin/taskmaster +0 -0
- package/extensions/line/node_modules/.bin/taskmaster +0 -0
- package/extensions/matrix/node_modules/.bin/markdown-it +0 -0
- package/extensions/matrix/node_modules/.bin/taskmaster +0 -0
- package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +0 -0
- package/extensions/memory-lancedb/node_modules/.bin/openai +0 -0
- package/extensions/msteams/node_modules/.bin/taskmaster +0 -0
- package/extensions/nostr/node_modules/.bin/taskmaster +0 -0
- package/extensions/nostr/node_modules/.bin/tsc +0 -0
- package/extensions/nostr/node_modules/.bin/tsserver +0 -0
- package/extensions/zalo/node_modules/.bin/taskmaster +0 -0
- package/extensions/zalouser/node_modules/.bin/taskmaster +0 -0
- package/package.json +54 -64
- package/scripts/install.sh +0 -0
- package/taskmaster-docs/USER-GUIDE.md +37 -2
- package/templates/.DS_Store +0 -0
- package/templates/customer/.DS_Store +0 -0
- package/templates/customer/agents/.DS_Store +0 -0
- package/templates/customer/agents/admin/BOOTSTRAP.md +1 -1
- package/templates/taskmaster/.gitignore +1 -0
- package/templates/taskmaster/agents/admin/BOOTSTRAP.md +1 -1
- package/templates/tradesupport/agents/admin/BOOTSTRAP.md +1 -1
- package/dist/control-ui/assets/index-BZ2Jt_PC.js.map +0 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const r of o.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();const
|
|
2
|
-
\f\r]`,Mt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,
|
|
3
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),Jo=/'/g,er=/"/g,Sa=/^(?:script|style|textarea|title)$/i,nu=e=>(t,...n)=>({_$litType$:e,strings:t,values:n}),d=nu(1),Ne=Symbol.for("lit-noChange"),b=Symbol.for("lit-nothing"),tr=new WeakMap,qe=Ve.createTreeWalker(Ve,129);function Aa(e,t){if(!Bi(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return Yo!==void 0?Yo.createHTML(t):t}const su=(e,t)=>{const n=e.length-1,s=[];let i,o=t===2?"<svg>":t===3?"<math>":"",r=Mt;for(let l=0;l<n;l++){const a=e[l];let c,u,p=-1,m=0;for(;m<a.length&&(r.lastIndex=m,u=r.exec(a),u!==null);)m=r.lastIndex,r===Mt?u[1]==="!--"?r=Xo:u[1]!==void 0?r=Zo:u[2]!==void 0?(Sa.test(u[2])&&(i=RegExp("</"+u[2],"g")),r=ze):u[3]!==void 0&&(r=ze):r===ze?u[0]===">"?(r=i??Mt,p=-1):u[1]===void 0?p=-2:(p=r.lastIndex-u[2].length,c=u[1],r=u[3]===void 0?ze:u[3]==='"'?er:Jo):r===er||r===Jo?r=ze:r===Xo||r===Zo?r=Mt:(r=ze,i=void 0);const v=r===ze&&e[l+1].startsWith("/>")?" ":"";o+=r===Mt?a+eu:p>=0?(s.push(c),a.slice(0,p)+wa+a.slice(p)+Re+v):a+Re+(p===-2?l:v)}return[Aa(e,o+(e[n]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),s]};let ri=class xa{constructor({strings:t,_$litType$:n},s){let i;this.parts=[];let o=0,r=0;const l=t.length-1,a=this.parts,[c,u]=su(t,n);if(this.el=xa.createElement(c,s),qe.currentNode=this.el.content,n===2||n===3){const p=this.el.content.firstChild;p.replaceWith(...p.childNodes)}for(;(i=qe.nextNode())!==null&&a.length<l;){if(i.nodeType===1){if(i.hasAttributes())for(const p of i.getAttributeNames())if(p.endsWith(wa)){const m=u[r++],v=i.getAttribute(p).split(Re),w=/([.?@])?(.*)/.exec(m);a.push({type:1,index:o,name:w[2],strings:v,ctor:w[1]==="."?ou:w[1]==="?"?ru:w[1]==="@"?au:ss}),i.removeAttribute(p)}else p.startsWith(Re)&&(a.push({type:6,index:o}),i.removeAttribute(p));if(Sa.test(i.tagName)){const p=i.textContent.split(Re),m=p.length-1;if(m>0){i.textContent=Un?Un.emptyScript:"";for(let v=0;v<m;v++)i.append(p[v],Yt()),qe.nextNode(),a.push({type:2,index:++o});i.append(p[m],Yt())}}}else if(i.nodeType===8)if(i.data===ka)a.push({type:2,index:o});else{let p=-1;for(;(p=i.data.indexOf(Re,p+1))!==-1;)a.push({type:7,index:o}),p+=Re.length-1}o++}}static createElement(t,n){const s=Ve.createElement("template");return s.innerHTML=t,s}};function vt(e,t,n=e,s){if(t===Ne)return t;let i=s!==void 0?n._$Co?.[s]:n._$Cl;const o=Xt(t)?void 0:t._$litDirective$;return i?.constructor!==o&&(i?._$AO?.(!1),o===void 0?i=void 0:(i=new o(e),i._$AT(e,n,s)),s!==void 0?(n._$Co??=[])[s]=i:n._$Cl=i),i!==void 0&&(t=vt(e,i._$AS(e,t.values),i,s)),t}class iu{constructor(t,n){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=n}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:n},parts:s}=this._$AD,i=(t?.creationScope??Ve).importNode(n,!0);qe.currentNode=i;let o=qe.nextNode(),r=0,l=0,a=s[0];for(;a!==void 0;){if(r===a.index){let c;a.type===2?c=new ns(o,o.nextSibling,this,t):a.type===1?c=new a.ctor(o,a.name,a.strings,this,t):a.type===6&&(c=new lu(o,this,t)),this._$AV.push(c),a=s[++l]}r!==a?.index&&(o=qe.nextNode(),r++)}return qe.currentNode=Ve,i}p(t){let n=0;for(const s of this._$AV)s!==void 0&&(s.strings!==void 0?(s._$AI(t,s,n),n+=s.strings.length-2):s._$AI(t[n])),n++}}let ns=class $a{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,n,s,i){this.type=2,this._$AH=b,this._$AN=void 0,this._$AA=t,this._$AB=n,this._$AM=s,this.options=i,this._$Cv=i?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const n=this._$AM;return n!==void 0&&t?.nodeType===11&&(t=n.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,n=this){t=vt(this,t,n),Xt(t)?t===b||t==null||t===""?(this._$AH!==b&&this._$AR(),this._$AH=b):t!==this._$AH&&t!==Ne&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):tu(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==b&&Xt(this._$AH)?this._$AA.nextSibling.data=t:this.T(Ve.createTextNode(t)),this._$AH=t}$(t){const{values:n,_$litType$:s}=t,i=typeof s=="number"?this._$AC(t):(s.el===void 0&&(s.el=ri.createElement(Aa(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===i)this._$AH.p(n);else{const o=new iu(i,this),r=o.u(this.options);o.p(n),this.T(r),this._$AH=o}}_$AC(t){let n=tr.get(t.strings);return n===void 0&&tr.set(t.strings,n=new ri(t)),n}k(t){Bi(this._$AH)||(this._$AH=[],this._$AR());const n=this._$AH;let s,i=0;for(const o of t)i===n.length?n.push(s=new $a(this.O(Yt()),this.O(Yt()),this,this.options)):s=n[i],s._$AI(o),i++;i<n.length&&(this._$AR(s&&s._$AB.nextSibling,i),n.length=i)}_$AR(t=this._$AA.nextSibling,n){for(this._$AP?.(!1,!0,n);t!==this._$AB;){const s=Qo(t).nextSibling;Qo(t).remove(),t=s}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}};class ss{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,n,s,i,o){this.type=1,this._$AH=b,this._$AN=void 0,this.element=t,this.name=n,this._$AM=i,this.options=o,s.length>2||s[0]!==""||s[1]!==""?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=b}_$AI(t,n=this,s,i){const o=this.strings;let r=!1;if(o===void 0)t=vt(this,t,n,0),r=!Xt(t)||t!==this._$AH&&t!==Ne,r&&(this._$AH=t);else{const l=t;let a,c;for(t=o[0],a=0;a<o.length-1;a++)c=vt(this,l[s+a],n,a),c===Ne&&(c=this._$AH[a]),r||=!Xt(c)||c!==this._$AH[a],c===b?t=b:t!==b&&(t+=(c??"")+o[a+1]),this._$AH[a]=c}r&&!i&&this.j(t)}j(t){t===b?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}}let ou=class extends ss{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===b?void 0:t}},ru=class extends ss{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==b)}},au=class extends ss{constructor(t,n,s,i,o){super(t,n,s,i,o),this.type=5}_$AI(t,n=this){if((t=vt(this,t,n,0)??b)===Ne)return;const s=this._$AH,i=t===b&&s!==b||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,o=t!==b&&(s===b||i);i&&this.element.removeEventListener(this.name,this,s),o&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},lu=class{constructor(t,n,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=n,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){vt(this,t)}};const cu={I:ns},uu=Di.litHtmlPolyfillSupport;uu?.(ri,ns),(Di.litHtmlVersions??=[]).push("3.3.2");const du=(e,t,n)=>{const s=n?.renderBefore??t;let i=s._$litPart$;if(i===void 0){const o=n?.renderBefore??null;s._$litPart$=i=new ns(t.insertBefore(Yt(),o),o,void 0,n??{})}return i._$AI(e),i};const Fi=globalThis;let mt=class extends pt{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const n=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=du(n,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Ne}};mt._$litElement$=!0,mt.finalized=!0,Fi.litElementHydrateSupport?.({LitElement:mt});const pu=Fi.litElementPolyfillSupport;pu?.({LitElement:mt});(Fi.litElementVersions??=[]).push("4.2.2");const Ea=e=>(t,n)=>{n!==void 0?n.addInitializer(()=>{customElements.define(e,t)}):customElements.define(e,t)};const hu={attribute:!0,type:String,converter:Fn,reflect:!1,hasChanged:Oi},fu=(e=hu,t,n)=>{const{kind:s,metadata:i}=n;let o=globalThis.litPropertyMetadata.get(i);if(o===void 0&&globalThis.litPropertyMetadata.set(i,o=new Map),s==="setter"&&((e=Object.create(e)).wrapped=!0),o.set(n.name,e),s==="accessor"){const{name:r}=n;return{set(l){const a=t.get.call(this);t.set.call(this,l),this.requestUpdate(r,a,e,!0,l)},init(l){return l!==void 0&&this.C(r,void 0,e,l),l}}}if(s==="setter"){const{name:r}=n;return function(l){const a=this[r];t.call(this,l),this.requestUpdate(r,a,e,!0,l)}}throw Error("Unsupported decorator location: "+s)};function is(e){return(t,n)=>typeof n=="object"?fu(e,t,n):((s,i,o)=>{const r=i.hasOwnProperty(o);return i.constructor.createProperty(o,s),r?Object.getOwnPropertyDescriptor(i,o):void 0})(e,t,n)}function g(e){return is({...e,state:!0,attribute:!1})}const gu=50,mu=200,yu="Assistant";function nr(e,t){if(typeof e!="string")return;const n=e.trim();if(n)return n.length<=t?n:n.slice(0,t)}function ai(e){const t=nr(e?.name,gu)??yu,n=nr(e?.avatar??void 0,mu)??null;return{agentId:typeof e?.agentId=="string"&&e.agentId.trim()?e.agentId.trim():null,name:t,avatar:n}}function vu(){return ai(typeof window>"u"?{}:{name:window.__TASKMASTER_ASSISTANT_NAME__,avatar:window.__TASKMASTER_ASSISTANT_AVATAR__})}const Wn="taskmaster.control.settings.v1",Ta="taskmaster.account.settings.";function Ht(){return`${location.protocol==="https:"?"wss":"ws"}://${location.host}`}const dt={gatewayUrl:Ht(),token:"",theme:"system",navCollapsed:!1,navGroupsCollapsed:{}},Le={sessionKey:"main",lastActiveSessionKey:"main",chatFocusMode:!1,chatShowThinking:!1,splitRatio:.6};function bu(){try{const e=localStorage.getItem(Wn);if(!e)return{...dt,gatewayUrl:Ht()};const t=JSON.parse(e);return{gatewayUrl:typeof t.gatewayUrl=="string"&&t.gatewayUrl.trim()?t.gatewayUrl.trim():Ht(),token:typeof t.token=="string"?t.token:dt.token,theme:t.theme==="light"||t.theme==="dark"||t.theme==="system"?t.theme:dt.theme,navCollapsed:typeof t.navCollapsed=="boolean"?t.navCollapsed:dt.navCollapsed,navGroupsCollapsed:typeof t.navGroupsCollapsed=="object"&&t.navGroupsCollapsed!==null?t.navGroupsCollapsed:dt.navGroupsCollapsed}}catch{return{...dt,gatewayUrl:Ht()}}}function wu(e){if(!e)return{...Le};try{const t=localStorage.getItem(Ta+e);if(!t)return{...Le};const n=JSON.parse(t);return{sessionKey:typeof n.sessionKey=="string"&&n.sessionKey.trim()?n.sessionKey.trim():Le.sessionKey,lastActiveSessionKey:typeof n.lastActiveSessionKey=="string"&&n.lastActiveSessionKey.trim()?n.lastActiveSessionKey.trim():typeof n.sessionKey=="string"&&n.sessionKey.trim()||Le.lastActiveSessionKey,chatFocusMode:typeof n.chatFocusMode=="boolean"?n.chatFocusMode:Le.chatFocusMode,chatShowThinking:typeof n.chatShowThinking=="boolean"?n.chatShowThinking:Le.chatShowThinking,splitRatio:typeof n.splitRatio=="number"&&n.splitRatio>=.4&&n.splitRatio<=.7?n.splitRatio:Le.splitRatio}}catch{return{...Le}}}let Kn=null;function sr(e){Kn=e}function Ms(){return{...bu(),...wu(Kn)}}function ku(e){const t={gatewayUrl:e.gatewayUrl,token:e.token,theme:e.theme,navCollapsed:e.navCollapsed,navGroupsCollapsed:e.navGroupsCollapsed};if(localStorage.setItem(Wn,JSON.stringify(t)),Kn){const n={sessionKey:e.sessionKey,lastActiveSessionKey:e.lastActiveSessionKey,chatFocusMode:e.chatFocusMode,chatShowThinking:e.chatShowThinking,splitRatio:e.splitRatio};localStorage.setItem(Ta+Kn,JSON.stringify(n))}}(function(){try{const t=localStorage.getItem(Wn);if(!t)return;const n=JSON.parse(t);if(!("sessionKey"in n))return;const s={gatewayUrl:typeof n.gatewayUrl=="string"?n.gatewayUrl:Ht(),token:typeof n.token=="string"?n.token:"",theme:n.theme==="light"||n.theme==="dark"||n.theme==="system"?n.theme:"system",navCollapsed:typeof n.navCollapsed=="boolean"?n.navCollapsed:!1,navGroupsCollapsed:typeof n.navGroupsCollapsed=="object"&&n.navGroupsCollapsed!==null?n.navGroupsCollapsed:{}};localStorage.setItem(Wn,JSON.stringify(s))}catch{}})();function Ca(e){const t=(e??"").trim();if(!t)return null;const n=t.split(":").filter(Boolean);if(n.length<3||n[0]!=="agent")return null;const s=n[1]?.trim(),i=n.slice(2).join(":");return!s||!i?null:{agentId:s,rest:i}}const Su=/<\s*\/?\s*(?:think(?:ing)?|thought|antthinking|final)\b/i,bn=/<\s*\/?\s*final\b[^>]*>/gi,ir=/<\s*(\/?)\s*(?:think(?:ing)?|thought|antthinking)\b[^>]*>/gi;function Au(e,t){return e.trimStart()}function xu(e,t){if(!e||!Su.test(e))return e;let n=e;bn.test(n)?(bn.lastIndex=0,n=n.replace(bn,"")):bn.lastIndex=0,ir.lastIndex=0;let s="",i=0,o=!1;for(const r of n.matchAll(ir)){const l=r.index??0,a=r[1]==="/";o?a&&(o=!1):(s+=n.slice(i,l),a||(o=!0)),i=l+r[0].length}return s+=n.slice(i),Au(s)}function _a(e){return!e&&e!==0?"n/a":new Date(e).toLocaleString()}function os(e){if(!e&&e!==0)return"n/a";const t=Date.now()-e;if(t<0)return"just now";const n=Math.round(t/1e3);if(n<60)return`${n}s ago`;const s=Math.round(n/60);if(s<60)return`${s}m ago`;const i=Math.round(s/60);return i<48?`${i}h ago`:`${Math.round(i/24)}d ago`}function Ma(e){if(!e&&e!==0)return"n/a";if(e<1e3)return`${e}ms`;const t=Math.round(e/1e3);if(t<60)return`${t}s`;const n=Math.round(t/60);if(n<60)return`${n}m`;const s=Math.round(n/60);return s<48?`${s}h`:`${Math.round(s/24)}d`}function $u(e,t=120){return e.length<=t?e:`${e.slice(0,Math.max(0,t-1))}…`}function Pa(e,t){return e.length<=t?{text:e,truncated:!1,total:e.length}:{text:e.slice(0,Math.max(0,t)),truncated:!0,total:e.length}}function zn(e,t){const n=Number(e);return Number.isFinite(n)?n:t}function Ps(e){return xu(e)}const Eu=/^\[([^\]]+)\]\s*/,Tu=["WebChat","WhatsApp","Telegram","Signal","Slack","Discord","iMessage","Teams","Matrix","Zalo","Zalo Personal","BlueBubbles"],Ls=new WeakMap,Rs=new WeakMap;function Cu(e){return/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}Z\b/.test(e)||/\d{4}-\d{2}-\d{2} \d{2}:\d{2}\b/.test(e)?!0:Tu.some(t=>e.startsWith(`${t} `))}function Is(e){const t=e.match(Eu);if(!t)return e;const n=t[1]??"";return Cu(n)?e.slice(t[0].length):e}function jn(e){const t=e,n=typeof t.role=="string"?t.role:"",s=t.content;if(typeof s=="string")return n==="assistant"?Ps(s):Is(s);if(Array.isArray(s)){const i=s.map(o=>{const r=o;return r.type==="text"&&typeof r.text=="string"?r.text:null}).filter(o=>typeof o=="string");if(i.length>0){const o=i.join(`
|
|
4
|
-
`);return n==="assistant"?
|
|
5
|
-
`);const i=
|
|
6
|
-
`):null}function
|
|
7
|
-
`)}return typeof t.text=="string"?t.text:null}function
|
|
8
|
-
`):""}const
|
|
1
|
+
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const r of o.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();const Hc="modulepreload",qc=function(e,t){return new URL(e,t).href},Ho={},de=function(t,n,s){let i=Promise.resolve();if(n&&n.length>0){let c=function(u){return Promise.all(u.map(p=>Promise.resolve(p).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};const r=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),a=l?.nonce||l?.getAttribute("nonce");i=c(n.map(u=>{if(u=qc(u,s),u in Ho)return;Ho[u]=!0;const p=u.endsWith(".css"),m=p?'[rel="stylesheet"]':"";if(s)for(let w=r.length-1;w>=0;w--){const A=r[w];if(A.href===u&&(!p||A.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${u}"]${m}`))return;const v=document.createElement("link");if(v.rel=p?"stylesheet":Hc,p||(v.as="script"),v.crossOrigin="",v.href=u,a&&v.setAttribute("nonce",a),document.head.appendChild(v),p)return new Promise((w,A)=>{v.addEventListener("load",w),v.addEventListener("error",()=>A(new Error(`Unable to preload CSS for ${u}`)))})}))}function o(r){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=r,window.dispatchEvent(l),!l.defaultPrevented)throw r}return i.then(r=>{for(const l of r||[])l.status==="rejected"&&o(l.reason);return t().catch(o)})};const Rn=globalThis,Ii=Rn.ShadowRoot&&(Rn.ShadyCSS===void 0||Rn.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,Ni=Symbol(),qo=new WeakMap;let Sa=class{constructor(t,n,s){if(this._$cssResult$=!0,s!==Ni)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=n}get styleSheet(){let t=this.o;const n=this.t;if(Ii&&t===void 0){const s=n!==void 0&&n.length===1;s&&(t=qo.get(n)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),s&&qo.set(n,t))}return t}toString(){return this.cssText}};const Gc=e=>new Sa(typeof e=="string"?e:e+"",void 0,Ni),Vc=(e,...t)=>{const n=e.length===1?e[0]:t.reduce((s,i,o)=>s+(r=>{if(r._$cssResult$===!0)return r.cssText;if(typeof r=="number")return r;throw Error("Value passed to 'css' function must be a 'css' function result: "+r+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[o+1],e[0]);return new Sa(n,e,Ni)},Yc=(e,t)=>{if(Ii)e.adoptedStyleSheets=t.map(n=>n instanceof CSSStyleSheet?n:n.styleSheet);else for(const n of t){const s=document.createElement("style"),i=Rn.litNonce;i!==void 0&&s.setAttribute("nonce",i),s.textContent=n.cssText,e.appendChild(s)}},Go=Ii?e=>e:e=>e instanceof CSSStyleSheet?(t=>{let n="";for(const s of t.cssRules)n+=s.cssText;return Gc(n)})(e):e;const{is:Qc,defineProperty:Xc,getOwnPropertyDescriptor:Zc,getOwnPropertyNames:Jc,getOwnPropertySymbols:eu,getPrototypeOf:tu}=Object,ts=globalThis,Vo=ts.trustedTypes,nu=Vo?Vo.emptyScript:"",su=ts.reactiveElementPolyfillSupport,jt=(e,t)=>e,Fn={toAttribute(e,t){switch(t){case Boolean:e=e?nu:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let n=e;switch(t){case Boolean:n=e!==null;break;case Number:n=e===null?null:Number(e);break;case Object:case Array:try{n=JSON.parse(e)}catch{n=null}}return n}},Di=(e,t)=>!Qc(e,t),Yo={attribute:!0,type:String,converter:Fn,reflect:!1,useDefault:!1,hasChanged:Di};Symbol.metadata??=Symbol("metadata"),ts.litPropertyMetadata??=new WeakMap;let pt=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,n=Yo){if(n.state&&(n.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((n=Object.create(n)).wrapped=!0),this.elementProperties.set(t,n),!n.noAccessor){const s=Symbol(),i=this.getPropertyDescriptor(t,s,n);i!==void 0&&Xc(this.prototype,t,i)}}static getPropertyDescriptor(t,n,s){const{get:i,set:o}=Zc(this.prototype,t)??{get(){return this[n]},set(r){this[n]=r}};return{get:i,set(r){const l=i?.call(this);o?.call(this,r),this.requestUpdate(t,l,s)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??Yo}static _$Ei(){if(this.hasOwnProperty(jt("elementProperties")))return;const t=tu(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(jt("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(jt("properties"))){const n=this.properties,s=[...Jc(n),...eu(n)];for(const i of s)this.createProperty(i,n[i])}const t=this[Symbol.metadata];if(t!==null){const n=litPropertyMetadata.get(t);if(n!==void 0)for(const[s,i]of n)this.elementProperties.set(s,i)}this._$Eh=new Map;for(const[n,s]of this.elementProperties){const i=this._$Eu(n,s);i!==void 0&&this._$Eh.set(i,n)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const n=[];if(Array.isArray(t)){const s=new Set(t.flat(1/0).reverse());for(const i of s)n.unshift(Go(i))}else t!==void 0&&n.push(Go(t));return n}static _$Eu(t,n){const s=n.attribute;return s===!1?void 0:typeof s=="string"?s:typeof t=="string"?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),this.renderRoot!==void 0&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,n=this.constructor.elementProperties;for(const s of n.keys())this.hasOwnProperty(s)&&(t.set(s,this[s]),delete this[s]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return Yc(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,n,s){this._$AK(t,s)}_$ET(t,n){const s=this.constructor.elementProperties.get(t),i=this.constructor._$Eu(t,s);if(i!==void 0&&s.reflect===!0){const o=(s.converter?.toAttribute!==void 0?s.converter:Fn).toAttribute(n,s.type);this._$Em=t,o==null?this.removeAttribute(i):this.setAttribute(i,o),this._$Em=null}}_$AK(t,n){const s=this.constructor,i=s._$Eh.get(t);if(i!==void 0&&this._$Em!==i){const o=s.getPropertyOptions(i),r=typeof o.converter=="function"?{fromAttribute:o.converter}:o.converter?.fromAttribute!==void 0?o.converter:Fn;this._$Em=i;const l=r.fromAttribute(n,o.type);this[i]=l??this._$Ej?.get(i)??l,this._$Em=null}}requestUpdate(t,n,s,i=!1,o){if(t!==void 0){const r=this.constructor;if(i===!1&&(o=this[t]),s??=r.getPropertyOptions(t),!((s.hasChanged??Di)(o,n)||s.useDefault&&s.reflect&&o===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,s))))return;this.C(t,n,s)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(t,n,{useDefault:s,reflect:i,wrapped:o},r){s&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??n??this[t]),o!==!0||r!==void 0)||(this._$AL.has(t)||(this.hasUpdated||s||(n=void 0),this._$AL.set(t,n)),i===!0&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(n){Promise.reject(n)}const t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[i,o]of this._$Ep)this[i]=o;this._$Ep=void 0}const s=this.constructor.elementProperties;if(s.size>0)for(const[i,o]of s){const{wrapped:r}=o,l=this[i];r!==!0||this._$AL.has(i)||l===void 0||this.C(i,void 0,o,l)}}let t=!1;const n=this._$AL;try{t=this.shouldUpdate(n),t?(this.willUpdate(n),this._$EO?.forEach(s=>s.hostUpdate?.()),this.update(n)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(n)}willUpdate(t){}_$AE(t){this._$EO?.forEach(n=>n.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(n=>this._$ET(n,this[n])),this._$EM()}updated(t){}firstUpdated(t){}};pt.elementStyles=[],pt.shadowRootOptions={mode:"open"},pt[jt("elementProperties")]=new Map,pt[jt("finalized")]=new Map,su?.({ReactiveElement:pt}),(ts.reactiveElementVersions??=[]).push("2.1.2");const Oi=globalThis,Qo=e=>e,Un=Oi.trustedTypes,Xo=Un?Un.createPolicy("lit-html",{createHTML:e=>e}):void 0,xa="$lit$",Re=`lit$${Math.random().toFixed(9).slice(2)}$`,Aa="?"+Re,iu=`<${Aa}>`,Ve=document,Qt=()=>Ve.createComment(""),Xt=e=>e===null||typeof e!="object"&&typeof e!="function",Bi=Array.isArray,ou=e=>Bi(e)||typeof e?.[Symbol.iterator]=="function",_s=`[
|
|
2
|
+
\f\r]`,Mt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Zo=/-->/g,Jo=/>/g,ze=RegExp(`>|${_s}(?:([^\\s"'>=/]+)(${_s}*=${_s}*(?:[^
|
|
3
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),er=/'/g,tr=/"/g,$a=/^(?:script|style|textarea|title)$/i,ru=e=>(t,...n)=>({_$litType$:e,strings:t,values:n}),d=ru(1),Ne=Symbol.for("lit-noChange"),b=Symbol.for("lit-nothing"),nr=new WeakMap,qe=Ve.createTreeWalker(Ve,129);function Ea(e,t){if(!Bi(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return Xo!==void 0?Xo.createHTML(t):t}const au=(e,t)=>{const n=e.length-1,s=[];let i,o=t===2?"<svg>":t===3?"<math>":"",r=Mt;for(let l=0;l<n;l++){const a=e[l];let c,u,p=-1,m=0;for(;m<a.length&&(r.lastIndex=m,u=r.exec(a),u!==null);)m=r.lastIndex,r===Mt?u[1]==="!--"?r=Zo:u[1]!==void 0?r=Jo:u[2]!==void 0?($a.test(u[2])&&(i=RegExp("</"+u[2],"g")),r=ze):u[3]!==void 0&&(r=ze):r===ze?u[0]===">"?(r=i??Mt,p=-1):u[1]===void 0?p=-2:(p=r.lastIndex-u[2].length,c=u[1],r=u[3]===void 0?ze:u[3]==='"'?tr:er):r===tr||r===er?r=ze:r===Zo||r===Jo?r=Mt:(r=ze,i=void 0);const v=r===ze&&e[l+1].startsWith("/>")?" ":"";o+=r===Mt?a+iu:p>=0?(s.push(c),a.slice(0,p)+xa+a.slice(p)+Re+v):a+Re+(p===-2?l:v)}return[Ea(e,o+(e[n]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),s]};let ri=class Ta{constructor({strings:t,_$litType$:n},s){let i;this.parts=[];let o=0,r=0;const l=t.length-1,a=this.parts,[c,u]=au(t,n);if(this.el=Ta.createElement(c,s),qe.currentNode=this.el.content,n===2||n===3){const p=this.el.content.firstChild;p.replaceWith(...p.childNodes)}for(;(i=qe.nextNode())!==null&&a.length<l;){if(i.nodeType===1){if(i.hasAttributes())for(const p of i.getAttributeNames())if(p.endsWith(xa)){const m=u[r++],v=i.getAttribute(p).split(Re),w=/([.?@])?(.*)/.exec(m);a.push({type:1,index:o,name:w[2],strings:v,ctor:w[1]==="."?cu:w[1]==="?"?uu:w[1]==="@"?du:ss}),i.removeAttribute(p)}else p.startsWith(Re)&&(a.push({type:6,index:o}),i.removeAttribute(p));if($a.test(i.tagName)){const p=i.textContent.split(Re),m=p.length-1;if(m>0){i.textContent=Un?Un.emptyScript:"";for(let v=0;v<m;v++)i.append(p[v],Qt()),qe.nextNode(),a.push({type:2,index:++o});i.append(p[m],Qt())}}}else if(i.nodeType===8)if(i.data===Aa)a.push({type:2,index:o});else{let p=-1;for(;(p=i.data.indexOf(Re,p+1))!==-1;)a.push({type:7,index:o}),p+=Re.length-1}o++}}static createElement(t,n){const s=Ve.createElement("template");return s.innerHTML=t,s}};function vt(e,t,n=e,s){if(t===Ne)return t;let i=s!==void 0?n._$Co?.[s]:n._$Cl;const o=Xt(t)?void 0:t._$litDirective$;return i?.constructor!==o&&(i?._$AO?.(!1),o===void 0?i=void 0:(i=new o(e),i._$AT(e,n,s)),s!==void 0?(n._$Co??=[])[s]=i:n._$Cl=i),i!==void 0&&(t=vt(e,i._$AS(e,t.values),i,s)),t}class lu{constructor(t,n){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=n}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:n},parts:s}=this._$AD,i=(t?.creationScope??Ve).importNode(n,!0);qe.currentNode=i;let o=qe.nextNode(),r=0,l=0,a=s[0];for(;a!==void 0;){if(r===a.index){let c;a.type===2?c=new ns(o,o.nextSibling,this,t):a.type===1?c=new a.ctor(o,a.name,a.strings,this,t):a.type===6&&(c=new pu(o,this,t)),this._$AV.push(c),a=s[++l]}r!==a?.index&&(o=qe.nextNode(),r++)}return qe.currentNode=Ve,i}p(t){let n=0;for(const s of this._$AV)s!==void 0&&(s.strings!==void 0?(s._$AI(t,s,n),n+=s.strings.length-2):s._$AI(t[n])),n++}}let ns=class Ca{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,n,s,i){this.type=2,this._$AH=b,this._$AN=void 0,this._$AA=t,this._$AB=n,this._$AM=s,this.options=i,this._$Cv=i?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const n=this._$AM;return n!==void 0&&t?.nodeType===11&&(t=n.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,n=this){t=vt(this,t,n),Xt(t)?t===b||t==null||t===""?(this._$AH!==b&&this._$AR(),this._$AH=b):t!==this._$AH&&t!==Ne&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):ou(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==b&&Xt(this._$AH)?this._$AA.nextSibling.data=t:this.T(Ve.createTextNode(t)),this._$AH=t}$(t){const{values:n,_$litType$:s}=t,i=typeof s=="number"?this._$AC(t):(s.el===void 0&&(s.el=ri.createElement(Ea(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===i)this._$AH.p(n);else{const o=new lu(i,this),r=o.u(this.options);o.p(n),this.T(r),this._$AH=o}}_$AC(t){let n=nr.get(t.strings);return n===void 0&&nr.set(t.strings,n=new ri(t)),n}k(t){Bi(this._$AH)||(this._$AH=[],this._$AR());const n=this._$AH;let s,i=0;for(const o of t)i===n.length?n.push(s=new Ca(this.O(Qt()),this.O(Qt()),this,this.options)):s=n[i],s._$AI(o),i++;i<n.length&&(this._$AR(s&&s._$AB.nextSibling,i),n.length=i)}_$AR(t=this._$AA.nextSibling,n){for(this._$AP?.(!1,!0,n);t!==this._$AB;){const s=Qo(t).nextSibling;Qo(t).remove(),t=s}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}};class ss{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,n,s,i,o){this.type=1,this._$AH=b,this._$AN=void 0,this.element=t,this.name=n,this._$AM=i,this.options=o,s.length>2||s[0]!==""||s[1]!==""?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=b}_$AI(t,n=this,s,i){const o=this.strings;let r=!1;if(o===void 0)t=vt(this,t,n,0),r=!Xt(t)||t!==this._$AH&&t!==Ne,r&&(this._$AH=t);else{const l=t;let a,c;for(t=o[0],a=0;a<o.length-1;a++)c=vt(this,l[s+a],n,a),c===Ne&&(c=this._$AH[a]),r||=!Xt(c)||c!==this._$AH[a],c===b?t=b:t!==b&&(t+=(c??"")+o[a+1]),this._$AH[a]=c}r&&!i&&this.j(t)}j(t){t===b?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}}let cu=class extends ss{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===b?void 0:t}},uu=class extends ss{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==b)}},du=class extends ss{constructor(t,n,s,i,o){super(t,n,s,i,o),this.type=5}_$AI(t,n=this){if((t=vt(this,t,n,0)??b)===Ne)return;const s=this._$AH,i=t===b&&s!==b||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,o=t!==b&&(s===b||i);i&&this.element.removeEventListener(this.name,this,s),o&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},pu=class{constructor(t,n,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=n,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){vt(this,t)}};const hu={I:ns},fu=Oi.litHtmlPolyfillSupport;fu?.(ri,ns),(Oi.litHtmlVersions??=[]).push("3.3.2");const gu=(e,t,n)=>{const s=n?.renderBefore??t;let i=s._$litPart$;if(i===void 0){const o=n?.renderBefore??null;s._$litPart$=i=new ns(t.insertBefore(Qt(),o),o,void 0,n??{})}return i._$AI(e),i};const Fi=globalThis;let mt=class extends pt{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const n=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=gu(n,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Ne}};mt._$litElement$=!0,mt.finalized=!0,Fi.litElementHydrateSupport?.({LitElement:mt});const mu=Fi.litElementPolyfillSupport;mu?.({LitElement:mt});(Fi.litElementVersions??=[]).push("4.2.2");const _a=e=>(t,n)=>{n!==void 0?n.addInitializer(()=>{customElements.define(e,t)}):customElements.define(e,t)};const yu={attribute:!0,type:String,converter:Fn,reflect:!1,hasChanged:Di},vu=(e=yu,t,n)=>{const{kind:s,metadata:i}=n;let o=globalThis.litPropertyMetadata.get(i);if(o===void 0&&globalThis.litPropertyMetadata.set(i,o=new Map),s==="setter"&&((e=Object.create(e)).wrapped=!0),o.set(n.name,e),s==="accessor"){const{name:r}=n;return{set(l){const a=t.get.call(this);t.set.call(this,l),this.requestUpdate(r,a,e,!0,l)},init(l){return l!==void 0&&this.C(r,void 0,e,l),l}}}if(s==="setter"){const{name:r}=n;return function(l){const a=this[r];t.call(this,l),this.requestUpdate(r,a,e,!0,l)}}throw Error("Unsupported decorator location: "+s)};function is(e){return(t,n)=>typeof n=="object"?vu(e,t,n):((s,i,o)=>{const r=i.hasOwnProperty(o);return i.constructor.createProperty(o,s),r?Object.getOwnPropertyDescriptor(i,o):void 0})(e,t,n)}function g(e){return is({...e,state:!0,attribute:!1})}const bu=50,wu=200,ku="Assistant";function sr(e,t){if(typeof e!="string")return;const n=e.trim();if(n)return n.length<=t?n:n.slice(0,t)}function ai(e){const t=sr(e?.name,bu)??ku,n=sr(e?.avatar??void 0,wu)??null;return{agentId:typeof e?.agentId=="string"&&e.agentId.trim()?e.agentId.trim():null,name:t,avatar:n}}function Su(){return ai(typeof window>"u"?{}:{name:window.__TASKMASTER_ASSISTANT_NAME__,avatar:window.__TASKMASTER_ASSISTANT_AVATAR__})}const Wn="taskmaster.control.settings.v1",Ma="taskmaster.account.settings.";function Ht(){return`${location.protocol==="https:"?"wss":"ws"}://${location.host}`}const dt={gatewayUrl:Ht(),token:"",theme:"system",navCollapsed:!1,navGroupsCollapsed:{}},Pe={sessionKey:"main",lastActiveSessionKey:"main",chatFocusMode:!1,chatShowThinking:!1,splitRatio:.6};function xu(){try{const e=localStorage.getItem(Wn);if(!e)return{...dt,gatewayUrl:Ht()};const t=JSON.parse(e);return{gatewayUrl:typeof t.gatewayUrl=="string"&&t.gatewayUrl.trim()?t.gatewayUrl.trim():Ht(),token:typeof t.token=="string"?t.token:dt.token,theme:t.theme==="light"||t.theme==="dark"||t.theme==="system"?t.theme:dt.theme,navCollapsed:typeof t.navCollapsed=="boolean"?t.navCollapsed:dt.navCollapsed,navGroupsCollapsed:typeof t.navGroupsCollapsed=="object"&&t.navGroupsCollapsed!==null?t.navGroupsCollapsed:dt.navGroupsCollapsed}}catch{return{...dt,gatewayUrl:Ht()}}}function Au(e){if(!e)return{...Pe};try{const t=localStorage.getItem(Ma+e);if(!t)return{...Pe};const n=JSON.parse(t);return{sessionKey:typeof n.sessionKey=="string"&&n.sessionKey.trim()?n.sessionKey.trim():Pe.sessionKey,lastActiveSessionKey:typeof n.lastActiveSessionKey=="string"&&n.lastActiveSessionKey.trim()?n.lastActiveSessionKey.trim():typeof n.sessionKey=="string"&&n.sessionKey.trim()||Pe.lastActiveSessionKey,chatFocusMode:typeof n.chatFocusMode=="boolean"?n.chatFocusMode:Pe.chatFocusMode,chatShowThinking:typeof n.chatShowThinking=="boolean"?n.chatShowThinking:Pe.chatShowThinking,splitRatio:typeof n.splitRatio=="number"&&n.splitRatio>=.4&&n.splitRatio<=.7?n.splitRatio:Pe.splitRatio}}catch{return{...Pe}}}let Kn=null;function ir(e){Kn=e}function Ms(){return{...xu(),...Au(Kn)}}function $u(e){const t={gatewayUrl:e.gatewayUrl,token:e.token,theme:e.theme,navCollapsed:e.navCollapsed,navGroupsCollapsed:e.navGroupsCollapsed};if(localStorage.setItem(Wn,JSON.stringify(t)),Kn){const n={sessionKey:e.sessionKey,lastActiveSessionKey:e.lastActiveSessionKey,chatFocusMode:e.chatFocusMode,chatShowThinking:e.chatShowThinking,splitRatio:e.splitRatio};localStorage.setItem(Ma+Kn,JSON.stringify(n))}}(function(){try{const t=localStorage.getItem(Wn);if(!t)return;const n=JSON.parse(t);if(!("sessionKey"in n))return;const s={gatewayUrl:typeof n.gatewayUrl=="string"?n.gatewayUrl:Ht(),token:typeof n.token=="string"?n.token:"",theme:n.theme==="light"||n.theme==="dark"||n.theme==="system"?n.theme:"system",navCollapsed:typeof n.navCollapsed=="boolean"?n.navCollapsed:!1,navGroupsCollapsed:typeof n.navGroupsCollapsed=="object"&&n.navGroupsCollapsed!==null?n.navGroupsCollapsed:{}};localStorage.setItem(Wn,JSON.stringify(s))}catch{}})();function La(e){const t=(e??"").trim();if(!t)return null;const n=t.split(":").filter(Boolean);if(n.length<3||n[0]!=="agent")return null;const s=n[1]?.trim(),i=n.slice(2).join(":");return!s||!i?null:{agentId:s,rest:i}}const Eu=/<\s*\/?\s*(?:think(?:ing)?|thought|antthinking|final)\b/i,bn=/<\s*\/?\s*final\b[^>]*>/gi,or=/<\s*(\/?)\s*(?:think(?:ing)?|thought|antthinking)\b[^>]*>/gi;function Tu(e,t){return e.trimStart()}function Cu(e,t){if(!e||!Eu.test(e))return e;let n=e;bn.test(n)?(bn.lastIndex=0,n=n.replace(bn,"")):bn.lastIndex=0,or.lastIndex=0;let s="",i=0,o=!1;for(const r of n.matchAll(or)){const l=r.index??0,a=r[1]==="/";o?a&&(o=!1):(s+=n.slice(i,l),a||(o=!0)),i=l+r[0].length}return s+=n.slice(i),Tu(s)}function Pa(e){return!e&&e!==0?"n/a":new Date(e).toLocaleString()}function os(e){if(!e&&e!==0)return"n/a";const t=Date.now()-e;if(t<0)return"just now";const n=Math.round(t/1e3);if(n<60)return`${n}s ago`;const s=Math.round(n/60);if(s<60)return`${s}m ago`;const i=Math.round(s/60);return i<48?`${i}h ago`:`${Math.round(i/24)}d ago`}function Ra(e){if(!e&&e!==0)return"n/a";if(e<1e3)return`${e}ms`;const t=Math.round(e/1e3);if(t<60)return`${t}s`;const n=Math.round(t/60);if(n<60)return`${n}m`;const s=Math.round(n/60);return s<48?`${s}h`:`${Math.round(s/24)}d`}function _u(e,t=120){return e.length<=t?e:`${e.slice(0,Math.max(0,t-1))}…`}function Ia(e,t){return e.length<=t?{text:e,truncated:!1,total:e.length}:{text:e.slice(0,Math.max(0,t)),truncated:!0,total:e.length}}function zn(e,t){const n=Number(e);return Number.isFinite(n)?n:t}function Ls(e){return Cu(e)}const Mu=/^\[([^\]]+)\]\s*/,Lu=["WebChat","WhatsApp","Telegram","Signal","Slack","Discord","iMessage","Teams","Matrix","Zalo","Zalo Personal","BlueBubbles"],Ps=new WeakMap,Rs=new WeakMap;function Pu(e){return/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}Z\b/.test(e)||/\d{4}-\d{2}-\d{2} \d{2}:\d{2}\b/.test(e)?!0:Lu.some(t=>e.startsWith(`${t} `))}function Is(e){const t=e.match(Mu);if(!t)return e;const n=t[1]??"";return Pu(n)?e.slice(t[0].length):e}function jn(e){const t=e,n=typeof t.role=="string"?t.role:"",s=t.content;if(typeof s=="string")return n==="assistant"?Ls(s):Is(s);if(Array.isArray(s)){const i=s.map(o=>{const r=o;return r.type==="text"&&typeof r.text=="string"?r.text:null}).filter(o=>typeof o=="string");if(i.length>0){const o=i.join(`
|
|
4
|
+
`);return n==="assistant"?Ls(o):Is(o)}}return typeof t.text=="string"?n==="assistant"?Ls(t.text):Is(t.text):null}function Na(e){if(!e||typeof e!="object")return jn(e);const t=e;if(Ps.has(t))return Ps.get(t)??null;const n=jn(e);return Ps.set(t,n),n}function rr(e){const n=e.content,s=[];if(Array.isArray(n))for(const l of n){const a=l;if(a.type==="thinking"&&typeof a.thinking=="string"){const c=a.thinking.trim();c&&s.push(c)}}if(s.length>0)return s.join(`
|
|
5
|
+
`);const i=Iu(e);if(!i)return null;const r=[...i.matchAll(/<\s*think(?:ing)?\s*>([\s\S]*?)<\s*\/\s*think(?:ing)?\s*>/gi)].map(l=>(l[1]??"").trim()).filter(Boolean);return r.length>0?r.join(`
|
|
6
|
+
`):null}function Ru(e){if(!e||typeof e!="object")return rr(e);const t=e;if(Rs.has(t))return Rs.get(t)??null;const n=rr(e);return Rs.set(t,n),n}function Iu(e){const t=e,n=t.content;if(typeof n=="string")return n;if(Array.isArray(n)){const s=n.map(i=>{const o=i;return o.type==="text"&&typeof o.text=="string"?o.text:null}).filter(i=>typeof i=="string");if(s.length>0)return s.join(`
|
|
7
|
+
`)}return typeof t.text=="string"?t.text:null}function Nu(e){const t=e.trim();if(!t)return"";const n=t.split(/\r?\n/).map(s=>s.trim()).filter(Boolean).map(s=>`_${s}_`);return n.length?["_Reasoning:_",...n].join(`
|
|
8
|
+
`):""}const Du=/Read HEARTBEAT\.md if it exists|reply HEARTBEAT_OK/i,Ou=/^[\s*`_]*HEARTBEAT_OK[\s*`_]*$/i,Bu=/^[\s*`_]*NO_REPLY[\s*`_]*$/i,Fu=/^A new session was started via \/new or \/reset\./;function Uu(e){const t=e,n=typeof t.role=="string"?t.role:"";let s="";typeof t.content=="string"?s=t.content:Array.isArray(t.content)?s=t.content.filter(o=>typeof o=="object"&&o!==null).map(o=>o.text??"").join(" "):typeof t.text=="string"&&(s=t.text);const i=s.trim();return i?!!(n==="user"&&Du.test(i)||n==="assistant"&&Ou.test(i)||n==="user"&&Fu.test(i)||n==="assistant"&&Bu.test(i)):!1}function Wu(e){return e.filter(t=>!Uu(t))}function Da(e){const t=e;let n=typeof t.role=="string"?t.role:"unknown";const s=typeof t.toolCallId=="string"||typeof t.tool_call_id=="string",i=t.content,o=Array.isArray(i)?i:null,r=Array.isArray(o)&&o.some(p=>{const v=String(p.type??"").toLowerCase();return v==="toolresult"||v==="tool_result"}),l=typeof t.toolName=="string"||typeof t.tool_name=="string";(s||r||l)&&(n="toolResult");let a=[];typeof t.content=="string"?a=[{type:"text",text:t.content}]:Array.isArray(t.content)?a=t.content.map(p=>({type:p.type||"text",text:p.text,name:p.name,args:p.args||p.arguments})):typeof t.text=="string"&&(a=[{type:"text",text:t.text}]);const c=typeof t.timestamp=="number"?t.timestamp:Date.now(),u=typeof t.id=="string"?t.id:void 0;return{role:n,content:a,timestamp:c,id:u}}function Oa(e){const t=e.toLowerCase();return e==="user"||e==="User"?e:e==="assistant"?"assistant":e==="system"?"system":t==="toolresult"||t==="tool_result"||t==="tool"||t==="function"?"tool":e}function Ba(e){const t=e,n=typeof t.role=="string"?t.role.toLowerCase():"";return n==="toolresult"||n==="tool_result"}function ar(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 Ku(){const e=new Uint8Array(16),t=Date.now();for(let n=0;n<e.length;n++)e[n]=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 Ui(e=globalThis.crypto){if(e&&typeof e.randomUUID=="function")return e.randomUUID();if(e&&typeof e.getRandomValues=="function"){const t=new Uint8Array(16);return e.getRandomValues(t),ar(t)}return ar(Ku())}async function Ce(e){if(!(!e.client||!e.connected)){e.chatLoading=!0,e.lastError=null;try{const t=await e.client.request("chat.history",{sessionKey:e.sessionKey,limit:200}),n=Array.isArray(t.messages)?t.messages:[];e.chatMessages=Wu(n),e.chatThinkingLevel=t.thinkingLevel??null,e.chatModelProvider=typeof t.modelProvider=="string"?t.modelProvider:null,e.chatModel=typeof t.model=="string"?t.model:null,e.chatVerboseLevel=typeof t.verboseLevel=="string"?t.verboseLevel:null,e.chatFillerEnabled=typeof t.fillerEnabled=="boolean"?t.fillerEnabled:null}catch(t){e.lastError=String(t)}finally{e.chatLoading=!1}}}function zu(e){const t=/^data:([^;]+);base64,(.+)$/.exec(e);return t?{mimeType:t[1],content:t[2]}:null}async function Fa(e,t,n){if(!e.client||!e.connected)return!1;const s=t.trim(),i=n&&n.length>0;if(!s&&!i)return!1;const o=Date.now(),r=(n??[]).filter(v=>!v.fileName),l=(n??[]).filter(v=>v.fileName),a=[],c=l.map(v=>v.fileName).filter(Boolean);if(c.length>0){const v=s?`${c.join(", ")}
|
|
9
9
|
|
|
10
|
-
${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text:s});for(const v of r)a.push({type:"image",source:{type:"base64",media_type:v.mimeType,data:v.dataUrl}});e.chatMessages=[...e.chatMessages,{role:"user",content:a,timestamp:o}],e.chatSending=!0,e.lastError=null;const u=Ui();e.chatRunId=u,e.chatStream="",e.chatStreamStartedAt=o;const p=[...r,...l],m=p.length>0?p.map(v=>{if(v.textContent)return{type:"document",mimeType:v.mimeType||"text/plain",fileName:v.fileName,content:btoa(unescape(encodeURIComponent(v.textContent)))};const w=
|
|
11
|
-
`)}function
|
|
10
|
+
${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text:s});for(const v of r)a.push({type:"image",source:{type:"base64",media_type:v.mimeType,data:v.dataUrl}});e.chatMessages=[...e.chatMessages,{role:"user",content:a,timestamp:o}],e.chatSending=!0,e.lastError=null;const u=Ui();e.chatRunId=u,e.chatStream="",e.chatStreamStartedAt=o;const p=[...r,...l],m=p.length>0?p.map(v=>{if(v.textContent)return{type:"document",mimeType:v.mimeType||"text/plain",fileName:v.fileName,content:btoa(unescape(encodeURIComponent(v.textContent)))};const w=zu(v.dataUrl);return w?{type:v.fileName?"document":"image",mimeType:w.mimeType,fileName:v.fileName,content:w.content}:null}).filter(v=>v!==null):void 0;try{return await e.client.request("chat.send",{sessionKey:e.sessionKey,message:s,deliver:!1,idempotencyKey:u,attachments:m}),!0}catch(v){const w=String(v);return e.chatRunId=null,e.chatStream=null,e.chatStreamStartedAt=null,e.lastError=w,e.chatMessages=[...e.chatMessages,{role:"assistant",content:[{type:"text",text:"Error: "+w}],timestamp:Date.now()}],!1}finally{e.chatSending=!1}}async function Ua(e){if(!e.client||!e.connected)return!1;const t=e.chatRunId;try{return await e.client.request("chat.abort",t?{sessionKey:e.sessionKey,runId:t}:{sessionKey:e.sessionKey}),!0}catch(n){return e.lastError=String(n),!1}}function Wa(e,t){if(!t||t.sessionKey!==e.sessionKey)return null;if(t.runId&&e.chatRunId&&t.runId!==e.chatRunId)return t.state==="final"?"final":null;if(t.state==="block"){const n=jn(t.message);return typeof n=="string"&&n.trim()&&(e.chatMessages=[...e.chatMessages,{role:"assistant",content:[{type:"text",text:n.trim()}],timestamp:Date.now(),filler:!0}]),"block"}else if(t.state==="delta"){const n=jn(t.message);if(typeof n=="string"){if(n.trim()==="NO_REPLY")return null;const s=e.chatStream??"";(!s||n.length>=s.length)&&(e.chatStream=n)}}else t.state==="final"||t.state==="aborted"?(e.chatStream=null,e.chatRunId=null,e.chatStreamStartedAt=null):t.state==="error"&&(e.chatStream=null,e.chatRunId=null,e.chatStreamStartedAt=null,e.lastError=t.errorMessage??"chat error");return t.state}const ju=Object.freeze(Object.defineProperty({__proto__:null,abortChatRun:Ua,handleChatEvent:Wa,loadChatHistory:Ce,sendChatMessage:Fa},Symbol.toStringTag,{value:"Module"}));async function Wi(e){if(!(!e.client||!e.connected)&&!e.sessionsLoading){e.sessionsLoading=!0,e.sessionsError=null;try{const t={includeGlobal:e.sessionsIncludeGlobal??!0,includeUnknown:e.sessionsIncludeUnknown??!1},n=zn(e.sessionsFilterActive??"",0),s=zn(e.sessionsFilterLimit??"",0);n>0&&(t.activeMinutes=n),s>0&&(t.limit=s);const i=await e.client.request("sessions.list",t);i&&(e.sessionsResult=i)}catch(t){e.sessionsError=String(t)}finally{e.sessionsLoading=!1}}}async function wn(e,t,n){if(!e.client||!e.connected)return;const s={key:t};"label"in n&&(s.label=n.label),"thinkingLevel"in n&&(s.thinkingLevel=n.thinkingLevel),"verboseLevel"in n&&(s.verboseLevel=n.verboseLevel),"reasoningLevel"in n&&(s.reasoningLevel=n.reasoningLevel),"model"in n&&(s.model=n.model),"fillerEnabled"in n&&(s.fillerEnabled=n.fillerEnabled);try{await e.client.request("sessions.patch",s),await Wi(e)}catch(i){e.sessionsError=String(i)}}const lr=50,Hu=80,qu=12e4;function Gu(e){if(!e||typeof e!="object")return null;const t=e;if(typeof t.text=="string")return t.text;const n=t.content;if(!Array.isArray(n))return null;const s=n.map(i=>{if(!i||typeof i!="object")return null;const o=i;return o.type==="text"&&typeof o.text=="string"?o.text:null}).filter(i=>!!i);return s.length===0?null:s.join(`
|
|
11
|
+
`)}function cr(e){if(e==null)return null;if(typeof e=="number"||typeof e=="boolean")return String(e);const t=Gu(e);let n;if(typeof e=="string")n=e;else if(t)n=t;else try{n=JSON.stringify(e,null,2)}catch{n=String(e)}const s=Ia(n,qu);return s.truncated?`${s.text}
|
|
12
12
|
|
|
13
|
-
… truncated (${s.total} chars, showing first ${s.text.length}).`:s.text}function
|
|
13
|
+
… truncated (${s.total} chars, showing first ${s.text.length}).`:s.text}function Vu(e){const t=[];return t.push({type:"toolcall",name:e.name,arguments:e.args??{}}),e.output&&t.push({type:"toolresult",name:e.name,text:e.output}),{role:"assistant",toolCallId:e.toolCallId,runId:e.runId,content:t,timestamp:e.startedAt}}function Yu(e){if(e.toolStreamOrder.length<=lr)return;const t=e.toolStreamOrder.length-lr,n=e.toolStreamOrder.splice(0,t);for(const s of n)e.toolStreamById.delete(s)}function Qu(e){e.chatToolMessages=e.toolStreamOrder.map(t=>e.toolStreamById.get(t)?.message).filter(t=>!!t)}function li(e){e.toolStreamSyncTimer!=null&&(clearTimeout(e.toolStreamSyncTimer),e.toolStreamSyncTimer=null),Qu(e)}function Xu(e,t=!1){if(t){li(e);return}e.toolStreamSyncTimer==null&&(e.toolStreamSyncTimer=window.setTimeout(()=>li(e),Hu))}function Ki(e){e.toolStreamById.clear(),e.toolStreamOrder=[],e.chatToolMessages=[],li(e)}const Zu=5e3;function Ju(e,t){const n=t.data??{},s=typeof n.phase=="string"?n.phase:"";e.compactionClearTimer!=null&&(window.clearTimeout(e.compactionClearTimer),e.compactionClearTimer=null),s==="start"?e.compactionStatus={active:!0,startedAt:Date.now(),completedAt:null}:s==="end"&&(e.compactionStatus={active:!1,startedAt:e.compactionStatus?.startedAt??null,completedAt:Date.now()},e.compactionClearTimer=window.setTimeout(()=>{e.compactionStatus=null,e.compactionClearTimer=null},Zu))}function ed(e,t){if(!t)return;if(t.stream==="compaction"){Ju(e,t);return}if(t.stream!=="tool")return;const n=typeof t.sessionKey=="string"?t.sessionKey:void 0;if(n&&n!==e.sessionKey||!n&&e.chatRunId&&t.runId!==e.chatRunId||e.chatRunId&&t.runId!==e.chatRunId||!e.chatRunId)return;const s=t.data??{},i=typeof s.toolCallId=="string"?s.toolCallId:"";if(!i)return;const o=typeof s.name=="string"?s.name:"tool",r=typeof s.phase=="string"?s.phase:"",l=r==="start"?s.args:void 0,a=r==="update"?cr(s.partialResult):r==="result"?cr(s.result):void 0,c=Date.now();let u=e.toolStreamById.get(i);u?(u.name=o,l!==void 0&&(u.args=l),a!==void 0&&(u.output=a),u.updatedAt=c):(u={toolCallId:i,runId:t.runId,sessionKey:n,name:o,args:l,output:a,startedAt:typeof t.ts=="number"?t.ts:c,updatedAt:c,message:{}},e.toolStreamById.set(i,u),e.toolStreamOrder.push(i)),u.message=Vu(u),Yu(e),Xu(e,r==="result")}function en(e,t=!1){e.chatScrollFrame&&cancelAnimationFrame(e.chatScrollFrame),e.chatScrollTimeout!=null&&(clearTimeout(e.chatScrollTimeout),e.chatScrollTimeout=null);const n=()=>{const s=e.querySelector(".chat-thread");if(s){const i=getComputedStyle(s).overflowY;if(i==="auto"||i==="scroll"||s.scrollHeight-s.clientHeight>1)return s}return document.scrollingElement??document.documentElement};e.updateComplete.then(()=>{e.chatScrollFrame=requestAnimationFrame(()=>{e.chatScrollFrame=null;const s=n();if(!s)return;const i=s.scrollHeight-s.scrollTop-s.clientHeight;if(!(t||e.chatUserNearBottom||i<200))return;t&&(e.chatHasAutoScrolled=!0),s.scrollTop=s.scrollHeight,e.chatUserNearBottom=!0;const r=t?150:120;e.chatScrollTimeout=window.setTimeout(()=>{e.chatScrollTimeout=null;const l=n();if(!l)return;const a=l.scrollHeight-l.scrollTop-l.clientHeight;(t||e.chatUserNearBottom||a<200)&&(l.scrollTop=l.scrollHeight,e.chatUserNearBottom=!0)},r)})})}function Ka(e,t=!1){e.logsScrollFrame&&cancelAnimationFrame(e.logsScrollFrame),e.updateComplete.then(()=>{e.logsScrollFrame=requestAnimationFrame(()=>{e.logsScrollFrame=null;const n=e.querySelector(".log-stream");!n||!(t||n.scrollTop<80)||(n.scrollTop=0)})})}function td(e,t){const n=t.currentTarget;if(!n)return;const s=n.scrollHeight-n.scrollTop-n.clientHeight;e.chatUserNearBottom=s<200}function nd(e,t){const n=t.currentTarget;n&&(e.logsAtBottom=n.scrollTop<80)}function sd(e,t){const n=t.currentTarget;n&&(e.logsAtBottom=n.scrollTop<80)}function id(e){e.chatHasAutoScrolled=!1,e.chatUserNearBottom=!0}function od(e,t){if(e.length===0)return;const n=new Blob([`${e.join(`
|
|
14
14
|
`)}
|
|
15
|
-
`],{type:"text/plain"}),s=URL.createObjectURL(n),i=document.createElement("a"),o=new Date().toISOString().slice(0,19).replace(/[:T]/g,"-");i.href=s,i.download=`taskmaster-logs-${t}-${o}.log`,i.click(),URL.revokeObjectURL(s)}function
|
|
15
|
+
`],{type:"text/plain"}),s=URL.createObjectURL(n),i=document.createElement("a"),o=new Date().toISOString().slice(0,19).replace(/[:T]/g,"-");i.href=s,i.download=`taskmaster-logs-${t}-${o}.log`,i.click(),URL.revokeObjectURL(s)}function rd(e,t){if(e.length===0)return;const n=new Blob([`${e.join(`
|
|
16
16
|
`)}
|
|
17
|
-
`],{type:"text/plain"}),s=URL.createObjectURL(n),i=document.createElement("a"),o=new Date().toISOString().slice(0,19).replace(/[:T]/g,"-");i.href=s,i.download=`taskmaster-session-logs-${t}-${o}.log`,i.click(),URL.revokeObjectURL(s)}function
|
|
18
|
-
`}function Ua(e,t,n){if(t.length===0)return;let s=e;for(let o=0;o<t.length-1;o+=1){const r=t[o],l=t[o+1];if(typeof r=="number"){if(!Array.isArray(s))return;s[r]==null&&(s[r]=typeof l=="number"?[]:{}),s=s[r]}else{if(typeof s!="object"||s==null)return;const a=s;a[r]==null&&(a[r]=typeof l=="number"?[]:{}),s=a[r]}}const i=t[t.length-1];if(typeof i=="number"){Array.isArray(s)&&(s[i]=n);return}typeof s=="object"&&s!=null&&(s[i]=n)}async function we(e){if(!(!e.client||!e.connected)){e.configLoading=!0,e.lastError=null;try{const t=await e.client.request("config.get",{});od(e,t)}catch(t){e.lastError=String(t)}finally{e.configLoading=!1}}}async function Wa(e){if(!(!e.client||!e.connected)&&!e.configSchemaLoading){e.configSchemaLoading=!0;try{const t=await e.client.request("config.schema",{});id(e,t)}catch(t){e.lastError=String(t)}finally{e.configSchemaLoading=!1}}}function id(e,t){e.configSchema=t.schema??null,e.configUiHints=t.uiHints??{},e.configSchemaVersion=t.version??null}function od(e,t){e.configSnapshot=t;const n=typeof t.raw=="string"?t.raw:t.config&&typeof t.config=="object"?Qe(t.config):e.configRaw;!e.configFormDirty||e.configFormMode==="raw"?e.configRaw=n:e.configForm?e.configRaw=Qe(e.configForm):e.configRaw=n,e.configValid=typeof t.valid=="boolean"?t.valid:null,e.configIssues=Array.isArray(t.issues)?t.issues:[],e.configFormDirty||(e.configForm=Oe(t.config??{}),e.configFormOriginal=Oe(t.config??{}),e.configRawOriginal=n)}async function rd(e){if(!(!e.client||!e.connected)){e.configSaving=!0,e.lastError=null;try{const t=e.configFormMode==="form"&&e.configForm?Qe(e.configForm):e.configRaw,n=e.configSnapshot?.hash;if(!n){e.lastError="Config hash missing; reload and retry.";return}await e.client.request("config.set",{raw:t,baseHash:n}),e.configFormDirty=!1,await we(e)}catch(t){e.lastError=String(t)}finally{e.configSaving=!1}}}async function tn(e){if(!(!e.client||!e.connected))try{const t=await e.client.request("cron.status",{});e.cronStatus=t}catch(t){e.cronError=String(t)}}async function rs(e){if(!(!e.client||!e.connected)&&!e.cronLoading){e.cronLoading=!0,e.cronError=null;try{const t={includeDisabled:!0};Array.isArray(e.workspaceAgentIds)&&e.workspaceAgentIds.length>0&&(t.agentIds=e.workspaceAgentIds);const n=await e.client.request("cron.list",t);e.cronJobs=Array.isArray(n.jobs)?n.jobs:[]}catch(t){e.cronError=String(t)}finally{e.cronLoading=!1}}}function ad(e){if(e.scheduleKind==="at"){const n=Date.parse(e.scheduleAt);if(!Number.isFinite(n))throw new Error("Invalid run time.");return{kind:"at",atMs:n}}if(e.scheduleKind==="every"){const n=zn(e.everyAmount,0);if(n<=0)throw new Error("Invalid interval amount.");const s=e.everyUnit;return{kind:"every",everyMs:n*(s==="minutes"?6e4:s==="hours"?36e5:864e5)}}const t=e.cronExpr.trim();if(!t)throw new Error("Cron expression required.");return{kind:"cron",expr:t,tz:e.cronTz.trim()||void 0}}function ld(e){if(e.payloadKind==="systemEvent"){const i=e.payloadText.trim();if(!i)throw new Error("System event text required.");return{kind:"systemEvent",text:i}}const t=e.payloadText.trim();if(!t)throw new Error("Agent message required.");const n={kind:"agentTurn",message:t};e.deliver&&(n.deliver=!0),e.channel&&(n.channel=e.channel),e.to.trim()&&(n.to=e.to.trim());const s=zn(e.timeoutSeconds,0);return s>0&&(n.timeoutSeconds=s),n}async function cd(e){if(!(!e.client||!e.connected||e.cronBusy)){e.cronBusy=!0,e.cronError=null;try{const t=ad(e.cronForm),n=ld(e.cronForm),s=e.cronForm.agentId.trim(),i=e.cronForm.accountId?.trim(),o={name:e.cronForm.name.trim(),description:e.cronForm.description.trim()||void 0,agentId:s||void 0,accountId:i||void 0,enabled:e.cronForm.enabled,schedule:t,sessionTarget:e.cronForm.sessionTarget,wakeMode:e.cronForm.wakeMode,payload:n,isolation:e.cronForm.postToMainPrefix.trim()&&e.cronForm.sessionTarget==="isolated"?{postToMainPrefix:e.cronForm.postToMainPrefix.trim()}:void 0};if(!o.name)throw new Error("Name required.");await e.client.request("cron.add",o),e.cronForm={...e.cronForm,name:"",description:"",payloadText:""},await rs(e),await tn(e)}catch(t){e.cronError=String(t)}finally{e.cronBusy=!1}}}async function ud(e,t,n){if(!(!e.client||!e.connected||e.cronBusy)){e.cronBusy=!0,e.cronError=null;try{await e.client.request("cron.update",{id:t.id,patch:{enabled:n}}),await rs(e),await tn(e)}catch(s){e.cronError=String(s)}finally{e.cronBusy=!1}}}async function dd(e,t){if(!(!e.client||!e.connected||e.cronBusy)){e.cronBusy=!0,e.cronError=null;try{await e.client.request("cron.run",{id:t.id,mode:"force"}),await ci(e,t.id)}catch(n){e.cronError=String(n)}finally{e.cronBusy=!1}}}async function pd(e,t){if(!(!e.client||!e.connected||e.cronBusy)){e.cronBusy=!0,e.cronError=null;try{await e.client.request("cron.remove",{id:t.id}),e.cronRunsJobId===t.id&&(e.cronRunsJobId=null,e.cronRuns=[]),await rs(e),await tn(e)}catch(n){e.cronError=String(n)}finally{e.cronBusy=!1}}}async function ci(e,t){if(!(!e.client||!e.connected))try{const n=await e.client.request("cron.runs",{id:t,limit:50});e.cronRunsJobId=t,e.cronRuns=Array.isArray(n.entries)?n.entries:[]}catch(n){e.cronError=String(n)}}async function z(e,t){if(!(!e.client||!e.connected)&&!e.channelsLoading){e.channelsLoading=!0,e.channelsError=null;try{const n=await e.client.request("channels.status",{probe:t,timeoutMs:8e3});e.channelsSnapshot=n,e.channelsLastSuccess=Date.now()}catch(n){e.channelsError=String(n)}finally{e.channelsLoading=!1}}}async function zi(e,t,n){if(!(!e.client||!e.connected||e.whatsappBusy)){e.whatsappBusy=!0,e.whatsappActiveQrAccountId=n??null;try{const s=await e.client.request("web.login.start",{force:t,timeoutMs:3e4,accountId:n});e.whatsappLoginMessage=s.message??null,e.whatsappLoginQrDataUrl=s.qrDataUrl??null,e.whatsappLoginConnected=null}catch(s){e.whatsappLoginMessage=String(s),e.whatsappLoginQrDataUrl=null,e.whatsappLoginConnected=null}finally{e.whatsappBusy=!1}}}async function Ka(e,t){if(!(!e.client||!e.connected||e.whatsappBusy)){e.whatsappBusy=!0;try{const n=await e.client.request("web.login.wait",{timeoutMs:12e4,accountId:t});e.whatsappLoginMessage=n.message??null,e.whatsappLoginConnected=n.connected??null,n.connected&&(e.whatsappLoginQrDataUrl=null,e.whatsappActiveQrAccountId=null,e.whatsappPairedPhone=n.selfPhone??null)}catch(n){e.whatsappLoginMessage=String(n),e.whatsappLoginConnected=null}finally{e.whatsappBusy=!1}}}async function za(e,t){if(!(!e.client||!e.connected||e.whatsappBusy)){e.whatsappBusy=!0;try{await e.client.request("channels.logout",{channel:"whatsapp",accountId:t}),e.whatsappLoginMessage="Logged out.",e.whatsappLoginQrDataUrl=null,e.whatsappLoginConnected=null,e.whatsappActiveQrAccountId=null}catch(n){e.whatsappLoginMessage=String(n)}finally{e.whatsappBusy=!1}}}async function ja(e,t){if(!e.client||!e.connected||e.whatsappAccountSaving)return;const n=t.trim();if(!n){e.whatsappAccountError="Account name is required.";return}const s=n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");if(!s){e.whatsappAccountError="Invalid account name.";return}e.whatsappAccountSaving=!0,e.whatsappAccountError=null;try{const i=await e.client.request("config.get",{});e.configSnapshot=i;const o=Oe(i.config??{});(!o.channels||typeof o.channels!="object")&&(o.channels={});const r=o.channels;(!r.whatsapp||typeof r.whatsapp!="object")&&(r.whatsapp={});const l=r.whatsapp;(!l.accounts||typeof l.accounts!="object")&&(l.accounts={});const a=l.accounts;if(a[s]){e.whatsappAccountError=`Account "${s}" already exists.`;return}a[s]={name:n,provider:"baileys"};const c=i.hash;if(!c){e.whatsappAccountError="Config hash missing; reload and retry.";return}const u=Qe(o);await e.client.request("config.set",{raw:u,baseHash:c}),e.addingWhatsAppAccount=!1,e.newWhatsAppAccountName="",await z(e,!0),await zi(e,!0,s)}catch(i){e.whatsappAccountError=String(i)}finally{e.whatsappAccountSaving=!1}}async function Ha(e,t){if(!(!e.client||!e.connected)&&!e.whatsappAccountSaving){e.whatsappAccountSaving=!0,e.whatsappAccountError=null;try{const n=await e.client.request("config.get",{});e.configSnapshot=n;const s=Oe(n.config??{}),r=s.channels?.whatsapp?.accounts;if(!r){e.whatsappAccountError="No accounts found in config.";return}if(Object.keys(r).length<=1){e.whatsappAccountError="Cannot remove the last account.";return}if(!r[t]){e.whatsappAccountError=`Account "${t}" not found.`;return}try{await e.client.request("channels.logout",{channel:"whatsapp",accountId:t})}catch{}delete r[t],Array.isArray(s.bindings)&&(s.bindings=s.bindings.filter(u=>{const p=u.match;return!p||p.channel!=="whatsapp"?!0:p.accountId!==t}));const a=n.hash;if(!a){e.whatsappAccountError="Config hash missing; reload and retry.";return}const c=Qe(s);await e.client.request("config.set",{raw:c,baseHash:a}),e.whatsappActiveQrAccountId===t&&(e.whatsappActiveQrAccountId=null,e.whatsappLoginQrDataUrl=null,e.whatsappLoginMessage=null),await z(e,!0)}catch(n){e.whatsappAccountError=String(n)}finally{e.whatsappAccountSaving=!1}}}const hd=Object.freeze(Object.defineProperty({__proto__:null,addWhatsAppAccount:ja,loadChannels:z,logoutWhatsApp:za,removeWhatsAppAccount:Ha,startWhatsAppLogin:zi,waitWhatsAppLogin:Ka},Symbol.toStringTag,{value:"Module"}));async function ji(e){if(!(!e.client||!e.connected)&&!e.debugLoading){e.debugLoading=!0;try{const[t,n,s,i]=await Promise.all([e.client.request("status",{}),e.client.request("health",{}),e.client.request("models.list",{}),e.client.request("last-heartbeat",{})]);e.debugStatus=t,e.debugHealth=n;const o=s;e.debugModels=Array.isArray(o?.models)?o?.models:[],e.debugHeartbeat=i}catch(t){e.debugCallError=String(t)}finally{e.debugLoading=!1}}}const fd=2e3,gd=new Set(["trace","debug","info","warn","error","fatal"]);function md(e){if(typeof e!="string")return null;const t=e.trim();if(!t.startsWith("{")||!t.endsWith("}"))return null;try{const n=JSON.parse(t);return!n||typeof n!="object"?null:n}catch{return null}}function yd(e){if(typeof e!="string")return null;const t=e.toLowerCase();return gd.has(t)?t:null}function vd(e){if(!e.trim())return{raw:e,message:e};try{const t=JSON.parse(e),n=t&&typeof t._meta=="object"&&t._meta!==null?t._meta:null,s=typeof t.time=="string"?t.time:typeof n?.date=="string"?n?.date:null,i=yd(n?.logLevelName??n?.level),o=typeof t[0]=="string"?t[0]:typeof n?.name=="string"?n?.name:null,r=md(o);let l=null;r&&(typeof r.subsystem=="string"?l=r.subsystem:typeof r.module=="string"&&(l=r.module)),!l&&o&&o.length<120&&(l=o);let a=null;return typeof t[1]=="string"?a=t[1]:!r&&typeof t[0]=="string"?a=t[0]:typeof t.message=="string"&&(a=t.message),{raw:e,time:s,level:i,subsystem:l,message:a??e,meta:n??void 0}}catch{return{raw:e,message:e}}}async function qt(e,t){if(!(!e.client||!e.connected)&&!(e.logsLoading&&!t?.quiet)){t?.quiet||(e.logsLoading=!0),e.logsError=null;try{const s=await e.client.request("logs.tail",{cursor:t?.reset?void 0:e.logsCursor??void 0,limit:e.logsLimit,maxBytes:e.logsMaxBytes}),o=(Array.isArray(s.lines)?s.lines.filter(l=>typeof l=="string"):[]).map(vd),r=!!(t?.reset||s.reset||e.logsCursor==null);e.logsEntries=r?o:[...e.logsEntries,...o].slice(-fd),typeof s.cursor=="number"&&(e.logsCursor=s.cursor),typeof s.file=="string"&&(e.logsFile=s.file),e.logsTruncated=!!s.truncated,e.logsLastFetchAt=Date.now()}catch(n){e.logsError=String(n)}finally{t?.quiet||(e.logsLoading=!1)}}}const qa={p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n},{p:ee,n:In,Gx:cr,Gy:ur,a:Ns,d:Os,h:bd}=qa,Ye=32,Hi=64,wd=(...e)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...e)},Q=(e="")=>{const t=new Error(e);throw wd(t,Q),t},kd=e=>typeof e=="bigint",Sd=e=>typeof e=="string",Ad=e=>e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array",Be=(e,t,n="")=>{const s=Ad(e),i=e?.length,o=t!==void 0;if(!s||o&&i!==t){const r=n&&`"${n}" `,l=o?` of length ${t}`:"",a=s?`length=${i}`:`type=${typeof e}`;Q(r+"expected Uint8Array"+l+", got "+a)}return e},as=e=>new Uint8Array(e),Ga=e=>Uint8Array.from(e),Va=(e,t)=>e.toString(16).padStart(t,"0"),Qa=e=>Array.from(Be(e)).map(t=>Va(t,2)).join(""),xe={_0:48,_9:57,A:65,F:70,a:97,f:102},dr=e=>{if(e>=xe._0&&e<=xe._9)return e-xe._0;if(e>=xe.A&&e<=xe.F)return e-(xe.A-10);if(e>=xe.a&&e<=xe.f)return e-(xe.a-10)},Ya=e=>{const t="hex invalid";if(!Sd(e))return Q(t);const n=e.length,s=n/2;if(n%2)return Q(t);const i=as(s);for(let o=0,r=0;o<s;o++,r+=2){const l=dr(e.charCodeAt(r)),a=dr(e.charCodeAt(r+1));if(l===void 0||a===void 0)return Q(t);i[o]=l*16+a}return i},Xa=()=>globalThis?.crypto,xd=()=>Xa()?.subtle??Q("crypto.subtle must be defined, consider polyfill"),Zt=(...e)=>{const t=as(e.reduce((s,i)=>s+Be(i).length,0));let n=0;return e.forEach(s=>{t.set(s,n),n+=s.length}),t},$d=(e=Ye)=>Xa().getRandomValues(as(e)),Hn=BigInt,He=(e,t,n,s="bad number: out of range")=>kd(e)&&t<=e&&e<n?e:Q(s),$=(e,t=ee)=>{const n=e%t;return n>=0n?n:t+n},Za=e=>$(e,In),Ed=(e,t)=>{(e===0n||t<=0n)&&Q("no inverse n="+e+" mod="+t);let n=$(e,t),s=t,i=0n,o=1n;for(;n!==0n;){const r=s/n,l=s%n,a=i-o*r;s=n,n=l,i=o,o=a}return s===1n?$(i,t):Q("no inverse")},Td=e=>{const t=nl[e];return typeof t!="function"&&Q("hashes."+e+" not set"),t},Ds=e=>e instanceof ae?e:Q("Point expected"),ui=2n**256n;class ae{static BASE;static ZERO;X;Y;Z;T;constructor(t,n,s,i){const o=ui;this.X=He(t,0n,o),this.Y=He(n,0n,o),this.Z=He(s,1n,o),this.T=He(i,0n,o),Object.freeze(this)}static CURVE(){return qa}static fromAffine(t){return new ae(t.x,t.y,1n,$(t.x*t.y))}static fromBytes(t,n=!1){const s=Os,i=Ga(Be(t,Ye)),o=t[31];i[31]=o&-129;const r=el(i);He(r,0n,n?ui:ee);const a=$(r*r),c=$(a-1n),u=$(s*a+1n);let{isValid:p,value:m}=_d(c,u);p||Q("bad point: y not sqrt");const v=(m&1n)===1n,w=(o&128)!==0;return!n&&m===0n&&w&&Q("bad point: x==0, isLastByteOdd"),w!==v&&(m=$(-m)),new ae(m,r,1n,$(m*r))}static fromHex(t,n){return ae.fromBytes(Ya(t),n)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){const t=Ns,n=Os,s=this;if(s.is0())return Q("bad point: ZERO");const{X:i,Y:o,Z:r,T:l}=s,a=$(i*i),c=$(o*o),u=$(r*r),p=$(u*u),m=$(a*t),v=$(u*$(m+c)),w=$(p+$(n*$(a*c)));if(v!==w)return Q("bad point: equation left != right (1)");const x=$(i*o),_=$(r*l);return x!==_?Q("bad point: equation left != right (2)"):this}equals(t){const{X:n,Y:s,Z:i}=this,{X:o,Y:r,Z:l}=Ds(t),a=$(n*l),c=$(o*i),u=$(s*l),p=$(r*i);return a===c&&u===p}is0(){return this.equals(ft)}negate(){return new ae($(-this.X),this.Y,this.Z,$(-this.T))}double(){const{X:t,Y:n,Z:s}=this,i=Ns,o=$(t*t),r=$(n*n),l=$(2n*$(s*s)),a=$(i*o),c=t+n,u=$($(c*c)-o-r),p=a+r,m=p-l,v=a-r,w=$(u*m),x=$(p*v),_=$(u*v),j=$(m*p);return new ae(w,x,j,_)}add(t){const{X:n,Y:s,Z:i,T:o}=this,{X:r,Y:l,Z:a,T:c}=Ds(t),u=Ns,p=Os,m=$(n*r),v=$(s*l),w=$(o*p*c),x=$(i*a),_=$((n+s)*(r+l)-m-v),j=$(x-w),C=$(x+w),L=$(v-u*m),I=$(_*j),B=$(C*L),ue=$(_*L),it=$(j*C);return new ae(I,B,it,ue)}subtract(t){return this.add(Ds(t).negate())}multiply(t,n=!0){if(!n&&(t===0n||this.is0()))return ft;if(He(t,1n,In),t===1n)return this;if(this.equals(Xe))return Ud(t).p;let s=ft,i=Xe;for(let o=this;t>0n;o=o.double(),t>>=1n)t&1n?s=s.add(o):n&&(i=i.add(o));return s}multiplyUnsafe(t){return this.multiply(t,!1)}toAffine(){const{X:t,Y:n,Z:s}=this;if(this.equals(ft))return{x:0n,y:1n};const i=Ed(s,ee);$(s*i)!==1n&&Q("invalid inverse");const o=$(t*i),r=$(n*i);return{x:o,y:r}}toBytes(){const{x:t,y:n}=this.assertValidity().toAffine(),s=Ja(n);return s[31]|=t&1n?128:0,s}toHex(){return Qa(this.toBytes())}clearCofactor(){return this.multiply(Hn(bd),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let t=this.multiply(In/2n,!1).double();return In%2n&&(t=t.add(this)),t.is0()}}const Xe=new ae(cr,ur,1n,$(cr*ur)),ft=new ae(0n,1n,1n,0n);ae.BASE=Xe;ae.ZERO=ft;const Ja=e=>Ya(Va(He(e,0n,ui),Hi)).reverse(),el=e=>Hn("0x"+Qa(Ga(Be(e)).reverse())),ye=(e,t)=>{let n=e;for(;t-- >0n;)n*=n,n%=ee;return n},Cd=e=>{const n=e*e%ee*e%ee,s=ye(n,2n)*n%ee,i=ye(s,1n)*e%ee,o=ye(i,5n)*i%ee,r=ye(o,10n)*o%ee,l=ye(r,20n)*r%ee,a=ye(l,40n)*l%ee,c=ye(a,80n)*a%ee,u=ye(c,80n)*a%ee,p=ye(u,10n)*o%ee;return{pow_p_5_8:ye(p,2n)*e%ee,b2:n}},pr=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,_d=(e,t)=>{const n=$(t*t*t),s=$(n*n*t),i=Cd(e*s).pow_p_5_8;let o=$(e*n*i);const r=$(t*o*o),l=o,a=$(o*pr),c=r===e,u=r===$(-e),p=r===$(-e*pr);return c&&(o=l),(u||p)&&(o=a),($(o)&1n)===1n&&(o=$(-o)),{isValid:c||u,value:o}},di=e=>Za(el(e)),qi=(...e)=>nl.sha512Async(Zt(...e)),Md=(...e)=>Td("sha512")(Zt(...e)),tl=e=>{const t=e.slice(0,Ye);t[0]&=248,t[31]&=127,t[31]|=64;const n=e.slice(Ye,Hi),s=di(t),i=Xe.multiply(s),o=i.toBytes();return{head:t,prefix:n,scalar:s,point:i,pointBytes:o}},Gi=e=>qi(Be(e,Ye)).then(tl),Pd=e=>tl(Md(Be(e,Ye))),Ld=e=>Gi(e).then(t=>t.pointBytes),Rd=e=>qi(e.hashable).then(e.finish),Id=(e,t,n)=>{const{pointBytes:s,scalar:i}=e,o=di(t),r=Xe.multiply(o).toBytes();return{hashable:Zt(r,s,n),finish:c=>{const u=Za(o+di(c)*i);return Be(Zt(r,Ja(u)),Hi)}}},Nd=async(e,t)=>{const n=Be(e),s=await Gi(t),i=await qi(s.prefix,n);return Rd(Id(s,i,n))},nl={sha512Async:async e=>{const t=xd(),n=Zt(e);return as(await t.digest("SHA-512",n.buffer))},sha512:void 0},Od=(e=$d(Ye))=>e,Dd={getExtendedPublicKeyAsync:Gi,getExtendedPublicKey:Pd,randomSecretKey:Od},qn=8,Bd=256,sl=Math.ceil(Bd/qn)+1,pi=2**(qn-1),Fd=()=>{const e=[];let t=Xe,n=t;for(let s=0;s<sl;s++){n=t,e.push(n);for(let i=1;i<pi;i++)n=n.add(t),e.push(n);t=n.double()}return e};let hr;const fr=(e,t)=>{const n=t.negate();return e?n:t},Ud=e=>{const t=hr||(hr=Fd());let n=ft,s=Xe;const i=2**qn,o=i,r=Hn(i-1),l=Hn(qn);for(let a=0;a<sl;a++){let c=Number(e&r);e>>=l,c>pi&&(c-=o,e+=1n);const u=a*pi,p=u,m=u+Math.abs(c)-1,v=a%2!==0,w=c<0;c===0?s=s.add(fr(v,t[p])):n=n.add(fr(w,t[m]))}return e!==0n&&Q("invalid wnaf"),{p:n,f:s}},Bs="taskmaster-device-identity-v1";function hi(e){let t="";for(const n of e)t+=String.fromCharCode(n);return btoa(t).replaceAll("+","-").replaceAll("/","_").replace(/=+$/g,"")}function il(e){const t=e.replaceAll("-","+").replaceAll("_","/"),n=t+"=".repeat((4-t.length%4)%4),s=atob(n),i=new Uint8Array(s.length);for(let o=0;o<s.length;o+=1)i[o]=s.charCodeAt(o);return i}function Wd(e){return Array.from(e).map(t=>t.toString(16).padStart(2,"0")).join("")}async function ol(e){const t=await crypto.subtle.digest("SHA-256",e);return Wd(new Uint8Array(t))}async function Kd(){const e=Dd.randomSecretKey(),t=await Ld(e);return{deviceId:await ol(t),publicKey:hi(t),privateKey:hi(e)}}async function zd(){try{const n=localStorage.getItem(Bs);if(n){const s=JSON.parse(n);if(s?.version===1&&typeof s.deviceId=="string"&&typeof s.publicKey=="string"&&typeof s.privateKey=="string"){const i=await ol(il(s.publicKey));if(i!==s.deviceId){const o={...s,deviceId:i};return localStorage.setItem(Bs,JSON.stringify(o)),{deviceId:i,publicKey:s.publicKey,privateKey:s.privateKey}}return{deviceId:s.deviceId,publicKey:s.publicKey,privateKey:s.privateKey}}}}catch{}const e=await Kd(),t={version:1,deviceId:e.deviceId,publicKey:e.publicKey,privateKey:e.privateKey,createdAtMs:Date.now()};return localStorage.setItem(Bs,JSON.stringify(t)),e}async function jd(e,t){const n=il(e),s=new TextEncoder().encode(t),i=await Nd(s,n);return hi(i)}const rl="taskmaster.device.auth.v1";function Vi(e){return e.trim()}function Hd(e){if(!Array.isArray(e))return[];const t=new Set;for(const n of e){const s=n.trim();s&&t.add(s)}return[...t].sort()}function Qi(){try{const e=window.localStorage.getItem(rl);if(!e)return null;const t=JSON.parse(e);return!t||t.version!==1||!t.deviceId||typeof t.deviceId!="string"||!t.tokens||typeof t.tokens!="object"?null:t}catch{return null}}function al(e){try{window.localStorage.setItem(rl,JSON.stringify(e))}catch{}}function qd(e){const t=Qi();if(!t||t.deviceId!==e.deviceId)return null;const n=Vi(e.role),s=t.tokens[n];return!s||typeof s.token!="string"?null:s}function Gd(e){const t=Vi(e.role),n={version:1,deviceId:e.deviceId,tokens:{}},s=Qi();s&&s.deviceId===e.deviceId&&(n.tokens={...s.tokens});const i={token:e.token,role:t,scopes:Hd(e.scopes),updatedAtMs:Date.now()};return n.tokens[t]=i,al(n),i}function Vd(e){const t=Qi();if(!t||t.deviceId!==e.deviceId)return;const n=Vi(e.role);if(!t.tokens[n])return;const s={...t,tokens:{...t.tokens}};delete s.tokens[n],al(s)}async function Yi(e,t){if(!(!e.client||!e.connected)&&!e.devicesLoading){e.devicesLoading=!0,t?.quiet||(e.devicesError=null);try{const n=await e.client.request("device.pair.list",{});e.devicesList={pending:Array.isArray(n?.pending)?n.pending:[],paired:Array.isArray(n?.paired)?n.paired:[]}}catch(n){t?.quiet||(e.devicesError=String(n))}finally{e.devicesLoading=!1}}}async function Xi(e,t){if(!(!e.client||!e.connected)&&!e.nodesLoading){e.nodesLoading=!0,t?.quiet||(e.lastError=null);try{const n=await e.client.request("node.list",{});e.nodes=Array.isArray(n.nodes)?n.nodes:[]}catch(n){t?.quiet||(e.lastError=String(n))}finally{e.nodesLoading=!1}}}function Qd(e){return{method:"exec.approvals.get",params:{}}}async function Yd(e,t){if(!(!e.client||!e.connected)&&!e.execApprovalsLoading){e.execApprovalsLoading=!0,e.lastError=null;try{const n=Qd(t);if(!n){e.lastError="Select a node before loading exec approvals.";return}const s=await e.client.request(n.method,n.params);Xd(e,s)}catch(n){e.lastError=String(n)}finally{e.execApprovalsLoading=!1}}}function Xd(e,t){e.execApprovalsSnapshot=t,e.execApprovalsDirty||(e.execApprovalsForm=Oe(t.file??{}))}async function ll(e){if(!(!e.client||!e.connected)&&!e.presenceLoading){e.presenceLoading=!0,e.presenceError=null,e.presenceStatus=null;try{const t=await e.client.request("system-presence",{});Array.isArray(t)?(e.presenceEntries=t,e.presenceStatus=t.length===0?"No instances yet.":null):(e.presenceEntries=[],e.presenceStatus="No presence payload.")}catch(t){e.presenceError=String(t)}finally{e.presenceLoading=!1}}}function bt(e,t,n){if(!t.trim())return;const s={...e.skillMessages};n?s[t]=n:delete s[t],e.skillMessages=s}function ls(e){return e instanceof Error?e.message:String(e)}async function wt(e,t){if(t?.clearMessages&&Object.keys(e.skillMessages).length>0&&(e.skillMessages={}),!(!e.client||!e.connected)&&!e.skillsLoading){e.skillsLoading=!0,e.skillsError=null;try{const n=await e.client.request("skills.status",{});n&&(e.skillsReport=n)}catch(n){e.skillsError=ls(n)}finally{e.skillsLoading=!1}}}function Zd(e,t,n){e.skillEdits={...e.skillEdits,[t]:n}}async function Jd(e,t,n){if(!(!e.client||!e.connected)){e.skillsBusyKey=t,e.skillsError=null;try{await e.client.request("skills.update",{skillKey:t,enabled:n}),await wt(e),bt(e,t,{kind:"success",message:n?"Skill enabled":"Skill disabled"})}catch(s){const i=ls(s);e.skillsError=i,bt(e,t,{kind:"error",message:i})}finally{e.skillsBusyKey=null}}}async function ep(e,t){if(!(!e.client||!e.connected)){e.skillsBusyKey=t,e.skillsError=null;try{const n=e.skillEdits[t]??"";await e.client.request("skills.update",{skillKey:t,apiKey:n}),await wt(e),bt(e,t,{kind:"success",message:"API key saved"})}catch(n){const s=ls(n);e.skillsError=s,bt(e,t,{kind:"error",message:s})}finally{e.skillsBusyKey=null}}}async function tp(e,t,n,s){if(!(!e.client||!e.connected)){e.skillsBusyKey=t,e.skillsError=null;try{const i=await e.client.request("skills.install",{name:n,installId:s,timeoutMs:12e4});await wt(e),bt(e,t,{kind:"success",message:i?.message??"Installed"})}catch(i){const o=ls(i);e.skillsError=o,bt(e,t,{kind:"error",message:o})}finally{e.skillsBusyKey=null}}}const cl={overview:"/overview",channels:"/channels",instances:"/instances",cron:"/cron",skills:"/skills",nodes:"/nodes",chat:"/chat",admins:"/admins",config:"/config",debug:"/debug",logs:"/logs"},ul=new Map(Object.entries(cl).map(([e,t])=>[t,e]));function cs(e){if(!e)return"";let t=e.trim();return t.startsWith("/")||(t=`/${t}`),t==="/"?"":(t.endsWith("/")&&(t=t.slice(0,-1)),t)}function Jt(e){if(!e)return"/";let t=e.trim();return t.startsWith("/")||(t=`/${t}`),t.length>1&&t.endsWith("/")&&(t=t.slice(0,-1)),t}function np(e,t=""){const n=cs(t),s=cl[e];return n?`${n}${s}`:s}function dl(e,t=""){const n=cs(t);let s=e||"/";n&&(s===n?s="/":s.startsWith(`${n}/`)&&(s=s.slice(n.length)));let i=Jt(s).toLowerCase();return i.endsWith("/index.html")&&(i="/"),i==="/"?"chat":ul.get(i)??null}function sp(e){let t=Jt(e);if(t.endsWith("/index.html")&&(t=Jt(t.slice(0,-11))),t==="/")return"";const n=t.split("/").filter(Boolean);if(n.length===0)return"";for(let s=0;s<n.length;s++){const i=`/${n.slice(s).join("/")}`.toLowerCase();if(ul.has(i)){const o=n.slice(0,s);return o.length?`/${o.join("/")}`:""}}return`/${n.join("/")}`}function ip(){return typeof window>"u"||typeof window.matchMedia!="function"||window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function Zi(e){return e==="system"?ip():e}const kn=e=>Number.isNaN(e)?.5:e<=0?0:e>=1?1:e,op=()=>typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches??!1,Sn=e=>{e.classList.remove("theme-transition"),e.style.removeProperty("--theme-switch-x"),e.style.removeProperty("--theme-switch-y")},rp=({nextTheme:e,applyTheme:t,context:n,currentTheme:s})=>{if(s===e)return;const i=globalThis.document??null;if(!i){t();return}const o=i.documentElement,r=i,l=op();if(!!r.startViewTransition&&!l){let c=.5,u=.5;if(n?.pointerClientX!==void 0&&n?.pointerClientY!==void 0&&typeof window<"u")c=kn(n.pointerClientX/window.innerWidth),u=kn(n.pointerClientY/window.innerHeight);else if(n?.element){const p=n.element.getBoundingClientRect();p.width>0&&p.height>0&&typeof window<"u"&&(c=kn((p.left+p.width/2)/window.innerWidth),u=kn((p.top+p.height/2)/window.innerHeight))}o.style.setProperty("--theme-switch-x",`${c*100}%`),o.style.setProperty("--theme-switch-y",`${u*100}%`),o.classList.add("theme-transition");try{const p=r.startViewTransition?.(()=>{t()});p?.finished?p.finished.finally(()=>Sn(o)):Sn(o)}catch{Sn(o),t()}return}t(),Sn(o)},ap=2e3;async function gt(e,t){if(!(!e.client||!e.connected)&&!(e.sessionLogsLoading&&!t?.quiet)){t?.quiet||(e.sessionLogsLoading=!0),e.sessionLogsError=null;try{const s=await e.client.request("sessions.transcript",{cursors:t?.reset?void 0:e.sessionLogsCursors,limit:200,maxBytesPerFile:e.sessionLogsFull?25e4:5e4,...e.sessionLogsFull?{full:!0}:{}}),i=Array.isArray(s.entries)?s.entries:[],o=!!(t?.reset||Object.keys(e.sessionLogsCursors).length===0);e.sessionLogsEntries=o?i:[...e.sessionLogsEntries,...i].slice(-ap),s.cursors&&(e.sessionLogsCursors=s.cursors),Array.isArray(s.agents)&&(e.sessionLogsAgents=s.agents),e.sessionLogsLastFetchAt=Date.now()}catch(n){e.sessionLogsError=String(n)}finally{t?.quiet||(e.sessionLogsLoading=!1)}}}const lp=Object.freeze(Object.defineProperty({__proto__:null,loadSessionLogs:gt},Symbol.toStringTag,{value:"Module"}));function cp(e){e.nodesPollInterval==null&&(e.nodesPollInterval=window.setInterval(()=>{Xi(e,{quiet:!0})},5e3))}function up(e){e.nodesPollInterval!=null&&(clearInterval(e.nodesPollInterval),e.nodesPollInterval=null)}function Ji(e){e.logsPollInterval==null&&(e.logsPollInterval=window.setInterval(()=>{e.tab==="logs"&&qt(e,{quiet:!0})},2e3))}function eo(e){e.logsPollInterval!=null&&(clearInterval(e.logsPollInterval),e.logsPollInterval=null)}function to(e){e.sessionLogsPollInterval==null&&(e.sessionLogsPollInterval=window.setInterval(()=>{e.tab!=="logs"||e.logsSubTab!=="session"||gt(e,{quiet:!0})},2e3))}function no(e){e.sessionLogsPollInterval!=null&&(clearInterval(e.sessionLogsPollInterval),e.sessionLogsPollInterval=null)}function so(e){e.debugPollInterval==null&&(e.debugPollInterval=window.setInterval(()=>{e.tab==="debug"&&ji(e)},3e3))}function io(e){e.debugPollInterval!=null&&(clearInterval(e.debugPollInterval),e.debugPollInterval=null)}function Ie(e,t){const n={...t,lastActiveSessionKey:t.lastActiveSessionKey?.trim()||t.sessionKey.trim()||"main"};e.settings=n,ku(n),t.theme!==e.theme&&(e.theme=t.theme,us(e,Zi(t.theme))),e.applySessionKey=e.settings.lastActiveSessionKey}function pl(e,t){const n=t.trim();n&&e.settings.lastActiveSessionKey!==n&&Ie(e,{...e.settings,lastActiveSessionKey:n})}function dp(e){if(!window.location.search)return;const t=new URLSearchParams(window.location.search),n=t.get("token"),s=t.get("password"),i=t.get("session"),o=t.get("gatewayUrl");let r=!1;if(n!=null){const a=n.trim();a&&a!==e.settings.token&&Ie(e,{...e.settings,token:a}),t.delete("token"),r=!0}if(s!=null){const a=s.trim();a&&(e.password=a),t.delete("password"),r=!0}if(i!=null){const a=i.trim();a&&(e.sessionKey=a,Ie(e,{...e.settings,sessionKey:a,lastActiveSessionKey:a}))}if(o!=null){const a=o.trim();a&&a!==e.settings.gatewayUrl&&Ie(e,{...e.settings,gatewayUrl:a}),t.delete("gatewayUrl"),r=!0}if(!r)return;const l=new URL(window.location.href);l.search=t.toString(),window.history.replaceState({},"",l.toString())}function pp(e,t){e.tab!==t&&(e.tab=t),t==="chat"&&(e.chatHasAutoScrolled=!1),t==="logs"?e.logsSubTab==="session"?to(e):Ji(e):(eo(e),no(e)),t==="debug"?so(e):io(e),oo(e),fl(e,t,!1)}function hp(e,t,n){rp({nextTheme:t,applyTheme:()=>{e.theme=t,Ie(e,{...e.settings,theme:t}),us(e,Zi(t))},context:n,currentTheme:e.theme})}async function oo(e){if(e.tab==="overview"&&await gl(e),e.tab==="channels"&&await wp(e),e.tab==="instances"&&await ll(e),e.tab==="cron"&&await ro(e),e.tab==="skills"&&await wt(e),e.tab==="nodes"&&(await Xi(e),await Yi(e),await we(e),await Yd(e)),e.tab==="chat"&&!e.advancedPage&&!e.chatPage&&(await $p(e),en(e,!e.chatHasAutoScrolled)),e.tab==="config"&&(await Wa(e),await we(e)),e.tab==="debug"&&(await ji(e),e.eventLog=e.eventLogBuffer),e.tab==="logs"){if(e.logsAtBottom=!0,e.logsSubTab==="session"){const{loadSessionLogs:n}=await $e(async()=>{const{loadSessionLogs:s}=await Promise.resolve().then(()=>lp);return{loadSessionLogs:s}},void 0,import.meta.url);await n(e,{reset:!0})}else await qt(e,{reset:!0});Fa(e,!0)}}function fp(){if(typeof window>"u")return"";const e=window.__TASKMASTER_CONTROL_UI_BASE_PATH__;return typeof e=="string"&&e.trim()?cs(e):sp(window.location.pathname)}function gp(e){e.theme=e.settings.theme??"system",us(e,Zi(e.theme))}function us(e,t){if(e.themeResolved=t,typeof document>"u")return;const n=document.documentElement;n.dataset.theme=t,n.style.colorScheme=t}function mp(e){if(typeof window>"u"||typeof window.matchMedia!="function")return;if(e.themeMedia=window.matchMedia("(prefers-color-scheme: dark)"),e.themeMediaHandler=n=>{e.theme==="system"&&us(e,n.matches?"dark":"light")},typeof e.themeMedia.addEventListener=="function"){e.themeMedia.addEventListener("change",e.themeMediaHandler);return}e.themeMedia.addListener(e.themeMediaHandler)}function yp(e){if(!e.themeMedia||!e.themeMediaHandler)return;if(typeof e.themeMedia.removeEventListener=="function"){e.themeMedia.removeEventListener("change",e.themeMediaHandler);return}e.themeMedia.removeListener(e.themeMediaHandler),e.themeMedia=null,e.themeMediaHandler=null}function vp(e,t){if(typeof window>"u")return;const n=dl(window.location.pathname,e.basePath)??"chat";hl(e,n),fl(e,n,t)}function bp(e){if(typeof window>"u")return;const t=dl(window.location.pathname,e.basePath);if(!t)return;const s=new URL(window.location.href).searchParams.get("session")?.trim();s&&(e.sessionKey=s,Ie(e,{...e.settings,sessionKey:s,lastActiveSessionKey:s})),hl(e,t)}function hl(e,t){e.tab!==t&&(e.tab=t),t==="chat"&&(e.chatHasAutoScrolled=!1),t==="logs"?e.logsSubTab==="session"?to(e):Ji(e):(eo(e),no(e)),t==="debug"?so(e):io(e),e.connected&&oo(e)}function fl(e,t,n){if(typeof window>"u")return;const s=Jt(np(t,e.basePath)),i=Jt(window.location.pathname),o=new URL(window.location.href);t==="chat"&&e.sessionKey?o.searchParams.set("session",e.sessionKey):o.searchParams.delete("session"),i!==s&&(o.pathname=s),n?window.history.replaceState({},"",o.toString()):window.history.pushState({},"",o.toString())}async function gl(e){await Promise.all([z(e,!1),ll(e),Wi(e),tn(e),ji(e)])}async function wp(e){await Promise.all([z(e,!0),Wa(e),we(e)])}async function ro(e){await Promise.all([z(e,!1),tn(e),rs(e)])}function ml(e){return e.chatSending||!!e.chatRunId}function kp(e){const t=e.trim();if(!t)return!1;const n=t.toLowerCase();return n==="/stop"?!0:n==="stop"||n==="esc"||n==="abort"||n==="wait"||n==="exit"}async function yl(e){e.connected&&(e.chatMessage="",await Da(e))}function Sp(e,t,n){const s=t.trim(),i=!!(n&&n.length>0);!s&&!i||(e.chatQueue=[...e.chatQueue,{id:Ui(),text:s,createdAt:Date.now(),attachments:i?n?.map(o=>({...o})):void 0}],en(e))}async function vl(e,t,n){Ki(e);const s=await Oa(e,t,n?.attachments);return!s&&n?.previousDraft!=null&&(e.chatMessage=n.previousDraft),!s&&n?.previousAttachments&&(e.chatAttachments=n.previousAttachments),s&&pl(e,e.sessionKey),s&&n?.restoreDraft&&n.previousDraft?.trim()&&(e.chatMessage=n.previousDraft),s&&n?.restoreAttachments&&n.previousAttachments?.length&&(e.chatAttachments=n.previousAttachments),en(e),s&&!e.chatRunId&&bl(e),s}async function bl(e){if(!e.connected||ml(e))return;const[t,...n]=e.chatQueue;if(!t)return;e.chatQueue=n,await vl(e,t.text,{attachments:t.attachments})||(e.chatQueue=[t,...e.chatQueue])}function Ap(e,t){e.chatQueue=e.chatQueue.filter(n=>n.id!==t)}async function xp(e,t,n){if(!e.connected)return;const s=e.chatMessage,i=(t??e.chatMessage).trim(),o=e.chatAttachments??[],r=t==null?o:[],l=r.length>0;if(!(!i&&!l)){if(kp(i)){await yl(e);return}if(t==null&&(e.chatMessage="",e.chatAttachments=[]),ml(e)){Sp(e,i,r);return}await vl(e,i,{previousDraft:t==null?s:void 0,restoreDraft:!!(t&&n?.restoreDraft),attachments:l?r:void 0,previousAttachments:t==null?o:void 0,restoreAttachments:!!(t&&n?.restoreDraft)})}}async function $p(e){await Promise.all([Ce(e),Wi(e),fi(e)]),en(e,!0)}const Ep=bl;function Tp(e){const t=Ca(e.sessionKey);return t?.agentId?t.agentId:e.hello?.snapshot?.sessionDefaults?.defaultAgentId?.trim()||"main"}function Cp(e,t){const n=cs(e),s=encodeURIComponent(t);return n?`${n}/avatar/${s}?meta=1`:`/avatar/${s}?meta=1`}async function fi(e){if(!e.connected){e.chatAvatarUrl=null;return}const t=Tp(e);if(!t){e.chatAvatarUrl=null;return}e.chatAvatarUrl=null;const n=Cp(e.basePath,t);try{const s=await fetch(n,{method:"GET"});if(!s.ok){e.chatAvatarUrl=null;return}const i=await s.json(),o=typeof i.avatarUrl=="string"?i.avatarUrl.trim():"";e.chatAvatarUrl=o||null}catch{e.chatAvatarUrl=null}}const N={messageSquare:d`<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>`,barChart:d`<svg viewBox="0 0 24 24"><line x1="12" x2="12" y1="20" y2="10"/><line x1="18" x2="18" y1="20" y2="4"/><line x1="6" x2="6" y1="20" y2="16"/></svg>`,link:d`<svg viewBox="0 0 24 24"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg>`,radio:d`<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="2"/><path d="M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"/></svg>`,fileText:d`<svg viewBox="0 0 24 24"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"/><polyline points="14 2 14 8 20 8"/><line x1="16" x2="8" y1="13" y2="13"/><line x1="16" x2="8" y1="17" y2="17"/><line x1="10" x2="8" y1="9" y2="9"/></svg>`,zap:d`<svg viewBox="0 0 24 24"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>`,monitor:d`<svg viewBox="0 0 24 24"><rect width="20" height="14" x="2" y="3" rx="2"/><line x1="8" x2="16" y1="21" y2="21"/><line x1="12" x2="12" y1="17" y2="21"/></svg>`,settings:d`<svg viewBox="0 0 24 24"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></svg>`,bug:d`<svg viewBox="0 0 24 24"><path d="m8 2 1.88 1.88"/><path d="M14.12 3.88 16 2"/><path d="M9 7.13v-1a3.003 3.003 0 1 1 6 0v1"/><path d="M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6"/><path d="M12 20v-9"/><path d="M6.53 9C4.6 8.8 3 7.1 3 5"/><path d="M6 13H2"/><path d="M3 21c0-2.1 1.7-3.9 3.8-4"/><path d="M20.97 5c0 2.1-1.6 3.8-3.5 4"/><path d="M22 13h-4"/><path d="M17.2 17c2.1.1 3.8 1.9 3.8 4"/></svg>`,scrollText:d`<svg viewBox="0 0 24 24"><path d="M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4"/><path d="M19 17V5a2 2 0 0 0-2-2H4"/><path d="M15 8h-5"/><path d="M15 12h-5"/></svg>`,folder:d`<svg viewBox="0 0 24 24"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/></svg>`,users:d`<svg viewBox="0 0 24 24"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>`,menu:d`<svg viewBox="0 0 24 24"><line x1="4" x2="20" y1="12" y2="12"/><line x1="4" x2="20" y1="6" y2="6"/><line x1="4" x2="20" y1="18" y2="18"/></svg>`,x:d`<svg viewBox="0 0 24 24"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>`,check:d`<svg viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></svg>`,copy:d`<svg viewBox="0 0 24 24"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>`,search:d`<svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>`,brain:d`<svg viewBox="0 0 24 24"><path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"/><path d="M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"/><path d="M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4"/><path d="M17.599 6.5a3 3 0 0 0 .399-1.375"/><path d="M6.003 5.125A3 3 0 0 0 6.401 6.5"/><path d="M3.477 10.896a4 4 0 0 1 .585-.396"/><path d="M19.938 10.5a4 4 0 0 1 .585.396"/><path d="M6 18a4 4 0 0 1-1.967-.516"/><path d="M19.967 17.484A4 4 0 0 1 18 18"/></svg>`,book:d`<svg viewBox="0 0 24 24"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20"/></svg>`,loader:d`<svg viewBox="0 0 24 24"><path d="M12 2v4"/><path d="m16.2 7.8 2.9-2.9"/><path d="M18 12h4"/><path d="m16.2 16.2 2.9 2.9"/><path d="M12 18v4"/><path d="m4.9 19.1 2.9-2.9"/><path d="M2 12h4"/><path d="m4.9 4.9 2.9 2.9"/></svg>`,rotateCw:d`<svg viewBox="0 0 24 24"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/></svg>`,download:d`<svg viewBox="0 0 24 24"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/></svg>`,wrench:d`<svg viewBox="0 0 24 24"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg>`,fileCode:d`<svg viewBox="0 0 24 24"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"/><polyline points="14 2 14 8 20 8"/><path d="m10 13-2 2 2 2"/><path d="m14 17 2-2-2-2"/></svg>`,edit:d`<svg viewBox="0 0 24 24"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/></svg>`,penLine:d`<svg viewBox="0 0 24 24"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"/></svg>`,paperclip:d`<svg viewBox="0 0 24 24"><path d="m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48"/></svg>`,globe:d`<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"/><path d="M2 12h20"/></svg>`,image:d`<svg viewBox="0 0 24 24"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"/></svg>`,smartphone:d`<svg viewBox="0 0 24 24"><rect width="14" height="20" x="5" y="2" rx="2" ry="2"/><path d="M12 18h.01"/></svg>`,plug:d`<svg viewBox="0 0 24 24"><path d="M12 22v-5"/><path d="M9 8V2"/><path d="M15 8V2"/><path d="M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z"/></svg>`,circle:d`<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/></svg>`,puzzle:d`<svg viewBox="0 0 24 24"><path d="M19.439 7.85c-.049.322.059.648.289.878l1.568 1.568c.47.47.706 1.087.706 1.704s-.235 1.233-.706 1.704l-1.611 1.611a.98.98 0 0 1-.837.276c-.47-.07-.802-.48-.968-.925a2.501 2.501 0 1 0-3.214 3.214c.446.166.855.497.925.968a.979.979 0 0 1-.276.837l-1.61 1.61a2.404 2.404 0 0 1-1.705.707 2.402 2.402 0 0 1-1.704-.706l-1.568-1.568a1.026 1.026 0 0 0-.877-.29c-.493.074-.84.504-1.02.968a2.5 2.5 0 1 1-3.237-3.237c.464-.18.894-.527.967-1.02a1.026 1.026 0 0 0-.289-.877l-1.568-1.568A2.402 2.402 0 0 1 1.998 12c0-.617.236-1.234.706-1.704L4.23 8.77c.24-.24.581-.353.917-.303.515.076.874.54 1.02 1.02a2.5 2.5 0 1 0 3.237-3.237c-.48-.146-.944-.505-1.02-1.02a.98.98 0 0 1 .303-.917l1.526-1.526A2.402 2.402 0 0 1 11.998 2c.617 0 1.234.236 1.704.706l1.568 1.568c.23.23.556.338.877.29.493-.074.84-.504 1.02-.968a2.5 2.5 0 1 1 3.236 3.236c-.464.18-.894.527-.967 1.02Z"/></svg>`,info:d`<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg>`,send:d`<svg viewBox="0 0 24 24"><path d="m22 2-7 20-4-9-9-4Z"/><path d="M22 2 11 13"/></svg>`,smile:d`<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M8 14s1.5 2 4 2 4-2 4-2"/><line x1="9" y1="9" x2="9.01" y2="9"/><line x1="15" y1="9" x2="15.01" y2="9"/></svg>`,slidersHorizontal:d`<svg viewBox="0 0 24 24"><line x1="21" x2="14" y1="4" y2="4"/><line x1="10" x2="3" y1="4" y2="4"/><line x1="21" x2="12" y1="12" y2="12"/><line x1="8" x2="3" y1="12" y2="12"/><line x1="21" x2="16" y1="20" y2="20"/><line x1="12" x2="3" y1="20" y2="20"/><line x1="14" x2="14" y1="2" y2="6"/><line x1="8" x2="8" y1="10" y2="14"/><line x1="16" x2="16" y1="18" y2="22"/></svg>`,square:d`<svg viewBox="0 0 24 24"><rect width="14" height="14" x="5" y="5" rx="2"/></svg>`,eye:d`<svg viewBox="0 0 24 24"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg>`,eyeOff:d`<svg viewBox="0 0 24 24"><path d="M9.88 9.88a3 3 0 1 0 4.24 4.24"/><path d="M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68"/><path d="M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61"/><line x1="2" x2="22" y1="2" y2="22"/></svg>`,trash:d`<svg viewBox="0 0 24 24"><path d="M3 6h18"/><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"/><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/></svg>`,chevronDown:d`<svg viewBox="0 0 24 24"><path d="m6 9 6 6 6-6"/></svg>`,film:d`<svg viewBox="0 0 24 24"><rect width="18" height="18" x="3" y="3" rx="2"/><path d="M7 3v18"/><path d="M3 7.5h4"/><path d="M3 12h18"/><path d="M3 16.5h4"/><path d="M17 3v18"/><path d="M17 7.5h4"/><path d="M17 16.5h4"/></svg>`},_p="Taskmaster",Mp="/taskmaster-icon.png",wl="#00d4ff";let An=null;function De(){return An||(An={name:window.__TASKMASTER_BRAND_NAME__||_p,iconUrl:window.__TASKMASTER_BRAND_ICON_URL__||Mp,accentColor:window.__TASKMASTER_ACCENT_COLOR__||wl},An)}function Pp(e){const t=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);return t?`${parseInt(t[1],16)}, ${parseInt(t[2],16)}, ${parseInt(t[3],16)}`:null}function Lp(e){if(e===wl)return;const t=Pp(e);if(!t)return;const n=document.documentElement;n.style.setProperty("--accent",e),n.style.setProperty("--accent-hover",e),n.style.setProperty("--accent-muted",e),n.style.setProperty("--primary",e),n.style.setProperty("--ring",e),n.style.setProperty("--accent-subtle",`rgba(${t}, 0.15)`),n.style.setProperty("--accent-glow",`rgba(${t}, 0.25)`),n.style.setProperty("--tasker-orange",e),n.style.setProperty("--tasker-orange-hover",e),n.style.setProperty("--tasker-orange-glow",`rgba(${t}, 0.25)`)}const Rp=d`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg>`;let gr=!1;function Ip(){gr||(gr=!0,document.addEventListener("click",e=>{const t=document.getElementById("nav-burger-toggle");!t?.checked||t.closest(".setup-header")?.contains(e.target)||(t.checked=!1)}))}function tt(e,t){const n=(a,c)=>a===e?d`<span class="sp-page-nav-current">${a}</span>`:d`<a href=${c}>${a}</a>`,s=d`
|
|
17
|
+
`],{type:"text/plain"}),s=URL.createObjectURL(n),i=document.createElement("a"),o=new Date().toISOString().slice(0,19).replace(/[:T]/g,"-");i.href=s,i.download=`taskmaster-session-logs-${t}-${o}.log`,i.click(),URL.revokeObjectURL(s)}function ad(e){if(typeof ResizeObserver>"u")return;const t=e.querySelector(".topbar");if(!t)return;const n=()=>{const{height:s}=t.getBoundingClientRect();e.style.setProperty("--topbar-height",`${s}px`)};n(),e.topbarObserver=new ResizeObserver(()=>n()),e.topbarObserver.observe(t)}function De(e){return typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e))}function Ye(e){return`${JSON.stringify(e,null,2).trimEnd()}
|
|
18
|
+
`}function za(e,t,n){if(t.length===0)return;let s=e;for(let o=0;o<t.length-1;o+=1){const r=t[o],l=t[o+1];if(typeof r=="number"){if(!Array.isArray(s))return;s[r]==null&&(s[r]=typeof l=="number"?[]:{}),s=s[r]}else{if(typeof s!="object"||s==null)return;const a=s;a[r]==null&&(a[r]=typeof l=="number"?[]:{}),s=a[r]}}const i=t[t.length-1];if(typeof i=="number"){Array.isArray(s)&&(s[i]=n);return}typeof s=="object"&&s!=null&&(s[i]=n)}async function ke(e){if(!(!e.client||!e.connected)){e.configLoading=!0,e.lastError=null;try{const t=await e.client.request("config.get",{});cd(e,t)}catch(t){e.lastError=String(t)}finally{e.configLoading=!1}}}async function ja(e){if(!(!e.client||!e.connected)&&!e.configSchemaLoading){e.configSchemaLoading=!0;try{const t=await e.client.request("config.schema",{});ld(e,t)}catch(t){e.lastError=String(t)}finally{e.configSchemaLoading=!1}}}function ld(e,t){e.configSchema=t.schema??null,e.configUiHints=t.uiHints??{},e.configSchemaVersion=t.version??null}function cd(e,t){e.configSnapshot=t;const n=typeof t.raw=="string"?t.raw:t.config&&typeof t.config=="object"?Ye(t.config):e.configRaw;!e.configFormDirty||e.configFormMode==="raw"?e.configRaw=n:e.configForm?e.configRaw=Ye(e.configForm):e.configRaw=n,e.configValid=typeof t.valid=="boolean"?t.valid:null,e.configIssues=Array.isArray(t.issues)?t.issues:[],e.configFormDirty||(e.configForm=De(t.config??{}),e.configFormOriginal=De(t.config??{}),e.configRawOriginal=n)}async function ud(e){if(!(!e.client||!e.connected)){e.configSaving=!0,e.lastError=null;try{const t=e.configFormMode==="form"&&e.configForm?Ye(e.configForm):e.configRaw,n=e.configSnapshot?.hash;if(!n){e.lastError="Config hash missing; reload and retry.";return}await e.client.request("config.set",{raw:t,baseHash:n}),e.configFormDirty=!1,await ke(e)}catch(t){e.lastError=String(t)}finally{e.configSaving=!1}}}async function tn(e){if(!(!e.client||!e.connected))try{const t=await e.client.request("cron.status",{});e.cronStatus=t}catch(t){e.cronError=String(t)}}async function rs(e){if(!(!e.client||!e.connected)&&!e.cronLoading){e.cronLoading=!0,e.cronError=null;try{const t={includeDisabled:!0};Array.isArray(e.workspaceAgentIds)&&e.workspaceAgentIds.length>0&&(t.agentIds=e.workspaceAgentIds);const n=await e.client.request("cron.list",t);e.cronJobs=Array.isArray(n.jobs)?n.jobs:[]}catch(t){e.cronError=String(t)}finally{e.cronLoading=!1}}}function dd(e){if(e.scheduleKind==="at"){const n=Date.parse(e.scheduleAt);if(!Number.isFinite(n))throw new Error("Invalid run time.");return{kind:"at",atMs:n}}if(e.scheduleKind==="every"){const n=zn(e.everyAmount,0);if(n<=0)throw new Error("Invalid interval amount.");const s=e.everyUnit;return{kind:"every",everyMs:n*(s==="minutes"?6e4:s==="hours"?36e5:864e5)}}const t=e.cronExpr.trim();if(!t)throw new Error("Cron expression required.");return{kind:"cron",expr:t,tz:e.cronTz.trim()||void 0}}function pd(e){if(e.payloadKind==="systemEvent"){const i=e.payloadText.trim();if(!i)throw new Error("System event text required.");return{kind:"systemEvent",text:i}}const t=e.payloadText.trim();if(!t)throw new Error("Agent message required.");const n={kind:"agentTurn",message:t};e.deliver&&(n.deliver=!0),e.channel&&(n.channel=e.channel),e.to.trim()&&(n.to=e.to.trim());const s=zn(e.timeoutSeconds,0);return s>0&&(n.timeoutSeconds=s),n}async function hd(e){if(!(!e.client||!e.connected||e.cronBusy)){e.cronBusy=!0,e.cronError=null;try{const t=dd(e.cronForm),n=pd(e.cronForm),s=e.cronForm.agentId.trim(),i=e.cronForm.accountId?.trim(),o={name:e.cronForm.name.trim(),description:e.cronForm.description.trim()||void 0,agentId:s||void 0,accountId:i||void 0,enabled:e.cronForm.enabled,schedule:t,sessionTarget:e.cronForm.sessionTarget,wakeMode:e.cronForm.wakeMode,payload:n,isolation:e.cronForm.postToMainPrefix.trim()&&e.cronForm.sessionTarget==="isolated"?{postToMainPrefix:e.cronForm.postToMainPrefix.trim()}:void 0};if(!o.name)throw new Error("Name required.");await e.client.request("cron.add",o),e.cronForm={...e.cronForm,name:"",description:"",payloadText:""},await rs(e),await tn(e)}catch(t){e.cronError=String(t)}finally{e.cronBusy=!1}}}async function fd(e,t,n){if(!(!e.client||!e.connected||e.cronBusy)){e.cronBusy=!0,e.cronError=null;try{await e.client.request("cron.update",{id:t.id,patch:{enabled:n}}),await rs(e),await tn(e)}catch(s){e.cronError=String(s)}finally{e.cronBusy=!1}}}async function gd(e,t){if(!(!e.client||!e.connected||e.cronBusy)){e.cronBusy=!0,e.cronError=null;try{await e.client.request("cron.run",{id:t.id,mode:"force"}),await ci(e,t.id)}catch(n){e.cronError=String(n)}finally{e.cronBusy=!1}}}async function md(e,t){if(!(!e.client||!e.connected||e.cronBusy)){e.cronBusy=!0,e.cronError=null;try{await e.client.request("cron.remove",{id:t.id}),e.cronRunsJobId===t.id&&(e.cronRunsJobId=null,e.cronRuns=[]),await rs(e),await tn(e)}catch(n){e.cronError=String(n)}finally{e.cronBusy=!1}}}async function ci(e,t){if(!(!e.client||!e.connected))try{const n=await e.client.request("cron.runs",{id:t,limit:50});e.cronRunsJobId=t,e.cronRuns=Array.isArray(n.entries)?n.entries:[]}catch(n){e.cronError=String(n)}}async function z(e,t){if(!(!e.client||!e.connected)&&!e.channelsLoading){e.channelsLoading=!0,e.channelsError=null;try{const n=await e.client.request("channels.status",{probe:t,timeoutMs:8e3});e.channelsSnapshot=n,e.channelsLastSuccess=Date.now()}catch(n){e.channelsError=String(n)}finally{e.channelsLoading=!1}}}async function zi(e,t,n){if(!(!e.client||!e.connected||e.whatsappBusy)){e.whatsappBusy=!0,e.whatsappActiveQrAccountId=n??null;try{const s=await e.client.request("web.login.start",{force:t,timeoutMs:3e4,accountId:n});e.whatsappLoginMessage=s.message??null,e.whatsappLoginQrDataUrl=s.qrDataUrl??null,e.whatsappLoginConnected=null}catch(s){e.whatsappLoginMessage=String(s),e.whatsappLoginQrDataUrl=null,e.whatsappLoginConnected=null}finally{e.whatsappBusy=!1}}}async function Ha(e,t){if(!(!e.client||!e.connected||e.whatsappBusy)){e.whatsappBusy=!0;try{const n=await e.client.request("web.login.wait",{timeoutMs:12e4,accountId:t});e.whatsappLoginMessage=n.message??null,e.whatsappLoginConnected=n.connected??null,n.connected&&(e.whatsappLoginQrDataUrl=null,e.whatsappActiveQrAccountId=null,e.whatsappPairedPhone=n.selfPhone??null)}catch(n){e.whatsappLoginMessage=String(n),e.whatsappLoginConnected=null}finally{e.whatsappBusy=!1}}}async function qa(e,t){if(!(!e.client||!e.connected||e.whatsappBusy)){e.whatsappBusy=!0;try{await e.client.request("channels.logout",{channel:"whatsapp",accountId:t}),e.whatsappLoginMessage="Logged out.",e.whatsappLoginQrDataUrl=null,e.whatsappLoginConnected=null,e.whatsappActiveQrAccountId=null}catch(n){e.whatsappLoginMessage=String(n)}finally{e.whatsappBusy=!1}}}async function Ga(e,t){if(!e.client||!e.connected||e.whatsappAccountSaving)return;const n=t.trim();if(!n){e.whatsappAccountError="Account name is required.";return}const s=n.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");if(!s){e.whatsappAccountError="Invalid account name.";return}e.whatsappAccountSaving=!0,e.whatsappAccountError=null;try{const i=await e.client.request("config.get",{});e.configSnapshot=i;const o=De(i.config??{});(!o.channels||typeof o.channels!="object")&&(o.channels={});const r=o.channels;(!r.whatsapp||typeof r.whatsapp!="object")&&(r.whatsapp={});const l=r.whatsapp;(!l.accounts||typeof l.accounts!="object")&&(l.accounts={});const a=l.accounts;if(a[s]){e.whatsappAccountError=`Account "${s}" already exists.`;return}a[s]={name:n,provider:"baileys"};const c=i.hash;if(!c){e.whatsappAccountError="Config hash missing; reload and retry.";return}const u=Ye(o);await e.client.request("config.set",{raw:u,baseHash:c}),e.addingWhatsAppAccount=!1,e.newWhatsAppAccountName="",await z(e,!0),await zi(e,!0,s)}catch(i){e.whatsappAccountError=String(i)}finally{e.whatsappAccountSaving=!1}}async function Va(e,t){if(!(!e.client||!e.connected)&&!e.whatsappAccountSaving){e.whatsappAccountSaving=!0,e.whatsappAccountError=null;try{const n=await e.client.request("config.get",{});e.configSnapshot=n;const s=De(n.config??{}),r=s.channels?.whatsapp?.accounts;if(!r){e.whatsappAccountError="No accounts found in config.";return}if(Object.keys(r).length<=1){e.whatsappAccountError="Cannot remove the last account.";return}if(!r[t]){e.whatsappAccountError=`Account "${t}" not found.`;return}try{await e.client.request("channels.logout",{channel:"whatsapp",accountId:t})}catch{}delete r[t],Array.isArray(s.bindings)&&(s.bindings=s.bindings.filter(u=>{const p=u.match;return!p||p.channel!=="whatsapp"?!0:p.accountId!==t}));const a=n.hash;if(!a){e.whatsappAccountError="Config hash missing; reload and retry.";return}const c=Ye(s);await e.client.request("config.set",{raw:c,baseHash:a}),e.whatsappActiveQrAccountId===t&&(e.whatsappActiveQrAccountId=null,e.whatsappLoginQrDataUrl=null,e.whatsappLoginMessage=null),await z(e,!0)}catch(n){e.whatsappAccountError=String(n)}finally{e.whatsappAccountSaving=!1}}}const yd=Object.freeze(Object.defineProperty({__proto__:null,addWhatsAppAccount:Ga,loadChannels:z,logoutWhatsApp:qa,removeWhatsAppAccount:Va,startWhatsAppLogin:zi,waitWhatsAppLogin:Ha},Symbol.toStringTag,{value:"Module"}));async function ji(e){if(!(!e.client||!e.connected)&&!e.debugLoading){e.debugLoading=!0;try{const[t,n,s,i]=await Promise.all([e.client.request("status",{}),e.client.request("health",{}),e.client.request("models.list",{}),e.client.request("last-heartbeat",{})]);e.debugStatus=t,e.debugHealth=n;const o=s;e.debugModels=Array.isArray(o?.models)?o?.models:[],e.debugHeartbeat=i}catch(t){e.debugCallError=String(t)}finally{e.debugLoading=!1}}}const vd=2e3,bd=new Set(["trace","debug","info","warn","error","fatal"]);function wd(e){if(typeof e!="string")return null;const t=e.trim();if(!t.startsWith("{")||!t.endsWith("}"))return null;try{const n=JSON.parse(t);return!n||typeof n!="object"?null:n}catch{return null}}function kd(e){if(typeof e!="string")return null;const t=e.toLowerCase();return bd.has(t)?t:null}function Sd(e){if(!e.trim())return{raw:e,message:e};try{const t=JSON.parse(e),n=t&&typeof t._meta=="object"&&t._meta!==null?t._meta:null,s=typeof t.time=="string"?t.time:typeof n?.date=="string"?n?.date:null,i=kd(n?.logLevelName??n?.level),o=typeof t[0]=="string"?t[0]:typeof n?.name=="string"?n?.name:null,r=wd(o);let l=null;r&&(typeof r.subsystem=="string"?l=r.subsystem:typeof r.module=="string"&&(l=r.module)),!l&&o&&o.length<120&&(l=o);let a=null;return typeof t[1]=="string"?a=t[1]:!r&&typeof t[0]=="string"?a=t[0]:typeof t.message=="string"&&(a=t.message),{raw:e,time:s,level:i,subsystem:l,message:a??e,meta:n??void 0}}catch{return{raw:e,message:e}}}async function qt(e,t){if(!(!e.client||!e.connected)&&!(e.logsLoading&&!t?.quiet)){t?.quiet||(e.logsLoading=!0),e.logsError=null;try{const s=await e.client.request("logs.tail",{cursor:t?.reset?void 0:e.logsCursor??void 0,limit:e.logsLimit,maxBytes:e.logsMaxBytes}),o=(Array.isArray(s.lines)?s.lines.filter(l=>typeof l=="string"):[]).map(Sd),r=!!(t?.reset||s.reset||e.logsCursor==null);e.logsEntries=r?o:[...e.logsEntries,...o].slice(-vd),typeof s.cursor=="number"&&(e.logsCursor=s.cursor),typeof s.file=="string"&&(e.logsFile=s.file),e.logsTruncated=!!s.truncated,e.logsLastFetchAt=Date.now()}catch(n){e.logsError=String(n)}finally{t?.quiet||(e.logsLoading=!1)}}}const Ya={p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n},{p:ee,n:In,Gx:ur,Gy:dr,a:Ns,d:Ds,h:xd}=Ya,Qe=32,Hi=64,Ad=(...e)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...e)},Y=(e="")=>{const t=new Error(e);throw Ad(t,Y),t},$d=e=>typeof e=="bigint",Ed=e=>typeof e=="string",Td=e=>e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array",Be=(e,t,n="")=>{const s=Td(e),i=e?.length,o=t!==void 0;if(!s||o&&i!==t){const r=n&&`"${n}" `,l=o?` of length ${t}`:"",a=s?`length=${i}`:`type=${typeof e}`;Y(r+"expected Uint8Array"+l+", got "+a)}return e},as=e=>new Uint8Array(e),Qa=e=>Uint8Array.from(e),Xa=(e,t)=>e.toString(16).padStart(t,"0"),Za=e=>Array.from(Be(e)).map(t=>Xa(t,2)).join(""),$e={_0:48,_9:57,A:65,F:70,a:97,f:102},pr=e=>{if(e>=$e._0&&e<=$e._9)return e-$e._0;if(e>=$e.A&&e<=$e.F)return e-($e.A-10);if(e>=$e.a&&e<=$e.f)return e-($e.a-10)},Ja=e=>{const t="hex invalid";if(!Ed(e))return Y(t);const n=e.length,s=n/2;if(n%2)return Y(t);const i=as(s);for(let o=0,r=0;o<s;o++,r+=2){const l=pr(e.charCodeAt(r)),a=pr(e.charCodeAt(r+1));if(l===void 0||a===void 0)return Y(t);i[o]=l*16+a}return i},el=()=>globalThis?.crypto,Cd=()=>el()?.subtle??Y("crypto.subtle must be defined, consider polyfill"),Zt=(...e)=>{const t=as(e.reduce((s,i)=>s+Be(i).length,0));let n=0;return e.forEach(s=>{t.set(s,n),n+=s.length}),t},_d=(e=Qe)=>el().getRandomValues(as(e)),Hn=BigInt,He=(e,t,n,s="bad number: out of range")=>$d(e)&&t<=e&&e<n?e:Y(s),$=(e,t=ee)=>{const n=e%t;return n>=0n?n:t+n},tl=e=>$(e,In),Md=(e,t)=>{(e===0n||t<=0n)&&Y("no inverse n="+e+" mod="+t);let n=$(e,t),s=t,i=0n,o=1n;for(;n!==0n;){const r=s/n,l=s%n,a=i-o*r;s=n,n=l,i=o,o=a}return s===1n?$(i,t):Y("no inverse")},Ld=e=>{const t=ol[e];return typeof t!="function"&&Y("hashes."+e+" not set"),t},Os=e=>e instanceof ae?e:Y("Point expected"),ui=2n**256n;class ae{static BASE;static ZERO;X;Y;Z;T;constructor(t,n,s,i){const o=ui;this.X=He(t,0n,o),this.Y=He(n,0n,o),this.Z=He(s,1n,o),this.T=He(i,0n,o),Object.freeze(this)}static CURVE(){return Ya}static fromAffine(t){return new ae(t.x,t.y,1n,$(t.x*t.y))}static fromBytes(t,n=!1){const s=Ds,i=Qa(Be(t,Qe)),o=t[31];i[31]=o&-129;const r=sl(i);He(r,0n,n?ui:ee);const a=$(r*r),c=$(a-1n),u=$(s*a+1n);let{isValid:p,value:m}=Rd(c,u);p||Y("bad point: y not sqrt");const v=(m&1n)===1n,w=(o&128)!==0;return!n&&m===0n&&w&&Y("bad point: x==0, isLastByteOdd"),w!==v&&(m=$(-m)),new ae(m,r,1n,$(m*r))}static fromHex(t,n){return ae.fromBytes(Ja(t),n)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){const t=Ns,n=Ds,s=this;if(s.is0())return Y("bad point: ZERO");const{X:i,Y:o,Z:r,T:l}=s,a=$(i*i),c=$(o*o),u=$(r*r),p=$(u*u),m=$(a*t),v=$(u*$(m+c)),w=$(p+$(n*$(a*c)));if(v!==w)return Y("bad point: equation left != right (1)");const A=$(i*o),_=$(r*l);return A!==_?Y("bad point: equation left != right (2)"):this}equals(t){const{X:n,Y:s,Z:i}=this,{X:o,Y:r,Z:l}=Os(t),a=$(n*l),c=$(o*i),u=$(s*l),p=$(r*i);return a===c&&u===p}is0(){return this.equals(ft)}negate(){return new ae($(-this.X),this.Y,this.Z,$(-this.T))}double(){const{X:t,Y:n,Z:s}=this,i=Ns,o=$(t*t),r=$(n*n),l=$(2n*$(s*s)),a=$(i*o),c=t+n,u=$($(c*c)-o-r),p=a+r,m=p-l,v=a-r,w=$(u*m),A=$(p*v),_=$(u*v),j=$(m*p);return new ae(w,A,j,_)}add(t){const{X:n,Y:s,Z:i,T:o}=this,{X:r,Y:l,Z:a,T:c}=Os(t),u=Ns,p=Ds,m=$(n*r),v=$(s*l),w=$(o*p*c),A=$(i*a),_=$((n+s)*(r+l)-m-v),j=$(A-w),C=$(A+w),P=$(v-u*m),I=$(_*j),B=$(C*P),ue=$(_*P),it=$(j*C);return new ae(I,B,it,ue)}subtract(t){return this.add(Os(t).negate())}multiply(t,n=!0){if(!n&&(t===0n||this.is0()))return ft;if(He(t,1n,In),t===1n)return this;if(this.equals(Xe))return jd(t).p;let s=ft,i=Xe;for(let o=this;t>0n;o=o.double(),t>>=1n)t&1n?s=s.add(o):n&&(i=i.add(o));return s}multiplyUnsafe(t){return this.multiply(t,!1)}toAffine(){const{X:t,Y:n,Z:s}=this;if(this.equals(ft))return{x:0n,y:1n};const i=Md(s,ee);$(s*i)!==1n&&Y("invalid inverse");const o=$(t*i),r=$(n*i);return{x:o,y:r}}toBytes(){const{x:t,y:n}=this.assertValidity().toAffine(),s=nl(n);return s[31]|=t&1n?128:0,s}toHex(){return Za(this.toBytes())}clearCofactor(){return this.multiply(Hn(xd),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let t=this.multiply(In/2n,!1).double();return In%2n&&(t=t.add(this)),t.is0()}}const Xe=new ae(ur,dr,1n,$(ur*dr)),ft=new ae(0n,1n,1n,0n);ae.BASE=Xe;ae.ZERO=ft;const nl=e=>Ja(Xa(He(e,0n,ui),Hi)).reverse(),sl=e=>Hn("0x"+Za(Qa(Be(e)).reverse())),ve=(e,t)=>{let n=e;for(;t-- >0n;)n*=n,n%=ee;return n},Pd=e=>{const n=e*e%ee*e%ee,s=ve(n,2n)*n%ee,i=ve(s,1n)*e%ee,o=ve(i,5n)*i%ee,r=ve(o,10n)*o%ee,l=ve(r,20n)*r%ee,a=ve(l,40n)*l%ee,c=ve(a,80n)*a%ee,u=ve(c,80n)*a%ee,p=ve(u,10n)*o%ee;return{pow_p_5_8:ve(p,2n)*e%ee,b2:n}},hr=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,Rd=(e,t)=>{const n=$(t*t*t),s=$(n*n*t),i=Pd(e*s).pow_p_5_8;let o=$(e*n*i);const r=$(t*o*o),l=o,a=$(o*hr),c=r===e,u=r===$(-e),p=r===$(-e*hr);return c&&(o=l),(u||p)&&(o=a),($(o)&1n)===1n&&(o=$(-o)),{isValid:c||u,value:o}},di=e=>tl(sl(e)),qi=(...e)=>ol.sha512Async(Zt(...e)),Id=(...e)=>Ld("sha512")(Zt(...e)),il=e=>{const t=e.slice(0,Qe);t[0]&=248,t[31]&=127,t[31]|=64;const n=e.slice(Qe,Hi),s=di(t),i=Xe.multiply(s),o=i.toBytes();return{head:t,prefix:n,scalar:s,point:i,pointBytes:o}},Gi=e=>qi(Be(e,Qe)).then(il),Nd=e=>il(Id(Be(e,Qe))),Dd=e=>Gi(e).then(t=>t.pointBytes),Od=e=>qi(e.hashable).then(e.finish),Bd=(e,t,n)=>{const{pointBytes:s,scalar:i}=e,o=di(t),r=Xe.multiply(o).toBytes();return{hashable:Zt(r,s,n),finish:c=>{const u=tl(o+di(c)*i);return Be(Zt(r,nl(u)),Hi)}}},Fd=async(e,t)=>{const n=Be(e),s=await Gi(t),i=await qi(s.prefix,n);return Od(Bd(s,i,n))},ol={sha512Async:async e=>{const t=Cd(),n=Zt(e);return as(await t.digest("SHA-512",n.buffer))},sha512:void 0},Ud=(e=_d(Qe))=>e,Wd={getExtendedPublicKeyAsync:Gi,getExtendedPublicKey:Nd,randomSecretKey:Ud},qn=8,Kd=256,rl=Math.ceil(Kd/qn)+1,pi=2**(qn-1),zd=()=>{const e=[];let t=Xe,n=t;for(let s=0;s<rl;s++){n=t,e.push(n);for(let i=1;i<pi;i++)n=n.add(t),e.push(n);t=n.double()}return e};let fr;const gr=(e,t)=>{const n=t.negate();return e?n:t},jd=e=>{const t=fr||(fr=zd());let n=ft,s=Xe;const i=2**qn,o=i,r=Hn(i-1),l=Hn(qn);for(let a=0;a<rl;a++){let c=Number(e&r);e>>=l,c>pi&&(c-=o,e+=1n);const u=a*pi,p=u,m=u+Math.abs(c)-1,v=a%2!==0,w=c<0;c===0?s=s.add(gr(v,t[p])):n=n.add(gr(w,t[m]))}return e!==0n&&Y("invalid wnaf"),{p:n,f:s}},Bs="taskmaster-device-identity-v1";function hi(e){let t="";for(const n of e)t+=String.fromCharCode(n);return btoa(t).replaceAll("+","-").replaceAll("/","_").replace(/=+$/g,"")}function al(e){const t=e.replaceAll("-","+").replaceAll("_","/"),n=t+"=".repeat((4-t.length%4)%4),s=atob(n),i=new Uint8Array(s.length);for(let o=0;o<s.length;o+=1)i[o]=s.charCodeAt(o);return i}function Hd(e){return Array.from(e).map(t=>t.toString(16).padStart(2,"0")).join("")}async function ll(e){const t=await crypto.subtle.digest("SHA-256",e);return Hd(new Uint8Array(t))}async function qd(){const e=Wd.randomSecretKey(),t=await Dd(e);return{deviceId:await ll(t),publicKey:hi(t),privateKey:hi(e)}}async function Gd(){try{const n=localStorage.getItem(Bs);if(n){const s=JSON.parse(n);if(s?.version===1&&typeof s.deviceId=="string"&&typeof s.publicKey=="string"&&typeof s.privateKey=="string"){const i=await ll(al(s.publicKey));if(i!==s.deviceId){const o={...s,deviceId:i};return localStorage.setItem(Bs,JSON.stringify(o)),{deviceId:i,publicKey:s.publicKey,privateKey:s.privateKey}}return{deviceId:s.deviceId,publicKey:s.publicKey,privateKey:s.privateKey}}}}catch{}const e=await qd(),t={version:1,deviceId:e.deviceId,publicKey:e.publicKey,privateKey:e.privateKey,createdAtMs:Date.now()};return localStorage.setItem(Bs,JSON.stringify(t)),e}async function Vd(e,t){const n=al(e),s=new TextEncoder().encode(t),i=await Fd(s,n);return hi(i)}const cl="taskmaster.device.auth.v1";function Vi(e){return e.trim()}function Yd(e){if(!Array.isArray(e))return[];const t=new Set;for(const n of e){const s=n.trim();s&&t.add(s)}return[...t].sort()}function Yi(){try{const e=window.localStorage.getItem(cl);if(!e)return null;const t=JSON.parse(e);return!t||t.version!==1||!t.deviceId||typeof t.deviceId!="string"||!t.tokens||typeof t.tokens!="object"?null:t}catch{return null}}function ul(e){try{window.localStorage.setItem(cl,JSON.stringify(e))}catch{}}function Qd(e){const t=Yi();if(!t||t.deviceId!==e.deviceId)return null;const n=Vi(e.role),s=t.tokens[n];return!s||typeof s.token!="string"?null:s}function Xd(e){const t=Vi(e.role),n={version:1,deviceId:e.deviceId,tokens:{}},s=Yi();s&&s.deviceId===e.deviceId&&(n.tokens={...s.tokens});const i={token:e.token,role:t,scopes:Yd(e.scopes),updatedAtMs:Date.now()};return n.tokens[t]=i,ul(n),i}function Zd(e){const t=Yi();if(!t||t.deviceId!==e.deviceId)return;const n=Vi(e.role);if(!t.tokens[n])return;const s={...t,tokens:{...t.tokens}};delete s.tokens[n],ul(s)}async function Qi(e,t){if(!(!e.client||!e.connected)&&!e.devicesLoading){e.devicesLoading=!0,t?.quiet||(e.devicesError=null);try{const n=await e.client.request("device.pair.list",{});e.devicesList={pending:Array.isArray(n?.pending)?n.pending:[],paired:Array.isArray(n?.paired)?n.paired:[]}}catch(n){t?.quiet||(e.devicesError=String(n))}finally{e.devicesLoading=!1}}}async function Xi(e,t){if(!(!e.client||!e.connected)&&!e.nodesLoading){e.nodesLoading=!0,t?.quiet||(e.lastError=null);try{const n=await e.client.request("node.list",{});e.nodes=Array.isArray(n.nodes)?n.nodes:[]}catch(n){t?.quiet||(e.lastError=String(n))}finally{e.nodesLoading=!1}}}function Jd(e){return{method:"exec.approvals.get",params:{}}}async function ep(e,t){if(!(!e.client||!e.connected)&&!e.execApprovalsLoading){e.execApprovalsLoading=!0,e.lastError=null;try{const n=Jd(t);if(!n){e.lastError="Select a node before loading exec approvals.";return}const s=await e.client.request(n.method,n.params);tp(e,s)}catch(n){e.lastError=String(n)}finally{e.execApprovalsLoading=!1}}}function tp(e,t){e.execApprovalsSnapshot=t,e.execApprovalsDirty||(e.execApprovalsForm=De(t.file??{}))}async function dl(e){if(!(!e.client||!e.connected)&&!e.presenceLoading){e.presenceLoading=!0,e.presenceError=null,e.presenceStatus=null;try{const t=await e.client.request("system-presence",{});Array.isArray(t)?(e.presenceEntries=t,e.presenceStatus=t.length===0?"No instances yet.":null):(e.presenceEntries=[],e.presenceStatus="No presence payload.")}catch(t){e.presenceError=String(t)}finally{e.presenceLoading=!1}}}function bt(e,t,n){if(!t.trim())return;const s={...e.skillMessages};n?s[t]=n:delete s[t],e.skillMessages=s}function ls(e){return e instanceof Error?e.message:String(e)}async function wt(e,t){if(t?.clearMessages&&Object.keys(e.skillMessages).length>0&&(e.skillMessages={}),!(!e.client||!e.connected)&&!e.skillsLoading){e.skillsLoading=!0,e.skillsError=null;try{const n=await e.client.request("skills.status",{});n&&(e.skillsReport=n)}catch(n){e.skillsError=ls(n)}finally{e.skillsLoading=!1}}}function np(e,t,n){e.skillEdits={...e.skillEdits,[t]:n}}async function sp(e,t,n){if(!(!e.client||!e.connected)){e.skillsBusyKey=t,e.skillsError=null;try{await e.client.request("skills.update",{skillKey:t,enabled:n}),await wt(e),bt(e,t,{kind:"success",message:n?"Skill enabled":"Skill disabled"})}catch(s){const i=ls(s);e.skillsError=i,bt(e,t,{kind:"error",message:i})}finally{e.skillsBusyKey=null}}}async function ip(e,t){if(!(!e.client||!e.connected)){e.skillsBusyKey=t,e.skillsError=null;try{const n=e.skillEdits[t]??"";await e.client.request("skills.update",{skillKey:t,apiKey:n}),await wt(e),bt(e,t,{kind:"success",message:"API key saved"})}catch(n){const s=ls(n);e.skillsError=s,bt(e,t,{kind:"error",message:s})}finally{e.skillsBusyKey=null}}}async function op(e,t,n,s){if(!(!e.client||!e.connected)){e.skillsBusyKey=t,e.skillsError=null;try{const i=await e.client.request("skills.install",{name:n,installId:s,timeoutMs:12e4});await wt(e),bt(e,t,{kind:"success",message:i?.message??"Installed"})}catch(i){const o=ls(i);e.skillsError=o,bt(e,t,{kind:"error",message:o})}finally{e.skillsBusyKey=null}}}const pl={overview:"/overview",channels:"/channels",instances:"/instances",cron:"/cron",skills:"/skills",nodes:"/nodes",chat:"/chat",admins:"/admins",config:"/config",debug:"/debug",logs:"/logs"},hl=new Map(Object.entries(pl).map(([e,t])=>[t,e]));function cs(e){if(!e)return"";let t=e.trim();return t.startsWith("/")||(t=`/${t}`),t==="/"?"":(t.endsWith("/")&&(t=t.slice(0,-1)),t)}function Jt(e){if(!e)return"/";let t=e.trim();return t.startsWith("/")||(t=`/${t}`),t.length>1&&t.endsWith("/")&&(t=t.slice(0,-1)),t}function rp(e,t=""){const n=cs(t),s=pl[e];return n?`${n}${s}`:s}function fl(e,t=""){const n=cs(t);let s=e||"/";n&&(s===n?s="/":s.startsWith(`${n}/`)&&(s=s.slice(n.length)));let i=Jt(s).toLowerCase();return i.endsWith("/index.html")&&(i="/"),i==="/"?"chat":hl.get(i)??null}function ap(e){let t=Jt(e);if(t.endsWith("/index.html")&&(t=Jt(t.slice(0,-11))),t==="/")return"";const n=t.split("/").filter(Boolean);if(n.length===0)return"";for(let s=0;s<n.length;s++){const i=`/${n.slice(s).join("/")}`.toLowerCase();if(hl.has(i)){const o=n.slice(0,s);return o.length?`/${o.join("/")}`:""}}return`/${n.join("/")}`}function lp(){return typeof window>"u"||typeof window.matchMedia!="function"||window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function Zi(e){return e==="system"?lp():e}const kn=e=>Number.isNaN(e)?.5:e<=0?0:e>=1?1:e,cp=()=>typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches??!1,Sn=e=>{e.classList.remove("theme-transition"),e.style.removeProperty("--theme-switch-x"),e.style.removeProperty("--theme-switch-y")},up=({nextTheme:e,applyTheme:t,context:n,currentTheme:s})=>{if(s===e)return;const i=globalThis.document??null;if(!i){t();return}const o=i.documentElement,r=i,l=cp();if(!!r.startViewTransition&&!l){let c=.5,u=.5;if(n?.pointerClientX!==void 0&&n?.pointerClientY!==void 0&&typeof window<"u")c=kn(n.pointerClientX/window.innerWidth),u=kn(n.pointerClientY/window.innerHeight);else if(n?.element){const p=n.element.getBoundingClientRect();p.width>0&&p.height>0&&typeof window<"u"&&(c=kn((p.left+p.width/2)/window.innerWidth),u=kn((p.top+p.height/2)/window.innerHeight))}o.style.setProperty("--theme-switch-x",`${c*100}%`),o.style.setProperty("--theme-switch-y",`${u*100}%`),o.classList.add("theme-transition");try{const p=r.startViewTransition?.(()=>{t()});p?.finished?p.finished.finally(()=>Sn(o)):Sn(o)}catch{Sn(o),t()}return}t(),Sn(o)},dp=2e3;async function gt(e,t){if(!(!e.client||!e.connected)&&!(e.sessionLogsLoading&&!t?.quiet)){t?.quiet||(e.sessionLogsLoading=!0),e.sessionLogsError=null;try{const s=await e.client.request("sessions.transcript",{cursors:t?.reset?void 0:e.sessionLogsCursors,limit:200,maxBytesPerFile:e.sessionLogsFull?25e4:5e4,...e.sessionLogsFull?{full:!0}:{}}),i=Array.isArray(s.entries)?s.entries:[],o=!!(t?.reset||Object.keys(e.sessionLogsCursors).length===0);e.sessionLogsEntries=o?i:[...e.sessionLogsEntries,...i].slice(-dp),s.cursors&&(e.sessionLogsCursors=s.cursors),Array.isArray(s.agents)&&(e.sessionLogsAgents=s.agents),e.sessionLogsLastFetchAt=Date.now()}catch(n){e.sessionLogsError=String(n)}finally{t?.quiet||(e.sessionLogsLoading=!1)}}}const pp=Object.freeze(Object.defineProperty({__proto__:null,loadSessionLogs:gt},Symbol.toStringTag,{value:"Module"}));function hp(e){e.nodesPollInterval==null&&(e.nodesPollInterval=window.setInterval(()=>{Xi(e,{quiet:!0})},5e3))}function fp(e){e.nodesPollInterval!=null&&(clearInterval(e.nodesPollInterval),e.nodesPollInterval=null)}function Ji(e){e.logsPollInterval==null&&(e.logsPollInterval=window.setInterval(()=>{e.tab==="logs"&&qt(e,{quiet:!0})},2e3))}function eo(e){e.logsPollInterval!=null&&(clearInterval(e.logsPollInterval),e.logsPollInterval=null)}function to(e){e.sessionLogsPollInterval==null&&(e.sessionLogsPollInterval=window.setInterval(()=>{e.tab!=="logs"||e.logsSubTab!=="session"||gt(e,{quiet:!0})},2e3))}function no(e){e.sessionLogsPollInterval!=null&&(clearInterval(e.sessionLogsPollInterval),e.sessionLogsPollInterval=null)}function so(e){e.debugPollInterval==null&&(e.debugPollInterval=window.setInterval(()=>{e.tab==="debug"&&ji(e)},3e3))}function io(e){e.debugPollInterval!=null&&(clearInterval(e.debugPollInterval),e.debugPollInterval=null)}function Ie(e,t){const n={...t,lastActiveSessionKey:t.lastActiveSessionKey?.trim()||t.sessionKey.trim()||"main"};e.settings=n,$u(n),t.theme!==e.theme&&(e.theme=t.theme,us(e,Zi(t.theme))),e.applySessionKey=e.settings.lastActiveSessionKey}function gl(e,t){const n=t.trim();n&&e.settings.lastActiveSessionKey!==n&&Ie(e,{...e.settings,lastActiveSessionKey:n})}function gp(e){if(!window.location.search)return;const t=new URLSearchParams(window.location.search),n=t.get("token"),s=t.get("password"),i=t.get("session"),o=t.get("gatewayUrl");let r=!1;if(n!=null){const a=n.trim();a&&a!==e.settings.token&&Ie(e,{...e.settings,token:a}),t.delete("token"),r=!0}if(s!=null){const a=s.trim();a&&(e.password=a),t.delete("password"),r=!0}if(i!=null){const a=i.trim();a&&(e.sessionKey=a,Ie(e,{...e.settings,sessionKey:a,lastActiveSessionKey:a}))}if(o!=null){const a=o.trim();a&&a!==e.settings.gatewayUrl&&Ie(e,{...e.settings,gatewayUrl:a}),t.delete("gatewayUrl"),r=!0}if(!r)return;const l=new URL(window.location.href);l.search=t.toString(),window.history.replaceState({},"",l.toString())}function mp(e,t){e.tab!==t&&(e.tab=t),t==="chat"&&(e.chatHasAutoScrolled=!1),t==="logs"?e.logsSubTab==="session"?to(e):Ji(e):(eo(e),no(e)),t==="debug"?so(e):io(e),oo(e),yl(e,t,!1)}function yp(e,t,n){up({nextTheme:t,applyTheme:()=>{e.theme=t,Ie(e,{...e.settings,theme:t}),us(e,Zi(t))},context:n,currentTheme:e.theme})}async function oo(e){if(e.tab==="overview"&&await vl(e),e.tab==="channels"&&await Ap(e),e.tab==="instances"&&await dl(e),e.tab==="cron"&&await ro(e),e.tab==="skills"&&await wt(e),e.tab==="nodes"&&(await Xi(e),await Qi(e),await ke(e),await ep(e)),e.tab==="chat"&&!e.advancedPage&&!e.chatPage&&(await _p(e),en(e,!e.chatHasAutoScrolled)),e.tab==="config"&&(await ja(e),await ke(e)),e.tab==="debug"&&(await ji(e),e.eventLog=e.eventLogBuffer),e.tab==="logs"){if(e.logsAtBottom=!0,e.logsSubTab==="session"){const{loadSessionLogs:n}=await de(async()=>{const{loadSessionLogs:s}=await Promise.resolve().then(()=>pp);return{loadSessionLogs:s}},void 0,import.meta.url);await n(e,{reset:!0})}else await qt(e,{reset:!0});Ka(e,!0)}}function vp(){if(typeof window>"u")return"";const e=window.__TASKMASTER_CONTROL_UI_BASE_PATH__;return typeof e=="string"&&e.trim()?cs(e):ap(window.location.pathname)}function bp(e){e.theme=e.settings.theme??"system",us(e,Zi(e.theme))}function us(e,t){if(e.themeResolved=t,typeof document>"u")return;const n=document.documentElement;n.dataset.theme=t,n.style.colorScheme=t}function wp(e){if(typeof window>"u"||typeof window.matchMedia!="function")return;if(e.themeMedia=window.matchMedia("(prefers-color-scheme: dark)"),e.themeMediaHandler=n=>{e.theme==="system"&&us(e,n.matches?"dark":"light")},typeof e.themeMedia.addEventListener=="function"){e.themeMedia.addEventListener("change",e.themeMediaHandler);return}e.themeMedia.addListener(e.themeMediaHandler)}function kp(e){if(!e.themeMedia||!e.themeMediaHandler)return;if(typeof e.themeMedia.removeEventListener=="function"){e.themeMedia.removeEventListener("change",e.themeMediaHandler);return}e.themeMedia.removeListener(e.themeMediaHandler),e.themeMedia=null,e.themeMediaHandler=null}function Sp(e,t){if(typeof window>"u")return;const n=fl(window.location.pathname,e.basePath)??"chat";ml(e,n),yl(e,n,t)}function xp(e){if(typeof window>"u")return;const t=fl(window.location.pathname,e.basePath);if(!t)return;const s=new URL(window.location.href).searchParams.get("session")?.trim();s&&(e.sessionKey=s,Ie(e,{...e.settings,sessionKey:s,lastActiveSessionKey:s})),ml(e,t)}function ml(e,t){e.tab!==t&&(e.tab=t),t==="chat"&&(e.chatHasAutoScrolled=!1),t==="logs"?e.logsSubTab==="session"?to(e):Ji(e):(eo(e),no(e)),t==="debug"?so(e):io(e),e.connected&&oo(e)}function yl(e,t,n){if(typeof window>"u")return;const s=Jt(rp(t,e.basePath)),i=Jt(window.location.pathname),o=new URL(window.location.href);t==="chat"&&e.sessionKey?o.searchParams.set("session",e.sessionKey):o.searchParams.delete("session"),i!==s&&(o.pathname=s),n?window.history.replaceState({},"",o.toString()):window.history.pushState({},"",o.toString())}async function vl(e){await Promise.all([z(e,!1),dl(e),Wi(e),tn(e),ji(e)])}async function Ap(e){await Promise.all([z(e,!0),ja(e),ke(e)])}async function ro(e){await Promise.all([z(e,!1),tn(e),rs(e)])}function bl(e){return e.chatSending||!!e.chatRunId}function $p(e){const t=e.trim();if(!t)return!1;const n=t.toLowerCase();return n==="/stop"?!0:n==="stop"||n==="esc"||n==="abort"||n==="wait"||n==="exit"}async function wl(e){e.connected&&(e.chatMessage="",await Ua(e))}function Ep(e,t,n){const s=t.trim(),i=!!(n&&n.length>0);!s&&!i||(e.chatQueue=[...e.chatQueue,{id:Ui(),text:s,createdAt:Date.now(),attachments:i?n?.map(o=>({...o})):void 0}],en(e))}async function kl(e,t,n){Ki(e);const s=await Fa(e,t,n?.attachments);return!s&&n?.previousDraft!=null&&(e.chatMessage=n.previousDraft),!s&&n?.previousAttachments&&(e.chatAttachments=n.previousAttachments),s&&gl(e,e.sessionKey),s&&n?.restoreDraft&&n.previousDraft?.trim()&&(e.chatMessage=n.previousDraft),s&&n?.restoreAttachments&&n.previousAttachments?.length&&(e.chatAttachments=n.previousAttachments),en(e),s&&!e.chatRunId&&Sl(e),s}async function Sl(e){if(!e.connected||bl(e))return;const[t,...n]=e.chatQueue;if(!t)return;e.chatQueue=n,await kl(e,t.text,{attachments:t.attachments})||(e.chatQueue=[t,...e.chatQueue])}function Tp(e,t){e.chatQueue=e.chatQueue.filter(n=>n.id!==t)}async function Cp(e,t,n){if(!e.connected)return;const s=e.chatMessage,i=(t??e.chatMessage).trim(),o=e.chatAttachments??[],r=t==null?o:[],l=r.length>0;if(!(!i&&!l)){if($p(i)){await wl(e);return}if(t==null&&(e.chatMessage="",e.chatAttachments=[]),bl(e)){Ep(e,i,r);return}await kl(e,i,{previousDraft:t==null?s:void 0,restoreDraft:!!(t&&n?.restoreDraft),attachments:l?r:void 0,previousAttachments:t==null?o:void 0,restoreAttachments:!!(t&&n?.restoreDraft)})}}async function _p(e){await Promise.all([Ce(e),Wi(e),fi(e)]),en(e,!0)}const Mp=Sl;function Lp(e){const t=La(e.sessionKey);return t?.agentId?t.agentId:e.hello?.snapshot?.sessionDefaults?.defaultAgentId?.trim()||"main"}function Pp(e,t){const n=cs(e),s=encodeURIComponent(t);return n?`${n}/avatar/${s}?meta=1`:`/avatar/${s}?meta=1`}async function fi(e){if(!e.connected){e.chatAvatarUrl=null;return}const t=Lp(e);if(!t){e.chatAvatarUrl=null;return}e.chatAvatarUrl=null;const n=Pp(e.basePath,t);try{const s=await fetch(n,{method:"GET"});if(!s.ok){e.chatAvatarUrl=null;return}const i=await s.json(),o=typeof i.avatarUrl=="string"?i.avatarUrl.trim():"";e.chatAvatarUrl=o||null}catch{e.chatAvatarUrl=null}}const N={messageSquare:d`<svg viewBox="0 0 24 24"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>`,barChart:d`<svg viewBox="0 0 24 24"><line x1="12" x2="12" y1="20" y2="10"/><line x1="18" x2="18" y1="20" y2="4"/><line x1="6" x2="6" y1="20" y2="16"/></svg>`,link:d`<svg viewBox="0 0 24 24"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg>`,radio:d`<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="2"/><path d="M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"/></svg>`,fileText:d`<svg viewBox="0 0 24 24"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"/><polyline points="14 2 14 8 20 8"/><line x1="16" x2="8" y1="13" y2="13"/><line x1="16" x2="8" y1="17" y2="17"/><line x1="10" x2="8" y1="9" y2="9"/></svg>`,zap:d`<svg viewBox="0 0 24 24"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>`,monitor:d`<svg viewBox="0 0 24 24"><rect width="20" height="14" x="2" y="3" rx="2"/><line x1="8" x2="16" y1="21" y2="21"/><line x1="12" x2="12" y1="17" y2="21"/></svg>`,settings:d`<svg viewBox="0 0 24 24"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></svg>`,bug:d`<svg viewBox="0 0 24 24"><path d="m8 2 1.88 1.88"/><path d="M14.12 3.88 16 2"/><path d="M9 7.13v-1a3.003 3.003 0 1 1 6 0v1"/><path d="M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6"/><path d="M12 20v-9"/><path d="M6.53 9C4.6 8.8 3 7.1 3 5"/><path d="M6 13H2"/><path d="M3 21c0-2.1 1.7-3.9 3.8-4"/><path d="M20.97 5c0 2.1-1.6 3.8-3.5 4"/><path d="M22 13h-4"/><path d="M17.2 17c2.1.1 3.8 1.9 3.8 4"/></svg>`,scrollText:d`<svg viewBox="0 0 24 24"><path d="M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4"/><path d="M19 17V5a2 2 0 0 0-2-2H4"/><path d="M15 8h-5"/><path d="M15 12h-5"/></svg>`,folder:d`<svg viewBox="0 0 24 24"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/></svg>`,users:d`<svg viewBox="0 0 24 24"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>`,menu:d`<svg viewBox="0 0 24 24"><line x1="4" x2="20" y1="12" y2="12"/><line x1="4" x2="20" y1="6" y2="6"/><line x1="4" x2="20" y1="18" y2="18"/></svg>`,x:d`<svg viewBox="0 0 24 24"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>`,check:d`<svg viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></svg>`,copy:d`<svg viewBox="0 0 24 24"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>`,search:d`<svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>`,brain:d`<svg viewBox="0 0 24 24"><path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"/><path d="M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"/><path d="M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4"/><path d="M17.599 6.5a3 3 0 0 0 .399-1.375"/><path d="M6.003 5.125A3 3 0 0 0 6.401 6.5"/><path d="M3.477 10.896a4 4 0 0 1 .585-.396"/><path d="M19.938 10.5a4 4 0 0 1 .585.396"/><path d="M6 18a4 4 0 0 1-1.967-.516"/><path d="M19.967 17.484A4 4 0 0 1 18 18"/></svg>`,book:d`<svg viewBox="0 0 24 24"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20"/></svg>`,loader:d`<svg viewBox="0 0 24 24"><path d="M12 2v4"/><path d="m16.2 7.8 2.9-2.9"/><path d="M18 12h4"/><path d="m16.2 16.2 2.9 2.9"/><path d="M12 18v4"/><path d="m4.9 19.1 2.9-2.9"/><path d="M2 12h4"/><path d="m4.9 4.9 2.9 2.9"/></svg>`,rotateCw:d`<svg viewBox="0 0 24 24"><path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/></svg>`,download:d`<svg viewBox="0 0 24 24"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/></svg>`,wrench:d`<svg viewBox="0 0 24 24"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg>`,fileCode:d`<svg viewBox="0 0 24 24"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"/><polyline points="14 2 14 8 20 8"/><path d="m10 13-2 2 2 2"/><path d="m14 17 2-2-2-2"/></svg>`,edit:d`<svg viewBox="0 0 24 24"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/></svg>`,penLine:d`<svg viewBox="0 0 24 24"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"/></svg>`,paperclip:d`<svg viewBox="0 0 24 24"><path d="m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48"/></svg>`,globe:d`<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"/><path d="M2 12h20"/></svg>`,image:d`<svg viewBox="0 0 24 24"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"/></svg>`,smartphone:d`<svg viewBox="0 0 24 24"><rect width="14" height="20" x="5" y="2" rx="2" ry="2"/><path d="M12 18h.01"/></svg>`,plug:d`<svg viewBox="0 0 24 24"><path d="M12 22v-5"/><path d="M9 8V2"/><path d="M15 8V2"/><path d="M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z"/></svg>`,circle:d`<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/></svg>`,puzzle:d`<svg viewBox="0 0 24 24"><path d="M19.439 7.85c-.049.322.059.648.289.878l1.568 1.568c.47.47.706 1.087.706 1.704s-.235 1.233-.706 1.704l-1.611 1.611a.98.98 0 0 1-.837.276c-.47-.07-.802-.48-.968-.925a2.501 2.501 0 1 0-3.214 3.214c.446.166.855.497.925.968a.979.979 0 0 1-.276.837l-1.61 1.61a2.404 2.404 0 0 1-1.705.707 2.402 2.402 0 0 1-1.704-.706l-1.568-1.568a1.026 1.026 0 0 0-.877-.29c-.493.074-.84.504-1.02.968a2.5 2.5 0 1 1-3.237-3.237c.464-.18.894-.527.967-1.02a1.026 1.026 0 0 0-.289-.877l-1.568-1.568A2.402 2.402 0 0 1 1.998 12c0-.617.236-1.234.706-1.704L4.23 8.77c.24-.24.581-.353.917-.303.515.076.874.54 1.02 1.02a2.5 2.5 0 1 0 3.237-3.237c-.48-.146-.944-.505-1.02-1.02a.98.98 0 0 1 .303-.917l1.526-1.526A2.402 2.402 0 0 1 11.998 2c.617 0 1.234.236 1.704.706l1.568 1.568c.23.23.556.338.877.29.493-.074.84-.504 1.02-.968a2.5 2.5 0 1 1 3.236 3.236c-.464.18-.894.527-.967 1.02Z"/></svg>`,info:d`<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg>`,send:d`<svg viewBox="0 0 24 24"><path d="m22 2-7 20-4-9-9-4Z"/><path d="M22 2 11 13"/></svg>`,smile:d`<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M8 14s1.5 2 4 2 4-2 4-2"/><line x1="9" y1="9" x2="9.01" y2="9"/><line x1="15" y1="9" x2="15.01" y2="9"/></svg>`,slidersHorizontal:d`<svg viewBox="0 0 24 24"><line x1="21" x2="14" y1="4" y2="4"/><line x1="10" x2="3" y1="4" y2="4"/><line x1="21" x2="12" y1="12" y2="12"/><line x1="8" x2="3" y1="12" y2="12"/><line x1="21" x2="16" y1="20" y2="20"/><line x1="12" x2="3" y1="20" y2="20"/><line x1="14" x2="14" y1="2" y2="6"/><line x1="8" x2="8" y1="10" y2="14"/><line x1="16" x2="16" y1="18" y2="22"/></svg>`,square:d`<svg viewBox="0 0 24 24"><rect width="14" height="14" x="5" y="5" rx="2"/></svg>`,eye:d`<svg viewBox="0 0 24 24"><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg>`,eyeOff:d`<svg viewBox="0 0 24 24"><path d="M9.88 9.88a3 3 0 1 0 4.24 4.24"/><path d="M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68"/><path d="M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61"/><line x1="2" x2="22" y1="2" y2="22"/></svg>`,trash:d`<svg viewBox="0 0 24 24"><path d="M3 6h18"/><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"/><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/></svg>`,chevronDown:d`<svg viewBox="0 0 24 24"><path d="m6 9 6 6 6-6"/></svg>`,film:d`<svg viewBox="0 0 24 24"><rect width="18" height="18" x="3" y="3" rx="2"/><path d="M7 3v18"/><path d="M3 7.5h4"/><path d="M3 12h18"/><path d="M3 16.5h4"/><path d="M17 3v18"/><path d="M17 7.5h4"/><path d="M17 16.5h4"/></svg>`},Rp="Taskmaster",Ip="/taskmaster-icon.png",xl="#00d4ff";let xn=null;function Oe(){return xn||(xn={name:window.__TASKMASTER_BRAND_NAME__||Rp,iconUrl:window.__TASKMASTER_BRAND_ICON_URL__||Ip,accentColor:window.__TASKMASTER_ACCENT_COLOR__||xl},xn)}function Np(e){const t=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);return t?`${parseInt(t[1],16)}, ${parseInt(t[2],16)}, ${parseInt(t[3],16)}`:null}function Dp(e){if(e===xl)return;const t=Np(e);if(!t)return;const n=document.documentElement;n.style.setProperty("--accent",e),n.style.setProperty("--accent-hover",e),n.style.setProperty("--accent-muted",e),n.style.setProperty("--primary",e),n.style.setProperty("--ring",e),n.style.setProperty("--accent-subtle",`rgba(${t}, 0.15)`),n.style.setProperty("--accent-glow",`rgba(${t}, 0.25)`),n.style.setProperty("--tasker-orange",e),n.style.setProperty("--tasker-orange-hover",e),n.style.setProperty("--tasker-orange-glow",`rgba(${t}, 0.25)`)}const Op=d`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg>`;let mr=!1;function Bp(){mr||(mr=!0,document.addEventListener("click",e=>{const t=document.getElementById("nav-burger-toggle");!t?.checked||t.closest(".setup-header")?.contains(e.target)||(t.checked=!1)}))}function tt(e,t){const n=(a,c)=>a===e?d`<span class="sp-page-nav-current">${a}</span>`:d`<a href=${c}>${a}</a>`,s=d`
|
|
19
19
|
${n("Setup","/setup")}
|
|
20
20
|
${n("Chat","/chat")}
|
|
21
21
|
${n("Admins","/admins")}
|
|
@@ -23,11 +23,11 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
23
23
|
${n("Files","/files")}
|
|
24
24
|
${n("Browser","/browser")}
|
|
25
25
|
${n("Advanced","/advanced")}
|
|
26
|
-
`,o=t&&(t.isMaster!==!1||!t.hasPins)?
|
|
26
|
+
`,o=t&&(t.isMaster!==!1||!t.hasPins)?Fp(t):b,r=t?.hasPins&&t.onLogout?d`<button class="nav-logout-btn" @click=${t.onLogout} title="Lock">${Op}</button>`:b,l=()=>{const a=document.getElementById("nav-burger-toggle");a&&(a.checked=!1)};return Bp(),d`
|
|
27
27
|
<div class="setup-header">
|
|
28
28
|
<input type="checkbox" id="nav-burger-toggle" class="nav-burger-checkbox" />
|
|
29
29
|
<div class="setup-header-inner">
|
|
30
|
-
<img class="setup-header-logo" src="${
|
|
30
|
+
<img class="setup-header-logo" src="${Oe().iconUrl}" alt="${Oe().name}" />
|
|
31
31
|
<nav class="setup-header-nav">
|
|
32
32
|
${s}
|
|
33
33
|
</nav>
|
|
@@ -44,7 +44,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
44
44
|
${s}
|
|
45
45
|
</nav>
|
|
46
46
|
</div>
|
|
47
|
-
`}function
|
|
47
|
+
`}function Fp(e){const{workspaces:t,selectedWorkspace:n,onWorkspaceSelect:s}=e;return d`
|
|
48
48
|
<select
|
|
49
49
|
class="sp-workspace-selector"
|
|
50
50
|
.value=${n??""}
|
|
@@ -58,7 +58,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
58
58
|
<option disabled>───</option>
|
|
59
59
|
<option value="__add__">+ Add Account</option>
|
|
60
60
|
</select>
|
|
61
|
-
`}function
|
|
61
|
+
`}function Up(e){return e.connected?d`
|
|
62
62
|
<div class="setup-container">
|
|
63
63
|
${tt("Browser")}
|
|
64
64
|
<div class="setup-card sp-card-wide">
|
|
@@ -143,20 +143,20 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
143
143
|
<p>Connecting to gateway...</p>
|
|
144
144
|
</div>
|
|
145
145
|
</div>
|
|
146
|
-
`}const Gn="application/x-taskmaster-file-path";function
|
|
146
|
+
`}const Gn="application/x-taskmaster-file-path";function Al(e){return e==null?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function $l(e){const t=e.split("/");return t.length>1?t.slice(0,-1).join("/"):"."}function Wp(e,t,n){e.preventDefault(),e.stopPropagation(),e.currentTarget.classList.remove("sp-drop-target");const s=e.dataTransfer?.getData(Gn);if(s){$l(s)!==t&&n.onMoveToDir(s,t);return}const i=e.dataTransfer?.files;if(i&&i.length>0){const o=Array.from(i).filter(r=>r.name.toLowerCase().endsWith(".md"));o.length>0&&n.onUpload(t,o)}}function El(e,t,n){const s=e.type==="directory"||e.type==="symlink"&&e.children!=null,i=t.expandedDirs.has(e.path),o=t.selectedPaths.has(e.path),r=n*20+12;return s?d`
|
|
147
147
|
<div
|
|
148
148
|
class="sp-tree-item sp-tree-dir ${i?"expanded":""}"
|
|
149
149
|
style="padding-left: ${r}px;"
|
|
150
150
|
@click=${()=>t.onToggleDir(e.path)}
|
|
151
151
|
@dragover=${l=>{l.preventDefault(),l.stopPropagation(),l.dataTransfer&&(l.dataTransfer.dropEffect="move"),l.currentTarget.classList.add("sp-drop-target")}}
|
|
152
152
|
@dragleave=${l=>{l.currentTarget.classList.remove("sp-drop-target")}}
|
|
153
|
-
@drop=${l=>
|
|
153
|
+
@drop=${l=>Wp(l,e.path,t)}
|
|
154
154
|
>
|
|
155
155
|
<span class="sp-tree-chevron">${i?"−":"+"}</span>
|
|
156
156
|
<span class="sp-tree-icon">${N.folder}</span>
|
|
157
157
|
<span class="sp-tree-name">${e.name}</span>
|
|
158
158
|
</div>
|
|
159
|
-
${i&&e.children?e.children.map(l=>
|
|
159
|
+
${i&&e.children?e.children.map(l=>El(l,t,n+1)):b}
|
|
160
160
|
`:d`
|
|
161
161
|
<div
|
|
162
162
|
class="sp-tree-item sp-tree-file ${o?"selected":""}"
|
|
@@ -167,9 +167,9 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
167
167
|
>
|
|
168
168
|
<span class="sp-tree-icon">${N.fileText}</span>
|
|
169
169
|
<span class="sp-tree-name">${e.name}</span>
|
|
170
|
-
<span class="sp-tree-size">${
|
|
170
|
+
<span class="sp-tree-size">${Al(e.size)}</span>
|
|
171
171
|
</div>
|
|
172
|
-
`}function
|
|
172
|
+
`}function Kp(e){const t=e.selectedPaths.size;return t<2?b:d`
|
|
173
173
|
<div class="sp-bulk-actions">
|
|
174
174
|
<span style="color: var(--tasker-muted-grey); font-size: 13px;">${t} files selected</span>
|
|
175
175
|
<button
|
|
@@ -180,7 +180,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
180
180
|
Download ${t} files
|
|
181
181
|
</button>
|
|
182
182
|
</div>
|
|
183
|
-
`}function
|
|
183
|
+
`}function zp(e){if(e.selectedPaths.size!==1||!e.selectedPath)return b;if(e.previewLoading)return d`
|
|
184
184
|
<div class="sp-file-preview">
|
|
185
185
|
<div class="setup-spinner" style="width: 32px; height: 32px; margin: 24px auto;"></div>
|
|
186
186
|
</div>
|
|
@@ -190,7 +190,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
190
190
|
<div>
|
|
191
191
|
<strong>${t}</strong>
|
|
192
192
|
<div class="sp-file-preview-meta">
|
|
193
|
-
${e.selectedPath}${e.previewSize!=null?` — ${
|
|
193
|
+
${e.selectedPath}${e.previewSize!=null?` — ${Al(e.previewSize)}`:""}
|
|
194
194
|
</div>
|
|
195
195
|
</div>
|
|
196
196
|
<div class="sp-file-actions">
|
|
@@ -207,7 +207,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
207
207
|
</div>
|
|
208
208
|
${e.previewBinary?d`<div class="sp-file-preview-body"><p style="color: var(--tasker-muted-grey);">Binary file — use Download to view.</p></div>`:e.previewContent!=null?d`<div class="sp-file-preview-body"><pre class="sp-file-code">${e.previewContent}</pre></div>`:d`<div class="sp-file-preview-body"><p style="color: var(--tasker-muted-grey);">File too large for preview — use Download.</p></div>`}
|
|
209
209
|
</div>
|
|
210
|
-
`}function
|
|
210
|
+
`}function jp(e){if(!e.selectedPath)return".";if(e.expandedDirs.has(e.selectedPath))return e.selectedPath;const t=e.selectedPath.split("/");return t.length>1?t.slice(0,-1).join("/"):"."}function Hp(e){const t=jp(e);return e.connected?d`
|
|
211
211
|
<div class="setup-container">
|
|
212
212
|
${tt("Files",e.wsProps)}
|
|
213
213
|
<div class="setup-card sp-card-wide">
|
|
@@ -261,13 +261,13 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
261
261
|
<div
|
|
262
262
|
class="sp-file-tree"
|
|
263
263
|
@dragover=${n=>{n.preventDefault(),n.dataTransfer&&(n.dataTransfer.dropEffect=n.dataTransfer.types.includes(Gn)?"move":"copy")}}
|
|
264
|
-
@drop=${n=>{n.preventDefault();const s=n.dataTransfer?.getData(Gn);if(s){
|
|
264
|
+
@drop=${n=>{n.preventDefault();const s=n.dataTransfer?.getData(Gn);if(s){$l(s)!=="."&&e.onMoveToDir(s,".");return}const i=n.dataTransfer?.files;if(i&&i.length>0){const o=Array.from(i).filter(r=>r.name.toLowerCase().endsWith(".md"));o.length>0&&e.onUpload(t,o)}}}
|
|
265
265
|
>
|
|
266
|
-
${e.tree.length===0&&!e.loading?d`<div style="padding: 24px; color: var(--tasker-muted-grey); text-align: center;">No files found. Drop .md files here to upload.</div>`:e.tree.map(n=>
|
|
266
|
+
${e.tree.length===0&&!e.loading?d`<div style="padding: 24px; color: var(--tasker-muted-grey); text-align: center;">No files found. Drop .md files here to upload.</div>`:e.tree.map(n=>El(n,e,0))}
|
|
267
267
|
</div>
|
|
268
268
|
|
|
269
|
-
${
|
|
270
|
-
${
|
|
269
|
+
${Kp(e)}
|
|
270
|
+
${zp(e)}
|
|
271
271
|
</div>
|
|
272
272
|
</div>
|
|
273
273
|
`:d`
|
|
@@ -277,12 +277,12 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
277
277
|
<p>Connecting to gateway...</p>
|
|
278
278
|
</div>
|
|
279
279
|
</div>
|
|
280
|
-
`}function le(e){return d`
|
|
280
|
+
`}const ao="taskmaster_uninstall_done";async function qp(e){if(!(!e.client||!e.connected)&&!e.uninstallBusy){e.uninstallBusy=!0,e.uninstallError=null,e.requestUpdate?.(),Vp();try{await e.client.request("system.uninstall",{scopes:["service","state","workspace"],purge:!0})}catch{}e.uninstallBusy=!1,e.uninstallDone=!0,e.requestUpdate?.()}}function Tl(){try{return localStorage.getItem(ao)==="1"}catch{return!1}}function Gp(){try{localStorage.removeItem(ao)}catch{}}function Vp(){try{localStorage.setItem(ao,"1")}catch{}}const yr=Object.freeze(Object.defineProperty({__proto__:null,checkUninstallDone:Tl,clearUninstallDone:Gp,runUninstall:qp},Symbol.toStringTag,{value:"Module"}));function le(e){return d`
|
|
281
281
|
<span
|
|
282
282
|
class="setup-status-light"
|
|
283
283
|
style="background: ${{good:"#22c55e",bad:"#ef4444",partial:"#eab308",unknown:"#6b7280"}[e]}"
|
|
284
284
|
></span>
|
|
285
|
-
`}function
|
|
285
|
+
`}function xt(e,t){return d`
|
|
286
286
|
<button
|
|
287
287
|
class="setup-info-btn"
|
|
288
288
|
@click=${()=>t.onInfoModalOpen(e)}
|
|
@@ -290,7 +290,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
290
290
|
>
|
|
291
291
|
${N.info}
|
|
292
292
|
</button>
|
|
293
|
-
`}function
|
|
293
|
+
`}function Yp(e){if(!e.infoModalOpen)return b;let t="",n=[];switch(e.infoModalOpen){case"gateway":{const s=typeof window<"u"?window.location.host:"unknown";t="Gateway",n=[{label:"Status",value:e.gatewayHealthy===!1?"Stopped":"Running"},{label:"Address",value:s},{label:"Health",value:e.gatewayHealthMessage||"OK"}];break}case"claude":{const s=e.authExpiresIn;let i="N/A";if(s!=null&&s>0)if(s>60){const o=Math.floor(s/60),r=s%60;i=r>0?`${o}h ${r}m`:`${o}h`}else i=`${s}m`;t="Claude",n=[{label:"Connected",value:e.authConnected?"Yes":"No"},{label:"Token Expiry",value:i},{label:"Renewal",value:"Automatic (tokens refresh on expiry)"},...e.authMessage?[{label:"Message",value:e.authMessage}]:[]];break}case"license":{const s=e.licenseStoredKey?`…${e.licenseStoredKey.slice(-12)}`:"N/A";t="License",n=[{label:"Status",value:e.licenseValid?"Active":"Inactive"},{label:"Key",value:s},{label:"Tier",value:e.licenseTier||"Standard"},{label:"Device ID",value:e.licenseDeviceId||"N/A"}];break}case"whatsapp":{const s=At(e),i=s?lo(s,e):null;t="WhatsApp",n=[{label:"Account",value:i?.name||i?.accountId||"Default"},{label:"Phone",value:i?.self?.e164||"Not paired"},{label:"Connected",value:i?.connected?"Yes":"No"},{label:"Linked",value:i?.linked?"Yes":"No"},...i?.lastError?[{label:"Last Error",value:i.lastError}]:[]];break}case"imessage":{const{thisWsOwns:s}=co(e);t="iMessage",n=[{label:"Connected",value:s&&e.imessageConnected?"Yes":"No"},{label:"Assigned To",value:e.imessageOwnerWorkspace??"Not assigned"},{label:"Mode",value:"Self-chat only"},...e.imessageLastError?[{label:"Last Error",value:e.imessageLastError}]:[]];break}case"update":{t="Software Update",n=[{label:"Current",value:e.currentVersion?`v${e.currentVersion}`:"Unknown"},{label:"Latest",value:e.latestVersion?`v${e.latestVersion}`:"Unknown"},{label:"Status",value:e.updateAvailable===null?"Not checked":e.updateAvailable?"Update available":"Up to date"},...e.updateMessage?[{label:"Message",value:e.updateMessage}]:[]];break}default:return b}return d`
|
|
294
294
|
<div class="setup-info-overlay" @click=${s=>{s.target.classList.contains("setup-info-overlay")&&e.onInfoModalClose()}}>
|
|
295
295
|
<div class="setup-info-card">
|
|
296
296
|
<h3>${t}</h3>
|
|
@@ -309,7 +309,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
309
309
|
</button>
|
|
310
310
|
</div>
|
|
311
311
|
</div>
|
|
312
|
-
`}function
|
|
312
|
+
`}function ge(e){const t=[{id:"license",label:"1. Activate License"},{id:"auth",label:"2. Connect Claude"},{id:"whatsapp",label:"3. Link WhatsApp"}],n=["license","auth","whatsapp","complete"],s=n.indexOf(e);return d`
|
|
313
313
|
<div class="setup-steps">
|
|
314
314
|
${t.map(i=>{const o=n.indexOf(i.id),r=e===i.id,l=s>o;return d`
|
|
315
315
|
<div
|
|
@@ -320,10 +320,10 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
320
320
|
</div>
|
|
321
321
|
`})}
|
|
322
322
|
</div>
|
|
323
|
-
`}function
|
|
323
|
+
`}function vr(e){const{licenseKey:t,licenseBusy:n,licenseValid:s,licenseMessage:i,licenseDeviceId:o,onLicenseKeyChange:r,onLicenseActivate:l}=e;return s===!0?d`
|
|
324
324
|
<div class="setup-container">
|
|
325
325
|
<div class="setup-card setup-success">
|
|
326
|
-
${
|
|
326
|
+
${ge("license")}
|
|
327
327
|
<div class="setup-status-row">
|
|
328
328
|
${le("good")}
|
|
329
329
|
<span>License Activated</span>
|
|
@@ -334,7 +334,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
334
334
|
`:n&&!t?d`
|
|
335
335
|
<div class="setup-container">
|
|
336
336
|
<div class="setup-card">
|
|
337
|
-
${
|
|
337
|
+
${ge("license")}
|
|
338
338
|
<div class="setup-spinner"></div>
|
|
339
339
|
<p>Checking license...</p>
|
|
340
340
|
</div>
|
|
@@ -342,7 +342,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
342
342
|
`:d`
|
|
343
343
|
<div class="setup-container">
|
|
344
344
|
<div class="setup-card">
|
|
345
|
-
${
|
|
345
|
+
${ge("license")}
|
|
346
346
|
<h1>Activate License</h1>
|
|
347
347
|
<p>Enter your license key to get started.</p>
|
|
348
348
|
${o?d`
|
|
@@ -391,10 +391,10 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
391
391
|
</p>
|
|
392
392
|
</div>
|
|
393
393
|
</div>
|
|
394
|
-
`}function
|
|
394
|
+
`}function Qp(e){const{authConnected:t,authBusy:n,authMessage:s,authUrl:i,authCodeInput:o,authExpiresIn:r,onStartAuth:l,onSubmitAuthCode:a,onAuthCodeChange:c,onSkipToWhatsApp:u}=e;return t===!0?d`
|
|
395
395
|
<div class="setup-container">
|
|
396
396
|
<div class="setup-card setup-success">
|
|
397
|
-
${
|
|
397
|
+
${ge("auth")}
|
|
398
398
|
<div class="setup-status-row">
|
|
399
399
|
${le("good")}
|
|
400
400
|
<span>Claude Connected</span>
|
|
@@ -413,7 +413,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
413
413
|
`:n&&!i?d`
|
|
414
414
|
<div class="setup-container">
|
|
415
415
|
<div class="setup-card">
|
|
416
|
-
${
|
|
416
|
+
${ge("auth")}
|
|
417
417
|
<div class="setup-spinner"></div>
|
|
418
418
|
<p>Starting Claude connection...</p>
|
|
419
419
|
</div>
|
|
@@ -421,7 +421,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
421
421
|
`:i?d`
|
|
422
422
|
<div class="setup-container">
|
|
423
423
|
<div class="setup-card">
|
|
424
|
-
${
|
|
424
|
+
${ge("auth")}
|
|
425
425
|
<h1>Connect to Claude</h1>
|
|
426
426
|
<p>Click the button below to sign in with your Claude Pro account.</p>
|
|
427
427
|
<a
|
|
@@ -462,7 +462,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
462
462
|
`:e.authApiKeyMode?d`
|
|
463
463
|
<div class="setup-container">
|
|
464
464
|
<div class="setup-card">
|
|
465
|
-
${
|
|
465
|
+
${ge("auth")}
|
|
466
466
|
<h1>Enter API Key</h1>
|
|
467
467
|
<p>Paste your Anthropic API key below.</p>
|
|
468
468
|
<div class="setup-code-input">
|
|
@@ -498,7 +498,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
498
498
|
`:d`
|
|
499
499
|
<div class="setup-container">
|
|
500
500
|
<div class="setup-card">
|
|
501
|
-
${
|
|
501
|
+
${ge("auth")}
|
|
502
502
|
<h1>Connect to Claude</h1>
|
|
503
503
|
${t===!1&&s?d`<p class="setup-error">${s}</p>`:d`<p>
|
|
504
504
|
First, let's connect your Claude Pro subscription.<br />
|
|
@@ -520,7 +520,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
520
520
|
</p>
|
|
521
521
|
</div>
|
|
522
522
|
</div>
|
|
523
|
-
`}function
|
|
523
|
+
`}function lo(e,t){const n=new Map(t.whatsappAccounts.map(s=>[s.accountId,s]));return e.whatsappAccountId?n.get(e.whatsappAccountId)??null:e.isDefault&&t.whatsappAccounts.length===1?t.whatsappAccounts[0]??null:null}function At(e){const t=e.wsProps?.selectedWorkspace;return t?e.workspaces.find(n=>n.name===t)??null:e.workspaces[0]??null}function br(e){const t=At(e),n=t?.displayName??t?.name??Oe().name,s=e.whatsappBusy||e.gatewayHealthLoading;if(e.renamingWorkspace&&t){const i=()=>{const o=e.renameWorkspaceName.trim();o&&e.onWorkspaceRename(t.name,o)};return d`
|
|
524
524
|
<div style="display: flex; align-items: center; gap: 6px; margin-bottom: 4px;">
|
|
525
525
|
<input
|
|
526
526
|
type="text"
|
|
@@ -562,14 +562,14 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
562
562
|
${N.rotateCw}
|
|
563
563
|
</button>
|
|
564
564
|
</div>
|
|
565
|
-
`}function
|
|
565
|
+
`}function wr(e){return d`
|
|
566
566
|
<div class="setup-status-item">
|
|
567
567
|
${le(e.gatewayHealthy===!1?"bad":"good")}
|
|
568
568
|
<div class="setup-status-info">
|
|
569
569
|
<strong>Gateway</strong>
|
|
570
570
|
<span>${e.gatewayHealthMessage||"Running"}</span>
|
|
571
571
|
</div>
|
|
572
|
-
${
|
|
572
|
+
${xt("gateway",e)}
|
|
573
573
|
<button
|
|
574
574
|
class="setup-status-action ${e.gatewayRestartBusy?"spinning":""}"
|
|
575
575
|
?disabled=${e.gatewayRestartBusy}
|
|
@@ -579,7 +579,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
579
579
|
${N.rotateCw}
|
|
580
580
|
</button>
|
|
581
581
|
</div>
|
|
582
|
-
`}function
|
|
582
|
+
`}function kr(e){const t=e.authConnected===!0;return d`
|
|
583
583
|
<div class="setup-status-item">
|
|
584
584
|
${le(t?"good":"bad")}
|
|
585
585
|
<div class="setup-status-info">
|
|
@@ -588,7 +588,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
588
588
|
${t?"Connected":"Not connected"}${t&&e.authExpiresIn?d` <span style="color: var(--tasker-text-grey); font-size: 12px;">(${e.authExpiresIn>60?`${Math.floor(e.authExpiresIn/60)}h ${e.authExpiresIn%60}m`:`${e.authExpiresIn}m`})</span>`:b}
|
|
589
589
|
</span>
|
|
590
590
|
</div>
|
|
591
|
-
${
|
|
591
|
+
${xt("claude",e)}
|
|
592
592
|
${t?d`
|
|
593
593
|
<button
|
|
594
594
|
class="setup-status-action ${e.authBusy?"spinning":""}"
|
|
@@ -608,14 +608,14 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
608
608
|
</button>
|
|
609
609
|
`}
|
|
610
610
|
</div>
|
|
611
|
-
`}function
|
|
611
|
+
`}function Sr(e){return d`
|
|
612
612
|
<div class="setup-status-item" style="flex-wrap: wrap;">
|
|
613
613
|
${le("good")}
|
|
614
614
|
<div class="setup-status-info">
|
|
615
615
|
<strong>License</strong>
|
|
616
616
|
<span>Active</span>
|
|
617
617
|
</div>
|
|
618
|
-
${
|
|
618
|
+
${xt("license",e)}
|
|
619
619
|
<button
|
|
620
620
|
class="setup-status-action"
|
|
621
621
|
@click=${()=>{e.licenseRemoveConfirm?e.onLicenseRemoveCancel():e.onLicenseRemoveConfirm()}}
|
|
@@ -626,7 +626,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
626
626
|
${e.licenseRemoveConfirm?d`
|
|
627
627
|
<div style="width: 100%; margin-top: 8px; margin-left: 30px;">
|
|
628
628
|
<p style="color: var(--tasker-text-grey); font-size: 13px; margin: 0 0 8px;">
|
|
629
|
-
Removing your license will disable ${
|
|
629
|
+
Removing your license will disable ${Oe().name} until you enter a new key.
|
|
630
630
|
</p>
|
|
631
631
|
<div style="display: flex; gap: 8px;">
|
|
632
632
|
<button
|
|
@@ -648,7 +648,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
648
648
|
</div>
|
|
649
649
|
`:b}
|
|
650
650
|
</div>
|
|
651
|
-
`}function
|
|
651
|
+
`}function xr(e){const t=At(e);if(!t)return b;const n=lo(t,e),s=n?.running&&n?.connected,i=n?.linked&&!s,o=!!n,r=s?"good":i?"partial":o?"bad":"unknown",l=s?"Connected":i?"Linked, not connected":o?n?.lastError||"Not connected":"Not paired",a=!n?.provider||n?.provider==="baileys",c=t.whatsappAccountId??(t.isDefault&&e.whatsappAccounts.length===1?e.whatsappAccounts[0]?.accountId:void 0),u=c!=null&&e.whatsappActiveQrAccountId===c;return d`
|
|
652
652
|
<div class="setup-status-item" style="flex-wrap: wrap;">
|
|
653
653
|
${le(r)}
|
|
654
654
|
<div class="setup-status-info">
|
|
@@ -667,7 +667,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
667
667
|
</div>
|
|
668
668
|
<span>${l}</span>
|
|
669
669
|
</div>
|
|
670
|
-
${
|
|
670
|
+
${xt("whatsapp",e)}
|
|
671
671
|
${a&&c?d`
|
|
672
672
|
<button
|
|
673
673
|
class="setup-status-action ${e.whatsappBusy&&u?"spinning":""}"
|
|
@@ -691,7 +691,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
691
691
|
</div>
|
|
692
692
|
`:b}
|
|
693
693
|
</div>
|
|
694
|
-
`}const
|
|
694
|
+
`}const Xp=[{id:"claude-opus-4-6",shortName:"Opus"},{id:"claude-sonnet-4-5-20250929",shortName:"Sonnet"},{id:"claude-haiku-4-5-20251001",shortName:"Haiku"}],Zp="anthropic/claude-sonnet-4-5-20250929",Jp=[{value:"off",label:"Off"},{value:"minimal",label:"Minimal"},{value:"low",label:"Low"},{value:"medium",label:"Medium"},{value:"high",label:"High"}];function eh(e){if(!e.whatsappSettingsOpen)return b;const t=At(e);if(!t)return b;const n=lo(t,e),s=n?.running&&n?.connected;if(!n||!s)return b;const i=()=>e.onWhatsAppSettingsClose(),o=e.whatsappModelCatalog??[],r=new Set(o.filter(u=>u.provider==="anthropic").map(u=>u.id)),l=Xp.filter(u=>r.has(u.id)),a=e.whatsappModel??Zp,c=e.whatsappThinkingLevel??"off";return d`
|
|
695
695
|
<div class="setup-info-overlay" @click=${u=>{u.target.classList.contains("setup-info-overlay")&&i()}}>
|
|
696
696
|
<div class="setup-info-card" style="max-width: 360px;">
|
|
697
697
|
<h3>Public Agent Settings</h3>
|
|
@@ -777,7 +777,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
777
777
|
.value=${c}
|
|
778
778
|
@change=${u=>{e.onWhatsAppThinkingChange(u.target.value)}}
|
|
779
779
|
>
|
|
780
|
-
${
|
|
780
|
+
${Jp.map(u=>d`
|
|
781
781
|
<option value=${u.value} ?selected=${c===u.value}>
|
|
782
782
|
${u.label}
|
|
783
783
|
</option>
|
|
@@ -794,14 +794,14 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
794
794
|
</button>
|
|
795
795
|
</div>
|
|
796
796
|
</div>
|
|
797
|
-
`}function
|
|
797
|
+
`}function co(e){const t=At(e),n=e.imessageOwnerWorkspace,s=!!(t&&n===t.name),i=!!(n&&t&&n!==t.name);return{selectedWs:t,ownerWs:n,thisWsOwns:s,anotherWsOwns:i}}function Ar(e){const{ownerWs:t,thisWsOwns:n,anotherWsOwns:s}=co(e);let i,o;return s?(i="partial",o=`Connected to ${t}`):n&&e.imessageConnected?(i="good",o="Connected"):n&&e.imessageRunning?(i="partial",o="Running, not connected"):n?(i="bad",o="Not running"):e.imessageConfigured?(i="unknown",o="Not connected"):(i="bad",o="Not configured"),d`
|
|
798
798
|
<div class="setup-status-item" style="flex-wrap: wrap;">
|
|
799
799
|
${le(i)}
|
|
800
800
|
<div class="setup-status-info">
|
|
801
801
|
<strong>iMessage</strong>
|
|
802
802
|
<span>${o}</span>
|
|
803
803
|
</div>
|
|
804
|
-
${
|
|
804
|
+
${xt("imessage",e)}
|
|
805
805
|
<button
|
|
806
806
|
class="setup-status-action ${e.imessageEnabling?"spinning":""}"
|
|
807
807
|
?disabled=${e.imessageEnabling}
|
|
@@ -812,7 +812,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
812
812
|
</button>
|
|
813
813
|
${b}
|
|
814
814
|
</div>
|
|
815
|
-
`}function
|
|
815
|
+
`}function th(e){if(!e.imessageEnableConfirm)return b;const{ownerWs:t,thisWsOwns:n,anotherWsOwns:s}=co(e),i=()=>{e.onIMessageEnableCancel()};return n?d`
|
|
816
816
|
<div class="setup-info-overlay" @click=${o=>{o.target.classList.contains("setup-info-overlay")&&i()}}>
|
|
817
817
|
<div class="setup-info-card" style="text-align: center;">
|
|
818
818
|
<h3>iMessage</h3>
|
|
@@ -869,7 +869,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
869
869
|
<div class="setup-info-card" style="text-align: center;">
|
|
870
870
|
<h3>Enable iMessage</h3>
|
|
871
871
|
<p style="color: var(--tasker-text-grey); font-size: 13px; margin: 8px 0 16px;">
|
|
872
|
-
${
|
|
872
|
+
${Oe().name} will respond to messages in Messages.app for this business.
|
|
873
873
|
</p>
|
|
874
874
|
<button
|
|
875
875
|
class="setup-button primary"
|
|
@@ -888,7 +888,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
888
888
|
</button>
|
|
889
889
|
</div>
|
|
890
890
|
</div>
|
|
891
|
-
`}function
|
|
891
|
+
`}function $r(e){if(!e.isMaster)return b;const t=e.apiKeyProviders,n=t.filter(i=>i.hasKey).length,s=t.length;return d`
|
|
892
892
|
<div style="margin-top: 16px; border-top: 1px solid var(--tasker-border, rgba(255,255,255,0.1)); padding-top: 16px;">
|
|
893
893
|
<div class="setup-status-item">
|
|
894
894
|
${le(n>0?"good":"bad")}
|
|
@@ -902,8 +902,8 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
902
902
|
>Manage</button>
|
|
903
903
|
</div>
|
|
904
904
|
</div>
|
|
905
|
-
${
|
|
906
|
-
`}function
|
|
905
|
+
${nh(e)}
|
|
906
|
+
`}function nh(e){if(!e.apiKeyModalOpen)return b;const t=e.apiKeyProviders,n={};for(const r of t)r.key&&(n[r.id]=r.key);const s=(r,l)=>{const u=l?.closest(".setup-apikey-input")?.querySelector("input")?.value.trim();!u||u===n[r]||e.onApiKeySave(r,u)},i=r=>{const l=r.currentTarget,c=l.closest(".setup-apikey-input")?.querySelector("input");if(!c)return;const u=c.type==="text";c.type=u?"password":"text",l.classList.toggle("active",!u)},o=(r,l)=>{const a=l.target,c=a.closest(".setup-apikey-input"),u=a.value.trim(),p=u.length>0&&u!==n[r],m=c?.querySelector(".setup-apikey-save");m&&(m.style.display=p?"":"none");const v=c?.querySelector(".setup-apikey-eye");v&&(v.style.display=u.length>0?"":"none")};return d`
|
|
907
907
|
<div class="setup-info-overlay" style="align-items: flex-start; padding-top: 72px;" @click=${r=>{r.target.classList.contains("setup-info-overlay")&&e.onApiKeyModalClose()}}>
|
|
908
908
|
<div class="setup-info-card" style="max-width: 480px;">
|
|
909
909
|
<h3 style="margin: 0 0 4px; text-align: center;">API Keys</h3>
|
|
@@ -951,14 +951,14 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
951
951
|
</div>
|
|
952
952
|
</div>
|
|
953
953
|
</div>
|
|
954
|
-
`}function
|
|
954
|
+
`}function Er(e){const t=e.updateAvailable===null?"unknown":e.updateAvailable?"partial":"good",n=e.updateAvailable&&e.latestVersion?`v${e.currentVersion} → v${e.latestVersion}`:e.currentVersion?`v${e.currentVersion}`:"Unknown",s=e.updateChecking||e.updateRunning;return d`
|
|
955
955
|
<div class="setup-status-item">
|
|
956
956
|
${le(t)}
|
|
957
957
|
<div class="setup-status-info">
|
|
958
958
|
<strong>Software</strong>
|
|
959
959
|
<span>${n}</span>
|
|
960
960
|
</div>
|
|
961
|
-
${
|
|
961
|
+
${xt("update",e)}
|
|
962
962
|
${e.updateAvailable?d`
|
|
963
963
|
<button
|
|
964
964
|
class="setup-status-action ${s?"spinning":""}"
|
|
@@ -979,7 +979,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
979
979
|
</button>
|
|
980
980
|
`}
|
|
981
981
|
</div>
|
|
982
|
-
`}function
|
|
982
|
+
`}function sh(e){const t=e.updateRunning,n=e.updateLastResult;if(!t&&!n)return b;if(t)return d`
|
|
983
983
|
<div class="setup-info-overlay">
|
|
984
984
|
<div class="setup-info-card" style="max-width: 400px;">
|
|
985
985
|
<h3>Software Update</h3>
|
|
@@ -991,7 +991,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
991
991
|
${s.status==="running"?d`<span class="setup-update-spinner"></span>`:s.status==="done"?d`<span class="setup-update-check">✓</span>`:d`<span class="setup-update-cross">✗</span>`}
|
|
992
992
|
</span>
|
|
993
993
|
<span class="setup-update-step-name">${s.name}</span>
|
|
994
|
-
${s.durationMs!=null?d`<span class="setup-update-step-time">${
|
|
994
|
+
${s.durationMs!=null?d`<span class="setup-update-step-time">${Tr(s.durationMs)}</span>`:b}
|
|
995
995
|
</div>
|
|
996
996
|
`)}
|
|
997
997
|
</div>
|
|
@@ -999,7 +999,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
999
999
|
${e.updateMessage?d`<p style="text-align: center; color: var(--tasker-text-grey); font-size: 13px; margin: 12px 0 0;">${e.updateMessage}</p>`:b}
|
|
1000
1000
|
</div>
|
|
1001
1001
|
</div>
|
|
1002
|
-
`;if(n){const s=n.status==="ok";let i;if(s){const r=n.before?.version,l=n.after?.version??n.currentVersion;i=r?`v${r} → v${l}`:`Updated to v${l}`}else i=n.reason??n.failedStep?.name??"unknown error";const o=n.durationMs!=null
|
|
1002
|
+
`;if(n){const s=n.status==="ok";let i;if(s){const r=n.before?.version,l=n.after?.version??n.currentVersion;i=r?`v${r} → v${l}`:`Updated to v${l}`}else i=n.reason??n.failedStep?.name??"unknown error";const o=n.durationMs!=null?Tr(n.durationMs):null;return d`
|
|
1003
1003
|
<div class="setup-info-overlay" @click=${r=>{r.target.classList.contains("setup-info-overlay")&&e.onUpdateDismissResult()}}>
|
|
1004
1004
|
<div class="setup-info-card" style="max-width: 360px; text-align: center;">
|
|
1005
1005
|
<div style="font-size: 40px; margin-bottom: 8px;">${s?"✓":"✗"}</div>
|
|
@@ -1019,7 +1019,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1019
1019
|
</button>
|
|
1020
1020
|
</div>
|
|
1021
1021
|
</div>
|
|
1022
|
-
`}return b}function
|
|
1022
|
+
`}return b}function Tr(e){if(e<1e3)return`${e}ms`;const t=Math.round(e/1e3);if(t<60)return`${t}s`;const n=Math.floor(t/60),s=t%60;return s>0?`${n}m ${s}s`:`${n}m`}function ih(e){const t=e.accountHasPin;return d`
|
|
1023
1023
|
<div class="setup-status-item">
|
|
1024
1024
|
${le(t?"good":"bad")}
|
|
1025
1025
|
<div class="setup-status-info">
|
|
@@ -1031,7 +1031,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1031
1031
|
@click=${()=>e.onAccountPinModalOpen()}
|
|
1032
1032
|
>${t?"Change":"Set PIN"}</button>
|
|
1033
1033
|
</div>
|
|
1034
|
-
`}function
|
|
1034
|
+
`}function oh(e){if(!e.accountPinModalOpen)return b;const t=e.accountHasPin,n=e.accountPinBusy;let s="",i="",o="";const r=c=>u=>{const p=u.target;p.value=p.value.replace(/\D/g,"").slice(0,6),c(p.value)},l=(c,u)=>{let p=c.querySelector(".pin-modal-validation");p||(p=document.createElement("p"),p.className="login-error pin-modal-validation",c.querySelector("button[type=submit]")?.before(p)),p.textContent=u},a=c=>{c.preventDefault();const u=c.target;if(!n){if(t&&!s){l(u,"Enter your current PIN");return}if(!i){l(u,"Enter a new PIN");return}if(!o){l(u,"Confirm your new PIN");return}if(i!==o){l(u,"PINs do not match");return}if(i.length<4){l(u,"PIN must be 4–6 digits");return}e.onAccountPinSave(t?s:null,i)}};return d`
|
|
1035
1035
|
<div class="setup-info-overlay" @click=${c=>{c.target.classList.contains("setup-info-overlay")&&e.onAccountPinModalClose()}}>
|
|
1036
1036
|
<div class="setup-info-card" style="max-width: 340px;">
|
|
1037
1037
|
<div class="setup-info-header">
|
|
@@ -1088,7 +1088,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1088
1088
|
</form>
|
|
1089
1089
|
</div>
|
|
1090
1090
|
</div>
|
|
1091
|
-
`}function
|
|
1091
|
+
`}function Cr(e){if(!e.addingWorkspace)return b;const{workspaceSaving:t}=e;return d`
|
|
1092
1092
|
<div style="margin-top: 16px; border-top: 1px solid var(--tasker-border, rgba(255,255,255,0.1)); padding-top: 16px;">
|
|
1093
1093
|
<div class="setup-add-account">
|
|
1094
1094
|
<strong>New Account</strong>
|
|
@@ -1141,7 +1141,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1141
1141
|
</div>
|
|
1142
1142
|
</div>
|
|
1143
1143
|
</div>
|
|
1144
|
-
`}function
|
|
1144
|
+
`}function _r(e){const t=At(e);return!t||t.isDefault?b:e.workspaceRemoveConfirm===t.name?d`
|
|
1145
1145
|
<div style="margin-top: 16px; border-top: 1px solid var(--tasker-border, rgba(255,255,255,0.1)); padding-top: 12px;">
|
|
1146
1146
|
<div style="font-size: 13px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap;">
|
|
1147
1147
|
<span style="color: var(--tasker-danger, #ef4444);">Remove "${t.displayName??t.name}" and its WhatsApp account?</span>
|
|
@@ -1170,7 +1170,62 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1170
1170
|
@click=${s=>{s.preventDefault(),e.onSetWorkspaceRemoveConfirm(t.name)}}
|
|
1171
1171
|
>Remove Account</a>
|
|
1172
1172
|
</p>
|
|
1173
|
-
`}function
|
|
1173
|
+
`}function Mr(e){if(e.uninstallDone)return d`
|
|
1174
|
+
<div style="margin-top: 24px; border-top: 1px solid var(--tasker-border, rgba(255,255,255,0.1)); padding-top: 16px;">
|
|
1175
|
+
<p style="color: var(--tasker-danger, #ef4444); font-size: 13px; font-weight: 600; margin: 0 0 8px 0;">
|
|
1176
|
+
Taskmaster has been uninstalled.
|
|
1177
|
+
</p>
|
|
1178
|
+
<p style="font-size: 12px; color: var(--tasker-text-grey); margin: 0;">
|
|
1179
|
+
If the npm package was not removed automatically, run:<br/>
|
|
1180
|
+
<code style="font-size: 11px; background: rgba(255,255,255,0.06); padding: 2px 6px; border-radius: 3px;">sudo npm uninstall -g @rubytech/taskmaster</code>
|
|
1181
|
+
</p>
|
|
1182
|
+
</div>
|
|
1183
|
+
`;if(e.uninstallConfirm){const t=e.uninstallConfirmText==="UNINSTALL";return d`
|
|
1184
|
+
<div style="margin-top: 24px; border-top: 1px solid var(--tasker-border, rgba(255,255,255,0.1)); padding-top: 16px;">
|
|
1185
|
+
<p style="color: var(--tasker-danger, #ef4444); font-size: 13px; font-weight: 600; margin: 0 0 8px 0;">
|
|
1186
|
+
Uninstall Taskmaster
|
|
1187
|
+
</p>
|
|
1188
|
+
<p style="font-size: 12px; color: var(--tasker-text-grey); margin: 0 0 12px 0;">
|
|
1189
|
+
This will stop the gateway, remove all configuration, workspace files, and the npm package.
|
|
1190
|
+
This cannot be undone.
|
|
1191
|
+
</p>
|
|
1192
|
+
<div style="display: flex; align-items: center; gap: 8px; flex-wrap: wrap;">
|
|
1193
|
+
<input
|
|
1194
|
+
type="text"
|
|
1195
|
+
placeholder="Type UNINSTALL to confirm"
|
|
1196
|
+
.value=${e.uninstallConfirmText}
|
|
1197
|
+
?disabled=${e.uninstallBusy}
|
|
1198
|
+
@input=${n=>e.onUninstallConfirmTextChange(n.target.value)}
|
|
1199
|
+
style="font-size: 12px; padding: 4px 8px; background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.15); border-radius: 4px; color: inherit; width: 180px;"
|
|
1200
|
+
/>
|
|
1201
|
+
<button
|
|
1202
|
+
class="setup-button danger"
|
|
1203
|
+
style="font-size: 12px; padding: 4px 12px;"
|
|
1204
|
+
?disabled=${!t||e.uninstallBusy}
|
|
1205
|
+
@click=${e.onUninstallRun}
|
|
1206
|
+
>
|
|
1207
|
+
${e.uninstallBusy?"Uninstalling…":"Uninstall"}
|
|
1208
|
+
</button>
|
|
1209
|
+
<button
|
|
1210
|
+
class="setup-button secondary"
|
|
1211
|
+
style="font-size: 12px; padding: 4px 12px;"
|
|
1212
|
+
?disabled=${e.uninstallBusy}
|
|
1213
|
+
@click=${e.onUninstallCancel}
|
|
1214
|
+
>
|
|
1215
|
+
Cancel
|
|
1216
|
+
</button>
|
|
1217
|
+
</div>
|
|
1218
|
+
${e.uninstallError?d`<p class="setup-error" style="margin-top: 8px; font-size: 12px;">${e.uninstallError}</p>`:b}
|
|
1219
|
+
</div>
|
|
1220
|
+
`}return d`
|
|
1221
|
+
<p class="setup-hint" style="margin-top: 8px;">
|
|
1222
|
+
<a
|
|
1223
|
+
href="#"
|
|
1224
|
+
class="setup-link-danger"
|
|
1225
|
+
@click=${t=>{t.preventDefault(),e.onUninstallConfirm()}}
|
|
1226
|
+
>Uninstall Taskmaster</a>
|
|
1227
|
+
</p>
|
|
1228
|
+
`}function rh(e){const{whatsappBusy:t,whatsappLoginMessage:n,whatsappLoginQrDataUrl:s,whatsappLoginConnected:i,whatsappChannelStatus:o}=e;if(s)return d`
|
|
1174
1229
|
<div class="setup-container">
|
|
1175
1230
|
<div class="setup-card">
|
|
1176
1231
|
<h1>Scan with WhatsApp</h1>
|
|
@@ -1184,7 +1239,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1184
1239
|
Scan the code above with your phone
|
|
1185
1240
|
</p>`}
|
|
1186
1241
|
<p class="setup-hint" style="margin-top: 16px;">
|
|
1187
|
-
<strong>Important:</strong> If you see "${
|
|
1242
|
+
<strong>Important:</strong> If you see "${Oe().name}" in your Linked
|
|
1188
1243
|
Devices, remove it first before scanning.
|
|
1189
1244
|
</p>
|
|
1190
1245
|
<div class="setup-actions" style="margin-top: 24px;">
|
|
@@ -1207,47 +1262,49 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1207
1262
|
`;const r=o?.running&&o?.connected;return o?(e.whatsappAccounts.length>1?e.whatsappAccounts.every(u=>u.running&&u.connected):r)&&e.authConnected?d`
|
|
1208
1263
|
<div class="setup-container">
|
|
1209
1264
|
<div class="setup-card setup-success">
|
|
1210
|
-
${
|
|
1265
|
+
${br(e)}
|
|
1211
1266
|
<div class="setup-status-dashboard">
|
|
1212
|
-
${vr(e)}
|
|
1213
|
-
${br(e)}
|
|
1214
1267
|
${wr(e)}
|
|
1215
1268
|
${kr(e)}
|
|
1216
1269
|
${Sr(e)}
|
|
1217
|
-
${Xp(e)}
|
|
1218
1270
|
${xr(e)}
|
|
1271
|
+
${Ar(e)}
|
|
1272
|
+
${ih(e)}
|
|
1273
|
+
${Er(e)}
|
|
1219
1274
|
</div>
|
|
1220
1275
|
|
|
1221
|
-
${
|
|
1222
|
-
${
|
|
1223
|
-
${
|
|
1224
|
-
${
|
|
1276
|
+
${oh(e)}
|
|
1277
|
+
${$r(e)}
|
|
1278
|
+
${Cr(e)}
|
|
1279
|
+
${_r(e)}
|
|
1280
|
+
${Mr(e)}
|
|
1225
1281
|
${e.workspacesError?d`<p class="setup-error" style="margin-top: 8px;">${e.workspacesError}</p>`:b}
|
|
1226
1282
|
</div>
|
|
1227
1283
|
</div>
|
|
1228
1284
|
`:d`
|
|
1229
1285
|
<div class="setup-container">
|
|
1230
1286
|
<div class="setup-card">
|
|
1231
|
-
${
|
|
1287
|
+
${br(e)}
|
|
1232
1288
|
<div class="setup-status-dashboard">
|
|
1233
|
-
${vr(e)}
|
|
1234
|
-
${br(e)}
|
|
1235
1289
|
${wr(e)}
|
|
1236
1290
|
${kr(e)}
|
|
1237
1291
|
${Sr(e)}
|
|
1238
1292
|
${xr(e)}
|
|
1293
|
+
${Ar(e)}
|
|
1294
|
+
${Er(e)}
|
|
1239
1295
|
</div>
|
|
1240
1296
|
|
|
1241
|
-
${
|
|
1242
|
-
${
|
|
1243
|
-
${
|
|
1297
|
+
${$r(e)}
|
|
1298
|
+
${Cr(e)}
|
|
1299
|
+
${_r(e)}
|
|
1300
|
+
${Mr(e)}
|
|
1244
1301
|
${e.workspacesError?d`<p class="setup-error" style="margin-top: 8px;">${e.workspacesError}</p>`:b}
|
|
1245
1302
|
</div>
|
|
1246
1303
|
</div>
|
|
1247
1304
|
`:o?i===!1&&n&&!t?d`
|
|
1248
1305
|
<div class="setup-container">
|
|
1249
1306
|
<div class="setup-card">
|
|
1250
|
-
${
|
|
1307
|
+
${ge("whatsapp")}
|
|
1251
1308
|
<div class="setup-status-row">
|
|
1252
1309
|
${le("bad")}
|
|
1253
1310
|
<span>Connection Failed</span>
|
|
@@ -1265,7 +1322,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1265
1322
|
`:d`
|
|
1266
1323
|
<div class="setup-container">
|
|
1267
1324
|
<div class="setup-card">
|
|
1268
|
-
${
|
|
1325
|
+
${ge("whatsapp")}
|
|
1269
1326
|
${n?d`<p class="setup-error">${n}</p>`:d`<div class="setup-spinner"></div>
|
|
1270
1327
|
<p>Preparing...</p>`}
|
|
1271
1328
|
</div>
|
|
@@ -1273,7 +1330,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1273
1330
|
`:d`
|
|
1274
1331
|
<div class="setup-container">
|
|
1275
1332
|
<div class="setup-card">
|
|
1276
|
-
${
|
|
1333
|
+
${ge("whatsapp")}
|
|
1277
1334
|
<div class="setup-spinner"></div>
|
|
1278
1335
|
<p>Checking connection status...</p>
|
|
1279
1336
|
<button
|
|
@@ -1285,14 +1342,36 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1285
1342
|
</button>
|
|
1286
1343
|
</div>
|
|
1287
1344
|
</div>
|
|
1288
|
-
`}function
|
|
1345
|
+
`}function ah(e){const{connected:t,currentStep:n}=e;if(e.uninstallDone||Tl())return d`
|
|
1346
|
+
<div class="setup-container">
|
|
1347
|
+
<div class="setup-card">
|
|
1348
|
+
<p style="color: var(--tasker-danger, #ef4444); font-size: 16px; font-weight: 600; margin: 0 0 12px 0;">
|
|
1349
|
+
Taskmaster has been uninstalled.
|
|
1350
|
+
</p>
|
|
1351
|
+
<p style="font-size: 13px; color: var(--tasker-text-grey); margin: 0 0 16px 0;">
|
|
1352
|
+
The gateway service, configuration, and workspace files have been removed.
|
|
1353
|
+
</p>
|
|
1354
|
+
<p style="font-size: 13px; color: var(--tasker-text-grey); margin: 0 0 16px 0;">
|
|
1355
|
+
If the npm package was not removed automatically, run:
|
|
1356
|
+
</p>
|
|
1357
|
+
<code style="display: block; font-size: 12px; background: rgba(255,255,255,0.06); padding: 8px 12px; border-radius: 4px; margin: 0 0 16px 0;">sudo npm uninstall -g @rubytech/taskmaster</code>
|
|
1358
|
+
<button
|
|
1359
|
+
class="setup-button secondary"
|
|
1360
|
+
style="font-size: 12px;"
|
|
1361
|
+
@click=${e.onUninstallDismiss}
|
|
1362
|
+
>
|
|
1363
|
+
Dismiss
|
|
1364
|
+
</button>
|
|
1365
|
+
</div>
|
|
1366
|
+
</div>
|
|
1367
|
+
`;if(!t){const o=e.updateRunning;return d`
|
|
1289
1368
|
<div class="setup-container">
|
|
1290
1369
|
<div class="setup-card">
|
|
1291
1370
|
<div class="setup-spinner"></div>
|
|
1292
1371
|
<p>${o?"Restarting gateway after update…":"Connecting to gateway..."}</p>
|
|
1293
1372
|
</div>
|
|
1294
1373
|
</div>
|
|
1295
|
-
`}let s;switch(n){case"license":s=
|
|
1374
|
+
`}let s;switch(n){case"license":s=vr(e);break;case"auth":s=Qp(e);break;case"whatsapp":case"complete":s=rh(e);break;default:s=vr(e)}const i=tt("Setup",e.wsProps);return d`${s}${Yp(e)}${th(e)}${eh(e)}${sh(e)}${i}`}function lh(e,t){const n=e.paired?"Paired phone (used to link WhatsApp)":"Admin access via WhatsApp DM";return d`
|
|
1296
1375
|
<div class="sp-list-item">
|
|
1297
1376
|
<div class="sp-list-item-main">
|
|
1298
1377
|
<div class="sp-list-item-title">${e.phone}</div>
|
|
@@ -1307,7 +1386,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1307
1386
|
Remove
|
|
1308
1387
|
</button>`}
|
|
1309
1388
|
</div>
|
|
1310
|
-
`}function
|
|
1389
|
+
`}function ch(e){if(!e.connected)return d`
|
|
1311
1390
|
<div class="setup-container">
|
|
1312
1391
|
<div class="setup-card">
|
|
1313
1392
|
<div class="setup-spinner"></div>
|
|
@@ -1356,7 +1435,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1356
1435
|
</form>
|
|
1357
1436
|
|
|
1358
1437
|
<div class="sp-list" style="margin-top: 20px;">
|
|
1359
|
-
${e.phones.length===0?d`<div class="sp-list-empty">No admin phones configured yet.</div>`:e.phones.map(n=>
|
|
1438
|
+
${e.phones.length===0?d`<div class="sp-list-empty">No admin phones configured yet.</div>`:e.phones.map(n=>lh(n,e))}
|
|
1360
1439
|
</div>
|
|
1361
1440
|
|
|
1362
1441
|
<div class="setup-hint" style="margin-top: 20px; padding: 14px; background: rgba(0, 0, 0, 0.2); border-radius: 8px; text-align: left;">
|
|
@@ -1367,7 +1446,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1367
1446
|
|
|
1368
1447
|
</div>
|
|
1369
1448
|
</div>
|
|
1370
|
-
`}function
|
|
1449
|
+
`}function uh(e){return Object.keys(e.fields).length}function dh(e,t){const n=Object.entries(e.fields);return d`
|
|
1371
1450
|
<div class="customers-record-fields">
|
|
1372
1451
|
${n.length===0?d`<div style="color: rgba(255,255,255,0.4); font-size: 13px; margin-top: 12px;">No fields yet. Add one below.</div>`:n.map(([s,i])=>d`
|
|
1373
1452
|
<div class="customers-field-row">
|
|
@@ -1414,7 +1493,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1414
1493
|
</button>
|
|
1415
1494
|
</div>
|
|
1416
1495
|
</div>
|
|
1417
|
-
`}function
|
|
1496
|
+
`}function ph(e,t){const n=t.editingId===e.id,s=uh(e),i=s===0?"No fields":`${s} field${s>1?"s":""}`;return d`
|
|
1418
1497
|
<div class="customers-record">
|
|
1419
1498
|
<div
|
|
1420
1499
|
class="customers-record-header"
|
|
@@ -1426,9 +1505,9 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1426
1505
|
</div>
|
|
1427
1506
|
<span class="customers-record-meta">${i}</span>
|
|
1428
1507
|
</div>
|
|
1429
|
-
${n?
|
|
1508
|
+
${n?dh(e,t):b}
|
|
1430
1509
|
</div>
|
|
1431
|
-
`}function
|
|
1510
|
+
`}function hh(e){if(!e.connected)return d`
|
|
1432
1511
|
<div class="setup-container">
|
|
1433
1512
|
<div class="setup-card">
|
|
1434
1513
|
<div class="setup-spinner"></div>
|
|
@@ -1524,7 +1603,7 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1524
1603
|
<div style="margin-top: 16px;">
|
|
1525
1604
|
${e.records.length===0?d`<div class="customers-empty">
|
|
1526
1605
|
${e.searchQuery.trim()?`No records matching "${e.searchQuery}".`:"No customer records yet. Add one to get started."}
|
|
1527
|
-
</div>`:e.records.map(s=>
|
|
1606
|
+
</div>`:e.records.map(s=>ph(s,e))}
|
|
1528
1607
|
</div>
|
|
1529
1608
|
|
|
1530
1609
|
<div class="setup-hint" style="margin-top: 20px; padding: 14px; background: rgba(0, 0, 0, 0.2); border-radius: 8px; text-align: left;">
|
|
@@ -1535,12 +1614,12 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1535
1614
|
</div>
|
|
1536
1615
|
</div>
|
|
1537
1616
|
</div>
|
|
1538
|
-
`}const xl={CHILD:2},$l=e=>(...t)=>({_$litDirective$:e,values:t});let El=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,n,s){this._$Ct=t,this._$AM=n,this._$Ci=s}_$AS(t,n){return this.update(t,n)}update(t,n){return this.render(...n)}};const{I:ah}=cu,Cr=e=>e,_r=()=>document.createComment(""),Pt=(e,t,n)=>{const s=e._$AA.parentNode,i=t===void 0?e._$AB:t._$AA;if(n===void 0){const o=s.insertBefore(_r(),i),r=s.insertBefore(_r(),i);n=new ah(o,r,e,e.options)}else{const o=n._$AB.nextSibling,r=n._$AM,l=r!==e;if(l){let a;n._$AQ?.(e),n._$AM=e,n._$AP!==void 0&&(a=e._$AU)!==r._$AU&&n._$AP(a)}if(o!==i||l){let a=n._$AA;for(;a!==o;){const c=Cr(a).nextSibling;Cr(s).insertBefore(a,i),a=c}}}return n},je=(e,t,n=e)=>(e._$AI(t,n),e),lh={},ch=(e,t=lh)=>e._$AH=t,uh=e=>e._$AH,Fs=e=>{e._$AR(),e._$AA.remove()};const Mr=(e,t,n)=>{const s=new Map;for(let i=t;i<=n;i++)s.set(e[i],i);return s},dh=$l(class extends El{constructor(e){if(super(e),e.type!==xl.CHILD)throw Error("repeat() can only be used in text expressions")}dt(e,t,n){let s;n===void 0?n=t:t!==void 0&&(s=t);const i=[],o=[];let r=0;for(const l of e)i[r]=s?s(l,r):r,o[r]=n(l,r),r++;return{values:o,keys:i}}render(e,t,n){return this.dt(e,t,n).values}update(e,[t,n,s]){const i=uh(e),{values:o,keys:r}=this.dt(t,n,s);if(!Array.isArray(i))return this.ut=r,o;const l=this.ut??=[],a=[];let c,u,p=0,m=i.length-1,v=0,w=o.length-1;for(;p<=m&&v<=w;)if(i[p]===null)p++;else if(i[m]===null)m--;else if(l[p]===r[v])a[v]=je(i[p],o[v]),p++,v++;else if(l[m]===r[w])a[w]=je(i[m],o[w]),m--,w--;else if(l[p]===r[w])a[w]=je(i[p],o[w]),Pt(e,a[w+1],i[p]),p++,w--;else if(l[m]===r[v])a[v]=je(i[m],o[v]),Pt(e,i[p],i[m]),m--,v++;else if(c===void 0&&(c=Mr(r,v,w),u=Mr(l,p,m)),c.has(l[p]))if(c.has(l[m])){const x=u.get(r[v]),_=x!==void 0?i[x]:null;if(_===null){const j=Pt(e,i[p]);je(j,o[v]),a[v]=j}else a[v]=je(_,o[v]),Pt(e,i[p],_),i[x]=null;v++}else Fs(i[m]),m--;else Fs(i[p]),p++;for(;v<=w;){const x=Pt(e,a[w+1]);je(x,o[v]),a[v++]=x}for(;p<=m;){const x=i[p++];x!==null&&Fs(x)}return this.ut=r,ch(e,a),Ne}});class gi extends El{constructor(t){if(super(t),this.it=b,t.type!==xl.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===b||t==null)return this._t=void 0,this.it=t;if(t===Ne)return t;if(typeof t!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this._t;this.it=t;const n=[t];return n.raw=n,this._t={_$litType$:this.constructor.resultType,strings:n,values:[]}}}gi.directiveName="unsafeHTML",gi.resultType=1;const mi=$l(gi);const{entries:Tl,setPrototypeOf:Pr,isFrozen:ph,getPrototypeOf:hh,getOwnPropertyDescriptor:fh}=Object;let{freeze:ie,seal:ce,create:yi}=Object,{apply:vi,construct:bi}=typeof Reflect<"u"&&Reflect;ie||(ie=function(t){return t});ce||(ce=function(t){return t});vi||(vi=function(t,n){for(var s=arguments.length,i=new Array(s>2?s-2:0),o=2;o<s;o++)i[o-2]=arguments[o];return t.apply(n,i)});bi||(bi=function(t){for(var n=arguments.length,s=new Array(n>1?n-1:0),i=1;i<n;i++)s[i-1]=arguments[i];return new t(...s)});const xn=oe(Array.prototype.forEach),gh=oe(Array.prototype.lastIndexOf),Lr=oe(Array.prototype.pop),Lt=oe(Array.prototype.push),mh=oe(Array.prototype.splice),Nn=oe(String.prototype.toLowerCase),Us=oe(String.prototype.toString),Ws=oe(String.prototype.match),Rt=oe(String.prototype.replace),yh=oe(String.prototype.indexOf),vh=oe(String.prototype.trim),de=oe(Object.prototype.hasOwnProperty),ne=oe(RegExp.prototype.test),It=bh(TypeError);function oe(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,s=new Array(n>1?n-1:0),i=1;i<n;i++)s[i-1]=arguments[i];return vi(e,t,s)}}function bh(e){return function(){for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return bi(e,n)}}function R(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Nn;Pr&&Pr(e,null);let s=t.length;for(;s--;){let i=t[s];if(typeof i=="string"){const o=n(i);o!==i&&(ph(t)||(t[s]=o),i=o)}e[i]=!0}return e}function wh(e){for(let t=0;t<e.length;t++)de(e,t)||(e[t]=null);return e}function be(e){const t=yi(null);for(const[n,s]of Tl(e))de(e,n)&&(Array.isArray(s)?t[n]=wh(s):s&&typeof s=="object"&&s.constructor===Object?t[n]=be(s):t[n]=s);return t}function Nt(e,t){for(;e!==null;){const s=fh(e,t);if(s){if(s.get)return oe(s.get);if(typeof s.value=="function")return oe(s.value)}e=hh(e)}function n(){return null}return n}const Rr=ie(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Ks=ie(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),zs=ie(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),kh=ie(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),js=ie(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),Sh=ie(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Ir=ie(["#text"]),Nr=ie(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),Hs=ie(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Or=ie(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),$n=ie(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Ah=ce(/\{\{[\w\W]*|[\w\W]*\}\}/gm),xh=ce(/<%[\w\W]*|[\w\W]*%>/gm),$h=ce(/\$\{[\w\W]*/gm),Eh=ce(/^data-[\-\w.\u00B7-\uFFFF]+$/),Th=ce(/^aria-[\-\w]+$/),Cl=ce(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Ch=ce(/^(?:\w+script|data):/i),_h=ce(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),_l=ce(/^html$/i),Mh=ce(/^[a-z][.\w]*(-[.\w]+)+$/i);var Dr=Object.freeze({__proto__:null,ARIA_ATTR:Th,ATTR_WHITESPACE:_h,CUSTOM_ELEMENT:Mh,DATA_ATTR:Eh,DOCTYPE_NAME:_l,ERB_EXPR:xh,IS_ALLOWED_URI:Cl,IS_SCRIPT_OR_DATA:Ch,MUSTACHE_EXPR:Ah,TMPLIT_EXPR:$h});const Ot={element:1,text:3,progressingInstruction:7,comment:8,document:9},Ph=function(){return typeof window>"u"?null:window},Lh=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let s=null;const i="data-tt-policy-suffix";n&&n.hasAttribute(i)&&(s=n.getAttribute(i));const o="dompurify"+(s?"#"+s:"");try{return t.createPolicy(o,{createHTML(r){return r},createScriptURL(r){return r}})}catch{return console.warn("TrustedTypes policy "+o+" could not be created."),null}},Br=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function Ml(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ph();const t=T=>Ml(T);if(t.version="3.3.1",t.removed=[],!e||!e.document||e.document.nodeType!==Ot.document||!e.Element)return t.isSupported=!1,t;let{document:n}=e;const s=n,i=s.currentScript,{DocumentFragment:o,HTMLTemplateElement:r,Node:l,Element:a,NodeFilter:c,NamedNodeMap:u=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:p,DOMParser:m,trustedTypes:v}=e,w=a.prototype,x=Nt(w,"cloneNode"),_=Nt(w,"remove"),j=Nt(w,"nextSibling"),C=Nt(w,"childNodes"),L=Nt(w,"parentNode");if(typeof r=="function"){const T=n.createElement("template");T.content&&T.content.ownerDocument&&(n=T.content.ownerDocument)}let I,B="";const{implementation:ue,createNodeIterator:it,createDocumentFragment:gs,getElementsByTagName:ms}=n,{importNode:an}=s;let Y=Br();t.isSupported=typeof Tl=="function"&&typeof L=="function"&&ue&&ue.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:Et,ERB_EXPR:ot,TMPLIT_EXPR:Ue,DATA_ATTR:ys,ARIA_ATTR:vs,IS_SCRIPT_OR_DATA:bs,ATTR_WHITESPACE:ln,CUSTOM_ELEMENT:ws}=Dr;let{IS_ALLOWED_URI:cn}=Dr,H=null;const un=R({},[...Rr,...Ks,...zs,...js,...Ir]);let q=null;const dn=R({},[...Nr,...Hs,...Or,...$n]);let W=Object.seal(yi(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),We=null,Tt=null;const Me=Object.seal(yi(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let pn=!0,k=!0,A=!1,M=!0,P=!1,K=!0,F=!1,te=!1,Pe=!1,rt=!1,hn=!1,fn=!1,To=!0,Co=!1;const Rc="user-content-";let ks=!0,Ct=!1,at={},ge=null;const Ss=R({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let _o=null;const Mo=R({},["audio","video","img","source","image","track"]);let As=null;const Po=R({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),gn="http://www.w3.org/1998/Math/MathML",mn="http://www.w3.org/2000/svg",ke="http://www.w3.org/1999/xhtml";let lt=ke,xs=!1,$s=null;const Ic=R({},[gn,mn,ke],Us);let yn=R({},["mi","mo","mn","ms","mtext"]),vn=R({},["annotation-xml"]);const Nc=R({},["title","style","font","a","script"]);let _t=null;const Oc=["application/xhtml+xml","text/html"],Dc="text/html";let V=null,ct=null;const Bc=n.createElement("form"),Lo=function(y){return y instanceof RegExp||y instanceof Function},Es=function(){let y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(ct&&ct===y)){if((!y||typeof y!="object")&&(y={}),y=be(y),_t=Oc.indexOf(y.PARSER_MEDIA_TYPE)===-1?Dc:y.PARSER_MEDIA_TYPE,V=_t==="application/xhtml+xml"?Us:Nn,H=de(y,"ALLOWED_TAGS")?R({},y.ALLOWED_TAGS,V):un,q=de(y,"ALLOWED_ATTR")?R({},y.ALLOWED_ATTR,V):dn,$s=de(y,"ALLOWED_NAMESPACES")?R({},y.ALLOWED_NAMESPACES,Us):Ic,As=de(y,"ADD_URI_SAFE_ATTR")?R(be(Po),y.ADD_URI_SAFE_ATTR,V):Po,_o=de(y,"ADD_DATA_URI_TAGS")?R(be(Mo),y.ADD_DATA_URI_TAGS,V):Mo,ge=de(y,"FORBID_CONTENTS")?R({},y.FORBID_CONTENTS,V):Ss,We=de(y,"FORBID_TAGS")?R({},y.FORBID_TAGS,V):be({}),Tt=de(y,"FORBID_ATTR")?R({},y.FORBID_ATTR,V):be({}),at=de(y,"USE_PROFILES")?y.USE_PROFILES:!1,pn=y.ALLOW_ARIA_ATTR!==!1,k=y.ALLOW_DATA_ATTR!==!1,A=y.ALLOW_UNKNOWN_PROTOCOLS||!1,M=y.ALLOW_SELF_CLOSE_IN_ATTR!==!1,P=y.SAFE_FOR_TEMPLATES||!1,K=y.SAFE_FOR_XML!==!1,F=y.WHOLE_DOCUMENT||!1,rt=y.RETURN_DOM||!1,hn=y.RETURN_DOM_FRAGMENT||!1,fn=y.RETURN_TRUSTED_TYPE||!1,Pe=y.FORCE_BODY||!1,To=y.SANITIZE_DOM!==!1,Co=y.SANITIZE_NAMED_PROPS||!1,ks=y.KEEP_CONTENT!==!1,Ct=y.IN_PLACE||!1,cn=y.ALLOWED_URI_REGEXP||Cl,lt=y.NAMESPACE||ke,yn=y.MATHML_TEXT_INTEGRATION_POINTS||yn,vn=y.HTML_INTEGRATION_POINTS||vn,W=y.CUSTOM_ELEMENT_HANDLING||{},y.CUSTOM_ELEMENT_HANDLING&&Lo(y.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(W.tagNameCheck=y.CUSTOM_ELEMENT_HANDLING.tagNameCheck),y.CUSTOM_ELEMENT_HANDLING&&Lo(y.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(W.attributeNameCheck=y.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),y.CUSTOM_ELEMENT_HANDLING&&typeof y.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(W.allowCustomizedBuiltInElements=y.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),P&&(k=!1),hn&&(rt=!0),at&&(H=R({},Ir),q=[],at.html===!0&&(R(H,Rr),R(q,Nr)),at.svg===!0&&(R(H,Ks),R(q,Hs),R(q,$n)),at.svgFilters===!0&&(R(H,zs),R(q,Hs),R(q,$n)),at.mathMl===!0&&(R(H,js),R(q,Or),R(q,$n))),y.ADD_TAGS&&(typeof y.ADD_TAGS=="function"?Me.tagCheck=y.ADD_TAGS:(H===un&&(H=be(H)),R(H,y.ADD_TAGS,V))),y.ADD_ATTR&&(typeof y.ADD_ATTR=="function"?Me.attributeCheck=y.ADD_ATTR:(q===dn&&(q=be(q)),R(q,y.ADD_ATTR,V))),y.ADD_URI_SAFE_ATTR&&R(As,y.ADD_URI_SAFE_ATTR,V),y.FORBID_CONTENTS&&(ge===Ss&&(ge=be(ge)),R(ge,y.FORBID_CONTENTS,V)),y.ADD_FORBID_CONTENTS&&(ge===Ss&&(ge=be(ge)),R(ge,y.ADD_FORBID_CONTENTS,V)),ks&&(H["#text"]=!0),F&&R(H,["html","head","body"]),H.table&&(R(H,["tbody"]),delete We.tbody),y.TRUSTED_TYPES_POLICY){if(typeof y.TRUSTED_TYPES_POLICY.createHTML!="function")throw It('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof y.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw It('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');I=y.TRUSTED_TYPES_POLICY,B=I.createHTML("")}else I===void 0&&(I=Lh(v,i)),I!==null&&typeof B=="string"&&(B=I.createHTML(""));ie&&ie(y),ct=y}},Ro=R({},[...Ks,...zs,...kh]),Io=R({},[...js,...Sh]),Fc=function(y){let S=L(y);(!S||!S.tagName)&&(S={namespaceURI:lt,tagName:"template"});const E=Nn(y.tagName),U=Nn(S.tagName);return $s[y.namespaceURI]?y.namespaceURI===mn?S.namespaceURI===ke?E==="svg":S.namespaceURI===gn?E==="svg"&&(U==="annotation-xml"||yn[U]):!!Ro[E]:y.namespaceURI===gn?S.namespaceURI===ke?E==="math":S.namespaceURI===mn?E==="math"&&vn[U]:!!Io[E]:y.namespaceURI===ke?S.namespaceURI===mn&&!vn[U]||S.namespaceURI===gn&&!yn[U]?!1:!Io[E]&&(Nc[E]||!Ro[E]):!!(_t==="application/xhtml+xml"&&$s[y.namespaceURI]):!1},me=function(y){Lt(t.removed,{element:y});try{L(y).removeChild(y)}catch{_(y)}},Ke=function(y,S){try{Lt(t.removed,{attribute:S.getAttributeNode(y),from:S})}catch{Lt(t.removed,{attribute:null,from:S})}if(S.removeAttribute(y),y==="is")if(rt||hn)try{me(S)}catch{}else try{S.setAttribute(y,"")}catch{}},No=function(y){let S=null,E=null;if(Pe)y="<remove></remove>"+y;else{const G=Ws(y,/^[\r\n\t ]+/);E=G&&G[0]}_t==="application/xhtml+xml"&<===ke&&(y='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+y+"</body></html>");const U=I?I.createHTML(y):y;if(lt===ke)try{S=new m().parseFromString(U,_t)}catch{}if(!S||!S.documentElement){S=ue.createDocument(lt,"template",null);try{S.documentElement.innerHTML=xs?B:U}catch{}}const Z=S.body||S.documentElement;return y&&E&&Z.insertBefore(n.createTextNode(E),Z.childNodes[0]||null),lt===ke?ms.call(S,F?"html":"body")[0]:F?S.documentElement:Z},Oo=function(y){return it.call(y.ownerDocument||y,y,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},Ts=function(y){return y instanceof p&&(typeof y.nodeName!="string"||typeof y.textContent!="string"||typeof y.removeChild!="function"||!(y.attributes instanceof u)||typeof y.removeAttribute!="function"||typeof y.setAttribute!="function"||typeof y.namespaceURI!="string"||typeof y.insertBefore!="function"||typeof y.hasChildNodes!="function")},Do=function(y){return typeof l=="function"&&y instanceof l};function Se(T,y,S){xn(T,E=>{E.call(t,y,S,ct)})}const Bo=function(y){let S=null;if(Se(Y.beforeSanitizeElements,y,null),Ts(y))return me(y),!0;const E=V(y.nodeName);if(Se(Y.uponSanitizeElement,y,{tagName:E,allowedTags:H}),K&&y.hasChildNodes()&&!Do(y.firstElementChild)&&ne(/<[/\w!]/g,y.innerHTML)&&ne(/<[/\w!]/g,y.textContent)||y.nodeType===Ot.progressingInstruction||K&&y.nodeType===Ot.comment&&ne(/<[/\w]/g,y.data))return me(y),!0;if(!(Me.tagCheck instanceof Function&&Me.tagCheck(E))&&(!H[E]||We[E])){if(!We[E]&&Uo(E)&&(W.tagNameCheck instanceof RegExp&&ne(W.tagNameCheck,E)||W.tagNameCheck instanceof Function&&W.tagNameCheck(E)))return!1;if(ks&&!ge[E]){const U=L(y)||y.parentNode,Z=C(y)||y.childNodes;if(Z&&U){const G=Z.length;for(let re=G-1;re>=0;--re){const Ae=x(Z[re],!0);Ae.__removalCount=(y.__removalCount||0)+1,U.insertBefore(Ae,j(y))}}}return me(y),!0}return y instanceof a&&!Fc(y)||(E==="noscript"||E==="noembed"||E==="noframes")&&ne(/<\/no(script|embed|frames)/i,y.innerHTML)?(me(y),!0):(P&&y.nodeType===Ot.text&&(S=y.textContent,xn([Et,ot,Ue],U=>{S=Rt(S,U," ")}),y.textContent!==S&&(Lt(t.removed,{element:y.cloneNode()}),y.textContent=S)),Se(Y.afterSanitizeElements,y,null),!1)},Fo=function(y,S,E){if(To&&(S==="id"||S==="name")&&(E in n||E in Bc))return!1;if(!(k&&!Tt[S]&&ne(ys,S))){if(!(pn&&ne(vs,S))){if(!(Me.attributeCheck instanceof Function&&Me.attributeCheck(S,y))){if(!q[S]||Tt[S]){if(!(Uo(y)&&(W.tagNameCheck instanceof RegExp&&ne(W.tagNameCheck,y)||W.tagNameCheck instanceof Function&&W.tagNameCheck(y))&&(W.attributeNameCheck instanceof RegExp&&ne(W.attributeNameCheck,S)||W.attributeNameCheck instanceof Function&&W.attributeNameCheck(S,y))||S==="is"&&W.allowCustomizedBuiltInElements&&(W.tagNameCheck instanceof RegExp&&ne(W.tagNameCheck,E)||W.tagNameCheck instanceof Function&&W.tagNameCheck(E))))return!1}else if(!As[S]){if(!ne(cn,Rt(E,ln,""))){if(!((S==="src"||S==="xlink:href"||S==="href")&&y!=="script"&&yh(E,"data:")===0&&_o[y])){if(!(A&&!ne(bs,Rt(E,ln,"")))){if(E)return!1}}}}}}}return!0},Uo=function(y){return y!=="annotation-xml"&&Ws(y,ws)},Wo=function(y){Se(Y.beforeSanitizeAttributes,y,null);const{attributes:S}=y;if(!S||Ts(y))return;const E={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:q,forceKeepAttr:void 0};let U=S.length;for(;U--;){const Z=S[U],{name:G,namespaceURI:re,value:Ae}=Z,ut=V(G),Cs=Ae;let X=G==="value"?Cs:vh(Cs);if(E.attrName=ut,E.attrValue=X,E.keepAttr=!0,E.forceKeepAttr=void 0,Se(Y.uponSanitizeAttribute,y,E),X=E.attrValue,Co&&(ut==="id"||ut==="name")&&(Ke(G,y),X=Rc+X),K&&ne(/((--!?|])>)|<\/(style|title|textarea)/i,X)){Ke(G,y);continue}if(ut==="attributename"&&Ws(X,"href")){Ke(G,y);continue}if(E.forceKeepAttr)continue;if(!E.keepAttr){Ke(G,y);continue}if(!M&&ne(/\/>/i,X)){Ke(G,y);continue}P&&xn([Et,ot,Ue],zo=>{X=Rt(X,zo," ")});const Ko=V(y.nodeName);if(!Fo(Ko,ut,X)){Ke(G,y);continue}if(I&&typeof v=="object"&&typeof v.getAttributeType=="function"&&!re)switch(v.getAttributeType(Ko,ut)){case"TrustedHTML":{X=I.createHTML(X);break}case"TrustedScriptURL":{X=I.createScriptURL(X);break}}if(X!==Cs)try{re?y.setAttributeNS(re,G,X):y.setAttribute(G,X),Ts(y)?me(y):Lr(t.removed)}catch{Ke(G,y)}}Se(Y.afterSanitizeAttributes,y,null)},Uc=function T(y){let S=null;const E=Oo(y);for(Se(Y.beforeSanitizeShadowDOM,y,null);S=E.nextNode();)Se(Y.uponSanitizeShadowNode,S,null),Bo(S),Wo(S),S.content instanceof o&&T(S.content);Se(Y.afterSanitizeShadowDOM,y,null)};return t.sanitize=function(T){let y=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},S=null,E=null,U=null,Z=null;if(xs=!T,xs&&(T="<!-->"),typeof T!="string"&&!Do(T))if(typeof T.toString=="function"){if(T=T.toString(),typeof T!="string")throw It("dirty is not a string, aborting")}else throw It("toString is not a function");if(!t.isSupported)return T;if(te||Es(y),t.removed=[],typeof T=="string"&&(Ct=!1),Ct){if(T.nodeName){const Ae=V(T.nodeName);if(!H[Ae]||We[Ae])throw It("root node is forbidden and cannot be sanitized in-place")}}else if(T instanceof l)S=No("<!---->"),E=S.ownerDocument.importNode(T,!0),E.nodeType===Ot.element&&E.nodeName==="BODY"||E.nodeName==="HTML"?S=E:S.appendChild(E);else{if(!rt&&!P&&!F&&T.indexOf("<")===-1)return I&&fn?I.createHTML(T):T;if(S=No(T),!S)return rt?null:fn?B:""}S&&Pe&&me(S.firstChild);const G=Oo(Ct?T:S);for(;U=G.nextNode();)Bo(U),Wo(U),U.content instanceof o&&Uc(U.content);if(Ct)return T;if(rt){if(hn)for(Z=gs.call(S.ownerDocument);S.firstChild;)Z.appendChild(S.firstChild);else Z=S;return(q.shadowroot||q.shadowrootmode)&&(Z=an.call(s,Z,!0)),Z}let re=F?S.outerHTML:S.innerHTML;return F&&H["!doctype"]&&S.ownerDocument&&S.ownerDocument.doctype&&S.ownerDocument.doctype.name&&ne(_l,S.ownerDocument.doctype.name)&&(re="<!DOCTYPE "+S.ownerDocument.doctype.name+`>
|
|
1539
|
-
`+re),
|
|
1540
|
-
]`).replace("lheading",
|
|
1617
|
+
`}const Cl={CHILD:2},_l=e=>(...t)=>({_$litDirective$:e,values:t});let Ml=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,n,s){this._$Ct=t,this._$AM=n,this._$Ci=s}_$AS(t,n){return this.update(t,n)}update(t,n){return this.render(...n)}};const{I:fh}=hu,Lr=e=>e,Pr=()=>document.createComment(""),Lt=(e,t,n)=>{const s=e._$AA.parentNode,i=t===void 0?e._$AB:t._$AA;if(n===void 0){const o=s.insertBefore(Pr(),i),r=s.insertBefore(Pr(),i);n=new fh(o,r,e,e.options)}else{const o=n._$AB.nextSibling,r=n._$AM,l=r!==e;if(l){let a;n._$AQ?.(e),n._$AM=e,n._$AP!==void 0&&(a=e._$AU)!==r._$AU&&n._$AP(a)}if(o!==i||l){let a=n._$AA;for(;a!==o;){const c=Lr(a).nextSibling;Lr(s).insertBefore(a,i),a=c}}}return n},je=(e,t,n=e)=>(e._$AI(t,n),e),gh={},mh=(e,t=gh)=>e._$AH=t,yh=e=>e._$AH,Fs=e=>{e._$AR(),e._$AA.remove()};const Rr=(e,t,n)=>{const s=new Map;for(let i=t;i<=n;i++)s.set(e[i],i);return s},vh=_l(class extends Ml{constructor(e){if(super(e),e.type!==Cl.CHILD)throw Error("repeat() can only be used in text expressions")}dt(e,t,n){let s;n===void 0?n=t:t!==void 0&&(s=t);const i=[],o=[];let r=0;for(const l of e)i[r]=s?s(l,r):r,o[r]=n(l,r),r++;return{values:o,keys:i}}render(e,t,n){return this.dt(e,t,n).values}update(e,[t,n,s]){const i=yh(e),{values:o,keys:r}=this.dt(t,n,s);if(!Array.isArray(i))return this.ut=r,o;const l=this.ut??=[],a=[];let c,u,p=0,m=i.length-1,v=0,w=o.length-1;for(;p<=m&&v<=w;)if(i[p]===null)p++;else if(i[m]===null)m--;else if(l[p]===r[v])a[v]=je(i[p],o[v]),p++,v++;else if(l[m]===r[w])a[w]=je(i[m],o[w]),m--,w--;else if(l[p]===r[w])a[w]=je(i[p],o[w]),Lt(e,a[w+1],i[p]),p++,w--;else if(l[m]===r[v])a[v]=je(i[m],o[v]),Lt(e,i[p],i[m]),m--,v++;else if(c===void 0&&(c=Rr(r,v,w),u=Rr(l,p,m)),c.has(l[p]))if(c.has(l[m])){const A=u.get(r[v]),_=A!==void 0?i[A]:null;if(_===null){const j=Lt(e,i[p]);je(j,o[v]),a[v]=j}else a[v]=je(_,o[v]),Lt(e,i[p],_),i[A]=null;v++}else Fs(i[m]),m--;else Fs(i[p]),p++;for(;v<=w;){const A=Lt(e,a[w+1]);je(A,o[v]),a[v++]=A}for(;p<=m;){const A=i[p++];A!==null&&Fs(A)}return this.ut=r,mh(e,a),Ne}});class gi extends Ml{constructor(t){if(super(t),this.it=b,t.type!==Cl.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===b||t==null)return this._t=void 0,this.it=t;if(t===Ne)return t;if(typeof t!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this._t;this.it=t;const n=[t];return n.raw=n,this._t={_$litType$:this.constructor.resultType,strings:n,values:[]}}}gi.directiveName="unsafeHTML",gi.resultType=1;const mi=_l(gi);const{entries:Ll,setPrototypeOf:Ir,isFrozen:bh,getPrototypeOf:wh,getOwnPropertyDescriptor:kh}=Object;let{freeze:ie,seal:ce,create:yi}=Object,{apply:vi,construct:bi}=typeof Reflect<"u"&&Reflect;ie||(ie=function(t){return t});ce||(ce=function(t){return t});vi||(vi=function(t,n){for(var s=arguments.length,i=new Array(s>2?s-2:0),o=2;o<s;o++)i[o-2]=arguments[o];return t.apply(n,i)});bi||(bi=function(t){for(var n=arguments.length,s=new Array(n>1?n-1:0),i=1;i<n;i++)s[i-1]=arguments[i];return new t(...s)});const An=oe(Array.prototype.forEach),Sh=oe(Array.prototype.lastIndexOf),Nr=oe(Array.prototype.pop),Pt=oe(Array.prototype.push),xh=oe(Array.prototype.splice),Nn=oe(String.prototype.toLowerCase),Us=oe(String.prototype.toString),Ws=oe(String.prototype.match),Rt=oe(String.prototype.replace),Ah=oe(String.prototype.indexOf),$h=oe(String.prototype.trim),pe=oe(Object.prototype.hasOwnProperty),ne=oe(RegExp.prototype.test),It=Eh(TypeError);function oe(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,s=new Array(n>1?n-1:0),i=1;i<n;i++)s[i-1]=arguments[i];return vi(e,t,s)}}function Eh(e){return function(){for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return bi(e,n)}}function R(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Nn;Ir&&Ir(e,null);let s=t.length;for(;s--;){let i=t[s];if(typeof i=="string"){const o=n(i);o!==i&&(bh(t)||(t[s]=o),i=o)}e[i]=!0}return e}function Th(e){for(let t=0;t<e.length;t++)pe(e,t)||(e[t]=null);return e}function we(e){const t=yi(null);for(const[n,s]of Ll(e))pe(e,n)&&(Array.isArray(s)?t[n]=Th(s):s&&typeof s=="object"&&s.constructor===Object?t[n]=we(s):t[n]=s);return t}function Nt(e,t){for(;e!==null;){const s=kh(e,t);if(s){if(s.get)return oe(s.get);if(typeof s.value=="function")return oe(s.value)}e=wh(e)}function n(){return null}return n}const Dr=ie(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Ks=ie(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),zs=ie(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Ch=ie(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),js=ie(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),_h=ie(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Or=ie(["#text"]),Br=ie(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),Hs=ie(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Fr=ie(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),$n=ie(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Mh=ce(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Lh=ce(/<%[\w\W]*|[\w\W]*%>/gm),Ph=ce(/\$\{[\w\W]*/gm),Rh=ce(/^data-[\-\w.\u00B7-\uFFFF]+$/),Ih=ce(/^aria-[\-\w]+$/),Pl=ce(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Nh=ce(/^(?:\w+script|data):/i),Dh=ce(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Rl=ce(/^html$/i),Oh=ce(/^[a-z][.\w]*(-[.\w]+)+$/i);var Ur=Object.freeze({__proto__:null,ARIA_ATTR:Ih,ATTR_WHITESPACE:Dh,CUSTOM_ELEMENT:Oh,DATA_ATTR:Rh,DOCTYPE_NAME:Rl,ERB_EXPR:Lh,IS_ALLOWED_URI:Pl,IS_SCRIPT_OR_DATA:Nh,MUSTACHE_EXPR:Mh,TMPLIT_EXPR:Ph});const Dt={element:1,text:3,progressingInstruction:7,comment:8,document:9},Bh=function(){return typeof window>"u"?null:window},Fh=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let s=null;const i="data-tt-policy-suffix";n&&n.hasAttribute(i)&&(s=n.getAttribute(i));const o="dompurify"+(s?"#"+s:"");try{return t.createPolicy(o,{createHTML(r){return r},createScriptURL(r){return r}})}catch{return console.warn("TrustedTypes policy "+o+" could not be created."),null}},Wr=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function Il(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Bh();const t=T=>Il(T);if(t.version="3.3.1",t.removed=[],!e||!e.document||e.document.nodeType!==Dt.document||!e.Element)return t.isSupported=!1,t;let{document:n}=e;const s=n,i=s.currentScript,{DocumentFragment:o,HTMLTemplateElement:r,Node:l,Element:a,NodeFilter:c,NamedNodeMap:u=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:p,DOMParser:m,trustedTypes:v}=e,w=a.prototype,A=Nt(w,"cloneNode"),_=Nt(w,"remove"),j=Nt(w,"nextSibling"),C=Nt(w,"childNodes"),P=Nt(w,"parentNode");if(typeof r=="function"){const T=n.createElement("template");T.content&&T.content.ownerDocument&&(n=T.content.ownerDocument)}let I,B="";const{implementation:ue,createNodeIterator:it,createDocumentFragment:gs,getElementsByTagName:ms}=n,{importNode:an}=s;let Q=Wr();t.isSupported=typeof Ll=="function"&&typeof P=="function"&&ue&&ue.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:Et,ERB_EXPR:ot,TMPLIT_EXPR:Ue,DATA_ATTR:ys,ARIA_ATTR:vs,IS_SCRIPT_OR_DATA:bs,ATTR_WHITESPACE:ln,CUSTOM_ELEMENT:ws}=Ur;let{IS_ALLOWED_URI:cn}=Ur,H=null;const un=R({},[...Dr,...Ks,...zs,...js,...Or]);let q=null;const dn=R({},[...Br,...Hs,...Fr,...$n]);let W=Object.seal(yi(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),We=null,Tt=null;const Me=Object.seal(yi(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let pn=!0,k=!0,x=!1,M=!0,L=!1,K=!0,F=!1,te=!1,Le=!1,rt=!1,hn=!1,fn=!1,Co=!0,_o=!1;const Oc="user-content-";let ks=!0,Ct=!1,at={},me=null;const Ss=R({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Mo=null;const Lo=R({},["audio","video","img","source","image","track"]);let xs=null;const Po=R({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),gn="http://www.w3.org/1998/Math/MathML",mn="http://www.w3.org/2000/svg",Se="http://www.w3.org/1999/xhtml";let lt=Se,As=!1,$s=null;const Bc=R({},[gn,mn,Se],Us);let yn=R({},["mi","mo","mn","ms","mtext"]),vn=R({},["annotation-xml"]);const Fc=R({},["title","style","font","a","script"]);let _t=null;const Uc=["application/xhtml+xml","text/html"],Wc="text/html";let V=null,ct=null;const Kc=n.createElement("form"),Ro=function(y){return y instanceof RegExp||y instanceof Function},Es=function(){let y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(ct&&ct===y)){if((!y||typeof y!="object")&&(y={}),y=we(y),_t=Uc.indexOf(y.PARSER_MEDIA_TYPE)===-1?Wc:y.PARSER_MEDIA_TYPE,V=_t==="application/xhtml+xml"?Us:Nn,H=pe(y,"ALLOWED_TAGS")?R({},y.ALLOWED_TAGS,V):un,q=pe(y,"ALLOWED_ATTR")?R({},y.ALLOWED_ATTR,V):dn,$s=pe(y,"ALLOWED_NAMESPACES")?R({},y.ALLOWED_NAMESPACES,Us):Bc,xs=pe(y,"ADD_URI_SAFE_ATTR")?R(we(Po),y.ADD_URI_SAFE_ATTR,V):Po,Mo=pe(y,"ADD_DATA_URI_TAGS")?R(we(Lo),y.ADD_DATA_URI_TAGS,V):Lo,me=pe(y,"FORBID_CONTENTS")?R({},y.FORBID_CONTENTS,V):Ss,We=pe(y,"FORBID_TAGS")?R({},y.FORBID_TAGS,V):we({}),Tt=pe(y,"FORBID_ATTR")?R({},y.FORBID_ATTR,V):we({}),at=pe(y,"USE_PROFILES")?y.USE_PROFILES:!1,pn=y.ALLOW_ARIA_ATTR!==!1,k=y.ALLOW_DATA_ATTR!==!1,x=y.ALLOW_UNKNOWN_PROTOCOLS||!1,M=y.ALLOW_SELF_CLOSE_IN_ATTR!==!1,L=y.SAFE_FOR_TEMPLATES||!1,K=y.SAFE_FOR_XML!==!1,F=y.WHOLE_DOCUMENT||!1,rt=y.RETURN_DOM||!1,hn=y.RETURN_DOM_FRAGMENT||!1,fn=y.RETURN_TRUSTED_TYPE||!1,Le=y.FORCE_BODY||!1,Co=y.SANITIZE_DOM!==!1,_o=y.SANITIZE_NAMED_PROPS||!1,ks=y.KEEP_CONTENT!==!1,Ct=y.IN_PLACE||!1,cn=y.ALLOWED_URI_REGEXP||Pl,lt=y.NAMESPACE||Se,yn=y.MATHML_TEXT_INTEGRATION_POINTS||yn,vn=y.HTML_INTEGRATION_POINTS||vn,W=y.CUSTOM_ELEMENT_HANDLING||{},y.CUSTOM_ELEMENT_HANDLING&&Ro(y.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(W.tagNameCheck=y.CUSTOM_ELEMENT_HANDLING.tagNameCheck),y.CUSTOM_ELEMENT_HANDLING&&Ro(y.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(W.attributeNameCheck=y.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),y.CUSTOM_ELEMENT_HANDLING&&typeof y.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(W.allowCustomizedBuiltInElements=y.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),L&&(k=!1),hn&&(rt=!0),at&&(H=R({},Or),q=[],at.html===!0&&(R(H,Dr),R(q,Br)),at.svg===!0&&(R(H,Ks),R(q,Hs),R(q,$n)),at.svgFilters===!0&&(R(H,zs),R(q,Hs),R(q,$n)),at.mathMl===!0&&(R(H,js),R(q,Fr),R(q,$n))),y.ADD_TAGS&&(typeof y.ADD_TAGS=="function"?Me.tagCheck=y.ADD_TAGS:(H===un&&(H=we(H)),R(H,y.ADD_TAGS,V))),y.ADD_ATTR&&(typeof y.ADD_ATTR=="function"?Me.attributeCheck=y.ADD_ATTR:(q===dn&&(q=we(q)),R(q,y.ADD_ATTR,V))),y.ADD_URI_SAFE_ATTR&&R(xs,y.ADD_URI_SAFE_ATTR,V),y.FORBID_CONTENTS&&(me===Ss&&(me=we(me)),R(me,y.FORBID_CONTENTS,V)),y.ADD_FORBID_CONTENTS&&(me===Ss&&(me=we(me)),R(me,y.ADD_FORBID_CONTENTS,V)),ks&&(H["#text"]=!0),F&&R(H,["html","head","body"]),H.table&&(R(H,["tbody"]),delete We.tbody),y.TRUSTED_TYPES_POLICY){if(typeof y.TRUSTED_TYPES_POLICY.createHTML!="function")throw It('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof y.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw It('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');I=y.TRUSTED_TYPES_POLICY,B=I.createHTML("")}else I===void 0&&(I=Fh(v,i)),I!==null&&typeof B=="string"&&(B=I.createHTML(""));ie&&ie(y),ct=y}},Io=R({},[...Ks,...zs,...Ch]),No=R({},[...js,..._h]),zc=function(y){let S=P(y);(!S||!S.tagName)&&(S={namespaceURI:lt,tagName:"template"});const E=Nn(y.tagName),U=Nn(S.tagName);return $s[y.namespaceURI]?y.namespaceURI===mn?S.namespaceURI===Se?E==="svg":S.namespaceURI===gn?E==="svg"&&(U==="annotation-xml"||yn[U]):!!Io[E]:y.namespaceURI===gn?S.namespaceURI===Se?E==="math":S.namespaceURI===mn?E==="math"&&vn[U]:!!No[E]:y.namespaceURI===Se?S.namespaceURI===mn&&!vn[U]||S.namespaceURI===gn&&!yn[U]?!1:!No[E]&&(Fc[E]||!Io[E]):!!(_t==="application/xhtml+xml"&&$s[y.namespaceURI]):!1},ye=function(y){Pt(t.removed,{element:y});try{P(y).removeChild(y)}catch{_(y)}},Ke=function(y,S){try{Pt(t.removed,{attribute:S.getAttributeNode(y),from:S})}catch{Pt(t.removed,{attribute:null,from:S})}if(S.removeAttribute(y),y==="is")if(rt||hn)try{ye(S)}catch{}else try{S.setAttribute(y,"")}catch{}},Do=function(y){let S=null,E=null;if(Le)y="<remove></remove>"+y;else{const G=Ws(y,/^[\r\n\t ]+/);E=G&&G[0]}_t==="application/xhtml+xml"&<===Se&&(y='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+y+"</body></html>");const U=I?I.createHTML(y):y;if(lt===Se)try{S=new m().parseFromString(U,_t)}catch{}if(!S||!S.documentElement){S=ue.createDocument(lt,"template",null);try{S.documentElement.innerHTML=As?B:U}catch{}}const Z=S.body||S.documentElement;return y&&E&&Z.insertBefore(n.createTextNode(E),Z.childNodes[0]||null),lt===Se?ms.call(S,F?"html":"body")[0]:F?S.documentElement:Z},Oo=function(y){return it.call(y.ownerDocument||y,y,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},Ts=function(y){return y instanceof p&&(typeof y.nodeName!="string"||typeof y.textContent!="string"||typeof y.removeChild!="function"||!(y.attributes instanceof u)||typeof y.removeAttribute!="function"||typeof y.setAttribute!="function"||typeof y.namespaceURI!="string"||typeof y.insertBefore!="function"||typeof y.hasChildNodes!="function")},Bo=function(y){return typeof l=="function"&&y instanceof l};function xe(T,y,S){An(T,E=>{E.call(t,y,S,ct)})}const Fo=function(y){let S=null;if(xe(Q.beforeSanitizeElements,y,null),Ts(y))return ye(y),!0;const E=V(y.nodeName);if(xe(Q.uponSanitizeElement,y,{tagName:E,allowedTags:H}),K&&y.hasChildNodes()&&!Bo(y.firstElementChild)&&ne(/<[/\w!]/g,y.innerHTML)&&ne(/<[/\w!]/g,y.textContent)||y.nodeType===Dt.progressingInstruction||K&&y.nodeType===Dt.comment&&ne(/<[/\w]/g,y.data))return ye(y),!0;if(!(Me.tagCheck instanceof Function&&Me.tagCheck(E))&&(!H[E]||We[E])){if(!We[E]&&Wo(E)&&(W.tagNameCheck instanceof RegExp&&ne(W.tagNameCheck,E)||W.tagNameCheck instanceof Function&&W.tagNameCheck(E)))return!1;if(ks&&!me[E]){const U=P(y)||y.parentNode,Z=C(y)||y.childNodes;if(Z&&U){const G=Z.length;for(let re=G-1;re>=0;--re){const Ae=A(Z[re],!0);Ae.__removalCount=(y.__removalCount||0)+1,U.insertBefore(Ae,j(y))}}}return ye(y),!0}return y instanceof a&&!zc(y)||(E==="noscript"||E==="noembed"||E==="noframes")&&ne(/<\/no(script|embed|frames)/i,y.innerHTML)?(ye(y),!0):(L&&y.nodeType===Dt.text&&(S=y.textContent,An([Et,ot,Ue],U=>{S=Rt(S,U," ")}),y.textContent!==S&&(Pt(t.removed,{element:y.cloneNode()}),y.textContent=S)),xe(Q.afterSanitizeElements,y,null),!1)},Uo=function(y,S,E){if(Co&&(S==="id"||S==="name")&&(E in n||E in Kc))return!1;if(!(k&&!Tt[S]&&ne(ys,S))){if(!(pn&&ne(vs,S))){if(!(Me.attributeCheck instanceof Function&&Me.attributeCheck(S,y))){if(!q[S]||Tt[S]){if(!(Wo(y)&&(W.tagNameCheck instanceof RegExp&&ne(W.tagNameCheck,y)||W.tagNameCheck instanceof Function&&W.tagNameCheck(y))&&(W.attributeNameCheck instanceof RegExp&&ne(W.attributeNameCheck,S)||W.attributeNameCheck instanceof Function&&W.attributeNameCheck(S,y))||S==="is"&&W.allowCustomizedBuiltInElements&&(W.tagNameCheck instanceof RegExp&&ne(W.tagNameCheck,E)||W.tagNameCheck instanceof Function&&W.tagNameCheck(E))))return!1}else if(!xs[S]){if(!ne(cn,Rt(E,ln,""))){if(!((S==="src"||S==="xlink:href"||S==="href")&&y!=="script"&&Ah(E,"data:")===0&&Mo[y])){if(!(x&&!ne(bs,Rt(E,ln,"")))){if(E)return!1}}}}}}}return!0},Wo=function(y){return y!=="annotation-xml"&&Ws(y,ws)},Ko=function(y){xe(Q.beforeSanitizeAttributes,y,null);const{attributes:S}=y;if(!S||Ts(y))return;const E={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:q,forceKeepAttr:void 0};let U=S.length;for(;U--;){const Z=S[U],{name:G,namespaceURI:re,value:Ae}=Z,ut=V(G),Cs=Ae;let X=G==="value"?Cs:$h(Cs);if(E.attrName=ut,E.attrValue=X,E.keepAttr=!0,E.forceKeepAttr=void 0,xe(Q.uponSanitizeAttribute,y,E),X=E.attrValue,_o&&(ut==="id"||ut==="name")&&(Ke(G,y),X=Oc+X),K&&ne(/((--!?|])>)|<\/(style|title|textarea)/i,X)){Ke(G,y);continue}if(ut==="attributename"&&Ws(X,"href")){Ke(G,y);continue}if(E.forceKeepAttr)continue;if(!E.keepAttr){Ke(G,y);continue}if(!M&&ne(/\/>/i,X)){Ke(G,y);continue}L&&An([Et,ot,Ue],jo=>{X=Rt(X,jo," ")});const zo=V(y.nodeName);if(!Uo(zo,ut,X)){Ke(G,y);continue}if(I&&typeof v=="object"&&typeof v.getAttributeType=="function"&&!re)switch(v.getAttributeType(zo,ut)){case"TrustedHTML":{X=I.createHTML(X);break}case"TrustedScriptURL":{X=I.createScriptURL(X);break}}if(X!==Cs)try{re?y.setAttributeNS(re,G,X):y.setAttribute(G,X),Ts(y)?ye(y):Nr(t.removed)}catch{Ke(G,y)}}xe(Q.afterSanitizeAttributes,y,null)},jc=function T(y){let S=null;const E=Oo(y);for(xe(Q.beforeSanitizeShadowDOM,y,null);S=E.nextNode();)xe(Q.uponSanitizeShadowNode,S,null),Fo(S),Ko(S),S.content instanceof o&&T(S.content);xe(Q.afterSanitizeShadowDOM,y,null)};return t.sanitize=function(T){let y=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},S=null,E=null,U=null,Z=null;if(As=!T,As&&(T="<!-->"),typeof T!="string"&&!Bo(T))if(typeof T.toString=="function"){if(T=T.toString(),typeof T!="string")throw It("dirty is not a string, aborting")}else throw It("toString is not a function");if(!t.isSupported)return T;if(te||Es(y),t.removed=[],typeof T=="string"&&(Ct=!1),Ct){if(T.nodeName){const Ae=V(T.nodeName);if(!H[Ae]||We[Ae])throw It("root node is forbidden and cannot be sanitized in-place")}}else if(T instanceof l)S=Do("<!---->"),E=S.ownerDocument.importNode(T,!0),E.nodeType===Dt.element&&E.nodeName==="BODY"||E.nodeName==="HTML"?S=E:S.appendChild(E);else{if(!rt&&!L&&!F&&T.indexOf("<")===-1)return I&&fn?I.createHTML(T):T;if(S=Do(T),!S)return rt?null:fn?B:""}S&&Le&&ye(S.firstChild);const G=Oo(Ct?T:S);for(;U=G.nextNode();)Fo(U),Ko(U),U.content instanceof o&&jc(U.content);if(Ct)return T;if(rt){if(hn)for(Z=gs.call(S.ownerDocument);S.firstChild;)Z.appendChild(S.firstChild);else Z=S;return(q.shadowroot||q.shadowrootmode)&&(Z=an.call(s,Z,!0)),Z}let re=F?S.outerHTML:S.innerHTML;return F&&H["!doctype"]&&S.ownerDocument&&S.ownerDocument.doctype&&S.ownerDocument.doctype.name&&ne(Rl,S.ownerDocument.doctype.name)&&(re="<!DOCTYPE "+S.ownerDocument.doctype.name+`>
|
|
1618
|
+
`+re),L&&An([Et,ot,Ue],Ae=>{re=Rt(re,Ae," ")}),I&&fn?I.createHTML(re):re},t.setConfig=function(){let T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Es(T),te=!0},t.clearConfig=function(){ct=null,te=!1},t.isValidAttribute=function(T,y,S){ct||Es({});const E=V(T),U=V(y);return Uo(E,U,S)},t.addHook=function(T,y){typeof y=="function"&&Pt(Q[T],y)},t.removeHook=function(T,y){if(y!==void 0){const S=Sh(Q[T],y);return S===-1?void 0:xh(Q[T],S,1)[0]}return Nr(Q[T])},t.removeHooks=function(T){Q[T]=[]},t.removeAllHooks=function(){Q=Wr()},t}var wi=Il();function uo(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var nt=uo();function Nl(e){nt=e}var Gt={exec:()=>null};function D(e,t=""){let n=typeof e=="string"?e:e.source,s={replace:(i,o)=>{let r=typeof o=="string"?o:o.source;return r=r.replace(se.caret,"$1"),n=n.replace(i,r),s},getRegex:()=>new RegExp(n,t)};return s}var Uh=(()=>{try{return!!new RegExp("(?<=1)(?<!1)")}catch{return!1}})(),se={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i")},Wh=/^(?:[ \t]*(?:\n|$))+/,Kh=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,zh=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,nn=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,jh=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,po=/(?:[*+-]|\d{1,9}[.)])/,Dl=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Ol=D(Dl).replace(/bull/g,po).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Hh=D(Dl).replace(/bull/g,po).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),ho=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,qh=/^[^\n]+/,fo=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,Gh=D(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",fo).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Vh=D(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,po).getRegex(),ds="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",go=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Yh=D("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",go).replace("tag",ds).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Bl=D(ho).replace("hr",nn).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",ds).getRegex(),Qh=D(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Bl).getRegex(),mo={blockquote:Qh,code:Kh,def:Gh,fences:zh,heading:jh,hr:nn,html:Yh,lheading:Ol,list:Vh,newline:Wh,paragraph:Bl,table:Gt,text:qh},Kr=D("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",nn).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",ds).getRegex(),Xh={...mo,lheading:Hh,table:Kr,paragraph:D(ho).replace("hr",nn).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Kr).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",ds).getRegex()},Zh={...mo,html:D(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",go).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Gt,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:D(ho).replace("hr",nn).replace("heading",` *#{1,6} *[^
|
|
1619
|
+
]`).replace("lheading",Ol).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Jh=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ef=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Fl=/^( {2,}|\\)\n(?!\s*$)/,tf=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,ps=/[\p{P}\p{S}]/u,yo=/[\s\p{P}\p{S}]/u,Ul=/[^\s\p{P}\p{S}]/u,nf=D(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,yo).getRegex(),Wl=/(?!~)[\p{P}\p{S}]/u,sf=/(?!~)[\s\p{P}\p{S}]/u,of=/(?:[^\s\p{P}\p{S}]|~)/u,rf=D(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Uh?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Kl=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,af=D(Kl,"u").replace(/punct/g,ps).getRegex(),lf=D(Kl,"u").replace(/punct/g,Wl).getRegex(),zl="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",cf=D(zl,"gu").replace(/notPunctSpace/g,Ul).replace(/punctSpace/g,yo).replace(/punct/g,ps).getRegex(),uf=D(zl,"gu").replace(/notPunctSpace/g,of).replace(/punctSpace/g,sf).replace(/punct/g,Wl).getRegex(),df=D("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Ul).replace(/punctSpace/g,yo).replace(/punct/g,ps).getRegex(),pf=D(/\\(punct)/,"gu").replace(/punct/g,ps).getRegex(),hf=D(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),ff=D(go).replace("(?:-->|$)","-->").getRegex(),gf=D("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",ff).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Vn=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,mf=D(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",Vn).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),jl=D(/^!?\[(label)\]\[(ref)\]/).replace("label",Vn).replace("ref",fo).getRegex(),Hl=D(/^!?\[(ref)\](?:\[\])?/).replace("ref",fo).getRegex(),yf=D("reflink|nolink(?!\\()","g").replace("reflink",jl).replace("nolink",Hl).getRegex(),zr=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,vo={_backpedal:Gt,anyPunctuation:pf,autolink:hf,blockSkip:rf,br:Fl,code:ef,del:Gt,emStrongLDelim:af,emStrongRDelimAst:cf,emStrongRDelimUnd:df,escape:Jh,link:mf,nolink:Hl,punctuation:nf,reflink:jl,reflinkSearch:yf,tag:gf,text:tf,url:Gt},vf={...vo,link:D(/^!?\[(label)\]\((.*?)\)/).replace("label",Vn).getRegex(),reflink:D(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Vn).getRegex()},ki={...vo,emStrongRDelimAst:uf,emStrongLDelim:lf,url:D(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",zr).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:D(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",zr).getRegex()},bf={...ki,br:D(Fl).replace("{2,}","*").getRegex(),text:D(ki.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},En={normal:mo,gfm:Xh,pedantic:Zh},Ot={normal:vo,gfm:ki,breaks:bf,pedantic:vf},wf={"&":"&","<":"<",">":">",'"':""","'":"'"},jr=e=>wf[e];function Ee(e,t){if(t){if(se.escapeTest.test(e))return e.replace(se.escapeReplace,jr)}else if(se.escapeTestNoEncode.test(e))return e.replace(se.escapeReplaceNoEncode,jr);return e}function Hr(e){try{e=encodeURI(e).replace(se.percentDecode,"%")}catch{return null}return e}function qr(e,t){let n=e.replace(se.findPipe,(o,r,l)=>{let a=!1,c=r;for(;--c>=0&&l[c]==="\\";)a=!a;return a?"|":" |"}),s=n.split(se.splitPipe),i=0;if(s[0].trim()||s.shift(),s.length>0&&!s.at(-1)?.trim()&&s.pop(),t)if(s.length>t)s.splice(t);else for(;s.length<t;)s.push("");for(;i<s.length;i++)s[i]=s[i].trim().replace(se.slashPipe,"|");return s}function Bt(e,t,n){let s=e.length;if(s===0)return"";let i=0;for(;i<s&&e.charAt(s-i-1)===t;)i++;return e.slice(0,s-i)}function kf(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let s=0;s<e.length;s++)if(e[s]==="\\")s++;else if(e[s]===t[0])n++;else if(e[s]===t[1]&&(n--,n<0))return s;return n>0?-2:-1}function Gr(e,t,n,s,i){let o=t.href,r=t.title||null,l=e[1].replace(i.other.outputLinkReplace,"$1");s.state.inLink=!0;let a={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:o,title:r,text:l,tokens:s.inlineTokens(l)};return s.state.inLink=!1,a}function Sf(e,t,n){let s=e.match(n.other.indentCodeCompensation);if(s===null)return t;let i=s[1];return t.split(`
|
|
1541
1620
|
`).map(o=>{let r=o.match(n.other.beginningSpace);if(r===null)return o;let[l]=r;return l.length>=i.length?o.slice(i.length):o}).join(`
|
|
1542
|
-
`)}var
|
|
1543
|
-
`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],s=
|
|
1621
|
+
`)}var Yn=class{options;rules;lexer;constructor(e){this.options=e||nt}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:Bt(n,`
|
|
1622
|
+
`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],s=Sf(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:s}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let s=Bt(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:Bt(t[0],`
|
|
1544
1623
|
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=Bt(t[0],`
|
|
1545
1624
|
`).split(`
|
|
1546
1625
|
`),s="",i="",o=[];for(;n.length>0;){let r=!1,l=[],a;for(a=0;a<n.length;a++)if(this.rules.other.blockquoteStart.test(n[a]))l.push(n[a]),r=!0;else if(!r)l.push(n[a]);else break;n=n.slice(a);let c=l.join(`
|
|
@@ -1549,19 +1628,19 @@ ${s}`:c.join(", ");a.push({type:"text",text:v})}else s&&a.push({type:"text",text
|
|
|
1549
1628
|
${c}`:c,i=i?`${i}
|
|
1550
1629
|
${u}`:u;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(u,o,!0),this.lexer.state.top=p,n.length===0)break;let m=o.at(-1);if(m?.type==="code")break;if(m?.type==="blockquote"){let v=m,w=v.raw+`
|
|
1551
1630
|
`+n.join(`
|
|
1552
|
-
`),
|
|
1631
|
+
`),A=this.blockquote(w);o[o.length-1]=A,s=s.substring(0,s.length-v.raw.length)+A.raw,i=i.substring(0,i.length-v.text.length)+A.text;break}else if(m?.type==="list"){let v=m,w=v.raw+`
|
|
1553
1632
|
`+n.join(`
|
|
1554
|
-
`),
|
|
1633
|
+
`),A=this.list(w);o[o.length-1]=A,s=s.substring(0,s.length-m.raw.length)+A.raw,i=i.substring(0,i.length-v.raw.length)+A.raw,n=w.substring(o.at(-1).raw.length).split(`
|
|
1555
1634
|
`);continue}}return{type:"blockquote",raw:s,tokens:o,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),s=n.length>1,i={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");let o=this.rules.other.listItemRegex(n),r=!1;for(;e;){let a=!1,c="",u="";if(!(t=o.exec(e))||this.rules.block.hr.test(e))break;c=t[0],e=e.substring(c.length);let p=t[2].split(`
|
|
1556
|
-
`,1)[0].replace(this.rules.other.listReplaceTabs,
|
|
1635
|
+
`,1)[0].replace(this.rules.other.listReplaceTabs,A=>" ".repeat(3*A.length)),m=e.split(`
|
|
1557
1636
|
`,1)[0],v=!p.trim(),w=0;if(this.options.pedantic?(w=2,u=p.trimStart()):v?w=t[1].length+1:(w=t[2].search(this.rules.other.nonSpaceChar),w=w>4?1:w,u=p.slice(w),w+=t[1].length),v&&this.rules.other.blankLine.test(m)&&(c+=m+`
|
|
1558
|
-
`,e=e.substring(m.length+1),a=!0),!a){let
|
|
1559
|
-
`,1)[0],B;if(m=I,this.options.pedantic?(m=m.replace(this.rules.other.listReplaceNesting," "),B=m):B=m.replace(this.rules.other.tabCharGlobal," "),j.test(m)||C.test(m)||
|
|
1637
|
+
`,e=e.substring(m.length+1),a=!0),!a){let A=this.rules.other.nextBulletRegex(w),_=this.rules.other.hrRegex(w),j=this.rules.other.fencesBeginRegex(w),C=this.rules.other.headingBeginRegex(w),P=this.rules.other.htmlBeginRegex(w);for(;e;){let I=e.split(`
|
|
1638
|
+
`,1)[0],B;if(m=I,this.options.pedantic?(m=m.replace(this.rules.other.listReplaceNesting," "),B=m):B=m.replace(this.rules.other.tabCharGlobal," "),j.test(m)||C.test(m)||P.test(m)||A.test(m)||_.test(m))break;if(B.search(this.rules.other.nonSpaceChar)>=w||!m.trim())u+=`
|
|
1560
1639
|
`+B.slice(w);else{if(v||p.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||j.test(p)||C.test(p)||_.test(p))break;u+=`
|
|
1561
1640
|
`+m}!v&&!m.trim()&&(v=!0),c+=I+`
|
|
1562
|
-
`,e=e.substring(I.length+1),p=B.slice(w)}}i.loose||(r?i.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(r=!0)),i.items.push({type:"list_item",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(u),loose:!1,text:u,tokens:[]}),i.raw+=c}let l=i.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let a of i.items){if(this.lexer.state.top=!1,a.tokens=this.lexer.blockTokens(a.text,[]),a.task){if(a.text=a.text.replace(this.rules.other.listReplaceTask,""),a.tokens[0]?.type==="text"||a.tokens[0]?.type==="paragraph"){a.tokens[0].raw=a.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),a.tokens[0].text=a.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let u=this.lexer.inlineQueue.length-1;u>=0;u--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[u].src)){this.lexer.inlineQueue[u].src=this.lexer.inlineQueue[u].src.replace(this.rules.other.listReplaceTask,"");break}}let c=this.rules.other.listTaskCheckbox.exec(a.raw);if(c){let u={type:"checkbox",raw:c[0]+" ",checked:c[0]!=="[ ]"};a.checked=u.checked,i.loose?a.tokens[0]&&["paragraph","text"].includes(a.tokens[0].type)&&"tokens"in a.tokens[0]&&a.tokens[0].tokens?(a.tokens[0].raw=u.raw+a.tokens[0].raw,a.tokens[0].text=u.raw+a.tokens[0].text,a.tokens[0].tokens.unshift(u)):a.tokens.unshift({type:"paragraph",raw:u.raw,text:u.raw,tokens:[u]}):a.tokens.unshift(u)}}if(!i.loose){let c=a.tokens.filter(p=>p.type==="space"),u=c.length>0&&c.some(p=>this.rules.other.anyLine.test(p.raw));i.loose=u}}if(i.loose)for(let a of i.items){a.loose=!0;for(let c of a.tokens)c.type==="text"&&(c.type="paragraph")}return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:"html",block:!0,raw:t[0],pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),s=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:t[0],href:s,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=
|
|
1563
|
-
`):[],o={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===s.length){for(let r of s)this.rules.other.tableAlignRight.test(r)?o.align.push("right"):this.rules.other.tableAlignCenter.test(r)?o.align.push("center"):this.rules.other.tableAlignLeft.test(r)?o.align.push("left"):o.align.push(null);for(let r=0;r<n.length;r++)o.header.push({text:n[r],tokens:this.lexer.inline(n[r]),header:!0,align:o.align[r]});for(let r of i)o.rows.push(
|
|
1564
|
-
`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let o=Bt(n.slice(0,-1),"\\");if((n.length-o.length)%2===0)return}else{let o=
|
|
1641
|
+
`,e=e.substring(I.length+1),p=B.slice(w)}}i.loose||(r?i.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(r=!0)),i.items.push({type:"list_item",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(u),loose:!1,text:u,tokens:[]}),i.raw+=c}let l=i.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let a of i.items){if(this.lexer.state.top=!1,a.tokens=this.lexer.blockTokens(a.text,[]),a.task){if(a.text=a.text.replace(this.rules.other.listReplaceTask,""),a.tokens[0]?.type==="text"||a.tokens[0]?.type==="paragraph"){a.tokens[0].raw=a.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),a.tokens[0].text=a.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let u=this.lexer.inlineQueue.length-1;u>=0;u--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[u].src)){this.lexer.inlineQueue[u].src=this.lexer.inlineQueue[u].src.replace(this.rules.other.listReplaceTask,"");break}}let c=this.rules.other.listTaskCheckbox.exec(a.raw);if(c){let u={type:"checkbox",raw:c[0]+" ",checked:c[0]!=="[ ]"};a.checked=u.checked,i.loose?a.tokens[0]&&["paragraph","text"].includes(a.tokens[0].type)&&"tokens"in a.tokens[0]&&a.tokens[0].tokens?(a.tokens[0].raw=u.raw+a.tokens[0].raw,a.tokens[0].text=u.raw+a.tokens[0].text,a.tokens[0].tokens.unshift(u)):a.tokens.unshift({type:"paragraph",raw:u.raw,text:u.raw,tokens:[u]}):a.tokens.unshift(u)}}if(!i.loose){let c=a.tokens.filter(p=>p.type==="space"),u=c.length>0&&c.some(p=>this.rules.other.anyLine.test(p.raw));i.loose=u}}if(i.loose)for(let a of i.items){a.loose=!0;for(let c of a.tokens)c.type==="text"&&(c.type="paragraph")}return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:"html",block:!0,raw:t[0],pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),s=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:t[0],href:s,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=qr(t[1]),s=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(`
|
|
1642
|
+
`):[],o={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===s.length){for(let r of s)this.rules.other.tableAlignRight.test(r)?o.align.push("right"):this.rules.other.tableAlignCenter.test(r)?o.align.push("center"):this.rules.other.tableAlignLeft.test(r)?o.align.push("left"):o.align.push(null);for(let r=0;r<n.length;r++)o.header.push({text:n[r],tokens:this.lexer.inline(n[r]),header:!0,align:o.align[r]});for(let r of i)o.rows.push(qr(r,o.header.length).map((l,a)=>({text:l,tokens:this.lexer.inline(l),header:!1,align:o.align[a]})));return o}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`
|
|
1643
|
+
`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let o=Bt(n.slice(0,-1),"\\");if((n.length-o.length)%2===0)return}else{let o=kf(t[2],"()");if(o===-2)return;if(o>-1){let r=(t[0].indexOf("!")===0?5:4)+t[1].length+o;t[2]=t[2].substring(0,o),t[0]=t[0].substring(0,r).trim(),t[3]=""}}let s=t[2],i="";if(this.options.pedantic){let o=this.rules.other.pedanticHrefTitle.exec(s);o&&(s=o[1],i=o[3])}else i=t[3]?t[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),Gr(t,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=t[s.toLowerCase()];if(!i){let o=n[0].charAt(0);return{type:"text",raw:o,text:o}}return Gr(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!(!s||s[3]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(s[1]||s[2])||!n||this.rules.inline.punctuation.exec(n))){let i=[...s[0]].length-1,o,r,l=i,a=0,c=s[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+i);(s=c.exec(t))!=null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o)continue;if(r=[...o].length,s[3]||s[4]){l+=r;continue}else if((s[5]||s[6])&&i%3&&!((i+r)%3)){a+=r;continue}if(l-=r,l>0)continue;r=Math.min(r,r+l+a);let u=[...s[0]][0].length,p=e.slice(0,i+s.index+u+r);if(Math.min(i,r)%2){let v=p.slice(1,-1);return{type:"em",raw:p,text:v,tokens:this.lexer.inlineTokens(v)}}let m=p.slice(2,-2);return{type:"strong",raw:p,text:m,tokens:this.lexer.inlineTokens(m)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&i&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,s;return t[2]==="@"?(n=t[1],s="mailto:"+n):(n=t[1],s=n),{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,s;if(t[2]==="@")n=t[0],s="mailto:"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(i!==t[0]);n=t[0],t[1]==="www."?s="http://"+t[0]:s=t[0]}return{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}},he=class Si{tokens;options;state;inlineQueue;tokenizer;constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||nt,this.options.tokenizer=this.options.tokenizer||new Yn,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:se,block:En.normal,inline:Ot.normal};this.options.pedantic?(n.block=En.pedantic,n.inline=Ot.pedantic):this.options.gfm&&(n.block=En.gfm,this.options.breaks?n.inline=Ot.breaks:n.inline=Ot.gfm),this.tokenizer.rules=n}static get rules(){return{block:En,inline:Ot}}static lex(t,n){return new Si(n).lex(t)}static lexInline(t,n){return new Si(n).inlineTokens(t)}lex(t){t=t.replace(se.carriageReturn,`
|
|
1565
1644
|
`),this.blockTokens(t,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let s=this.inlineQueue[n];this.inlineTokens(s.src,s.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(t,n=[],s=!1){for(this.options.pedantic&&(t=t.replace(se.tabCharGlobal," ").replace(se.spaceLine,""));t;){let i;if(this.options.extensions?.block?.some(r=>(i=r.call({lexer:this},t,n))?(t=t.substring(i.raw.length),n.push(i),!0):!1))continue;if(i=this.tokenizer.space(t)){t=t.substring(i.raw.length);let r=n.at(-1);i.raw.length===1&&r!==void 0?r.raw+=`
|
|
1566
1645
|
`:n.push(i);continue}if(i=this.tokenizer.code(t)){t=t.substring(i.raw.length);let r=n.at(-1);r?.type==="paragraph"||r?.type==="text"?(r.raw+=(r.raw.endsWith(`
|
|
1567
1646
|
`)?"":`
|
|
@@ -1575,7 +1654,7 @@ ${u}`:u;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo
|
|
|
1575
1654
|
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):n.push(i),s=o.length!==t.length,t=t.substring(i.raw.length);continue}if(i=this.tokenizer.text(t)){t=t.substring(i.raw.length);let r=n.at(-1);r?.type==="text"?(r.raw+=(r.raw.endsWith(`
|
|
1576
1655
|
`)?"":`
|
|
1577
1656
|
`)+i.raw,r.text+=`
|
|
1578
|
-
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):n.push(i);continue}if(t){let r="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(r);break}else throw new Error(r)}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){let s=t,i=null;if(this.tokens.links){let a=Object.keys(this.tokens.links);if(a.length>0)for(;(i=this.tokenizer.rules.inline.reflinkSearch.exec(s))!=null;)a.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(i=this.tokenizer.rules.inline.anyPunctuation.exec(s))!=null;)s=s.slice(0,i.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let o;for(;(i=this.tokenizer.rules.inline.blockSkip.exec(s))!=null;)o=i[2]?i[2].length:0,s=s.slice(0,i.index+o)+"["+"a".repeat(i[0].length-o-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);s=this.options.hooks?.emStrongMask?.call({lexer:this},s)??s;let r=!1,l="";for(;t;){r||(l=""),r=!1;let a;if(this.options.extensions?.inline?.some(u=>(a=u.call({lexer:this},t,n))?(t=t.substring(a.raw.length),n.push(a),!0):!1))continue;if(a=this.tokenizer.escape(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.tag(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.link(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(a.raw.length);let u=n.at(-1);a.type==="text"&&u?.type==="text"?(u.raw+=a.raw,u.text+=a.text):n.push(a);continue}if(a=this.tokenizer.emStrong(t,s,l)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.codespan(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.br(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.del(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.autolink(t)){t=t.substring(a.raw.length),n.push(a);continue}if(!this.state.inLink&&(a=this.tokenizer.url(t))){t=t.substring(a.raw.length),n.push(a);continue}let c=t;if(this.options.extensions?.startInline){let u=1/0,p=t.slice(1),m;this.options.extensions.startInline.forEach(v=>{m=v.call({lexer:this},p),typeof m=="number"&&m>=0&&(u=Math.min(u,m))}),u<1/0&&u>=0&&(c=t.substring(0,u+1))}if(a=this.tokenizer.inlineText(c)){t=t.substring(a.raw.length),a.raw.slice(-1)!=="_"&&(l=a.raw.slice(-1)),r=!0;let u=n.at(-1);u?.type==="text"?(u.raw+=a.raw,u.text+=a.text):n.push(a);continue}if(t){let u="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return n}},
|
|
1657
|
+
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):n.push(i);continue}if(t){let r="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(r);break}else throw new Error(r)}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){let s=t,i=null;if(this.tokens.links){let a=Object.keys(this.tokens.links);if(a.length>0)for(;(i=this.tokenizer.rules.inline.reflinkSearch.exec(s))!=null;)a.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(i=this.tokenizer.rules.inline.anyPunctuation.exec(s))!=null;)s=s.slice(0,i.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let o;for(;(i=this.tokenizer.rules.inline.blockSkip.exec(s))!=null;)o=i[2]?i[2].length:0,s=s.slice(0,i.index+o)+"["+"a".repeat(i[0].length-o-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);s=this.options.hooks?.emStrongMask?.call({lexer:this},s)??s;let r=!1,l="";for(;t;){r||(l=""),r=!1;let a;if(this.options.extensions?.inline?.some(u=>(a=u.call({lexer:this},t,n))?(t=t.substring(a.raw.length),n.push(a),!0):!1))continue;if(a=this.tokenizer.escape(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.tag(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.link(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(a.raw.length);let u=n.at(-1);a.type==="text"&&u?.type==="text"?(u.raw+=a.raw,u.text+=a.text):n.push(a);continue}if(a=this.tokenizer.emStrong(t,s,l)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.codespan(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.br(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.del(t)){t=t.substring(a.raw.length),n.push(a);continue}if(a=this.tokenizer.autolink(t)){t=t.substring(a.raw.length),n.push(a);continue}if(!this.state.inLink&&(a=this.tokenizer.url(t))){t=t.substring(a.raw.length),n.push(a);continue}let c=t;if(this.options.extensions?.startInline){let u=1/0,p=t.slice(1),m;this.options.extensions.startInline.forEach(v=>{m=v.call({lexer:this},p),typeof m=="number"&&m>=0&&(u=Math.min(u,m))}),u<1/0&&u>=0&&(c=t.substring(0,u+1))}if(a=this.tokenizer.inlineText(c)){t=t.substring(a.raw.length),a.raw.slice(-1)!=="_"&&(l=a.raw.slice(-1)),r=!0;let u=n.at(-1);u?.type==="text"?(u.raw+=a.raw,u.text+=a.text):n.push(a);continue}if(t){let u="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return n}},Qn=class{options;parser;constructor(e){this.options=e||nt}space(e){return""}code({text:e,lang:t,escaped:n}){let s=(t||"").match(se.notSpaceStart)?.[0],i=e.replace(se.endingNewline,"")+`
|
|
1579
1658
|
`;return s?'<pre><code class="language-'+Ee(s)+'">'+(n?i:Ee(i,!0))+`</code></pre>
|
|
1580
1659
|
`:"<pre><code>"+(n?i:Ee(i,!0))+`</code></pre>
|
|
1581
1660
|
`}blockquote({tokens:e}){return`<blockquote>
|
|
@@ -1593,23 +1672,23 @@ ${this.parser.parse(e)}</blockquote>
|
|
|
1593
1672
|
`}tablerow({text:e}){return`<tr>
|
|
1594
1673
|
${e}</tr>
|
|
1595
1674
|
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
|
1596
|
-
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${Ee(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let s=this.parser.parseInline(n),i=
|
|
1597
|
-
Please report this to https://github.com/markedjs/marked.`,e){let s="<p>An error occurred:</p><pre>"+Ee(n.message+"",!0)+"</pre>";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}},Ze=new
|
|
1675
|
+
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${Ee(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let s=this.parser.parseInline(n),i=Hr(e);if(i===null)return s;e=i;let o='<a href="'+e+'"';return t&&(o+=' title="'+Ee(t)+'"'),o+=">"+s+"</a>",o}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let i=Hr(e);if(i===null)return Ee(n);e=i;let o=`<img src="${e}" alt="${n}"`;return t&&(o+=` title="${Ee(t)}"`),o+=">",o}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:Ee(e.text)}},bo=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}checkbox({raw:e}){return e}},fe=class xi{options;renderer;textRenderer;constructor(t){this.options=t||nt,this.options.renderer=this.options.renderer||new Qn,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new bo}static parse(t,n){return new xi(n).parse(t)}static parseInline(t,n){return new xi(n).parseInline(t)}parse(t){let n="";for(let s=0;s<t.length;s++){let i=t[s];if(this.options.extensions?.renderers?.[i.type]){let r=i,l=this.options.extensions.renderers[r.type].call({parser:this},r);if(l!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(r.type)){n+=l||"";continue}}let o=i;switch(o.type){case"space":{n+=this.renderer.space(o);break}case"hr":{n+=this.renderer.hr(o);break}case"heading":{n+=this.renderer.heading(o);break}case"code":{n+=this.renderer.code(o);break}case"table":{n+=this.renderer.table(o);break}case"blockquote":{n+=this.renderer.blockquote(o);break}case"list":{n+=this.renderer.list(o);break}case"checkbox":{n+=this.renderer.checkbox(o);break}case"html":{n+=this.renderer.html(o);break}case"def":{n+=this.renderer.def(o);break}case"paragraph":{n+=this.renderer.paragraph(o);break}case"text":{n+=this.renderer.text(o);break}default:{let r='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(r),"";throw new Error(r)}}}return n}parseInline(t,n=this.renderer){let s="";for(let i=0;i<t.length;i++){let o=t[i];if(this.options.extensions?.renderers?.[o.type]){let l=this.options.extensions.renderers[o.type].call({parser:this},o);if(l!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(o.type)){s+=l||"";continue}}let r=o;switch(r.type){case"escape":{s+=n.text(r);break}case"html":{s+=n.html(r);break}case"link":{s+=n.link(r);break}case"image":{s+=n.image(r);break}case"checkbox":{s+=n.checkbox(r);break}case"strong":{s+=n.strong(r);break}case"em":{s+=n.em(r);break}case"codespan":{s+=n.codespan(r);break}case"br":{s+=n.br(r);break}case"del":{s+=n.del(r);break}case"text":{s+=n.text(r);break}default:{let l='Token with "'+r.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return s}},Wt=class{options;block;constructor(e){this.options=e||nt}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?he.lex:he.lexInline}provideParser(){return this.block?fe.parse:fe.parseInline}},xf=class{defaults=uo();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=fe;Renderer=Qn;TextRenderer=bo;Lexer=he;Tokenizer=Yn;Hooks=Wt;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let s of e)switch(n=n.concat(t.call(this,s)),s.type){case"table":{let i=s;for(let o of i.header)n=n.concat(this.walkTokens(o.tokens,t));for(let o of i.rows)for(let r of o)n=n.concat(this.walkTokens(r.tokens,t));break}case"list":{let i=s;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=s;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(o=>{let r=i[o].flat(1/0);n=n.concat(this.walkTokens(r,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let o=t.renderers[i.name];o?t.renderers[i.name]=function(...r){let l=i.renderer.apply(this,r);return l===!1&&(l=o.apply(this,r)),l}:t.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let o=t[i.level];o?o.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level==="block"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level==="inline"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),s.extensions=t),n.renderer){let i=this.defaults.renderer||new Qn(this.defaults);for(let o in n.renderer){if(!(o in i))throw new Error(`renderer '${o}' does not exist`);if(["options","parser"].includes(o))continue;let r=o,l=n.renderer[r],a=i[r];i[r]=(...c)=>{let u=l.apply(i,c);return u===!1&&(u=a.apply(i,c)),u||""}}s.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new Yn(this.defaults);for(let o in n.tokenizer){if(!(o in i))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;let r=o,l=n.tokenizer[r],a=i[r];i[r]=(...c)=>{let u=l.apply(i,c);return u===!1&&(u=a.apply(i,c)),u}}s.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new Wt;for(let o in n.hooks){if(!(o in i))throw new Error(`hook '${o}' does not exist`);if(["options","block"].includes(o))continue;let r=o,l=n.hooks[r],a=i[r];Wt.passThroughHooks.has(o)?i[r]=c=>{if(this.defaults.async&&Wt.passThroughHooksRespectAsync.has(o))return(async()=>{let p=await l.call(i,c);return a.call(i,p)})();let u=l.call(i,c);return a.call(i,u)}:i[r]=(...c)=>{if(this.defaults.async)return(async()=>{let p=await l.apply(i,c);return p===!1&&(p=await a.apply(i,c)),p})();let u=l.apply(i,c);return u===!1&&(u=a.apply(i,c)),u}}s.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,o=n.walkTokens;s.walkTokens=function(r){let l=[];return l.push(o.call(this,r)),i&&(l=l.concat(i.call(this,r))),l}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return he.lex(e,t??this.defaults)}parser(e,t){return fe.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let s={...n},i={...this.defaults,...s},o=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&s.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let r=i.hooks?await i.hooks.preprocess(t):t,l=await(i.hooks?await i.hooks.provideLexer():e?he.lex:he.lexInline)(r,i),a=i.hooks?await i.hooks.processAllTokens(l):l;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let c=await(i.hooks?await i.hooks.provideParser():e?fe.parse:fe.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(c):c})().catch(o);try{i.hooks&&(t=i.hooks.preprocess(t));let r=(i.hooks?i.hooks.provideLexer():e?he.lex:he.lexInline)(t,i);i.hooks&&(r=i.hooks.processAllTokens(r)),i.walkTokens&&this.walkTokens(r,i.walkTokens);let l=(i.hooks?i.hooks.provideParser():e?fe.parse:fe.parseInline)(r,i);return i.hooks&&(l=i.hooks.postprocess(l)),l}catch(r){return o(r)}}}onError(e,t){return n=>{if(n.message+=`
|
|
1676
|
+
Please report this to https://github.com/markedjs/marked.`,e){let s="<p>An error occurred:</p><pre>"+Ee(n.message+"",!0)+"</pre>";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}},Ze=new xf;function O(e,t){return Ze.parse(e,t)}O.options=O.setOptions=function(e){return Ze.setOptions(e),O.defaults=Ze.defaults,Nl(O.defaults),O};O.getDefaults=uo;O.defaults=nt;O.use=function(...e){return Ze.use(...e),O.defaults=Ze.defaults,Nl(O.defaults),O};O.walkTokens=function(e,t){return Ze.walkTokens(e,t)};O.parseInline=Ze.parseInline;O.Parser=fe;O.parser=fe.parse;O.Renderer=Qn;O.TextRenderer=bo;O.Lexer=he;O.lexer=he.lex;O.Tokenizer=Yn;O.Hooks=Wt;O.parse=O;O.options;O.setOptions;O.use;O.walkTokens;O.parseInline;fe.parse;he.lex;O.setOptions({gfm:!0,breaks:!0,mangle:!1});const Vr=["a","b","blockquote","br","code","del","em","h1","h2","h3","h4","hr","i","li","ol","p","pre","strong","table","tbody","td","th","thead","tr","ul"],Yr=["class","href","rel","target","title","start"];let Qr=!1;const Af=14e4,$f=4e4,Ef=200,qs=5e4,Ge=new Map;function Tf(e){const t=Ge.get(e);return t===void 0?null:(Ge.delete(e),Ge.set(e,t),t)}function Xr(e,t){if(Ge.set(e,t),Ge.size<=Ef)return;const n=Ge.keys().next().value;n&&Ge.delete(n)}function Cf(){Qr||(Qr=!0,wi.addHook("afterSanitizeAttributes",e=>{!(e instanceof HTMLAnchorElement)||!e.getAttribute("href")||(e.setAttribute("rel","noreferrer noopener"),e.setAttribute("target","_blank"))}))}function Ai(e){const t=e.trim();if(!t)return"";if(Cf(),t.length<=qs){const r=Tf(t);if(r!==null)return r}const n=Ia(t,Af),s=n.truncated?`
|
|
1598
1677
|
|
|
1599
|
-
… truncated (${n.total} chars, showing first ${n.text.length}).`:"";if(n.text.length
|
|
1678
|
+
… truncated (${n.total} chars, showing first ${n.text.length}).`:"";if(n.text.length>$f){const l=`<pre class="code-block">${_f(`${n.text}${s}`)}</pre>`,a=wi.sanitize(l,{ALLOWED_TAGS:Vr,ALLOWED_ATTR:Yr});return t.length<=qs&&Xr(t,a),a}const i=O.parse(`${n.text}${s}`),o=wi.sanitize(i,{ALLOWED_TAGS:Vr,ALLOWED_ATTR:Yr});return t.length<=qs&&Xr(t,o),o}function _f(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}const Mf=1500,Lf=2e3,ql="Copy as markdown",Pf="Copied",Rf="Copy failed";async function If(e){if(!e)return!1;try{return await navigator.clipboard.writeText(e),!0}catch{try{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();const n=document.execCommand("copy");return document.body.removeChild(t),n}catch{return!1}}}function Tn(e,t){e.title=t,e.setAttribute("aria-label",t)}function Nf(e){const t=e.label??ql;return d`
|
|
1600
1679
|
<button
|
|
1601
1680
|
class="chat-copy-btn"
|
|
1602
1681
|
type="button"
|
|
1603
1682
|
title=${t}
|
|
1604
1683
|
aria-label=${t}
|
|
1605
|
-
@click=${async n=>{const s=n.currentTarget;if(s?.querySelector(".chat-copy-btn__icon"),!s||s.dataset.copying==="1")return;s.dataset.copying="1",s.setAttribute("aria-busy","true"),s.disabled=!0;const i=await
|
|
1684
|
+
@click=${async n=>{const s=n.currentTarget;if(s?.querySelector(".chat-copy-btn__icon"),!s||s.dataset.copying==="1")return;s.dataset.copying="1",s.setAttribute("aria-busy","true"),s.disabled=!0;const i=await If(e.text());if(s.isConnected){if(delete s.dataset.copying,s.removeAttribute("aria-busy"),s.disabled=!1,!i){s.dataset.error="1",Tn(s,Rf),window.setTimeout(()=>{s.isConnected&&(delete s.dataset.error,Tn(s,t))},Lf);return}s.dataset.copied="1",Tn(s,Pf),window.setTimeout(()=>{s.isConnected&&(delete s.dataset.copied,Tn(s,t))},Mf)}}}
|
|
1606
1685
|
>
|
|
1607
1686
|
<span class="chat-copy-btn__icon" aria-hidden="true">
|
|
1608
1687
|
<span class="chat-copy-btn__icon-copy">${N.copy}</span>
|
|
1609
1688
|
<span class="chat-copy-btn__icon-check">${N.check}</span>
|
|
1610
1689
|
</span>
|
|
1611
1690
|
</button>
|
|
1612
|
-
`}function
|
|
1691
|
+
`}function Df(e){return Nf({text:()=>e,label:ql})}function Of(e){const t=e,n=Bf(t.content),s=[];for(const i of n){const o=String(i.type??"").toLowerCase();(["toolcall","tool_call","tooluse","tool_use"].includes(o)||typeof i.name=="string"&&i.arguments!=null)&&s.push({kind:"call",name:i.name??"tool",args:Ff(i.arguments??i.args)})}for(const i of n){const o=String(i.type??"").toLowerCase();if(o!=="toolresult"&&o!=="tool_result")continue;const r=Uf(i),l=typeof i.name=="string"?i.name:"tool";s.push({kind:"result",name:l,text:r})}if(Ba(e)&&!s.some(i=>i.kind==="result")){const i=typeof t.toolName=="string"&&t.toolName||typeof t.tool_name=="string"&&t.tool_name||"tool",o=Na(e)??void 0;s.push({kind:"result",name:i,text:o})}return s}function Bf(e){return Array.isArray(e)?e.filter(Boolean):[]}function Ff(e){if(typeof e!="string")return e;const t=e.trim();if(!t||!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.parse(t)}catch{return e}}function Uf(e){if(typeof e.text=="string")return e.text;if(typeof e.content=="string")return e.content}function Wf(e){const n=e.content,s=[];if(Array.isArray(n))for(const i of n){if(typeof i!="object"||i===null)continue;const o=i;if(o.type==="image"){const r=o.source;if(r?.type==="base64"&&typeof r.data=="string"){const l=r.data,a=r.media_type||"image/png",c=l.startsWith("data:")?l:`data:${a};base64,${l}`;s.push({url:c})}else typeof o.url=="string"&&s.push({url:o.url})}else if(o.type==="image_url"){const r=o.image_url;typeof r?.url=="string"&&s.push({url:r.url})}}return s}function Kf(e){return d`
|
|
1613
1692
|
<div class="chat-group assistant">
|
|
1614
1693
|
<div class="chat-group-messages">
|
|
1615
1694
|
<div class="chat-bubble chat-reading-indicator" aria-hidden="true">
|
|
@@ -1619,22 +1698,22 @@ Please report this to https://github.com/markedjs/marked.`,e){let s="<p>An error
|
|
|
1619
1698
|
</div>
|
|
1620
1699
|
</div>
|
|
1621
1700
|
</div>
|
|
1622
|
-
`}function
|
|
1701
|
+
`}function zf(e,t,n,s){return d`
|
|
1623
1702
|
<div class="chat-group assistant">
|
|
1624
1703
|
<div class="chat-group-messages">
|
|
1625
|
-
${
|
|
1704
|
+
${Gl({role:"assistant",content:[{type:"text",text:e}],timestamp:t},{isStreaming:!1,showReasoning:!1})}
|
|
1626
1705
|
</div>
|
|
1627
1706
|
</div>
|
|
1628
|
-
`}function
|
|
1707
|
+
`}function jf(e,t){const n=Oa(e.role),s=n==="user"?"user":n==="assistant"?"assistant":"other",i=new Date(e.timestamp).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"});return d`
|
|
1629
1708
|
<div class="chat-group ${s}">
|
|
1630
1709
|
<div class="chat-group-messages">
|
|
1631
|
-
${e.messages.map((o,r)=>
|
|
1710
|
+
${e.messages.map((o,r)=>Gl(o.message,{isStreaming:e.isStreaming&&r===e.messages.length-1,showReasoning:t.showReasoning}))}
|
|
1632
1711
|
<div class="chat-group-footer">
|
|
1633
1712
|
<span class="chat-group-timestamp">${i}</span>
|
|
1634
1713
|
</div>
|
|
1635
1714
|
</div>
|
|
1636
1715
|
</div>
|
|
1637
|
-
`}function
|
|
1716
|
+
`}function Hf(e){return e.length===0?b:d`
|
|
1638
1717
|
<div class="chat-message-images">
|
|
1639
1718
|
${e.map(t=>d`
|
|
1640
1719
|
<img
|
|
@@ -1645,14 +1724,14 @@ Please report this to https://github.com/markedjs/marked.`,e){let s="<p>An error
|
|
|
1645
1724
|
/>
|
|
1646
1725
|
`)}
|
|
1647
1726
|
</div>
|
|
1648
|
-
`}function
|
|
1727
|
+
`}function Gl(e,t,n){const s=e,i=typeof s.role=="string"?s.role:"unknown",o=Ba(e)||i.toLowerCase()==="toolresult"||i.toLowerCase()==="tool_result"||typeof s.toolCallId=="string"||typeof s.tool_call_id=="string",l=Of(e).length>0,a=Wf(e),c=a.length>0,u=Na(e),p=t.showReasoning&&i==="assistant"?Ru(e):null,m=u?.trim()?u:null,v=p?Nu(p):null,w=m,A=(i==="assistant"||i==="user")&&!!w?.trim(),_=["chat-bubble",A?"has-copy":"",t.isStreaming?"streaming":"","fade-in"].filter(Boolean).join(" ");return!w&&(l||o)||!w&&!c?b:d`
|
|
1649
1728
|
<div class="${_}">
|
|
1650
|
-
${
|
|
1651
|
-
${
|
|
1652
|
-
${v?d`<div class="chat-thinking">${mi(
|
|
1653
|
-
${w?d`<div class="chat-text">${mi(
|
|
1729
|
+
${A?Df(w):b}
|
|
1730
|
+
${Hf(a)}
|
|
1731
|
+
${v?d`<div class="chat-thinking">${mi(Ai(v))}</div>`:b}
|
|
1732
|
+
${w?d`<div class="chat-text">${mi(Ai(w))}</div>`:b}
|
|
1654
1733
|
</div>
|
|
1655
|
-
`}function
|
|
1734
|
+
`}function qf(e){return d`
|
|
1656
1735
|
<div class="sidebar-panel">
|
|
1657
1736
|
<div class="sidebar-header">
|
|
1658
1737
|
<div class="sidebar-title">Tool Output</div>
|
|
@@ -1666,10 +1745,10 @@ Please report this to https://github.com/markedjs/marked.`,e){let s="<p>An error
|
|
|
1666
1745
|
<button @click=${e.onViewRawText} class="btn" style="margin-top: 12px;">
|
|
1667
1746
|
View Raw Text
|
|
1668
1747
|
</button>
|
|
1669
|
-
`:e.content?d`<div class="sidebar-markdown">${mi(
|
|
1748
|
+
`:e.content?d`<div class="sidebar-markdown">${mi(Ai(e.content))}</div>`:d`<div class="muted">No content available</div>`}
|
|
1670
1749
|
</div>
|
|
1671
1750
|
</div>
|
|
1672
|
-
`}var
|
|
1751
|
+
`}var Gf=Object.defineProperty,Vf=Object.getOwnPropertyDescriptor,hs=(e,t,n,s)=>{for(var i=s>1?void 0:s?Vf(t,n):t,o=e.length-1,r;o>=0;o--)(r=e[o])&&(i=(s?r(t,n,i):r(i))||i);return s&&i&&Gf(t,n,i),i};let kt=class extends mt{constructor(){super(...arguments),this.splitRatio=.6,this.minRatio=.4,this.maxRatio=.7,this.isDragging=!1,this.startX=0,this.startRatio=0,this.handleMouseDown=e=>{this.isDragging=!0,this.startX=e.clientX,this.startRatio=this.splitRatio,this.classList.add("dragging"),document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp),e.preventDefault()},this.handleMouseMove=e=>{if(!this.isDragging)return;const t=this.parentElement;if(!t)return;const n=t.getBoundingClientRect().width,i=(e.clientX-this.startX)/n;let o=this.startRatio+i;o=Math.max(this.minRatio,Math.min(this.maxRatio,o)),this.dispatchEvent(new CustomEvent("resize",{detail:{splitRatio:o},bubbles:!0,composed:!0}))},this.handleMouseUp=()=>{this.isDragging=!1,this.classList.remove("dragging"),document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp)}}render(){return d``}connectedCallback(){super.connectedCallback(),this.addEventListener("mousedown",this.handleMouseDown)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("mousedown",this.handleMouseDown),document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp)}};kt.styles=Vc`
|
|
1673
1752
|
:host {
|
|
1674
1753
|
width: 4px;
|
|
1675
1754
|
cursor: col-resize;
|
|
@@ -1695,21 +1774,21 @@ Please report this to https://github.com/markedjs/marked.`,e){let s="<p>An error
|
|
|
1695
1774
|
:host(.dragging) {
|
|
1696
1775
|
background: var(--accent, #007bff);
|
|
1697
1776
|
}
|
|
1698
|
-
`;hs([is({type:Number})],kt.prototype,"splitRatio",2);hs([is({type:Number})],kt.prototype,"minRatio",2);hs([is({type:Number})],kt.prototype,"maxRatio",2);kt=hs([Ea("resizable-divider")],kt);function Cn(e){if(typeof e!="string"||!e)throw new Error("expected a non-empty string, got: "+e)}function Gs(e){if(typeof e!="number")throw new Error("expected a number, got: "+e)}const Kf=1,zf=1,st="emoji",St="keyvalue",bo="favorites",jf="tokens",jl="tokens",Hf="unicode",Hl="count",qf="group",Gf="order",ql="group-order",$i="eTag",Xn="url",Qr="skinTone",$t="readonly",wo="readwrite",Gl="skinUnicodes",Vf="skinUnicodes",Qf="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",Yf="en";function Xf(e,t){const n=new Set,s=[];for(const i of e){const o=t(i);n.has(o)||(n.add(o),s.push(i))}return s}function Yr(e){return Xf(e,t=>t.unicode)}function Zf(e){function t(n,s,i){const o=s?e.createObjectStore(n,{keyPath:s}):e.createObjectStore(n);if(i)for(const[r,[l,a]]of Object.entries(i))o.createIndex(r,l,{multiEntry:a});return o}t(St),t(st,Hf,{[jl]:[jf,!0],[ql]:[[qf,Gf]],[Gl]:[Vf,!0]}),t(bo,void 0,{[Hl]:[""]})}const Ei={},On={},Zn={};function Vl(e,t,n){n.onerror=()=>t(n.error),n.onblocked=()=>t(new Error("IDB blocked")),n.onsuccess=()=>e(n.result)}async function Jf(e){const t=await new Promise((n,s)=>{const i=indexedDB.open(e,Kf);Ei[e]=i,i.onupgradeneeded=o=>{o.oldVersion<zf&&Zf(i.result)},Vl(n,s,i)});return t.onclose=()=>ko(e),t}function eg(e){return On[e]||(On[e]=Jf(e)),On[e]}function _e(e,t,n,s){return new Promise((i,o)=>{const r=e.transaction(t,n,{durability:"relaxed"}),l=typeof t=="string"?r.objectStore(t):t.map(c=>r.objectStore(c));let a;s(l,r,c=>{a=c}),r.oncomplete=()=>i(a),r.onerror=()=>o(r.error)})}function ko(e){const t=Ei[e],n=t&&t.result;if(n){n.close();const s=Zn[e];if(s)for(const i of s)i()}delete Ei[e],delete On[e],delete Zn[e]}function tg(e){return new Promise((t,n)=>{ko(e);const s=indexedDB.deleteDatabase(e);Vl(t,n,s)})}function ng(e,t){let n=Zn[e];n||(n=Zn[e]=[]),n.push(t)}const sg=new Set([":D","XD",":'D","O:)",":X",":P",";P","XP",":L",":Z",":j","8D","XO","8)",":B",":O",":S",":'o","Dx","X(","D:",":C",">0)",":3","</3","<3","\\M/",":E","8#"]);function yt(e){return e.split(/[\s_]+/).map(t=>!t.match(/\w/)||sg.has(t)?t.toLowerCase():t.replace(/[)(:,]/g,"").replace(/’/g,"'").toLowerCase()).filter(Boolean)}const ig=2;function Ql(e){return e.filter(Boolean).map(t=>t.toLowerCase()).filter(t=>t.length>=ig)}function og(e){return e.map(({annotation:n,emoticon:s,group:i,order:o,shortcodes:r,skins:l,tags:a,emoji:c,version:u})=>{const p=[...new Set(Ql([...(r||[]).map(yt).flat(),...(a||[]).map(yt).flat(),...yt(n),s]))].sort(),m={annotation:n,group:i,order:o,tags:a,tokens:p,unicode:c,version:u};if(s&&(m.emoticon=s),r&&(m.shortcodes=r),l){m.skinTones=[],m.skinUnicodes=[],m.skinVersions=[];for(const{tone:v,emoji:w,version:x}of l)m.skinTones.push(v),m.skinUnicodes.push(w),m.skinVersions.push(x)}return m})}function Yl(e,t,n,s){e[t](n).onsuccess=i=>s&&s(i.target.result)}function Je(e,t,n){Yl(e,"get",t,n)}function Xl(e,t,n){Yl(e,"getAll",t,n)}function So(e){e.commit&&e.commit()}function rg(e,t){let n=e[0];for(let s=1;s<e.length;s++){const i=e[s];t(n)>t(i)&&(n=i)}return n}function Zl(e,t){const n=rg(e,i=>i.length),s=[];for(const i of n)e.some(o=>o.findIndex(r=>t(r)===t(i))===-1)||s.push(i);return s}async function ag(e){return!await Ao(e,St,Xn)}async function lg(e,t,n){const[s,i]=await Promise.all([$i,Xn].map(o=>Ao(e,St,o)));return s===n&&i===t}async function cg(e,t){return _e(e,st,$t,(s,i,o)=>{let r;const l=()=>{s.getAll(r&&IDBKeyRange.lowerBound(r,!0),50).onsuccess=a=>{const c=a.target.result;for(const u of c)if(r=u.unicode,t(u))return o(u);if(c.length<50)return o();l()}};l()})}async function Jl(e,t,n,s){{const i=og(t);await _e(e,[st,St],wo,([o,r],l)=>{let a,c,u=0;function p(){++u===2&&m()}function m(){if(!(a===s&&c===n)){o.clear();for(const v of i)o.put(v);r.put(s,$i),r.put(n,Xn),So(l)}}Je(r,$i,v=>{a=v,p()}),Je(r,Xn,v=>{c=v,p()})})}}async function ug(e,t){return _e(e,st,$t,(n,s,i)=>{const o=IDBKeyRange.bound([t,0],[t+1,0],!1,!0);Xl(n.index(ql),o,i)})}async function ec(e,t){const n=Ql(yt(t));return n.length?_e(e,st,$t,(s,i,o)=>{const r=[],l=()=>{r.length===n.length&&a()},a=()=>{const c=Zl(r,u=>u.unicode);o(c.sort((u,p)=>u.order<p.order?-1:1))};for(let c=0;c<n.length;c++){const u=n[c],p=c===n.length-1?IDBKeyRange.bound(u,u+"",!1,!0):IDBKeyRange.only(u);Xl(s.index(jl),p,m=>{r.push(m),l()})}}):[]}async function dg(e,t){const n=await ec(e,t);return n.length?n.filter(s=>(s.shortcodes||[]).map(o=>o.toLowerCase()).includes(t.toLowerCase()))[0]||null:await cg(e,i=>(i.shortcodes||[]).includes(t.toLowerCase()))||null}async function pg(e,t){return _e(e,st,$t,(n,s,i)=>Je(n,t,o=>{if(o)return i(o);Je(n.index(Gl),t,r=>i(r||null))}))}function Ao(e,t,n){return _e(e,t,$t,(s,i,o)=>Je(s,n,o))}function hg(e,t,n,s){return _e(e,t,wo,(i,o)=>{i.put(s,n),So(o)})}function fg(e,t){return _e(e,bo,wo,(n,s)=>Je(n,t,i=>{n.put((i||0)+1,t),So(s)}))}function gg(e,t,n){return n===0?[]:_e(e,[bo,st],$t,([s,i],o,r)=>{const l=[];s.index(Hl).openCursor(void 0,"prev").onsuccess=a=>{const c=a.target.result;if(!c)return r(l);function u(v){if(l.push(v),l.length===n)return r(l);c.continue()}const p=c.primaryKey,m=t.byName(p);if(m)return u(m);Je(i,p,v=>{if(v)return u(v);c.continue()})}})}const _n="";function mg(e,t){const n=new Map;for(const i of e){const o=t(i);for(const r of o){let l=n;for(let c=0;c<r.length;c++){const u=r.charAt(c);let p=l.get(u);p||(p=new Map,l.set(u,p)),l=p}let a=l.get(_n);a||(a=[],l.set(_n,a)),a.push(i)}}return(i,o)=>{let r=n;for(let c=0;c<i.length;c++){const u=i.charAt(c),p=r.get(u);if(p)r=p;else return[]}if(o)return r.get(_n)||[];const l=[],a=[r];for(;a.length;){const u=[...a.shift().entries()].sort((p,m)=>p[0]<m[0]?-1:1);for(const[p,m]of u)p===_n?l.push(...m):a.push(m)}return l}}const yg=["name","url"];function vg(e){const t=e&&Array.isArray(e),n=t&&e.length&&(!e[0]||yg.some(s=>!(s in e[0])));if(!t||n)throw new Error("Custom emojis are in the wrong format")}function Xr(e){vg(e);const t=(m,v)=>m.name.toLowerCase()<v.name.toLowerCase()?-1:1,n=e.sort(t),i=mg(e,m=>{const v=new Set;if(m.shortcodes)for(const w of m.shortcodes)for(const x of yt(w))v.add(x);return v}),o=m=>i(m,!0),r=m=>i(m,!1),l=m=>{const v=yt(m),w=v.map((x,_)=>(_<v.length-1?o:r)(x));return Zl(w,x=>x.name).sort(t)},a=new Map,c=new Map;for(const m of e){c.set(m.name.toLowerCase(),m);for(const v of m.shortcodes||[])a.set(v.toLowerCase(),m)}return{all:n,search:l,byShortcode:m=>a.get(m.toLowerCase()),byName:m=>c.get(m.toLowerCase())}}const bg=typeof wrappedJSObject<"u";function Ft(e){if(!e)return e;if(bg&&(e=structuredClone(e)),delete e.tokens,e.skinTones){const t=e.skinTones.length;e.skins=Array(t);for(let n=0;n<t;n++)e.skins[n]={tone:e.skinTones[n],unicode:e.skinUnicodes[n],version:e.skinVersions[n]};delete e.skinTones,delete e.skinUnicodes,delete e.skinVersions}return e}function tc(e){e||console.warn("emoji-picker-element is more efficient if the dataSource server exposes an ETag header.")}const wg=["annotation","emoji","group","order","version"];function kg(e){if(!e||!Array.isArray(e)||!e[0]||typeof e[0]!="object"||wg.some(t=>!(t in e[0])))throw new Error("Emoji data is in the wrong format")}function nc(e,t){if(Math.floor(e.status/100)!==2)throw new Error("Failed to fetch: "+t+": "+e.status)}async function Sg(e){const t=await fetch(e,{method:"HEAD"});nc(t,e);const n=t.headers.get("etag");return tc(n),n}async function Ti(e){const t=await fetch(e);nc(t,e);const n=t.headers.get("etag");tc(n);const s=await t.json();return kg(s),[n,s]}function Ag(e){for(var t="",n=new Uint8Array(e),s=n.byteLength,i=-1;++i<s;)t+=String.fromCharCode(n[i]);return t}function xg(e){for(var t=e.length,n=new ArrayBuffer(t),s=new Uint8Array(n),i=-1;++i<t;)s[i]=e.charCodeAt(i);return n}async function sc(e){const t=JSON.stringify(e);let n=xg(t);const s=await crypto.subtle.digest("SHA-1",n),i=Ag(s);return btoa(i)}async function $g(e,t){let n,s=await Sg(t);if(!s){const i=await Ti(t);s=i[0],n=i[1],s||(s=await sc(n))}await lg(e,t,s)||(n||(n=(await Ti(t))[1]),await Jl(e,n,t,s))}async function Eg(e,t){let[n,s]=await Ti(t);n||(n=await sc(s)),await Jl(e,s,t,n)}async function Tg(e,t){try{await $g(e,t)}catch(n){if(n.name!=="InvalidStateError")throw n}}class Cg{constructor({dataSource:t=Qf,locale:n=Yf,customEmoji:s=[]}={}){this.dataSource=t,this.locale=n,this._dbName=`emoji-picker-element-${this.locale}`,this._db=void 0,this._lazyUpdate=void 0,this._custom=Xr(s),this._clear=this._clear.bind(this),this._ready=this._init()}async _init(){const t=this._db=await eg(this._dbName);ng(this._dbName,this._clear);const n=this.dataSource;await ag(t)?await Eg(t,n):this._lazyUpdate=Tg(t,n)}async ready(){const t=async()=>(this._ready||(this._ready=this._init()),this._ready);await t(),this._db||await t()}async getEmojiByGroup(t){return Gs(t),await this.ready(),Yr(await ug(this._db,t)).map(Ft)}async getEmojiBySearchQuery(t){Cn(t),await this.ready();const n=this._custom.search(t),s=Yr(await ec(this._db,t)).map(Ft);return[...n,...s]}async getEmojiByShortcode(t){Cn(t),await this.ready();const n=this._custom.byShortcode(t);return n||Ft(await dg(this._db,t))}async getEmojiByUnicodeOrName(t){Cn(t),await this.ready();const n=this._custom.byName(t);return n||Ft(await pg(this._db,t))}async getPreferredSkinTone(){return await this.ready(),await Ao(this._db,St,Qr)||0}async setPreferredSkinTone(t){return Gs(t),await this.ready(),hg(this._db,St,Qr,t)}async incrementFavoriteEmojiCount(t){return Cn(t),await this.ready(),fg(this._db,t)}async getTopFavoriteEmoji(t){return Gs(t),await this.ready(),(await gg(this._db,this._custom,t)).map(Ft)}set customEmoji(t){this._custom=Xr(t)}get customEmoji(){return this._custom.all}async _shutdown(){await this.ready();try{await this._lazyUpdate}catch{}}_clear(){this._db=this._ready=this._lazyUpdate=void 0}async close(){await this._shutdown(),await ko(this._dbName)}async delete(){await this._shutdown(),await tg(this._dbName)}}const Ci=[[-1,"✨","custom"],[0,"😀","smileys-emotion"],[1,"👋","people-body"],[3,"🐱","animals-nature"],[4,"🍎","food-drink"],[5,"🏠️","travel-places"],[6,"⚽","activities"],[7,"📝","objects"],[8,"⛔️","symbols"],[9,"🏁","flags"]].map(([e,t,n])=>({id:e,emoji:t,name:n})),Vs=Ci.slice(1),_g=2,Zr=6,ic=typeof requestIdleCallback=="function"?requestIdleCallback:setTimeout;function Jr(e){return e.unicode.includes("")}const Mg={"":17,"":16,"🫨":15.1,"🫠":14,"🥲":13.1,"🥻":12.1,"🥰":11,"🤩":5,"👱♀️":4,"🤣":3,"👁️🗨️":2,"😀":1,"😐️":.7,"😃":.6},Pg=1e3,Lg="🖐️",Rg=8,Ig=["😊","😒","❤️","👍️","😍","😂","😭","☺️","😔","😩","😏","💕","🙌","😘"],oc='"Twemoji Mozilla","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji","EmojiOne Color","Android Emoji",sans-serif',Ng=(e,t)=>e<t?-1:e>t?1:0,ea=(e,t)=>{const n=document.createElement("canvas");n.width=n.height=1;const s=n.getContext("2d",{willReadFrequently:!0});return s.textBaseline="top",s.font=`100px ${oc}`,s.fillStyle=t,s.scale(.01,.01),s.fillText(e,0,0),s.getImageData(0,0,1,1).data},Og=(e,t)=>{const n=[...e].join(","),s=[...t].join(",");return n===s&&!n.startsWith("0,0,0,")};function Dg(e){const t=ea(e,"#000"),n=ea(e,"#fff");return t&&n&&Og(t,n)}function Bg(){const e=Object.entries(Mg);try{for(const[t,n]of e)if(Dg(t))return n}catch{}return e[0][1]}let Qs;const Ys=()=>(Qs||(Qs=new Promise(e=>ic(()=>e(Bg())))),Qs),_i=new Map,Fg="️",Ug="\uD83C",Wg="",Kg=127995,zg=57339;function jg(e,t){if(t===0)return e;const n=e.indexOf(Wg);return n!==-1?e.substring(0,n)+String.fromCodePoint(Kg+t-1)+e.substring(n):(e.endsWith(Fg)&&(e=e.substring(0,e.length-1)),e+Ug+String.fromCodePoint(zg+t-1))}function ve(e){e.preventDefault(),e.stopPropagation()}function Xs(e,t,n){return t+=e?-1:1,t<0?t=n.length-1:t>=n.length&&(t=0),t}function rc(e,t){const n=new Set,s=[];for(const i of e){const o=t(i);n.has(o)||(n.add(o),s.push(i))}return s}function Hg(e,t){const n=s=>{const i={};for(const o of s)typeof o.tone=="number"&&o.version<=t&&(i[o.tone]=o.unicode);return i};return e.map(({unicode:s,skins:i,shortcodes:o,url:r,name:l,category:a,annotation:c})=>({unicode:s,name:l,shortcodes:o,url:r,category:a,annotation:c,id:s||l,skins:i&&n(i)}))}const Dn=requestAnimationFrame;let qg=typeof ResizeObserver=="function";function Gg(e,t,n){let s;qg?(s=new ResizeObserver(n),s.observe(e)):Dn(n),t.addEventListener("abort",()=>{s&&s.disconnect()})}function ta(e){{const t=document.createRange();return t.selectNode(e.firstChild),t.getBoundingClientRect().width}}let Zs;function Vg(e,t,n){let s=!0,i=!1;for(const o of e){const r=n(o);if(!r)continue;const l=ta(r);l===0&&(i=!0),typeof Zs>"u"&&(Zs=ta(t));const a=l/1.8<Zs;_i.set(o.unicode,a),a||(s=!1)}return i&&console.warn(`Emoji support detection failed - emoji character is 0 width.
|
|
1777
|
+
`;hs([is({type:Number})],kt.prototype,"splitRatio",2);hs([is({type:Number})],kt.prototype,"minRatio",2);hs([is({type:Number})],kt.prototype,"maxRatio",2);kt=hs([_a("resizable-divider")],kt);function Cn(e){if(typeof e!="string"||!e)throw new Error("expected a non-empty string, got: "+e)}function Gs(e){if(typeof e!="number")throw new Error("expected a number, got: "+e)}const Yf=1,Qf=1,st="emoji",St="keyvalue",wo="favorites",Xf="tokens",Vl="tokens",Zf="unicode",Yl="count",Jf="group",eg="order",Ql="group-order",$i="eTag",Xn="url",Zr="skinTone",$t="readonly",ko="readwrite",Xl="skinUnicodes",tg="skinUnicodes",ng="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",sg="en";function ig(e,t){const n=new Set,s=[];for(const i of e){const o=t(i);n.has(o)||(n.add(o),s.push(i))}return s}function Jr(e){return ig(e,t=>t.unicode)}function og(e){function t(n,s,i){const o=s?e.createObjectStore(n,{keyPath:s}):e.createObjectStore(n);if(i)for(const[r,[l,a]]of Object.entries(i))o.createIndex(r,l,{multiEntry:a});return o}t(St),t(st,Zf,{[Vl]:[Xf,!0],[Ql]:[[Jf,eg]],[Xl]:[tg,!0]}),t(wo,void 0,{[Yl]:[""]})}const Ei={},Dn={},Zn={};function Zl(e,t,n){n.onerror=()=>t(n.error),n.onblocked=()=>t(new Error("IDB blocked")),n.onsuccess=()=>e(n.result)}async function rg(e){const t=await new Promise((n,s)=>{const i=indexedDB.open(e,Yf);Ei[e]=i,i.onupgradeneeded=o=>{o.oldVersion<Qf&&og(i.result)},Zl(n,s,i)});return t.onclose=()=>So(e),t}function ag(e){return Dn[e]||(Dn[e]=rg(e)),Dn[e]}function _e(e,t,n,s){return new Promise((i,o)=>{const r=e.transaction(t,n,{durability:"relaxed"}),l=typeof t=="string"?r.objectStore(t):t.map(c=>r.objectStore(c));let a;s(l,r,c=>{a=c}),r.oncomplete=()=>i(a),r.onerror=()=>o(r.error)})}function So(e){const t=Ei[e],n=t&&t.result;if(n){n.close();const s=Zn[e];if(s)for(const i of s)i()}delete Ei[e],delete Dn[e],delete Zn[e]}function lg(e){return new Promise((t,n)=>{So(e);const s=indexedDB.deleteDatabase(e);Zl(t,n,s)})}function cg(e,t){let n=Zn[e];n||(n=Zn[e]=[]),n.push(t)}const ug=new Set([":D","XD",":'D","O:)",":X",":P",";P","XP",":L",":Z",":j","8D","XO","8)",":B",":O",":S",":'o","Dx","X(","D:",":C",">0)",":3","</3","<3","\\M/",":E","8#"]);function yt(e){return e.split(/[\s_]+/).map(t=>!t.match(/\w/)||ug.has(t)?t.toLowerCase():t.replace(/[)(:,]/g,"").replace(/’/g,"'").toLowerCase()).filter(Boolean)}const dg=2;function Jl(e){return e.filter(Boolean).map(t=>t.toLowerCase()).filter(t=>t.length>=dg)}function pg(e){return e.map(({annotation:n,emoticon:s,group:i,order:o,shortcodes:r,skins:l,tags:a,emoji:c,version:u})=>{const p=[...new Set(Jl([...(r||[]).map(yt).flat(),...(a||[]).map(yt).flat(),...yt(n),s]))].sort(),m={annotation:n,group:i,order:o,tags:a,tokens:p,unicode:c,version:u};if(s&&(m.emoticon=s),r&&(m.shortcodes=r),l){m.skinTones=[],m.skinUnicodes=[],m.skinVersions=[];for(const{tone:v,emoji:w,version:A}of l)m.skinTones.push(v),m.skinUnicodes.push(w),m.skinVersions.push(A)}return m})}function ec(e,t,n,s){e[t](n).onsuccess=i=>s&&s(i.target.result)}function Je(e,t,n){ec(e,"get",t,n)}function tc(e,t,n){ec(e,"getAll",t,n)}function xo(e){e.commit&&e.commit()}function hg(e,t){let n=e[0];for(let s=1;s<e.length;s++){const i=e[s];t(n)>t(i)&&(n=i)}return n}function nc(e,t){const n=hg(e,i=>i.length),s=[];for(const i of n)e.some(o=>o.findIndex(r=>t(r)===t(i))===-1)||s.push(i);return s}async function fg(e){return!await Ao(e,St,Xn)}async function gg(e,t,n){const[s,i]=await Promise.all([$i,Xn].map(o=>Ao(e,St,o)));return s===n&&i===t}async function mg(e,t){return _e(e,st,$t,(s,i,o)=>{let r;const l=()=>{s.getAll(r&&IDBKeyRange.lowerBound(r,!0),50).onsuccess=a=>{const c=a.target.result;for(const u of c)if(r=u.unicode,t(u))return o(u);if(c.length<50)return o();l()}};l()})}async function sc(e,t,n,s){{const i=pg(t);await _e(e,[st,St],ko,([o,r],l)=>{let a,c,u=0;function p(){++u===2&&m()}function m(){if(!(a===s&&c===n)){o.clear();for(const v of i)o.put(v);r.put(s,$i),r.put(n,Xn),xo(l)}}Je(r,$i,v=>{a=v,p()}),Je(r,Xn,v=>{c=v,p()})})}}async function yg(e,t){return _e(e,st,$t,(n,s,i)=>{const o=IDBKeyRange.bound([t,0],[t+1,0],!1,!0);tc(n.index(Ql),o,i)})}async function ic(e,t){const n=Jl(yt(t));return n.length?_e(e,st,$t,(s,i,o)=>{const r=[],l=()=>{r.length===n.length&&a()},a=()=>{const c=nc(r,u=>u.unicode);o(c.sort((u,p)=>u.order<p.order?-1:1))};for(let c=0;c<n.length;c++){const u=n[c],p=c===n.length-1?IDBKeyRange.bound(u,u+"",!1,!0):IDBKeyRange.only(u);tc(s.index(Vl),p,m=>{r.push(m),l()})}}):[]}async function vg(e,t){const n=await ic(e,t);return n.length?n.filter(s=>(s.shortcodes||[]).map(o=>o.toLowerCase()).includes(t.toLowerCase()))[0]||null:await mg(e,i=>(i.shortcodes||[]).includes(t.toLowerCase()))||null}async function bg(e,t){return _e(e,st,$t,(n,s,i)=>Je(n,t,o=>{if(o)return i(o);Je(n.index(Xl),t,r=>i(r||null))}))}function Ao(e,t,n){return _e(e,t,$t,(s,i,o)=>Je(s,n,o))}function wg(e,t,n,s){return _e(e,t,ko,(i,o)=>{i.put(s,n),xo(o)})}function kg(e,t){return _e(e,wo,ko,(n,s)=>Je(n,t,i=>{n.put((i||0)+1,t),xo(s)}))}function Sg(e,t,n){return n===0?[]:_e(e,[wo,st],$t,([s,i],o,r)=>{const l=[];s.index(Yl).openCursor(void 0,"prev").onsuccess=a=>{const c=a.target.result;if(!c)return r(l);function u(v){if(l.push(v),l.length===n)return r(l);c.continue()}const p=c.primaryKey,m=t.byName(p);if(m)return u(m);Je(i,p,v=>{if(v)return u(v);c.continue()})}})}const _n="";function xg(e,t){const n=new Map;for(const i of e){const o=t(i);for(const r of o){let l=n;for(let c=0;c<r.length;c++){const u=r.charAt(c);let p=l.get(u);p||(p=new Map,l.set(u,p)),l=p}let a=l.get(_n);a||(a=[],l.set(_n,a)),a.push(i)}}return(i,o)=>{let r=n;for(let c=0;c<i.length;c++){const u=i.charAt(c),p=r.get(u);if(p)r=p;else return[]}if(o)return r.get(_n)||[];const l=[],a=[r];for(;a.length;){const u=[...a.shift().entries()].sort((p,m)=>p[0]<m[0]?-1:1);for(const[p,m]of u)p===_n?l.push(...m):a.push(m)}return l}}const Ag=["name","url"];function $g(e){const t=e&&Array.isArray(e),n=t&&e.length&&(!e[0]||Ag.some(s=>!(s in e[0])));if(!t||n)throw new Error("Custom emojis are in the wrong format")}function ea(e){$g(e);const t=(m,v)=>m.name.toLowerCase()<v.name.toLowerCase()?-1:1,n=e.sort(t),i=xg(e,m=>{const v=new Set;if(m.shortcodes)for(const w of m.shortcodes)for(const A of yt(w))v.add(A);return v}),o=m=>i(m,!0),r=m=>i(m,!1),l=m=>{const v=yt(m),w=v.map((A,_)=>(_<v.length-1?o:r)(A));return nc(w,A=>A.name).sort(t)},a=new Map,c=new Map;for(const m of e){c.set(m.name.toLowerCase(),m);for(const v of m.shortcodes||[])a.set(v.toLowerCase(),m)}return{all:n,search:l,byShortcode:m=>a.get(m.toLowerCase()),byName:m=>c.get(m.toLowerCase())}}const Eg=typeof wrappedJSObject<"u";function Ft(e){if(!e)return e;if(Eg&&(e=structuredClone(e)),delete e.tokens,e.skinTones){const t=e.skinTones.length;e.skins=Array(t);for(let n=0;n<t;n++)e.skins[n]={tone:e.skinTones[n],unicode:e.skinUnicodes[n],version:e.skinVersions[n]};delete e.skinTones,delete e.skinUnicodes,delete e.skinVersions}return e}function oc(e){e||console.warn("emoji-picker-element is more efficient if the dataSource server exposes an ETag header.")}const Tg=["annotation","emoji","group","order","version"];function Cg(e){if(!e||!Array.isArray(e)||!e[0]||typeof e[0]!="object"||Tg.some(t=>!(t in e[0])))throw new Error("Emoji data is in the wrong format")}function rc(e,t){if(Math.floor(e.status/100)!==2)throw new Error("Failed to fetch: "+t+": "+e.status)}async function _g(e){const t=await fetch(e,{method:"HEAD"});rc(t,e);const n=t.headers.get("etag");return oc(n),n}async function Ti(e){const t=await fetch(e);rc(t,e);const n=t.headers.get("etag");oc(n);const s=await t.json();return Cg(s),[n,s]}function Mg(e){for(var t="",n=new Uint8Array(e),s=n.byteLength,i=-1;++i<s;)t+=String.fromCharCode(n[i]);return t}function Lg(e){for(var t=e.length,n=new ArrayBuffer(t),s=new Uint8Array(n),i=-1;++i<t;)s[i]=e.charCodeAt(i);return n}async function ac(e){const t=JSON.stringify(e);let n=Lg(t);const s=await crypto.subtle.digest("SHA-1",n),i=Mg(s);return btoa(i)}async function Pg(e,t){let n,s=await _g(t);if(!s){const i=await Ti(t);s=i[0],n=i[1],s||(s=await ac(n))}await gg(e,t,s)||(n||(n=(await Ti(t))[1]),await sc(e,n,t,s))}async function Rg(e,t){let[n,s]=await Ti(t);n||(n=await ac(s)),await sc(e,s,t,n)}async function Ig(e,t){try{await Pg(e,t)}catch(n){if(n.name!=="InvalidStateError")throw n}}class Ng{constructor({dataSource:t=ng,locale:n=sg,customEmoji:s=[]}={}){this.dataSource=t,this.locale=n,this._dbName=`emoji-picker-element-${this.locale}`,this._db=void 0,this._lazyUpdate=void 0,this._custom=ea(s),this._clear=this._clear.bind(this),this._ready=this._init()}async _init(){const t=this._db=await ag(this._dbName);cg(this._dbName,this._clear);const n=this.dataSource;await fg(t)?await Rg(t,n):this._lazyUpdate=Ig(t,n)}async ready(){const t=async()=>(this._ready||(this._ready=this._init()),this._ready);await t(),this._db||await t()}async getEmojiByGroup(t){return Gs(t),await this.ready(),Jr(await yg(this._db,t)).map(Ft)}async getEmojiBySearchQuery(t){Cn(t),await this.ready();const n=this._custom.search(t),s=Jr(await ic(this._db,t)).map(Ft);return[...n,...s]}async getEmojiByShortcode(t){Cn(t),await this.ready();const n=this._custom.byShortcode(t);return n||Ft(await vg(this._db,t))}async getEmojiByUnicodeOrName(t){Cn(t),await this.ready();const n=this._custom.byName(t);return n||Ft(await bg(this._db,t))}async getPreferredSkinTone(){return await this.ready(),await Ao(this._db,St,Zr)||0}async setPreferredSkinTone(t){return Gs(t),await this.ready(),wg(this._db,St,Zr,t)}async incrementFavoriteEmojiCount(t){return Cn(t),await this.ready(),kg(this._db,t)}async getTopFavoriteEmoji(t){return Gs(t),await this.ready(),(await Sg(this._db,this._custom,t)).map(Ft)}set customEmoji(t){this._custom=ea(t)}get customEmoji(){return this._custom.all}async _shutdown(){await this.ready();try{await this._lazyUpdate}catch{}}_clear(){this._db=this._ready=this._lazyUpdate=void 0}async close(){await this._shutdown(),await So(this._dbName)}async delete(){await this._shutdown(),await lg(this._dbName)}}const Ci=[[-1,"✨","custom"],[0,"😀","smileys-emotion"],[1,"👋","people-body"],[3,"🐱","animals-nature"],[4,"🍎","food-drink"],[5,"🏠️","travel-places"],[6,"⚽","activities"],[7,"📝","objects"],[8,"⛔️","symbols"],[9,"🏁","flags"]].map(([e,t,n])=>({id:e,emoji:t,name:n})),Vs=Ci.slice(1),Dg=2,ta=6,lc=typeof requestIdleCallback=="function"?requestIdleCallback:setTimeout;function na(e){return e.unicode.includes("")}const Og={"":17,"":16,"🫨":15.1,"🫠":14,"🥲":13.1,"🥻":12.1,"🥰":11,"🤩":5,"👱♀️":4,"🤣":3,"👁️🗨️":2,"😀":1,"😐️":.7,"😃":.6},Bg=1e3,Fg="🖐️",Ug=8,Wg=["😊","😒","❤️","👍️","😍","😂","😭","☺️","😔","😩","😏","💕","🙌","😘"],cc='"Twemoji Mozilla","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji","EmojiOne Color","Android Emoji",sans-serif',Kg=(e,t)=>e<t?-1:e>t?1:0,sa=(e,t)=>{const n=document.createElement("canvas");n.width=n.height=1;const s=n.getContext("2d",{willReadFrequently:!0});return s.textBaseline="top",s.font=`100px ${cc}`,s.fillStyle=t,s.scale(.01,.01),s.fillText(e,0,0),s.getImageData(0,0,1,1).data},zg=(e,t)=>{const n=[...e].join(","),s=[...t].join(",");return n===s&&!n.startsWith("0,0,0,")};function jg(e){const t=sa(e,"#000"),n=sa(e,"#fff");return t&&n&&zg(t,n)}function Hg(){const e=Object.entries(Og);try{for(const[t,n]of e)if(jg(t))return n}catch{}return e[0][1]}let Ys;const Qs=()=>(Ys||(Ys=new Promise(e=>lc(()=>e(Hg())))),Ys),_i=new Map,qg="️",Gg="\uD83C",Vg="",Yg=127995,Qg=57339;function Xg(e,t){if(t===0)return e;const n=e.indexOf(Vg);return n!==-1?e.substring(0,n)+String.fromCodePoint(Yg+t-1)+e.substring(n):(e.endsWith(qg)&&(e=e.substring(0,e.length-1)),e+Gg+String.fromCodePoint(Qg+t-1))}function be(e){e.preventDefault(),e.stopPropagation()}function Xs(e,t,n){return t+=e?-1:1,t<0?t=n.length-1:t>=n.length&&(t=0),t}function uc(e,t){const n=new Set,s=[];for(const i of e){const o=t(i);n.has(o)||(n.add(o),s.push(i))}return s}function Zg(e,t){const n=s=>{const i={};for(const o of s)typeof o.tone=="number"&&o.version<=t&&(i[o.tone]=o.unicode);return i};return e.map(({unicode:s,skins:i,shortcodes:o,url:r,name:l,category:a,annotation:c})=>({unicode:s,name:l,shortcodes:o,url:r,category:a,annotation:c,id:s||l,skins:i&&n(i)}))}const On=requestAnimationFrame;let Jg=typeof ResizeObserver=="function";function em(e,t,n){let s;Jg?(s=new ResizeObserver(n),s.observe(e)):On(n),t.addEventListener("abort",()=>{s&&s.disconnect()})}function ia(e){{const t=document.createRange();return t.selectNode(e.firstChild),t.getBoundingClientRect().width}}let Zs;function tm(e,t,n){let s=!0,i=!1;for(const o of e){const r=n(o);if(!r)continue;const l=ia(r);l===0&&(i=!0),typeof Zs>"u"&&(Zs=ia(t));const a=l/1.8<Zs;_i.set(o.unicode,a),a||(s=!1)}return i&&console.warn(`Emoji support detection failed - emoji character is 0 width.
|
|
1699
1778
|
This is likely due to using \`display:none\` which is unsupported.
|
|
1700
1779
|
If this is a Jest/Vitest environment, you can ignore this warning.
|
|
1701
|
-
For details see: https://github.com/nolanlawson/emoji-picker-element/issues/514`),s}function Qg(e){return rc(e,t=>t)}function Yg(e){e&&(e.scrollTop=0)}function Vt(e,t,n){let s=e.get(t);return s||(s=n(),e.set(t,s)),s}function na(e){return""+e}function Xg(e){const t=document.createElement("template");return t.innerHTML=e,t}const Zg=new WeakMap,Jg=new WeakMap,em=Symbol("un-keyed"),tm="replaceChildren"in Element.prototype;function nm(e,t){tm?e.replaceChildren(...t):(e.innerHTML="",e.append(...t))}function sm(e,t){let n=e.firstChild,s=0;for(;n;){if(t[s]!==n)return!0;n=n.nextSibling,s++}return s!==t.length}function im(e,t){const{targetNode:n}=t;let{targetParentNode:s}=t,i=!1;s?i=sm(s,e):(i=!0,t.targetNode=void 0,t.targetParentNode=s=n.parentNode),i&&nm(s,e)}function om(e,t){for(const n of t){const{targetNode:s,currentExpression:i,binding:{expressionIndex:o,attributeName:r,attributeValuePre:l,attributeValuePost:a}}=n,c=e[o];if(i!==c)if(n.currentExpression=c,r)if(c===null)s.removeAttribute(r);else{const u=l+na(c)+a;s.setAttribute(r,u)}else{let u;Array.isArray(c)?im(c,n):c instanceof Element?(u=c,s.replaceWith(u)):s.nodeValue=na(c),u&&(n.targetNode=u)}}}function rm(e){let t="",n=!1,s=!1,i=-1;const o=new Map,r=[];let l=0;for(let c=0,u=e.length;c<u;c++){const p=e[c];if(t+=p.slice(l),c===u-1)break;for(let C=0;C<p.length;C++)switch(p.charAt(C)){case"<":{p.charAt(C+1)==="/"?r.pop():(n=!0,r.push(++i));break}case">":{n=!1,s=!1;break}case"=":{s=!0;break}}const m=r[r.length-1],v=Vt(o,m,()=>[]);let w,x,_;if(s){const C=/(\S+)="?([^"=]*)$/.exec(p);w=C[1],x=C[2];const L=/^([^">]*)("?)/.exec(e[c+1]);_=L[1],t=t.slice(0,-1*C[0].length),l=L[0].length}else l=0;const j={attributeName:w,attributeValuePre:x,attributeValuePost:_,expressionIndex:c};v.push(j),!n&&!s&&(t+=" ")}return{template:Xg(t),elementsToBindings:o}}function sa(e,t,n){for(let s=0;s<e.length;s++){const i=e[s],o=i.attributeName?t:t.firstChild,r={binding:i,targetNode:o,targetParentNode:void 0,currentExpression:void 0};n.push(r)}}function am(e,t){const n=[];let s;if(t.size===1&&(s=t.get(0)))sa(s,e,n);else{const i=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT);let o=e,r=-1;do{const l=t.get(++r);l&&sa(l,o,n)}while(o=i.nextNode())}return n}function lm(e){const{template:t,elementsToBindings:n}=Vt(Zg,e,()=>rm(e)),s=t.cloneNode(!0).content.firstElementChild,i=am(s,n);return function(r){return om(r,i),s}}function cm(e){const t=Vt(Jg,e,()=>new Map);let n=em;function s(o,...r){const l=Vt(t,o,()=>new Map);return Vt(l,n,()=>lm(o))(r)}function i(o,r,l){return o.map((a,c)=>{const u=n;n=l(a);try{return r(a,c)}finally{n=u}})}return{map:i,html:s}}function um(e,t,n,s,i,o,r,l,a){const{labelWithSkin:c,titleForEmoji:u,unicodeWithSkin:p}=n,{html:m,map:v}=cm(t);function w(C,L,I){return v(C,(B,ue)=>m`<button role="${L?"option":"menuitem"}" aria-selected="${L?ue===t.activeSearchItem:null}" aria-label="${c(B,t.currentSkinTone)}" title="${u(B)}" class="${"emoji"+(L&&ue===t.activeSearchItem?" active":"")+(B.unicode?"":" custom-emoji")}" id="${`${I}-${B.id}`}" style="${B.unicode?null:`--custom-emoji-background: url(${JSON.stringify(B.url)})`}">${B.unicode?p(B,t.currentSkinTone):""}</button>`,B=>`${I}-${B.id}`)}const _=m`<section data-ref="rootElement" class="picker" aria-label="${t.i18n.regionLabel}" style="${t.pickerStyle||""}"><div class="pad-top"></div><div class="search-row"><div class="search-wrapper"><input id="search" class="search" type="search" role="combobox" enterkeyhint="search" placeholder="${t.i18n.searchLabel}" autocapitalize="none" autocomplete="off" spellcheck="true" aria-expanded="${!!(t.searchMode&&t.currentEmojis.length)}" aria-controls="search-results" aria-describedby="search-description" aria-autocomplete="list" aria-activedescendant="${t.activeSearchItemId?`emo-${t.activeSearchItemId}`:null}" data-ref="searchElement" data-on-input="onSearchInput" data-on-keydown="onSearchKeydown"><label class="sr-only" for="search">${t.i18n.searchLabel}</label> <span id="search-description" class="sr-only">${t.i18n.searchDescription}</span></div><div class="skintone-button-wrapper ${t.skinTonePickerExpandedAfterAnimation?"expanded":""}"><button id="skintone-button" class="emoji ${t.skinTonePickerExpanded?"hide-focus":""}" aria-label="${t.skinToneButtonLabel}" title="${t.skinToneButtonLabel}" aria-describedby="skintone-description" aria-haspopup="listbox" aria-expanded="${t.skinTonePickerExpanded}" aria-controls="skintone-list" data-on-click="onClickSkinToneButton">${t.skinToneButtonText||""}</button></div><span id="skintone-description" class="sr-only">${t.i18n.skinToneDescription}</span><div data-ref="skinToneDropdown" id="skintone-list" class="skintone-list hide-focus ${t.skinTonePickerExpanded?"":"hidden no-animate"}" style="transform:translateY(${t.skinTonePickerExpanded?0:"calc(-1 * var(--num-skintones) * var(--total-emoji-size))"})" role="listbox" aria-label="${t.i18n.skinTonesLabel}" aria-activedescendant="skintone-${t.activeSkinTone}" aria-hidden="${!t.skinTonePickerExpanded}" tabIndex="-1" data-on-focusout="onSkinToneOptionsFocusOut" data-on-click="onSkinToneOptionsClick" data-on-keydown="onSkinToneOptionsKeydown" data-on-keyup="onSkinToneOptionsKeyup">${v(t.skinTones,(C,L)=>m`<div id="skintone-${L}" class="emoji ${L===t.activeSkinTone?"active":""}" aria-selected="${L===t.activeSkinTone}" role="option" title="${t.i18n.skinTones[L]}" aria-label="${t.i18n.skinTones[L]}">${C}</div>`,C=>C)}</div></div><div class="nav" role="tablist" style="grid-template-columns:repeat(${t.groups.length},1fr)" aria-label="${t.i18n.categoriesLabel}" data-on-keydown="onNavKeydown" data-on-click="onNavClick">${v(t.groups,C=>m`<button role="tab" class="nav-button" aria-controls="tab-${C.id}" aria-label="${t.i18n.categories[C.name]}" aria-selected="${!t.searchMode&&t.currentGroup.id===C.id}" title="${t.i18n.categories[C.name]}" data-group-id="${C.id}"><div class="nav-emoji emoji">${C.emoji}</div></button>`,C=>C.id)}</div><div class="indicator-wrapper"><div class="indicator" style="transform:translateX(${(t.isRtl?-1:1)*t.currentGroupIndex*100}%)"></div></div><div class="message ${t.message?"":"gone"}" role="alert" aria-live="polite">${t.message||""}</div><div data-ref="tabpanelElement" class="tabpanel ${!t.databaseLoaded||t.message?"gone":""}" role="${t.searchMode?"region":"tabpanel"}" aria-label="${t.searchMode?t.i18n.searchResultsLabel:t.i18n.categories[t.currentGroup.name]}" id="${t.searchMode?null:`tab-${t.currentGroup.id}`}" tabIndex="0" data-on-click="onEmojiClick"><div data-action="calculateEmojiGridStyle">${v(t.currentEmojisWithCategories,(C,L)=>m`<div><div id="menu-label-${L}" class="category ${t.currentEmojisWithCategories.length===1&&t.currentEmojisWithCategories[0].category===""?"gone":""}" aria-hidden="true">${t.searchMode?t.i18n.searchResultsLabel:C.category?C.category:t.currentEmojisWithCategories.length>1?t.i18n.categories.custom:t.i18n.categories[t.currentGroup.name]}</div><div class="emoji-menu ${L!==0&&!t.searchMode&&t.currentGroup.id===-1?"visibility-auto":""}" style="${`--num-rows: ${Math.ceil(C.emojis.length/t.numColumns)}`}" data-action="updateOnIntersection" role="${t.searchMode?"listbox":"menu"}" aria-labelledby="menu-label-${L}" id="${t.searchMode?"search-results":null}">${w(C.emojis,t.searchMode,"emo")}</div></div>`,C=>C.category)}</div></div><div class="favorites onscreen emoji-menu ${t.message?"gone":""}" role="menu" aria-label="${t.i18n.favoritesLabel}" data-on-click="onEmojiClick">${w(t.currentFavorites,!1,"fav")}</div><button data-ref="baselineEmoji" aria-hidden="true" tabindex="-1" class="abs-pos hidden emoji baseline-emoji">😀</button></section>`,j=(C,L)=>{for(const I of e.querySelectorAll(`[${C}]`))L(I,I.getAttribute(C))};if(a){e.appendChild(_);for(const C of["click","focusout","input","keydown","keyup"])j(`data-on-${C}`,(L,I)=>{L.addEventListener(C,s[I])});j("data-ref",(C,L)=>{o[L]=C}),r.addEventListener("abort",()=>{e.removeChild(_)})}j("data-action",(C,L)=>{let I=l.get(L);I||l.set(L,I=new WeakSet),I.has(C)||(I.add(C),i[L](C))})}const Jn=typeof queueMicrotask=="function"?queueMicrotask:e=>Promise.resolve().then(e);function dm(e){let t=!1,n;const s=new Map,i=new Set;let o;const r=()=>{if(t)return;const c=[...i];i.clear();try{for(const u of c)u()}finally{o=!1,i.size&&(o=!0,Jn(r))}},l=new Proxy({},{get(c,u){if(n){let p=s.get(u);p||(p=new Set,s.set(u,p)),p.add(n)}return c[u]},set(c,u,p){if(c[u]!==p){c[u]=p;const m=s.get(u);if(m){for(const v of m)i.add(v);o||(o=!0,Jn(r))}}return!0}}),a=c=>{const u=()=>{const p=n;n=u;try{return c()}finally{n=p}};return u()};return e.addEventListener("abort",()=>{t=!0}),{state:l,createEffect:a}}function Js(e,t,n){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if(!n(e[s],t[s]))return!1;return!0}const ia=new WeakMap;function pm(e,t,n){{const s=e.closest(".tabpanel");let i=ia.get(s);i||(i=new IntersectionObserver(n,{root:s,rootMargin:"50% 0px 50% 0px",threshold:0}),ia.set(s,i),t.addEventListener("abort",()=>{i.disconnect()})),i.observe(e)}}const ei=[],{assign:Mn}=Object;function hm(e,t){const n={},s=new AbortController,i=s.signal,{state:o,createEffect:r}=dm(i),l=new Map;Mn(o,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),Mn(o,t),Mn(o,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:Rg,isRtl:!1,currentGroupIndex:0,groups:Vs,databaseLoaded:!1,activeSearchItemId:void 0}),r(()=>{o.currentGroup!==o.groups[o.currentGroupIndex]&&(o.currentGroup=o.groups[o.currentGroupIndex])});const a=k=>{e.getElementById(k).focus()},c=k=>e.getElementById(`emo-${k.id}`),u=(k,A)=>{n.rootElement.dispatchEvent(new CustomEvent(k,{detail:A,bubbles:!0,composed:!0}))},p=(k,A)=>k.id===A.id,m=(k,A)=>{const{category:M,emojis:P}=k,{category:K,emojis:F}=A;return M!==K?!1:Js(P,F,p)},v=k=>{Js(o.currentEmojis,k,p)||(o.currentEmojis=k)},w=k=>{o.searchMode!==k&&(o.searchMode=k)},x=k=>{Js(o.currentEmojisWithCategories,k,m)||(o.currentEmojisWithCategories=k)},_=(k,A)=>A&&k.skins&&k.skins[A]||k.unicode,L={labelWithSkin:(k,A)=>Qg([k.name||_(k,A),k.annotation,...k.shortcodes||ei].filter(Boolean)).join(", "),titleForEmoji:k=>k.annotation||(k.shortcodes||ei).join(", "),unicodeWithSkin:_},I={onClickSkinToneButton:W,onEmojiClick:un,onNavClick:ln,onNavKeydown:ws,onSearchKeydown:bs,onSkinToneOptionsClick:dn,onSkinToneOptionsFocusOut:Me,onSkinToneOptionsKeydown:We,onSkinToneOptionsKeyup:Tt,onSearchInput:pn},B={calculateEmojiGridStyle:gs,updateOnIntersection:ms};let ue=!0;r(()=>{um(e,o,L,I,B,n,i,l,ue),ue=!1}),o.emojiVersion||Ys().then(k=>{k||(o.message=o.i18n.emojiUnsupportedMessage)}),r(()=>{async function k(){let A=!1;const M=setTimeout(()=>{A=!0,o.message=o.i18n.loadingMessage},Pg);try{await o.database.ready(),o.databaseLoaded=!0}catch(P){console.error(P),o.message=o.i18n.networkErrorMessage}finally{clearTimeout(M),A&&(A=!1,o.message="")}}o.database&&k()}),r(()=>{o.pickerStyle=`
|
|
1780
|
+
For details see: https://github.com/nolanlawson/emoji-picker-element/issues/514`),s}function nm(e){return uc(e,t=>t)}function sm(e){e&&(e.scrollTop=0)}function Vt(e,t,n){let s=e.get(t);return s||(s=n(),e.set(t,s)),s}function oa(e){return""+e}function im(e){const t=document.createElement("template");return t.innerHTML=e,t}const om=new WeakMap,rm=new WeakMap,am=Symbol("un-keyed"),lm="replaceChildren"in Element.prototype;function cm(e,t){lm?e.replaceChildren(...t):(e.innerHTML="",e.append(...t))}function um(e,t){let n=e.firstChild,s=0;for(;n;){if(t[s]!==n)return!0;n=n.nextSibling,s++}return s!==t.length}function dm(e,t){const{targetNode:n}=t;let{targetParentNode:s}=t,i=!1;s?i=um(s,e):(i=!0,t.targetNode=void 0,t.targetParentNode=s=n.parentNode),i&&cm(s,e)}function pm(e,t){for(const n of t){const{targetNode:s,currentExpression:i,binding:{expressionIndex:o,attributeName:r,attributeValuePre:l,attributeValuePost:a}}=n,c=e[o];if(i!==c)if(n.currentExpression=c,r)if(c===null)s.removeAttribute(r);else{const u=l+oa(c)+a;s.setAttribute(r,u)}else{let u;Array.isArray(c)?dm(c,n):c instanceof Element?(u=c,s.replaceWith(u)):s.nodeValue=oa(c),u&&(n.targetNode=u)}}}function hm(e){let t="",n=!1,s=!1,i=-1;const o=new Map,r=[];let l=0;for(let c=0,u=e.length;c<u;c++){const p=e[c];if(t+=p.slice(l),c===u-1)break;for(let C=0;C<p.length;C++)switch(p.charAt(C)){case"<":{p.charAt(C+1)==="/"?r.pop():(n=!0,r.push(++i));break}case">":{n=!1,s=!1;break}case"=":{s=!0;break}}const m=r[r.length-1],v=Vt(o,m,()=>[]);let w,A,_;if(s){const C=/(\S+)="?([^"=]*)$/.exec(p);w=C[1],A=C[2];const P=/^([^">]*)("?)/.exec(e[c+1]);_=P[1],t=t.slice(0,-1*C[0].length),l=P[0].length}else l=0;const j={attributeName:w,attributeValuePre:A,attributeValuePost:_,expressionIndex:c};v.push(j),!n&&!s&&(t+=" ")}return{template:im(t),elementsToBindings:o}}function ra(e,t,n){for(let s=0;s<e.length;s++){const i=e[s],o=i.attributeName?t:t.firstChild,r={binding:i,targetNode:o,targetParentNode:void 0,currentExpression:void 0};n.push(r)}}function fm(e,t){const n=[];let s;if(t.size===1&&(s=t.get(0)))ra(s,e,n);else{const i=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT);let o=e,r=-1;do{const l=t.get(++r);l&&ra(l,o,n)}while(o=i.nextNode())}return n}function gm(e){const{template:t,elementsToBindings:n}=Vt(om,e,()=>hm(e)),s=t.cloneNode(!0).content.firstElementChild,i=fm(s,n);return function(r){return pm(r,i),s}}function mm(e){const t=Vt(rm,e,()=>new Map);let n=am;function s(o,...r){const l=Vt(t,o,()=>new Map);return Vt(l,n,()=>gm(o))(r)}function i(o,r,l){return o.map((a,c)=>{const u=n;n=l(a);try{return r(a,c)}finally{n=u}})}return{map:i,html:s}}function ym(e,t,n,s,i,o,r,l,a){const{labelWithSkin:c,titleForEmoji:u,unicodeWithSkin:p}=n,{html:m,map:v}=mm(t);function w(C,P,I){return v(C,(B,ue)=>m`<button role="${P?"option":"menuitem"}" aria-selected="${P?ue===t.activeSearchItem:null}" aria-label="${c(B,t.currentSkinTone)}" title="${u(B)}" class="${"emoji"+(P&&ue===t.activeSearchItem?" active":"")+(B.unicode?"":" custom-emoji")}" id="${`${I}-${B.id}`}" style="${B.unicode?null:`--custom-emoji-background: url(${JSON.stringify(B.url)})`}">${B.unicode?p(B,t.currentSkinTone):""}</button>`,B=>`${I}-${B.id}`)}const _=m`<section data-ref="rootElement" class="picker" aria-label="${t.i18n.regionLabel}" style="${t.pickerStyle||""}"><div class="pad-top"></div><div class="search-row"><div class="search-wrapper"><input id="search" class="search" type="search" role="combobox" enterkeyhint="search" placeholder="${t.i18n.searchLabel}" autocapitalize="none" autocomplete="off" spellcheck="true" aria-expanded="${!!(t.searchMode&&t.currentEmojis.length)}" aria-controls="search-results" aria-describedby="search-description" aria-autocomplete="list" aria-activedescendant="${t.activeSearchItemId?`emo-${t.activeSearchItemId}`:null}" data-ref="searchElement" data-on-input="onSearchInput" data-on-keydown="onSearchKeydown"><label class="sr-only" for="search">${t.i18n.searchLabel}</label> <span id="search-description" class="sr-only">${t.i18n.searchDescription}</span></div><div class="skintone-button-wrapper ${t.skinTonePickerExpandedAfterAnimation?"expanded":""}"><button id="skintone-button" class="emoji ${t.skinTonePickerExpanded?"hide-focus":""}" aria-label="${t.skinToneButtonLabel}" title="${t.skinToneButtonLabel}" aria-describedby="skintone-description" aria-haspopup="listbox" aria-expanded="${t.skinTonePickerExpanded}" aria-controls="skintone-list" data-on-click="onClickSkinToneButton">${t.skinToneButtonText||""}</button></div><span id="skintone-description" class="sr-only">${t.i18n.skinToneDescription}</span><div data-ref="skinToneDropdown" id="skintone-list" class="skintone-list hide-focus ${t.skinTonePickerExpanded?"":"hidden no-animate"}" style="transform:translateY(${t.skinTonePickerExpanded?0:"calc(-1 * var(--num-skintones) * var(--total-emoji-size))"})" role="listbox" aria-label="${t.i18n.skinTonesLabel}" aria-activedescendant="skintone-${t.activeSkinTone}" aria-hidden="${!t.skinTonePickerExpanded}" tabIndex="-1" data-on-focusout="onSkinToneOptionsFocusOut" data-on-click="onSkinToneOptionsClick" data-on-keydown="onSkinToneOptionsKeydown" data-on-keyup="onSkinToneOptionsKeyup">${v(t.skinTones,(C,P)=>m`<div id="skintone-${P}" class="emoji ${P===t.activeSkinTone?"active":""}" aria-selected="${P===t.activeSkinTone}" role="option" title="${t.i18n.skinTones[P]}" aria-label="${t.i18n.skinTones[P]}">${C}</div>`,C=>C)}</div></div><div class="nav" role="tablist" style="grid-template-columns:repeat(${t.groups.length},1fr)" aria-label="${t.i18n.categoriesLabel}" data-on-keydown="onNavKeydown" data-on-click="onNavClick">${v(t.groups,C=>m`<button role="tab" class="nav-button" aria-controls="tab-${C.id}" aria-label="${t.i18n.categories[C.name]}" aria-selected="${!t.searchMode&&t.currentGroup.id===C.id}" title="${t.i18n.categories[C.name]}" data-group-id="${C.id}"><div class="nav-emoji emoji">${C.emoji}</div></button>`,C=>C.id)}</div><div class="indicator-wrapper"><div class="indicator" style="transform:translateX(${(t.isRtl?-1:1)*t.currentGroupIndex*100}%)"></div></div><div class="message ${t.message?"":"gone"}" role="alert" aria-live="polite">${t.message||""}</div><div data-ref="tabpanelElement" class="tabpanel ${!t.databaseLoaded||t.message?"gone":""}" role="${t.searchMode?"region":"tabpanel"}" aria-label="${t.searchMode?t.i18n.searchResultsLabel:t.i18n.categories[t.currentGroup.name]}" id="${t.searchMode?null:`tab-${t.currentGroup.id}`}" tabIndex="0" data-on-click="onEmojiClick"><div data-action="calculateEmojiGridStyle">${v(t.currentEmojisWithCategories,(C,P)=>m`<div><div id="menu-label-${P}" class="category ${t.currentEmojisWithCategories.length===1&&t.currentEmojisWithCategories[0].category===""?"gone":""}" aria-hidden="true">${t.searchMode?t.i18n.searchResultsLabel:C.category?C.category:t.currentEmojisWithCategories.length>1?t.i18n.categories.custom:t.i18n.categories[t.currentGroup.name]}</div><div class="emoji-menu ${P!==0&&!t.searchMode&&t.currentGroup.id===-1?"visibility-auto":""}" style="${`--num-rows: ${Math.ceil(C.emojis.length/t.numColumns)}`}" data-action="updateOnIntersection" role="${t.searchMode?"listbox":"menu"}" aria-labelledby="menu-label-${P}" id="${t.searchMode?"search-results":null}">${w(C.emojis,t.searchMode,"emo")}</div></div>`,C=>C.category)}</div></div><div class="favorites onscreen emoji-menu ${t.message?"gone":""}" role="menu" aria-label="${t.i18n.favoritesLabel}" data-on-click="onEmojiClick">${w(t.currentFavorites,!1,"fav")}</div><button data-ref="baselineEmoji" aria-hidden="true" tabindex="-1" class="abs-pos hidden emoji baseline-emoji">😀</button></section>`,j=(C,P)=>{for(const I of e.querySelectorAll(`[${C}]`))P(I,I.getAttribute(C))};if(a){e.appendChild(_);for(const C of["click","focusout","input","keydown","keyup"])j(`data-on-${C}`,(P,I)=>{P.addEventListener(C,s[I])});j("data-ref",(C,P)=>{o[P]=C}),r.addEventListener("abort",()=>{e.removeChild(_)})}j("data-action",(C,P)=>{let I=l.get(P);I||l.set(P,I=new WeakSet),I.has(C)||(I.add(C),i[P](C))})}const Jn=typeof queueMicrotask=="function"?queueMicrotask:e=>Promise.resolve().then(e);function vm(e){let t=!1,n;const s=new Map,i=new Set;let o;const r=()=>{if(t)return;const c=[...i];i.clear();try{for(const u of c)u()}finally{o=!1,i.size&&(o=!0,Jn(r))}},l=new Proxy({},{get(c,u){if(n){let p=s.get(u);p||(p=new Set,s.set(u,p)),p.add(n)}return c[u]},set(c,u,p){if(c[u]!==p){c[u]=p;const m=s.get(u);if(m){for(const v of m)i.add(v);o||(o=!0,Jn(r))}}return!0}}),a=c=>{const u=()=>{const p=n;n=u;try{return c()}finally{n=p}};return u()};return e.addEventListener("abort",()=>{t=!0}),{state:l,createEffect:a}}function Js(e,t,n){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if(!n(e[s],t[s]))return!1;return!0}const aa=new WeakMap;function bm(e,t,n){{const s=e.closest(".tabpanel");let i=aa.get(s);i||(i=new IntersectionObserver(n,{root:s,rootMargin:"50% 0px 50% 0px",threshold:0}),aa.set(s,i),t.addEventListener("abort",()=>{i.disconnect()})),i.observe(e)}}const ei=[],{assign:Mn}=Object;function wm(e,t){const n={},s=new AbortController,i=s.signal,{state:o,createEffect:r}=vm(i),l=new Map;Mn(o,{skinToneEmoji:void 0,i18n:void 0,database:void 0,customEmoji:void 0,customCategorySorting:void 0,emojiVersion:void 0}),Mn(o,t),Mn(o,{initialLoad:!0,currentEmojis:[],currentEmojisWithCategories:[],rawSearchText:"",searchText:"",searchMode:!1,activeSearchItem:-1,message:void 0,skinTonePickerExpanded:!1,skinTonePickerExpandedAfterAnimation:!1,currentSkinTone:0,activeSkinTone:0,skinToneButtonText:void 0,pickerStyle:void 0,skinToneButtonLabel:"",skinTones:[],currentFavorites:[],defaultFavoriteEmojis:void 0,numColumns:Ug,isRtl:!1,currentGroupIndex:0,groups:Vs,databaseLoaded:!1,activeSearchItemId:void 0}),r(()=>{o.currentGroup!==o.groups[o.currentGroupIndex]&&(o.currentGroup=o.groups[o.currentGroupIndex])});const a=k=>{e.getElementById(k).focus()},c=k=>e.getElementById(`emo-${k.id}`),u=(k,x)=>{n.rootElement.dispatchEvent(new CustomEvent(k,{detail:x,bubbles:!0,composed:!0}))},p=(k,x)=>k.id===x.id,m=(k,x)=>{const{category:M,emojis:L}=k,{category:K,emojis:F}=x;return M!==K?!1:Js(L,F,p)},v=k=>{Js(o.currentEmojis,k,p)||(o.currentEmojis=k)},w=k=>{o.searchMode!==k&&(o.searchMode=k)},A=k=>{Js(o.currentEmojisWithCategories,k,m)||(o.currentEmojisWithCategories=k)},_=(k,x)=>x&&k.skins&&k.skins[x]||k.unicode,P={labelWithSkin:(k,x)=>nm([k.name||_(k,x),k.annotation,...k.shortcodes||ei].filter(Boolean)).join(", "),titleForEmoji:k=>k.annotation||(k.shortcodes||ei).join(", "),unicodeWithSkin:_},I={onClickSkinToneButton:W,onEmojiClick:un,onNavClick:ln,onNavKeydown:ws,onSearchKeydown:bs,onSkinToneOptionsClick:dn,onSkinToneOptionsFocusOut:Me,onSkinToneOptionsKeydown:We,onSkinToneOptionsKeyup:Tt,onSearchInput:pn},B={calculateEmojiGridStyle:gs,updateOnIntersection:ms};let ue=!0;r(()=>{ym(e,o,P,I,B,n,i,l,ue),ue=!1}),o.emojiVersion||Qs().then(k=>{k||(o.message=o.i18n.emojiUnsupportedMessage)}),r(()=>{async function k(){let x=!1;const M=setTimeout(()=>{x=!0,o.message=o.i18n.loadingMessage},Bg);try{await o.database.ready(),o.databaseLoaded=!0}catch(L){console.error(L),o.message=o.i18n.networkErrorMessage}finally{clearTimeout(M),x&&(x=!1,o.message="")}}o.database&&k()}),r(()=>{o.pickerStyle=`
|
|
1702
1781
|
--num-groups: ${o.groups.length};
|
|
1703
1782
|
--indicator-opacity: ${o.searchMode?0:1};
|
|
1704
|
-
--num-skintones: ${Zr};`}),r(()=>{o.customEmoji&&o.database&&it()}),r(()=>{o.customEmoji&&o.customEmoji.length?o.groups!==Ci&&(o.groups=Ci):o.groups!==Vs&&(o.currentGroupIndex&&o.currentGroupIndex--,o.groups=Vs)}),r(()=>{async function k(){o.databaseLoaded&&(o.currentSkinTone=await o.database.getPreferredSkinTone())}k()}),r(()=>{o.skinTones=Array(Zr).fill().map((k,A)=>jg(o.skinToneEmoji,A))}),r(()=>{o.skinToneButtonText=o.skinTones[o.currentSkinTone]}),r(()=>{o.skinToneButtonLabel=o.i18n.skinToneLabel.replace("{skinTone}",o.i18n.skinTones[o.currentSkinTone])}),r(()=>{async function k(){const{database:A}=o,M=(await Promise.all(Ig.map(P=>A.getEmojiByUnicodeOrName(P)))).filter(Boolean);o.defaultFavoriteEmojis=M}o.databaseLoaded&&k()});function it(){const{customEmoji:k,database:A}=o,M=k||ei;A.customEmoji!==M&&(A.customEmoji=M)}r(()=>{async function k(){it();const{database:A,defaultFavoriteEmojis:M,numColumns:P}=o,K=await A.getTopFavoriteEmoji(P),F=await Ue(rc([...K,...M],te=>te.unicode||te.name).slice(0,P));o.currentFavorites=F}o.databaseLoaded&&o.defaultFavoriteEmojis&&k()});function gs(k){Gg(k,i,()=>{{const A=getComputedStyle(n.rootElement),M=parseInt(A.getPropertyValue("--num-columns"),10),P=A.getPropertyValue("direction")==="rtl";o.numColumns=M,o.isRtl=P}})}function ms(k){pm(k,i,A=>{for(const{target:M,isIntersecting:P}of A)M.classList.toggle("onscreen",P)})}r(()=>{async function k(){const{searchText:A,currentGroup:M,databaseLoaded:P,customEmoji:K}=o;if(!P)o.currentEmojis=[],o.searchMode=!1;else if(A.length>=_g){const F=await vs(A);o.searchText===A&&(v(F),w(!0))}else{const{id:F}=M;if(F!==-1||K&&K.length){const te=await ys(F);o.currentGroup.id===F&&(v(te),w(!1))}}}k()});const an=()=>{Dn(()=>Yg(n.tabpanelElement))};r(()=>{const{currentEmojis:k,emojiVersion:A}=o,M=k.filter(P=>P.unicode).filter(P=>Jr(P)&&!_i.has(P.unicode));if(!A&&M.length)v(k),Dn(()=>Y(M));else{const P=A?k:k.filter(Et);v(P),an()}});function Y(k){Vg(k,n.baselineEmoji,c)?an():o.currentEmojis=[...o.currentEmojis]}function Et(k){return!k.unicode||!Jr(k)||_i.get(k.unicode)}async function ot(k){const A=o.emojiVersion||await Ys();return k.filter(({version:M})=>!M||M<=A)}async function Ue(k){return Hg(k,o.emojiVersion||await Ys())}async function ys(k){const A=k===-1?o.customEmoji:await o.database.getEmojiByGroup(k);return Ue(await ot(A))}async function vs(k){return Ue(await ot(await o.database.getEmojiBySearchQuery(k)))}r(()=>{}),r(()=>{function k(){const{searchMode:M,currentEmojis:P}=o;if(M)return[{category:"",emojis:P}];const K=new Map;for(const F of P){const te=F.category||"";let Pe=K.get(te);Pe||(Pe=[],K.set(te,Pe)),Pe.push(F)}return[...K.entries()].map(([F,te])=>({category:F,emojis:te})).sort((F,te)=>o.customCategorySorting(F.category,te.category))}const A=k();x(A)}),r(()=>{o.activeSearchItemId=o.activeSearchItem!==-1&&o.currentEmojis[o.activeSearchItem].id}),r(()=>{const{rawSearchText:k}=o;ic(()=>{o.searchText=(k||"").trim(),o.activeSearchItem=-1})});function bs(k){if(!o.searchMode||!o.currentEmojis.length)return;const A=M=>{ve(k),o.activeSearchItem=Xs(M,o.activeSearchItem,o.currentEmojis)};switch(k.key){case"ArrowDown":return A(!1);case"ArrowUp":return A(!0);case"Enter":if(o.activeSearchItem===-1)o.activeSearchItem=0;else return ve(k),H(o.currentEmojis[o.activeSearchItem].id)}}function ln(k){const{target:A}=k,M=A.closest(".nav-button");if(!M)return;const P=parseInt(M.dataset.groupId,10);n.searchElement.value="",o.rawSearchText="",o.searchText="",o.activeSearchItem=-1,o.currentGroupIndex=o.groups.findIndex(K=>K.id===P)}function ws(k){const{target:A,key:M}=k,P=K=>{K&&(ve(k),K.focus())};switch(M){case"ArrowLeft":return P(A.previousElementSibling);case"ArrowRight":return P(A.nextElementSibling);case"Home":return P(A.parentElement.firstElementChild);case"End":return P(A.parentElement.lastElementChild)}}async function cn(k){const A=await o.database.getEmojiByUnicodeOrName(k),M=[...o.currentEmojis,...o.currentFavorites].find(K=>K.id===k),P=M.unicode&&_(M,o.currentSkinTone);return await o.database.incrementFavoriteEmojiCount(k),{emoji:A,skinTone:o.currentSkinTone,...P&&{unicode:P},...M.name&&{name:M.name}}}async function H(k){const A=cn(k);u("emoji-click-sync",A),u("emoji-click",await A)}function un(k){const{target:A}=k;if(!A.classList.contains("emoji"))return;ve(k);const M=A.id.substring(4);H(M)}function q(k){o.currentSkinTone=k,o.skinTonePickerExpanded=!1,a("skintone-button"),u("skin-tone-change",{skinTone:k}),o.database.setPreferredSkinTone(k)}function dn(k){const{target:{id:A}}=k,M=A&&A.match(/^skintone-(\d)/);if(!M)return;ve(k);const P=parseInt(M[1],10);q(P)}function W(k){o.skinTonePickerExpanded=!o.skinTonePickerExpanded,o.activeSkinTone=o.currentSkinTone,o.skinTonePickerExpanded&&(ve(k),Dn(()=>a("skintone-list")))}r(()=>{o.skinTonePickerExpanded?n.skinToneDropdown.addEventListener("transitionend",()=>{o.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):o.skinTonePickerExpandedAfterAnimation=!1});function We(k){if(!o.skinTonePickerExpanded)return;const A=async M=>{ve(k),o.activeSkinTone=M};switch(k.key){case"ArrowUp":return A(Xs(!0,o.activeSkinTone,o.skinTones));case"ArrowDown":return A(Xs(!1,o.activeSkinTone,o.skinTones));case"Home":return A(0);case"End":return A(o.skinTones.length-1);case"Enter":return ve(k),q(o.activeSkinTone);case"Escape":return ve(k),o.skinTonePickerExpanded=!1,a("skintone-button")}}function Tt(k){if(o.skinTonePickerExpanded&&k.key===" ")return ve(k),q(o.activeSkinTone)}async function Me(k){const{relatedTarget:A}=k;(!A||A.id!=="skintone-list")&&(o.skinTonePickerExpanded=!1)}function pn(k){o.rawSearchText=k.target.value}return{$set(k){Mn(o,k)},$destroy(){s.abort()}}}const fm="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",gm="en";var mm={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},ym=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const ac=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],vm=`:host{--emoji-font-family:${oc}}`;class xo extends HTMLElement{constructor(t){super(),this.attachShadow({mode:"open"});const n=document.createElement("style");n.textContent=ym+vm,this.shadowRoot.appendChild(n),this._ctx={locale:gm,dataSource:fm,skinToneEmoji:Lg,customCategorySorting:Ng,customEmoji:null,i18n:mm,emojiVersion:null,...t};for(const s of ac)s!=="database"&&Object.prototype.hasOwnProperty.call(this,s)&&(this._ctx[s]=this[s],delete this[s]);this._dbFlush()}connectedCallback(){oa(this),this._cmp||(this._cmp=hm(this.shadowRoot,this._ctx))}disconnectedCallback(){oa(this),Jn(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:t}=this._ctx;t.close().catch(n=>console.error(n))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(t,n,s){this._set(t.replace(/-([a-z])/g,(i,o)=>o.toUpperCase()),t==="emoji-version"?parseFloat(s):s)}_set(t,n){this._ctx[t]=n,this._cmp&&this._cmp.$set({[t]:n}),["locale","dataSource"].includes(t)&&this._dbFlush()}_dbCreate(){const{locale:t,dataSource:n,database:s}=this._ctx;(!s||s.locale!==t||s.dataSource!==n)&&this._set("database",new Cg({locale:t,dataSource:n}))}_dbFlush(){Jn(()=>this._dbCreate())}}const lc={};for(const e of ac)lc[e]={get(){return e==="database"&&this._dbCreate(),this._ctx[e]},set(t){if(e==="database")throw new Error("database is read-only");this._set(e,t)}};Object.defineProperties(xo.prototype,lc);function oa(e){e instanceof xo||Object.setPrototypeOf(e,customElements.get(e.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",xo);function bm(e){e.style.height="0";const t=Math.max(e.scrollHeight,44);e.style.height=`${t}px`,e.style.overflowY=e.scrollHeight>e.offsetHeight?"auto":"hidden"}function ra(e){e.style.height="44px",e.style.overflowY="hidden"}const wm=5e3;function km(e){return e?e.active?d`
|
|
1783
|
+
--num-skintones: ${ta};`}),r(()=>{o.customEmoji&&o.database&&it()}),r(()=>{o.customEmoji&&o.customEmoji.length?o.groups!==Ci&&(o.groups=Ci):o.groups!==Vs&&(o.currentGroupIndex&&o.currentGroupIndex--,o.groups=Vs)}),r(()=>{async function k(){o.databaseLoaded&&(o.currentSkinTone=await o.database.getPreferredSkinTone())}k()}),r(()=>{o.skinTones=Array(ta).fill().map((k,x)=>Xg(o.skinToneEmoji,x))}),r(()=>{o.skinToneButtonText=o.skinTones[o.currentSkinTone]}),r(()=>{o.skinToneButtonLabel=o.i18n.skinToneLabel.replace("{skinTone}",o.i18n.skinTones[o.currentSkinTone])}),r(()=>{async function k(){const{database:x}=o,M=(await Promise.all(Wg.map(L=>x.getEmojiByUnicodeOrName(L)))).filter(Boolean);o.defaultFavoriteEmojis=M}o.databaseLoaded&&k()});function it(){const{customEmoji:k,database:x}=o,M=k||ei;x.customEmoji!==M&&(x.customEmoji=M)}r(()=>{async function k(){it();const{database:x,defaultFavoriteEmojis:M,numColumns:L}=o,K=await x.getTopFavoriteEmoji(L),F=await Ue(uc([...K,...M],te=>te.unicode||te.name).slice(0,L));o.currentFavorites=F}o.databaseLoaded&&o.defaultFavoriteEmojis&&k()});function gs(k){em(k,i,()=>{{const x=getComputedStyle(n.rootElement),M=parseInt(x.getPropertyValue("--num-columns"),10),L=x.getPropertyValue("direction")==="rtl";o.numColumns=M,o.isRtl=L}})}function ms(k){bm(k,i,x=>{for(const{target:M,isIntersecting:L}of x)M.classList.toggle("onscreen",L)})}r(()=>{async function k(){const{searchText:x,currentGroup:M,databaseLoaded:L,customEmoji:K}=o;if(!L)o.currentEmojis=[],o.searchMode=!1;else if(x.length>=Dg){const F=await vs(x);o.searchText===x&&(v(F),w(!0))}else{const{id:F}=M;if(F!==-1||K&&K.length){const te=await ys(F);o.currentGroup.id===F&&(v(te),w(!1))}}}k()});const an=()=>{On(()=>sm(n.tabpanelElement))};r(()=>{const{currentEmojis:k,emojiVersion:x}=o,M=k.filter(L=>L.unicode).filter(L=>na(L)&&!_i.has(L.unicode));if(!x&&M.length)v(k),On(()=>Q(M));else{const L=x?k:k.filter(Et);v(L),an()}});function Q(k){tm(k,n.baselineEmoji,c)?an():o.currentEmojis=[...o.currentEmojis]}function Et(k){return!k.unicode||!na(k)||_i.get(k.unicode)}async function ot(k){const x=o.emojiVersion||await Qs();return k.filter(({version:M})=>!M||M<=x)}async function Ue(k){return Zg(k,o.emojiVersion||await Qs())}async function ys(k){const x=k===-1?o.customEmoji:await o.database.getEmojiByGroup(k);return Ue(await ot(x))}async function vs(k){return Ue(await ot(await o.database.getEmojiBySearchQuery(k)))}r(()=>{}),r(()=>{function k(){const{searchMode:M,currentEmojis:L}=o;if(M)return[{category:"",emojis:L}];const K=new Map;for(const F of L){const te=F.category||"";let Le=K.get(te);Le||(Le=[],K.set(te,Le)),Le.push(F)}return[...K.entries()].map(([F,te])=>({category:F,emojis:te})).sort((F,te)=>o.customCategorySorting(F.category,te.category))}const x=k();A(x)}),r(()=>{o.activeSearchItemId=o.activeSearchItem!==-1&&o.currentEmojis[o.activeSearchItem].id}),r(()=>{const{rawSearchText:k}=o;lc(()=>{o.searchText=(k||"").trim(),o.activeSearchItem=-1})});function bs(k){if(!o.searchMode||!o.currentEmojis.length)return;const x=M=>{be(k),o.activeSearchItem=Xs(M,o.activeSearchItem,o.currentEmojis)};switch(k.key){case"ArrowDown":return x(!1);case"ArrowUp":return x(!0);case"Enter":if(o.activeSearchItem===-1)o.activeSearchItem=0;else return be(k),H(o.currentEmojis[o.activeSearchItem].id)}}function ln(k){const{target:x}=k,M=x.closest(".nav-button");if(!M)return;const L=parseInt(M.dataset.groupId,10);n.searchElement.value="",o.rawSearchText="",o.searchText="",o.activeSearchItem=-1,o.currentGroupIndex=o.groups.findIndex(K=>K.id===L)}function ws(k){const{target:x,key:M}=k,L=K=>{K&&(be(k),K.focus())};switch(M){case"ArrowLeft":return L(x.previousElementSibling);case"ArrowRight":return L(x.nextElementSibling);case"Home":return L(x.parentElement.firstElementChild);case"End":return L(x.parentElement.lastElementChild)}}async function cn(k){const x=await o.database.getEmojiByUnicodeOrName(k),M=[...o.currentEmojis,...o.currentFavorites].find(K=>K.id===k),L=M.unicode&&_(M,o.currentSkinTone);return await o.database.incrementFavoriteEmojiCount(k),{emoji:x,skinTone:o.currentSkinTone,...L&&{unicode:L},...M.name&&{name:M.name}}}async function H(k){const x=cn(k);u("emoji-click-sync",x),u("emoji-click",await x)}function un(k){const{target:x}=k;if(!x.classList.contains("emoji"))return;be(k);const M=x.id.substring(4);H(M)}function q(k){o.currentSkinTone=k,o.skinTonePickerExpanded=!1,a("skintone-button"),u("skin-tone-change",{skinTone:k}),o.database.setPreferredSkinTone(k)}function dn(k){const{target:{id:x}}=k,M=x&&x.match(/^skintone-(\d)/);if(!M)return;be(k);const L=parseInt(M[1],10);q(L)}function W(k){o.skinTonePickerExpanded=!o.skinTonePickerExpanded,o.activeSkinTone=o.currentSkinTone,o.skinTonePickerExpanded&&(be(k),On(()=>a("skintone-list")))}r(()=>{o.skinTonePickerExpanded?n.skinToneDropdown.addEventListener("transitionend",()=>{o.skinTonePickerExpandedAfterAnimation=!0},{once:!0}):o.skinTonePickerExpandedAfterAnimation=!1});function We(k){if(!o.skinTonePickerExpanded)return;const x=async M=>{be(k),o.activeSkinTone=M};switch(k.key){case"ArrowUp":return x(Xs(!0,o.activeSkinTone,o.skinTones));case"ArrowDown":return x(Xs(!1,o.activeSkinTone,o.skinTones));case"Home":return x(0);case"End":return x(o.skinTones.length-1);case"Enter":return be(k),q(o.activeSkinTone);case"Escape":return be(k),o.skinTonePickerExpanded=!1,a("skintone-button")}}function Tt(k){if(o.skinTonePickerExpanded&&k.key===" ")return be(k),q(o.activeSkinTone)}async function Me(k){const{relatedTarget:x}=k;(!x||x.id!=="skintone-list")&&(o.skinTonePickerExpanded=!1)}function pn(k){o.rawSearchText=k.target.value}return{$set(k){Mn(o,k)},$destroy(){s.abort()}}}const km="https://cdn.jsdelivr.net/npm/emoji-picker-element-data@^1/en/emojibase/data.json",Sm="en";var xm={categoriesLabel:"Categories",emojiUnsupportedMessage:"Your browser does not support color emoji.",favoritesLabel:"Favorites",loadingMessage:"Loading…",networkErrorMessage:"Could not load emoji.",regionLabel:"Emoji picker",searchDescription:"When search results are available, press up or down to select and enter to choose.",searchLabel:"Search",searchResultsLabel:"Search results",skinToneDescription:"When expanded, press up or down to select and enter to choose.",skinToneLabel:"Choose a skin tone (currently {skinTone})",skinTonesLabel:"Skin tones",skinTones:["Default","Light","Medium-Light","Medium","Medium-Dark","Dark"],categories:{custom:"Custom","smileys-emotion":"Smileys and emoticons","people-body":"People and body","animals-nature":"Animals and nature","food-drink":"Food and drink","travel-places":"Travel and places",activities:"Activities",objects:"Objects",symbols:"Symbols",flags:"Flags"}},Am=':host{--emoji-size:1.375rem;--emoji-padding:0.5rem;--category-emoji-size:var(--emoji-size);--category-emoji-padding:var(--emoji-padding);--indicator-height:3px;--input-border-radius:0.5rem;--input-border-size:1px;--input-font-size:1rem;--input-line-height:1.5;--input-padding:0.25rem;--num-columns:8;--outline-size:2px;--border-size:1px;--border-radius:0;--skintone-border-radius:1rem;--category-font-size:1rem;display:flex;width:min-content;height:400px}:host,:host(.light){color-scheme:light;--background:#fff;--border-color:#e0e0e0;--indicator-color:#385ac1;--input-border-color:#999;--input-font-color:#111;--input-placeholder-color:#999;--outline-color:#999;--category-font-color:#111;--button-active-background:#e6e6e6;--button-hover-background:#d9d9d9}:host(.dark){color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}@media (prefers-color-scheme:dark){:host{color-scheme:dark;--background:#222;--border-color:#444;--indicator-color:#5373ec;--input-border-color:#ccc;--input-font-color:#efefef;--input-placeholder-color:#ccc;--outline-color:#fff;--category-font-color:#efefef;--button-active-background:#555555;--button-hover-background:#484848}}:host([hidden]){display:none}button{margin:0;padding:0;border:0;background:0 0;box-shadow:none;-webkit-tap-highlight-color:transparent}button::-moz-focus-inner{border:0}input{padding:0;margin:0;line-height:1.15;font-family:inherit}input[type=search]{-webkit-appearance:none}:focus{outline:var(--outline-color) solid var(--outline-size);outline-offset:calc(-1*var(--outline-size))}:host([data-js-focus-visible]) :focus:not([data-focus-visible-added]){outline:0}:focus:not(:focus-visible){outline:0}.hide-focus{outline:0}*{box-sizing:border-box}.picker{contain:content;display:flex;flex-direction:column;background:var(--background);border:var(--border-size) solid var(--border-color);border-radius:var(--border-radius);width:100%;height:100%;overflow:hidden;--total-emoji-size:calc(var(--emoji-size) + (2 * var(--emoji-padding)));--total-category-emoji-size:calc(var(--category-emoji-size) + (2 * var(--category-emoji-padding)))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.hidden{opacity:0;pointer-events:none}.abs-pos{position:absolute;left:0;top:0}.gone{display:none!important}.skintone-button-wrapper,.skintone-list{background:var(--background);z-index:3}.skintone-button-wrapper.expanded{z-index:1}.skintone-list{position:absolute;inset-inline-end:0;top:0;z-index:2;overflow:visible;border-bottom:var(--border-size) solid var(--border-color);border-radius:0 0 var(--skintone-border-radius) var(--skintone-border-radius);will-change:transform;transition:transform .2s ease-in-out;transform-origin:center 0}@media (prefers-reduced-motion:reduce){.skintone-list{transition-duration:.001s}}@supports not (inset-inline-end:0){.skintone-list{right:0}}.skintone-list.no-animate{transition:none}.tabpanel{overflow-y:auto;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch;will-change:transform;min-height:0;flex:1;contain:content}.emoji-menu{display:grid;grid-template-columns:repeat(var(--num-columns),var(--total-emoji-size));justify-content:space-around;align-items:flex-start;width:100%}.emoji-menu.visibility-auto{content-visibility:auto;contain-intrinsic-size:calc(var(--num-columns)*var(--total-emoji-size)) calc(var(--num-rows)*var(--total-emoji-size))}.category{padding:var(--emoji-padding);font-size:var(--category-font-size);color:var(--category-font-color)}.emoji,button.emoji{font-size:var(--emoji-size);display:flex;align-items:center;justify-content:center;border-radius:100%;height:var(--total-emoji-size);width:var(--total-emoji-size);line-height:1;overflow:hidden;font-family:var(--emoji-font-family);cursor:pointer}@media (hover:hover) and (pointer:fine){.emoji:hover,button.emoji:hover{background:var(--button-hover-background)}}.emoji.active,.emoji:active,button.emoji.active,button.emoji:active{background:var(--button-active-background)}.onscreen .custom-emoji::after{content:"";width:var(--emoji-size);height:var(--emoji-size);background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:var(--custom-emoji-background)}.nav,.nav-button{align-items:center}.nav{display:grid;justify-content:space-between;contain:content}.nav-button{display:flex;justify-content:center}.nav-emoji{font-size:var(--category-emoji-size);width:var(--total-category-emoji-size);height:var(--total-category-emoji-size)}.indicator-wrapper{display:flex;border-bottom:1px solid var(--border-color)}.indicator{width:calc(100%/var(--num-groups));height:var(--indicator-height);opacity:var(--indicator-opacity);background-color:var(--indicator-color);will-change:transform,opacity;transition:opacity .1s linear,transform .25s ease-in-out}@media (prefers-reduced-motion:reduce){.indicator{will-change:opacity;transition:opacity .1s linear}}.pad-top,input.search{background:var(--background);width:100%}.pad-top{height:var(--emoji-padding);z-index:3}.search-row{display:flex;align-items:center;position:relative;padding-inline-start:var(--emoji-padding);padding-bottom:var(--emoji-padding)}.search-wrapper{flex:1;min-width:0}input.search{padding:var(--input-padding);border-radius:var(--input-border-radius);border:var(--input-border-size) solid var(--input-border-color);color:var(--input-font-color);font-size:var(--input-font-size);line-height:var(--input-line-height)}input.search::placeholder{color:var(--input-placeholder-color)}.favorites{overflow-y:auto;scrollbar-gutter:stable;display:flex;flex-direction:row;border-top:var(--border-size) solid var(--border-color);contain:content}.message{padding:var(--emoji-padding)}';const dc=["customEmoji","customCategorySorting","database","dataSource","i18n","locale","skinToneEmoji","emojiVersion"],$m=`:host{--emoji-font-family:${cc}}`;class $o extends HTMLElement{constructor(t){super(),this.attachShadow({mode:"open"});const n=document.createElement("style");n.textContent=Am+$m,this.shadowRoot.appendChild(n),this._ctx={locale:Sm,dataSource:km,skinToneEmoji:Fg,customCategorySorting:Kg,customEmoji:null,i18n:xm,emojiVersion:null,...t};for(const s of dc)s!=="database"&&Object.prototype.hasOwnProperty.call(this,s)&&(this._ctx[s]=this[s],delete this[s]);this._dbFlush()}connectedCallback(){la(this),this._cmp||(this._cmp=wm(this.shadowRoot,this._ctx))}disconnectedCallback(){la(this),Jn(()=>{if(!this.isConnected&&this._cmp){this._cmp.$destroy(),this._cmp=void 0;const{database:t}=this._ctx;t.close().catch(n=>console.error(n))}})}static get observedAttributes(){return["locale","data-source","skin-tone-emoji","emoji-version"]}attributeChangedCallback(t,n,s){this._set(t.replace(/-([a-z])/g,(i,o)=>o.toUpperCase()),t==="emoji-version"?parseFloat(s):s)}_set(t,n){this._ctx[t]=n,this._cmp&&this._cmp.$set({[t]:n}),["locale","dataSource"].includes(t)&&this._dbFlush()}_dbCreate(){const{locale:t,dataSource:n,database:s}=this._ctx;(!s||s.locale!==t||s.dataSource!==n)&&this._set("database",new Ng({locale:t,dataSource:n}))}_dbFlush(){Jn(()=>this._dbCreate())}}const pc={};for(const e of dc)pc[e]={get(){return e==="database"&&this._dbCreate(),this._ctx[e]},set(t){if(e==="database")throw new Error("database is read-only");this._set(e,t)}};Object.defineProperties($o.prototype,pc);function la(e){e instanceof $o||Object.setPrototypeOf(e,customElements.get(e.tagName.toLowerCase()).prototype)}customElements.get("emoji-picker")||customElements.define("emoji-picker",$o);function Em(e){e.style.height="0";const t=Math.max(e.scrollHeight,44);e.style.height=`${t}px`,e.style.overflowY=e.scrollHeight>e.offsetHeight?"auto":"hidden"}function ca(e){e.style.height="44px",e.style.overflowY="hidden"}const Tm=5e3;function Cm(e){return e?e.active?d`
|
|
1705
1784
|
<div class="callout info compaction-indicator compaction-indicator--active">
|
|
1706
1785
|
${N.loader} Compacting context...
|
|
1707
1786
|
</div>
|
|
1708
|
-
`:e.completedAt&&Date.now()-e.completedAt<
|
|
1787
|
+
`:e.completedAt&&Date.now()-e.completedAt<Tm?d`
|
|
1709
1788
|
<div class="callout success compaction-indicator compaction-indicator--complete">
|
|
1710
1789
|
${N.check} Context compacted
|
|
1711
1790
|
</div>
|
|
1712
|
-
`:b:b}const Kt=5*1024*1024;function zt(){return`att-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function ht(e,t){let n=e.closest(".chat")?.querySelector(".chat-attachment-error");if(!n){n=document.createElement("div"),n.className="callout danger chat-attachment-error",n.style.cssText="margin: 8px 4px; animation: fade-in 200ms ease-out;";const s=e.closest(".chat")?.querySelector(".chat-compose");s?.parentElement?.insertBefore(n,s)}n.textContent=t,setTimeout(()=>n?.remove(),4e3)}const
|
|
1791
|
+
`:b:b}const Kt=5*1024*1024;function zt(){return`att-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function ht(e,t){let n=e.closest(".chat")?.querySelector(".chat-attachment-error");if(!n){n=document.createElement("div"),n.className="callout danger chat-attachment-error",n.style.cssText="margin: 8px 4px; animation: fade-in 200ms ease-out;";const s=e.closest(".chat")?.querySelector(".chat-compose");s?.parentElement?.insertBefore(n,s)}n.textContent=t,setTimeout(()=>n?.remove(),4e3)}const _m=/\.(md|txt|csv|json|xml|html|css|js|ts|py|sh|yaml|yml|toml|ini|cfg|log|sql)$/i;function Mm(e){return e.type.startsWith("image/")||/\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(e.name)}function Lm(e){return e.type.startsWith("text/")||e.type==="application/json"||e.type==="application/xml"||_m.test(e.name)}function Pm(e){return e.type==="application/pdf"||/\.pdf$/i.test(e.name)}function Rm(e){return e.type.startsWith("video/")||/\.(mp4|webm|mov|avi|mkv|m4v)$/i.test(e.name)}function Im(e,t){e.preventDefault(),e.stopPropagation();const n=e.currentTarget;n.classList.remove("chat--dragover");const s=e.dataTransfer?.files;if(!(!s||s.length===0))for(let i=0;i<s.length;i++){const o=s[i];if(Mm(o)){if(!t.onAttachmentsChange)continue;if(o.size>Kt){ht(n,`Image too large (${(o.size/1024/1024).toFixed(1)} MB). Maximum is 5 MB.`);continue}const r=new FileReader;r.onload=()=>{const l=r.result,a={id:zt(),dataUrl:l,mimeType:o.type},c=t.attachments??[];t.onAttachmentsChange?.([...c,a])},r.readAsDataURL(o)}else if(Lm(o)){if(!t.onAttachmentsChange)continue;if(o.size>Kt){ht(n,`File too large (${(o.size/1024/1024).toFixed(1)} MB). Maximum is 5 MB.`);continue}const r=new FileReader;r.onload=()=>{const l=r.result,a={id:zt(),dataUrl:"",mimeType:o.type||"text/plain",fileName:o.name,textContent:l},c=t.attachments??[];t.onAttachmentsChange?.([...c,a])},r.readAsText(o)}else if(Pm(o)){if(!t.onAttachmentsChange)continue;if(o.size>Kt){ht(n,`PDF too large (${(o.size/1024/1024).toFixed(1)} MB). Maximum is 5 MB.`);continue}const r=new FileReader;r.onload=()=>{const l=r.result,a={id:zt(),dataUrl:l,mimeType:"application/pdf",fileName:o.name},c=t.attachments??[];t.onAttachmentsChange?.([...c,a])},r.readAsDataURL(o)}else if(Rm(o)){if(!t.onAttachmentsChange)continue;if(o.size>Kt){ht(n,`Video too large (${(o.size/1024/1024).toFixed(1)} MB). Maximum is 5 MB.`);continue}const r=new FileReader;r.onload=()=>{const l=r.result,a={id:zt(),dataUrl:l,mimeType:o.type||"video/mp4",fileName:o.name},c=t.attachments??[];t.onAttachmentsChange?.([...c,a])},r.readAsDataURL(o)}else ht(n,`Unsupported file type: ${o.name}. Use the Files page to upload to workspace.`)}}function Nm(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer&&(e.dataTransfer.dropEffect="copy"),e.currentTarget.classList.add("chat--dragover")}function Dm(e){e.preventDefault(),e.stopPropagation();const t=e.currentTarget,n=e.relatedTarget;(!n||!t.contains(n))&&t.classList.remove("chat--dragover")}function Om(e,t){const n=e.clipboardData?.items;if(!n||!t.onAttachmentsChange)return;const s=[];for(let i=0;i<n.length;i++){const o=n[i];(o.type.startsWith("image/")||o.type.startsWith("video/"))&&s.push(o)}if(s.length!==0){e.preventDefault();for(const i of s){const o=i.getAsFile();if(!o)continue;const r=o.type.startsWith("video/")?"Video":"Image";if(o.size>Kt){const a=e.target?.closest?.(".chat")??document.querySelector(".chat");a&&ht(a,`${r} too large (${(o.size/1024/1024).toFixed(1)} MB). Maximum is 5 MB.`);continue}const l=new FileReader;l.onload=()=>{const a=l.result,c=o.type.startsWith("video/"),u={id:zt(),dataUrl:a,mimeType:o.type,fileName:c?o.name||"video.mp4":void 0},p=t.attachments??[];t.onAttachmentsChange?.([...p,u])},l.readAsDataURL(o)}}}function Bm(e){const t=e.currentTarget,s=t.closest(".chat-compose")?.querySelector(".emoji-picker-popup");if(!s)return;const i=s.classList.toggle("active");if(t.classList.toggle("active",i),i){const o=r=>{s.contains(r.target)||t.contains(r.target)||(s.classList.remove("active"),t.classList.remove("active"),document.removeEventListener("click",o,!0))};requestAnimationFrame(()=>document.addEventListener("click",o,!0))}}function Fm(e,t){const s=e.detail?.unicode;if(!s)return;const i=e.currentTarget.closest(".chat-compose"),o=i?.querySelector("textarea");if(!o)return;const r=o.selectionStart??t.draft.length,l=o.selectionEnd??r,a=t.draft.slice(0,r),c=t.draft.slice(l);t.onDraftChange(a+s+c);const u=i?.querySelector(".emoji-picker-popup"),p=i?.querySelector(".chat-compose__emoji");u?.classList.remove("active"),p?.classList.remove("active"),requestAnimationFrame(()=>{o.focus();const m=r+s.length;o.setSelectionRange(m,m)})}function Um(e){const t=e.attachments??[];return t.length===0?b:d`
|
|
1713
1792
|
<div class="chat-attachments">
|
|
1714
1793
|
${t.map(n=>n.fileName?d`
|
|
1715
1794
|
<div class="chat-attachment chat-attachment--file">
|
|
@@ -1742,7 +1821,7 @@ For details see: https://github.com/nolanlawson/emoji-picker-element/issues/514`
|
|
|
1742
1821
|
</div>
|
|
1743
1822
|
`)}
|
|
1744
1823
|
</div>
|
|
1745
|
-
`}function
|
|
1824
|
+
`}function Wm(e){const t=e.connected,n=e.sending||e.stream!==null,s=!!(e.canAbort&&e.onAbort),o=e.sessions?.sessions?.find(m=>m.key===e.sessionKey)?.reasoningLevel??"off",r=e.showThinking&&o!=="off";e.assistantName,e.assistantAvatar??e.assistantAvatarUrl;const l=(e.attachments?.length??0)>0,a=e.connected?l?"Add a message...":"Message...":"Connecting…",c=e.splitRatio??.6,u=!!(e.sidebarOpen&&e.onCloseSidebar),p=d`
|
|
1746
1825
|
<div
|
|
1747
1826
|
class="chat-thread"
|
|
1748
1827
|
role="log"
|
|
@@ -1750,20 +1829,20 @@ For details see: https://github.com/nolanlawson/emoji-picker-element/issues/514`
|
|
|
1750
1829
|
@scroll=${e.onChatScroll}
|
|
1751
1830
|
>
|
|
1752
1831
|
${e.loading?d`<div class="muted">Loading chat…</div>`:b}
|
|
1753
|
-
${
|
|
1832
|
+
${vh(Vm(e),m=>m.key,m=>m.kind==="reading-indicator"?Kf():m.kind==="stream"?zf(m.text,m.startedAt,e.onOpenSidebar):m.kind==="group"?jf(m,{onOpenSidebar:e.onOpenSidebar,showReasoning:r,assistantName:e.assistantName}):b)}
|
|
1754
1833
|
</div>
|
|
1755
1834
|
`;return d`
|
|
1756
1835
|
<section
|
|
1757
1836
|
class="card chat"
|
|
1758
|
-
@drop=${m=>
|
|
1759
|
-
@dragover=${
|
|
1760
|
-
@dragleave=${
|
|
1837
|
+
@drop=${m=>Im(m,e)}
|
|
1838
|
+
@dragover=${Nm}
|
|
1839
|
+
@dragleave=${Dm}
|
|
1761
1840
|
>
|
|
1762
1841
|
${e.disabledReason?d`<div class="callout">${e.disabledReason}</div>`:b}
|
|
1763
1842
|
|
|
1764
1843
|
${e.error?d`<div class="callout danger">${e.error}</div>`:b}
|
|
1765
1844
|
|
|
1766
|
-
${
|
|
1845
|
+
${Cm(e.compactionStatus)}
|
|
1767
1846
|
|
|
1768
1847
|
${e.focusMode?d`
|
|
1769
1848
|
<button
|
|
@@ -1804,7 +1883,7 @@ For details see: https://github.com/nolanlawson/emoji-picker-element/issues/514`
|
|
|
1804
1883
|
@resize=${m=>e.onSplitRatioChange?.(m.detail.splitRatio)}
|
|
1805
1884
|
></resizable-divider>
|
|
1806
1885
|
<div class="chat-sidebar">
|
|
1807
|
-
${
|
|
1886
|
+
${qf({content:e.sidebarContent??null,error:e.sidebarError??null,onClose:e.onCloseSidebar,onViewRawText:()=>{!e.sidebarContent||!e.onOpenSidebar||e.onOpenSidebar(`\`\`\`
|
|
1808
1887
|
${e.sidebarContent}
|
|
1809
1888
|
\`\`\``)}})}
|
|
1810
1889
|
</div>
|
|
@@ -1812,12 +1891,12 @@ ${e.sidebarContent}
|
|
|
1812
1891
|
</div>
|
|
1813
1892
|
|
|
1814
1893
|
<div class="chat-compose">
|
|
1815
|
-
${
|
|
1894
|
+
${Um(e)}
|
|
1816
1895
|
<div class="chat-compose__row">
|
|
1817
1896
|
<button
|
|
1818
1897
|
class="chat-compose__emoji"
|
|
1819
1898
|
type="button"
|
|
1820
|
-
@click=${
|
|
1899
|
+
@click=${Bm}
|
|
1821
1900
|
aria-label="Emoji"
|
|
1822
1901
|
title="Emoji"
|
|
1823
1902
|
>
|
|
@@ -1828,9 +1907,9 @@ ${e.sidebarContent}
|
|
|
1828
1907
|
<textarea
|
|
1829
1908
|
.value=${e.draft}
|
|
1830
1909
|
?disabled=${!e.connected}
|
|
1831
|
-
@keydown=${m=>{m.key==="Enter"&&(m.isComposing||m.keyCode===229||m.shiftKey||e.connected&&(m.preventDefault(),t&&(e.onSend(),
|
|
1832
|
-
@input=${m=>{const v=m.target;e.onDraftChange(v.value),
|
|
1833
|
-
@paste=${m=>
|
|
1910
|
+
@keydown=${m=>{m.key==="Enter"&&(m.isComposing||m.keyCode===229||m.shiftKey||e.connected&&(m.preventDefault(),t&&(e.onSend(),ca(m.target))))}}
|
|
1911
|
+
@input=${m=>{const v=m.target;e.onDraftChange(v.value),Em(v)}}
|
|
1912
|
+
@paste=${m=>Om(m,e)}
|
|
1834
1913
|
placeholder=${a}
|
|
1835
1914
|
></textarea>
|
|
1836
1915
|
</label>
|
|
@@ -1847,7 +1926,7 @@ ${e.sidebarContent}
|
|
|
1847
1926
|
<button
|
|
1848
1927
|
class="btn btn--icon chat-compose__send primary"
|
|
1849
1928
|
?disabled=${!e.connected}
|
|
1850
|
-
@click=${m=>{e.onSend();const v=m.target.closest(".chat-compose")?.querySelector("textarea");v&&
|
|
1929
|
+
@click=${m=>{e.onSend();const v=m.target.closest(".chat-compose")?.querySelector("textarea");v&&ca(v)}}
|
|
1851
1930
|
aria-label="${n?"Queue":"Send"}"
|
|
1852
1931
|
title="${n?"Queue message":"Send (Enter)"}"
|
|
1853
1932
|
>
|
|
@@ -1856,13 +1935,13 @@ ${e.sidebarContent}
|
|
|
1856
1935
|
</div>
|
|
1857
1936
|
<div class="emoji-picker-popup">
|
|
1858
1937
|
<emoji-picker
|
|
1859
|
-
@emoji-click=${m=>
|
|
1938
|
+
@emoji-click=${m=>Fm(m,e)}
|
|
1860
1939
|
></emoji-picker>
|
|
1861
1940
|
</div>
|
|
1862
|
-
${
|
|
1941
|
+
${qm(e)}
|
|
1863
1942
|
</div>
|
|
1864
1943
|
</section>
|
|
1865
|
-
`}const
|
|
1944
|
+
`}const Km=[{id:"claude-opus-4-6",shortName:"Opus",description:"Most capable"},{id:"claude-sonnet-4-5-20250929",shortName:"Sonnet",description:"Fast & capable"},{id:"claude-haiku-4-5-20251001",shortName:"Haiku",description:"Fastest"}];function zm(e){const t=new Set(e.filter(n=>n.provider==="anthropic").map(n=>n.id));return Km.filter(n=>t.has(n.id)).map(n=>({key:`anthropic/${n.id}`,...n}))}const jm=[{value:"off",label:"Off"},{value:"minimal",label:"Minimal"},{value:"low",label:"Low"},{value:"medium",label:"Medium"},{value:"high",label:"High"}];function Hm(e){const t=e.currentTarget,n=t.closest(".chat-model-bar")?.querySelector(".chat-settings-menu");if(!n)return;const s=n.classList.contains("active");if(document.querySelectorAll(".chat-settings-menu.active").forEach(i=>i.classList.remove("active")),!s){n.classList.add("active");const i=o=>{!n.contains(o.target)&&o.target!==t&&!t.contains(o.target)&&(n.classList.remove("active"),document.removeEventListener("click",i))};requestAnimationFrame(()=>document.addEventListener("click",i))}}function qm(e){if(!e.connected)return b;const t=e.modelCatalog??[],n=zm(t);if(n.length===0)return b;const s=e.modelProvider&&e.model?`${e.modelProvider}/${e.model}`:null,i=e.thinkingLevel??"off",o=e.verboseLevel==="on"||e.verboseLevel==="full",r=e.fillerEnabled===!0;return d`
|
|
1866
1945
|
<div class="chat-model-bar">
|
|
1867
1946
|
<div class="chat-model-bar__select">
|
|
1868
1947
|
<select
|
|
@@ -1883,7 +1962,7 @@ ${e.sidebarContent}
|
|
|
1883
1962
|
.value=${i}
|
|
1884
1963
|
@change=${l=>{const a=l.target.value;e.onThinkingLevelChange&&e.onThinkingLevelChange(a)}}
|
|
1885
1964
|
>
|
|
1886
|
-
${
|
|
1965
|
+
${jm.map(l=>d`
|
|
1887
1966
|
<option value=${l.value} ?selected=${l.value===i}>
|
|
1888
1967
|
Thinking: ${l.label}
|
|
1889
1968
|
</option>
|
|
@@ -1893,7 +1972,7 @@ ${e.sidebarContent}
|
|
|
1893
1972
|
<button
|
|
1894
1973
|
class="chat-model-bar__settings-btn"
|
|
1895
1974
|
type="button"
|
|
1896
|
-
@click=${
|
|
1975
|
+
@click=${Hm}
|
|
1897
1976
|
aria-label="Message settings"
|
|
1898
1977
|
title="Message settings"
|
|
1899
1978
|
>
|
|
@@ -1920,13 +1999,13 @@ ${e.sidebarContent}
|
|
|
1920
1999
|
</label>
|
|
1921
2000
|
</div>
|
|
1922
2001
|
</div>
|
|
1923
|
-
`}const
|
|
2002
|
+
`}const ua=200;function Gm(e){const t=[];let n=null;for(const s of e){if(s.kind!=="message"){n&&(t.push(n),n=null),t.push(s);continue}const i=Da(s.message),o=Oa(i.role),r=i.timestamp||Date.now();!n||n.role!==o?(n&&t.push(n),n={kind:"group",key:`group:${o}:${s.key}`,role:o,messages:[{message:s.message,key:s.key}],timestamp:r,isStreaming:!1}):n.messages.push({message:s.message,key:s.key})}return n&&t.push(n),t}function Vm(e){const t=[],n=Array.isArray(e.messages)?e.messages:[],s=Array.isArray(e.toolMessages)?e.toolMessages:[],i=e.showThinking||e.verboseLevel==="on"||e.verboseLevel==="full",o=Math.max(0,n.length-ua);o>0&&t.push({kind:"message",key:"chat:history:notice",message:{role:"system",content:`Showing last ${ua} messages (${o} hidden).`,timestamp:Date.now()}});for(let r=o;r<n.length;r++){const l=n[r],a=Da(l);!i&&a.role.toLowerCase()==="toolresult"||t.push({kind:"message",key:da(l,r),message:l})}if(i)for(let r=0;r<s.length;r++)t.push({kind:"message",key:da(s[r],r+n.length),message:s[r]});if(e.stream!==null){const r=`stream:${e.sessionKey}:${e.streamStartedAt??"live"}`;e.stream.trim().length>0?t.push({kind:"stream",key:r,text:e.stream,startedAt:e.streamStartedAt??Date.now()}):t.push({kind:"reading-indicator",key:r})}for(const r of e.queue){const l=r.attachments?.filter(c=>c.fileName).map(c=>c.fileName)??[],a=l.length>0?r.text?`${l.join(", ")}
|
|
1924
2003
|
|
|
1925
|
-
${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,message:{role:"user",content:[{type:"text",text:a}],timestamp:r.createdAt}})}return
|
|
2004
|
+
${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,message:{role:"user",content:[{type:"text",text:a}],timestamp:r.createdAt}})}return Gm(t)}function da(e,t){const n=e,s=typeof n.toolCallId=="string"?n.toolCallId:"";if(s)return`tool:${s}`;const i=typeof n.id=="string"?n.id:"";if(i)return`msg:${i}`;const o=typeof n.messageId=="string"?n.messageId:"";if(o)return`msg:${o}`;const r=typeof n.timestamp=="number"?n.timestamp:null,l=typeof n.role=="string"?n.role:"unknown";return r!=null?`msg:${l}:${r}:${t}`:`msg:${l}:${t}`}function Ym(e){return e.connected?d`
|
|
1926
2005
|
<div class="setup-container setup-container--full chat-page">
|
|
1927
2006
|
${tt("Chat",e.wsProps)}
|
|
1928
2007
|
<div class="chat-viewport">
|
|
1929
|
-
${
|
|
2008
|
+
${Wm(e)}
|
|
1930
2009
|
</div>
|
|
1931
2010
|
</div>
|
|
1932
2011
|
`:d`
|
|
@@ -1936,12 +2015,12 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
1936
2015
|
<p>Connecting to gateway...</p>
|
|
1937
2016
|
</div>
|
|
1938
2017
|
</div>
|
|
1939
|
-
`}function
|
|
1940
|
-
${
|
|
1941
|
-
${
|
|
1942
|
-
${e.newEventModalOpen?
|
|
1943
|
-
${t?
|
|
1944
|
-
`}function
|
|
2018
|
+
`}function Qm(e){return e?`${Pa(e)} (${os(e)})`:"n/a"}function hc(e){const t=e.state??{},n=t.lastStatus??"n/a",s=t.lastRunAtMs?os(t.lastRunAtMs):"never";return`${n} · last ${s}`}function fc(e){const t=e.schedule;return t.kind==="at"?`One-time: ${Pa(t.atMs)}`:t.kind==="every"?`Every ${Ra(t.everyMs)}`:`Schedule: ${t.expr}${t.tz?` (${t.tz})`:""}`}function Xm(e,t=!0){const n=e.payload;return n.kind==="systemEvent"?`Task: ${t&&n.text.length>60?`${n.text.slice(0,57)}…`:n.text}`:`Message: ${t&&n.message.length>60?`${n.message.slice(0,57)}…`:n.message}`}function pa(e){const t=e.payload;if(t.kind!=="agentTurn")return null;const n=t.channel??t.provider,s=t.to;if(!s&&!n)return null;const i=[];return s&&i.push(s),n&&n!=="last"&&i.push(`via ${n}`),i.join(" ")||null}function Zm(e){const t=["last",...e.channels.filter(Boolean)],n=e.form.channel?.trim();n&&!t.includes(n)&&t.push(n);const s=new Set;return t.filter(i=>s.has(i)?!1:(s.add(i),!0))}function Jm(e,t){if(t==="last")return"last";const n=e.channelMeta?.find(s=>s.id===t);return n?.label?n.label:e.channelLabels?.[t]??t}function ey(e){return e||"Default"}const ha=d`<svg viewBox="0 0 24 24"><polygon points="5 3 19 12 5 21 5 3"/></svg>`,ty=d`<svg viewBox="0 0 24 24"><rect x="6" y="4" width="4" height="16"/><rect x="14" y="4" width="4" height="16"/></svg>`,ny=d`<svg viewBox="0 0 24 24"><path d="M3 6h18"/><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"/><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/></svg>`,gc=d`<svg viewBox="0 0 24 24"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>`,sy=d`<svg viewBox="0 0 24 24"><path d="M12 5v14"/><path d="M5 12h14"/></svg>`;function fa(e){const t=e.detailJobId?e.jobs.find(n=>n.id===e.detailJobId)??null:null;return d`
|
|
2019
|
+
${iy(e)}
|
|
2020
|
+
${oy(e)}
|
|
2021
|
+
${e.newEventModalOpen?ay(e):b}
|
|
2022
|
+
${t?cy(t,e):b}
|
|
2023
|
+
`}function iy(e){const t=e.status,n=t?.enabled??!1,s=t?.jobs??0,i=t?.nextWakeAtMs;return d`
|
|
1945
2024
|
<div class="event-status-bar">
|
|
1946
2025
|
<div class="event-status-bar__info">
|
|
1947
2026
|
<span class="statusDot ${n?"ok":""}"></span>
|
|
@@ -1963,14 +2042,14 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
1963
2042
|
${e.error?d`<span class="muted">${e.error}</span>`:b}
|
|
1964
2043
|
</div>
|
|
1965
2044
|
<button class="btn primary btn--sm" @click=${e.onNewEventModalOpen}>
|
|
1966
|
-
${
|
|
2045
|
+
${sy} New Event
|
|
1967
2046
|
</button>
|
|
1968
2047
|
</div>
|
|
1969
|
-
`}function
|
|
2048
|
+
`}function oy(e){return e.jobs.length===0?d`<div class="muted" style="padding: 20px 0;">No events yet. Create one to get started.</div>`:d`
|
|
1970
2049
|
<div class="event-grid">
|
|
1971
|
-
${e.jobs.map(t=>
|
|
2050
|
+
${e.jobs.map(t=>ry(t,e))}
|
|
1972
2051
|
</div>
|
|
1973
|
-
`}function
|
|
2052
|
+
`}function ry(e,t){return d`
|
|
1974
2053
|
<div
|
|
1975
2054
|
class="event-card ${e.enabled?"":"disabled"}"
|
|
1976
2055
|
@click=${()=>t.onDetailOpen(e)}
|
|
@@ -1981,12 +2060,12 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
1981
2060
|
${e.enabled?"On":"Off"}
|
|
1982
2061
|
</span>
|
|
1983
2062
|
</div>
|
|
1984
|
-
<div class="event-card__schedule">${
|
|
1985
|
-
${e.agentId?d`<div class="event-card__agent">${
|
|
1986
|
-
${
|
|
2063
|
+
<div class="event-card__schedule">${fc(e)}</div>
|
|
2064
|
+
${e.agentId?d`<div class="event-card__agent">${ey(e.agentId)}</div>`:b}
|
|
2065
|
+
${pa(e)?d`<div class="event-card__agent muted" style="font-size: 11px;">\u2192 ${pa(e)}</div>`:b}
|
|
1987
2066
|
<div class="event-card__footer">
|
|
1988
2067
|
<div class="event-card__status">
|
|
1989
|
-
<span class="muted" style="font-size: 11px;">${
|
|
2068
|
+
<span class="muted" style="font-size: 11px;">${hc(e)}</span>
|
|
1990
2069
|
</div>
|
|
1991
2070
|
<div class="event-card__actions" @click=${n=>n.stopPropagation()}>
|
|
1992
2071
|
<button
|
|
@@ -1995,7 +2074,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
1995
2074
|
?disabled=${t.busy}
|
|
1996
2075
|
@click=${()=>t.onToggle(e,!e.enabled)}
|
|
1997
2076
|
>
|
|
1998
|
-
${e.enabled?
|
|
2077
|
+
${e.enabled?ty:ha}
|
|
1999
2078
|
</button>
|
|
2000
2079
|
<button
|
|
2001
2080
|
class="btn-icon"
|
|
@@ -2003,7 +2082,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2003
2082
|
?disabled=${t.busy}
|
|
2004
2083
|
@click=${()=>t.onRun(e)}
|
|
2005
2084
|
>
|
|
2006
|
-
${
|
|
2085
|
+
${ha}
|
|
2007
2086
|
</button>
|
|
2008
2087
|
<button
|
|
2009
2088
|
class="btn-icon danger"
|
|
@@ -2011,18 +2090,18 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2011
2090
|
?disabled=${t.busy}
|
|
2012
2091
|
@click=${()=>t.onRemove(e)}
|
|
2013
2092
|
>
|
|
2014
|
-
${
|
|
2093
|
+
${ny}
|
|
2015
2094
|
</button>
|
|
2016
2095
|
</div>
|
|
2017
2096
|
</div>
|
|
2018
2097
|
</div>
|
|
2019
|
-
`}function
|
|
2098
|
+
`}function ay(e){const t=Zm(e);return d`
|
|
2020
2099
|
<div class="event-modal-overlay" @click=${e.onNewEventModalClose}>
|
|
2021
2100
|
<div class="event-modal" @click=${n=>n.stopPropagation()}>
|
|
2022
2101
|
<div class="event-modal__header">
|
|
2023
2102
|
<div class="event-modal__title">New Event</div>
|
|
2024
2103
|
<button class="event-modal__close" @click=${e.onNewEventModalClose}>
|
|
2025
|
-
${
|
|
2104
|
+
${gc}
|
|
2026
2105
|
</button>
|
|
2027
2106
|
</div>
|
|
2028
2107
|
|
|
@@ -2074,7 +2153,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2074
2153
|
</label>
|
|
2075
2154
|
</div>
|
|
2076
2155
|
|
|
2077
|
-
${
|
|
2156
|
+
${ly(e)}
|
|
2078
2157
|
|
|
2079
2158
|
<div class="form-grid" style="margin-top: 12px;">
|
|
2080
2159
|
<label class="field">
|
|
@@ -2136,7 +2215,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2136
2215
|
@change=${n=>e.onFormChange({channel:n.target.value})}
|
|
2137
2216
|
>
|
|
2138
2217
|
${t.map(n=>d`<option value=${n}>
|
|
2139
|
-
${
|
|
2218
|
+
${Jm(e,n)}
|
|
2140
2219
|
</option>`)}
|
|
2141
2220
|
</select>
|
|
2142
2221
|
</label>
|
|
@@ -2175,7 +2254,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2175
2254
|
</div>
|
|
2176
2255
|
</div>
|
|
2177
2256
|
</div>
|
|
2178
|
-
`}function
|
|
2257
|
+
`}function ly(e){const t=e.form;return t.scheduleKind==="at"?d`
|
|
2179
2258
|
<label class="field" style="margin-top: 12px;">
|
|
2180
2259
|
<span>Run at</span>
|
|
2181
2260
|
<input
|
|
@@ -2224,13 +2303,13 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2224
2303
|
/>
|
|
2225
2304
|
</label>
|
|
2226
2305
|
</div>
|
|
2227
|
-
`}function
|
|
2306
|
+
`}function cy(e,t){return d`
|
|
2228
2307
|
<div class="event-modal-overlay" @click=${t.onDetailClose}>
|
|
2229
2308
|
<div class="event-modal" @click=${n=>n.stopPropagation()}>
|
|
2230
2309
|
<div class="event-modal__header">
|
|
2231
2310
|
<div class="event-modal__title">${e.name||"Untitled Event"}</div>
|
|
2232
2311
|
<button class="event-modal__close" @click=${t.onDetailClose}>
|
|
2233
|
-
${
|
|
2312
|
+
${gc}
|
|
2234
2313
|
</button>
|
|
2235
2314
|
</div>
|
|
2236
2315
|
|
|
@@ -2247,7 +2326,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2247
2326
|
</div>
|
|
2248
2327
|
<div class="event-detail-row">
|
|
2249
2328
|
<span class="event-detail-label">Schedule</span>
|
|
2250
|
-
<span class="event-detail-value">${
|
|
2329
|
+
<span class="event-detail-value">${fc(e)}</span>
|
|
2251
2330
|
</div>
|
|
2252
2331
|
${e.agentId?d`
|
|
2253
2332
|
<div class="event-detail-row">
|
|
@@ -2269,7 +2348,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2269
2348
|
</div>
|
|
2270
2349
|
<div class="event-detail-row" style="flex-direction: column; align-items: stretch; gap: 4px;">
|
|
2271
2350
|
<span class="event-detail-label">Action</span>
|
|
2272
|
-
<span class="event-detail-value" style="text-align: left; white-space: pre-wrap; font-size: 12px; color: var(--muted); line-height: 1.5;">${
|
|
2351
|
+
<span class="event-detail-value" style="text-align: left; white-space: pre-wrap; font-size: 12px; color: var(--muted); line-height: 1.5;">${Xm(e,!1)}</span>
|
|
2273
2352
|
</div>
|
|
2274
2353
|
${e.payload.kind==="agentTurn"&&e.payload.to?d`
|
|
2275
2354
|
<div class="event-detail-row">
|
|
@@ -2294,12 +2373,12 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2294
2373
|
<div class="event-detail-section">
|
|
2295
2374
|
<div class="event-detail-row">
|
|
2296
2375
|
<span class="event-detail-label">Last run</span>
|
|
2297
|
-
<span class="event-detail-value">${
|
|
2376
|
+
<span class="event-detail-value">${hc(e)}</span>
|
|
2298
2377
|
</div>
|
|
2299
2378
|
${e.state?.nextRunAtMs?d`
|
|
2300
2379
|
<div class="event-detail-row">
|
|
2301
2380
|
<span class="event-detail-label">Next run</span>
|
|
2302
|
-
<span class="event-detail-value">${
|
|
2381
|
+
<span class="event-detail-value">${Qm(e.state.nextRunAtMs)}</span>
|
|
2303
2382
|
</div>
|
|
2304
2383
|
`:b}
|
|
2305
2384
|
</div>
|
|
@@ -2310,7 +2389,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2310
2389
|
</div>
|
|
2311
2390
|
${t.runs.length===0?d`<div class="muted" style="font-size: 13px;">No runs recorded yet.</div>`:d`
|
|
2312
2391
|
<div class="list">
|
|
2313
|
-
${[...t.runs].sort((n,s)=>s.ts-n.ts).map(n=>
|
|
2392
|
+
${[...t.runs].sort((n,s)=>s.ts-n.ts).map(n=>dy(n))}
|
|
2314
2393
|
</div>
|
|
2315
2394
|
`}
|
|
2316
2395
|
</div>
|
|
@@ -2340,14 +2419,14 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2340
2419
|
</div>
|
|
2341
2420
|
</div>
|
|
2342
2421
|
</div>
|
|
2343
|
-
`}function
|
|
2422
|
+
`}function uy(e){const t=e.toLowerCase();return t==="ok"||t==="success"?"chip chip-ok":t==="error"||t==="fail"||t==="failed"?"chip chip-warn":"chip"}function dy(e){return d`
|
|
2344
2423
|
<div class="list-item" style="grid-template-columns: 1fr; gap: 6px;">
|
|
2345
2424
|
<div style="display: flex; align-items: center; gap: 8px; flex-wrap: wrap;">
|
|
2346
|
-
<span class=${
|
|
2425
|
+
<span class=${uy(e.status)} style="font-size: 11px; padding: 2px 8px;">
|
|
2347
2426
|
${e.status}
|
|
2348
2427
|
</span>
|
|
2349
2428
|
<span class="muted" style="font-size: 12px;">${os(e.ts)}</span>
|
|
2350
|
-
<span class="muted" style="font-size: 12px;">${
|
|
2429
|
+
<span class="muted" style="font-size: 12px;">${Ra(e.durationMs)}</span>
|
|
2351
2430
|
</div>
|
|
2352
2431
|
${e.summary?d`<div class="muted" style="font-size: 12px;">${e.summary}</div>`:b}
|
|
2353
2432
|
${e.error?d`
|
|
@@ -2357,7 +2436,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2357
2436
|
</details>
|
|
2358
2437
|
`:b}
|
|
2359
2438
|
</div>
|
|
2360
|
-
`}function
|
|
2439
|
+
`}function py(e){const t=e.report?.skills??[],n=e.filter.trim().toLowerCase(),s=n?t.filter(i=>[i.name,i.description,i.source].join(" ").toLowerCase().includes(n)):t;return d`
|
|
2361
2440
|
<section class="card">
|
|
2362
2441
|
<div class="row" style="justify-content: space-between;">
|
|
2363
2442
|
<div>
|
|
@@ -2385,17 +2464,17 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2385
2464
|
|
|
2386
2465
|
${s.length===0?d`<div class="muted" style="margin-top: 16px;">No skills found.</div>`:d`
|
|
2387
2466
|
<div class="list" style="margin-top: 16px;">
|
|
2388
|
-
${s.map(i=>
|
|
2467
|
+
${s.map(i=>hy(i,e))}
|
|
2389
2468
|
</div>
|
|
2390
2469
|
`}
|
|
2391
2470
|
</section>
|
|
2392
|
-
`}function
|
|
2471
|
+
`}function hy(e,t){const n=t.busyKey===e.skillKey,s=t.edits[e.skillKey]??"",i=t.messages[e.skillKey]??null,o=e.install.length>0&&e.missing.bins.length>0,r=[...e.missing.bins.map(a=>`bin:${a}`),...e.missing.env.map(a=>`env:${a}`),...e.missing.config.map(a=>`config:${a}`),...e.missing.os.map(a=>`os:${a}`)],l=[];return e.disabled&&l.push("disabled"),e.blockedByAllowlist&&l.push("blocked by allowlist"),d`
|
|
2393
2472
|
<div class="list-item">
|
|
2394
2473
|
<div class="list-main">
|
|
2395
2474
|
<div class="list-title">
|
|
2396
2475
|
${e.emoji?`${e.emoji} `:""}${e.name}
|
|
2397
2476
|
</div>
|
|
2398
|
-
<div class="list-sub">${
|
|
2477
|
+
<div class="list-sub">${_u(e.description,140)}</div>
|
|
2399
2478
|
<div class="chip-row" style="margin-top: 6px;">
|
|
2400
2479
|
<span class="chip">${e.source}</span>
|
|
2401
2480
|
<span class="chip ${e.eligible?"chip-ok":"chip-warn"}">
|
|
@@ -2457,7 +2536,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2457
2536
|
`:b}
|
|
2458
2537
|
</div>
|
|
2459
2538
|
</div>
|
|
2460
|
-
`}const
|
|
2539
|
+
`}const ga=["user","assistant","tool","thinking","error"],ma={user:"User",assistant:"Assistant",tool:"Tool",thinking:"Thinking",error:"Error",system:"System"};function fy(e){if(!e)return"";const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}function gy(e){return e.split(":").slice(2).join(":")||e}function my(e,t){return t?[e.content,e.agentId,e.sessionKey,e.toolName].filter(Boolean).join(" ").toLowerCase().includes(t):!0}function yy(e,t=500){return e.length<=t?e:e.slice(0,t)+"..."}function vy(e){const t=e.filterText.trim().toLowerCase();ga.some(s=>!e.typeFilters[s]),e.agents.some(s=>!e.agentFilters[s]);const n=e.entries.filter(s=>!e.typeFilters[s.type]||e.agents.length>0&&!(e.agentFilters[s.agentId]??!0)?!1:my(s,t));return d`
|
|
2461
2540
|
<div>
|
|
2462
2541
|
<div class="filters" style="margin-top: 14px;">
|
|
2463
2542
|
<label class="field" style="min-width: 220px;">
|
|
@@ -2471,14 +2550,14 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2471
2550
|
</div>
|
|
2472
2551
|
|
|
2473
2552
|
<div class="chip-row" style="margin-top: 12px;">
|
|
2474
|
-
${
|
|
2553
|
+
${ga.map(s=>d`
|
|
2475
2554
|
<label class="chip session-log-chip ${s}">
|
|
2476
2555
|
<input
|
|
2477
2556
|
type="checkbox"
|
|
2478
2557
|
.checked=${e.typeFilters[s]}
|
|
2479
2558
|
@change=${i=>e.onTypeToggle(s,i.target.checked)}
|
|
2480
2559
|
/>
|
|
2481
|
-
<span>${
|
|
2560
|
+
<span>${ma[s]}</span>
|
|
2482
2561
|
</label>
|
|
2483
2562
|
`)}
|
|
2484
2563
|
</div>
|
|
@@ -2518,19 +2597,19 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2518
2597
|
${n.length===0?d`<div class="muted" style="padding: 12px;">No session log entries.</div>`:n.map(s=>d`
|
|
2519
2598
|
<div class="log-row session-entry ${s.type}">
|
|
2520
2599
|
<div class="log-row-header">
|
|
2521
|
-
<span class="log-time mono">${
|
|
2522
|
-
<span class="session-log-type ${s.type}">${
|
|
2600
|
+
<span class="log-time mono">${fy(s.timestamp)}</span>
|
|
2601
|
+
<span class="session-log-type ${s.type}">${ma[s.type]}</span>
|
|
2523
2602
|
<span class="log-subsystem mono">${s.agentId}</span>
|
|
2524
|
-
<span class="session-label mono">${
|
|
2603
|
+
<span class="session-label mono">${gy(s.sessionKey)}</span>
|
|
2525
2604
|
${s.toolName?d`<span class="session-tool mono">${s.toolName}</span>`:b}
|
|
2526
2605
|
${s.model?d`<span class="session-model mono">${s.model}</span>`:b}
|
|
2527
2606
|
</div>
|
|
2528
|
-
<div class="log-message mono">${e.full?s.content:
|
|
2607
|
+
<div class="log-message mono">${e.full?s.content:yy(s.content)}</div>
|
|
2529
2608
|
</div>
|
|
2530
2609
|
`)}
|
|
2531
2610
|
</div>
|
|
2532
2611
|
</div>
|
|
2533
|
-
`}const Mi=["trace","debug","info","warn","error","fatal"];function
|
|
2612
|
+
`}const Mi=["trace","debug","info","warn","error","fatal"];function by(e){if(!e)return"";const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleTimeString()}function mc(e,t){return t?[e.message,e.subsystem,e.raw].filter(Boolean).join(" ").toLowerCase().includes(t):!0}function wy(e){return d`
|
|
2534
2613
|
<section class="card">
|
|
2535
2614
|
<div class="row" style="justify-content: space-between;">
|
|
2536
2615
|
<div>
|
|
@@ -2545,7 +2624,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2545
2624
|
<button
|
|
2546
2625
|
class="btn"
|
|
2547
2626
|
?disabled=${e.entries.length===0}
|
|
2548
|
-
@click=${()=>{const t=e.filterText.trim().toLowerCase(),n=Mi.some(o=>!e.levelFilters[o]),s=e.entries.filter(o=>o.level&&!e.levelFilters[o.level]?!1:
|
|
2627
|
+
@click=${()=>{const t=e.filterText.trim().toLowerCase(),n=Mi.some(o=>!e.levelFilters[o]),s=e.entries.filter(o=>o.level&&!e.levelFilters[o.level]?!1:mc(o,t)),i=t||n?"filtered":"visible";e.onExport(s.map(o=>o.raw),i)}}
|
|
2549
2628
|
>
|
|
2550
2629
|
Export
|
|
2551
2630
|
</button>
|
|
@@ -2575,9 +2654,9 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2575
2654
|
</button>
|
|
2576
2655
|
</div>
|
|
2577
2656
|
|
|
2578
|
-
${e.logsSubTab==="session"?
|
|
2657
|
+
${e.logsSubTab==="session"?vy(e.sessionLogsProps):ky(e)}
|
|
2579
2658
|
</section>
|
|
2580
|
-
`}function
|
|
2659
|
+
`}function ky(e){const t=e.filterText.trim().toLowerCase();Mi.some(s=>!e.levelFilters[s]);const n=e.entries.filter(s=>s.level&&!e.levelFilters[s.level]?!1:mc(s,t));return d`
|
|
2581
2660
|
<div class="filters" style="margin-top: 14px;">
|
|
2582
2661
|
<label class="field" style="min-width: 220px;">
|
|
2583
2662
|
<span>Filter</span>
|
|
@@ -2620,7 +2699,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2620
2699
|
${n.length===0?d`<div class="muted" style="padding: 12px;">No log entries.</div>`:[...n].reverse().map(s=>d`
|
|
2621
2700
|
<div class="log-row">
|
|
2622
2701
|
<div class="log-row-header">
|
|
2623
|
-
<span class="log-time mono">${
|
|
2702
|
+
<span class="log-time mono">${by(s.time)}</span>
|
|
2624
2703
|
<span class="log-level ${s.level??""}">${s.level??""}</span>
|
|
2625
2704
|
<span class="log-subsystem mono">${s.subsystem??""}</span>
|
|
2626
2705
|
</div>
|
|
@@ -2628,13 +2707,13 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2628
2707
|
</div>
|
|
2629
2708
|
`)}
|
|
2630
2709
|
</div>
|
|
2631
|
-
`}const
|
|
2710
|
+
`}const Sy=[{id:"cron",label:"Events"},{id:"skills",label:"Skills"},{id:"logs",label:"Logs"}];function xy(e){switch(e.activeTab){case"cron":return fa(e.cronProps);case"skills":return py(e.skillsProps);case"logs":return wy(e.logsProps);default:return fa(e.cronProps)}}function Ay(e){return e.connected?d`
|
|
2632
2711
|
<div class="setup-container">
|
|
2633
2712
|
${tt("Advanced",e.wsProps)}
|
|
2634
2713
|
<div class="setup-card sp-card-advanced" style="text-align: left;">
|
|
2635
2714
|
<h1>Advanced</h1>
|
|
2636
2715
|
<div class="sp-tabs">
|
|
2637
|
-
${
|
|
2716
|
+
${Sy.map(t=>d`
|
|
2638
2717
|
<button
|
|
2639
2718
|
class="sp-tab ${e.activeTab===t.id?"active":""}"
|
|
2640
2719
|
@click=${()=>e.onTabChange(t.id)}
|
|
@@ -2643,7 +2722,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2643
2722
|
</button>
|
|
2644
2723
|
`)}
|
|
2645
2724
|
</div>
|
|
2646
|
-
${
|
|
2725
|
+
${xy(e)}
|
|
2647
2726
|
</div>
|
|
2648
2727
|
</div>
|
|
2649
2728
|
`:d`
|
|
@@ -2653,7 +2732,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2653
2732
|
<p>Connecting to gateway...</p>
|
|
2654
2733
|
</div>
|
|
2655
2734
|
</div>
|
|
2656
|
-
`}function
|
|
2735
|
+
`}function ya(e){if(!e.show)return b;const t=Oe(),n=e.isFirstTime,s=e.changePinMode===!0&&!n,i=e.changePinBusy===!0;let o=e.accounts.length>0?e.accounts[0].id:"";const r=m=>{o=m.target.value;const v=m.target.closest(".login-card")?.querySelector(".login-change-pin");v&&(v.style.display=o==="__master__"?"":"none")},l=m=>v=>{const w=v.target;w.value=w.value.replace(/\D/g,"").slice(0,6),m(w.value)},a=!n&&e.accounts.length>1?d`
|
|
2657
2736
|
<select
|
|
2658
2737
|
class="login-account-select"
|
|
2659
2738
|
@change=${r}
|
|
@@ -2665,13 +2744,13 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2665
2744
|
</option>
|
|
2666
2745
|
`)}
|
|
2667
2746
|
</select>
|
|
2668
|
-
`:b;if(s){let m="",v="",w="";const
|
|
2747
|
+
`:b;if(s){let m="",v="",w="";const A=_=>{_.preventDefault(),!i&&(!m||!v||!w||v===w&&o&&e.onChangePin?.(o,m,v))};return d`
|
|
2669
2748
|
<div class="login-overlay">
|
|
2670
2749
|
<div class="login-card">
|
|
2671
2750
|
<img class="login-logo" src="${t.iconUrl}" alt="${t.name}" />
|
|
2672
2751
|
<h2 class="login-title">Change PIN</h2>
|
|
2673
2752
|
<p class="login-subtitle">Enter your current PIN, then choose a new one</p>
|
|
2674
|
-
<form class="login-form" @submit=${
|
|
2753
|
+
<form class="login-form" @submit=${A}>
|
|
2675
2754
|
${a}
|
|
2676
2755
|
<input
|
|
2677
2756
|
class="login-pin-input"
|
|
@@ -2777,7 +2856,7 @@ ${r.text}`:l.join(", "):r.text;t.push({kind:"message",key:`queue:${r.id}`,messag
|
|
|
2777
2856
|
</p>`:b}
|
|
2778
2857
|
</div>
|
|
2779
2858
|
</div>
|
|
2780
|
-
`}const $o="taskmaster-access-session",hc={checked:!1,hasPins:!1,hasMasterPin:!1,authenticated:!1,workspace:null,master:!1,accounts:[],error:null,busy:!1};function fc(){try{return localStorage.getItem($o)}catch{return null}}function gc(e){try{localStorage.setItem($o,e)}catch{}}function vy(){try{localStorage.removeItem($o)}catch{}}async function ga(e){if(e.client)try{const t=fc(),n=await e.client.request("access.status",{token:t});e.accessState={...e.accessState,checked:!0,hasPins:n.hasPins,hasMasterPin:n.hasMasterPin,accounts:n.accounts??[],authenticated:n.authenticated,workspace:n.workspace,master:n.master,error:null}}catch{e.accessState={...e.accessState,checked:!0,hasPins:!1,hasMasterPin:!1,accounts:[],authenticated:!0,error:null}}}async function by(e,t,n){if(e.client){e.accessState={...e.accessState,busy:!0,error:null};try{const s=await e.client.request("access.verify",{account:t,pin:n});s.ok&&s.token?(gc(s.token),e.accessState={...e.accessState,authenticated:!0,workspace:s.workspace??null,master:s.master??!1,busy:!1,error:null}):e.accessState={...e.accessState,busy:!1,error:s.message??"Incorrect PIN"}}catch{e.accessState={...e.accessState,busy:!1,error:"Failed to verify PIN"}}}}async function wy(e,t){if(e.client){e.accessState={...e.accessState,busy:!0,error:null};try{const n=await e.client.request("access.setMasterPin",{pin:t});n.ok&&n.token?(gc(n.token),e.accessState={...e.accessState,checked:!0,hasPins:!0,hasMasterPin:!0,authenticated:!0,workspace:null,master:!0,busy:!1,error:null}):e.accessState={...e.accessState,busy:!1,error:"Failed to set PIN"}}catch{e.accessState={...e.accessState,busy:!1,error:"Failed to set PIN"}}}}async function ky(e,t,n){if(!e.client)return!1;try{return(await e.client.request("access.setAccountPin",{workspace:t,pin:n})).ok}catch{return!1}}async function Sy(e){const t=fc();if(e.client&&t)try{await e.client.request("access.logout",{token:t})}catch{}vy(),e.accessState={...hc,checked:!0,hasPins:!0,hasMasterPin:e.accessState.hasMasterPin,accounts:e.accessState.accounts}}async function Pi(e){return(await e.request("apikeys.list")).providers??[]}async function ma(e,t,n){await e.request("apikeys.set",{provider:t,apiKey:n})}async function Ay(e,t){await e.request("apikeys.remove",{provider:t})}class xy{constructor(){this.canvas=null,this.ctx=null,this.img=new Image,this.pendingFrame=null,this.rafId=null,this.deviceWidth=1280,this.deviceHeight=720,this.lastMouseMoveAt=0,this.MOUSE_THROTTLE_MS=30}attach(t){this.canvas=t,this.ctx=t.getContext("2d")}detach(){this.rafId!=null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.canvas=null,this.ctx=null,this.pendingFrame=null}updateFrame(t,n){n?.deviceWidth&&(this.deviceWidth=n.deviceWidth),n?.deviceHeight&&(this.deviceHeight=n.deviceHeight),this.pendingFrame=t,this.rafId==null&&(this.rafId=requestAnimationFrame(()=>this.renderFrame()))}renderFrame(){this.rafId=null;const t=this.pendingFrame;!t||!this.canvas||!this.ctx||(this.pendingFrame=null,this.img.onload=()=>{!this.canvas||!this.ctx||((this.canvas.width!==this.img.width||this.canvas.height!==this.img.height)&&(this.canvas.width=this.img.width,this.canvas.height=this.img.height),this.ctx.drawImage(this.img,0,0))},this.img.src=`data:image/jpeg;base64,${t}`)}translateCoordinates(t,n){if(!this.canvas)return{x:t,y:n};const s=this.canvas.getBoundingClientRect(),i=this.canvas.width/s.width,o=this.canvas.height/s.height,r=this.deviceWidth/this.canvas.width,l=this.deviceHeight/this.canvas.height;return{x:Math.round(t*i*r),y:Math.round(n*o*l)}}shouldThrottleMouseMove(){const t=performance.now();return t-this.lastMouseMoveAt<this.MOUSE_THROTTLE_MS?!0:(this.lastMouseMoveAt=t,!1)}getDeviceDimensions(){return{width:this.deviceWidth,height:this.deviceHeight}}}let ti=null;function Bn(){return ti||(ti=new xy),ti}function Eo(e){return e instanceof Error?e.message:String(e)}async function $y(e){if(!(!e.client||!e.connected)){e.browserLoading=!0,e.browserError=null;try{(await e.client.request("browser.screencast.start",{quality:60,maxWidth:1280,maxHeight:720}))?.ok&&(e.browserScreencastActive=!0)}catch(t){e.browserError=Eo(t)}finally{e.browserLoading=!1}}}async function Ey(e){if(!(!e.client||!e.connected)){e.browserLoading=!0;try{await e.client.request("browser.screencast.stop",{}),e.browserScreencastActive=!1,e.browserScreencastFrame=null,e.browserScreencastMetadata=null}catch(t){e.browserError=Eo(t)}finally{e.browserLoading=!1}}}async function ni(e,t,n,s,i){if(!(!e.client||!e.connected||!e.browserInputMode))try{await e.client.request("browser.screencast.input",{type:"mouse",action:t,x:n,y:s,button:i??"left",clickCount:t==="mousePressed"?1:0})}catch{}}async function si(e,t,n,s){if(!(!e.client||!e.connected||!e.browserInputMode))try{await e.client.request("browser.screencast.input",{type:"key",action:t,key:n,...s?.text?{text:s.text}:{},...s?.code?{code:s.code}:{},...s?.modifiers?{modifiers:s.modifiers}:{}})}catch{}}async function Ty(e){if(!(!e.client||!e.connected))try{await e.client.request("browser.handoff.complete",{}),e.browserHandoffPending=!1,e.browserHandoffReason=null,e.browserHandoffId=null}catch(t){e.browserError=Eo(t)}}function Cy(e){e.browserInputMode=!e.browserInputMode}function _y(e,t){if(!t?.data)return;e.browserScreencastFrame=t.data,e.browserScreencastMetadata=t.metadata??null,Bn().updateFrame(t.data,t.metadata)}function My(e,t){t&&(e.browserHandoffPending=!0,e.browserHandoffReason=t.reason??"Action required",e.browserHandoffId=t.id??null)}function Py(e){e.browserHandoffPending=!1,e.browserHandoffReason=null,e.browserHandoffId=null}function Fe(e){return e instanceof Error?e.message:String(e)}let Pn=null;function sn(e,t){Pn&&clearTimeout(Pn),e.filesMessage={kind:"success",text:t},Pn=setTimeout(()=>{e.filesMessage=null,Pn=null},3e3)}async function on(e,t){if(!(!e.client||!e.connected)){if(!t){e.filesTree=[],e.filesRoot="";return}if(!e.filesLoading){e.filesLoading=!0,e.filesError=null;try{const n={};t&&(n.agentId=t);const s=await e.client.request("files.tree",n);s?.tree&&(e.filesTree=s.tree,e.filesRoot=s.root??"")}catch(n){e.filesError=Fe(n)}finally{e.filesLoading=!1}}}}async function Ly(e,t,n){e.filesSelectedPaths=new Set([t]),await mc(e,t,n)}async function Ry(e,t,n){const s=new Set(e.filesSelectedPaths);if(s.has(t)?s.delete(t):s.add(t),e.filesSelectedPaths=s,s.size===1){const i=[...s][0];await mc(e,i,n)}else e.filesSelectedPath=null,e.filesPreviewContent=null,e.filesPreviewSize=null,e.filesPreviewBinary=!1}async function Iy(e,t){if(!e.client||!e.connected)return;const n=[...e.filesSelectedPaths];if(n.length===0)return;let s=0,i="";for(const o of n)try{await yc(e,o,t),s++}catch(r){i=Fe(r)}i?e.filesMessage={kind:"error",text:`${s} downloaded, error: ${i}`}:sn(e,`${s} file${s!==1?"s":""} downloaded`)}async function Ny(e,t,n,s){const i=t.split("/").pop()??t,o=n==="."?i:`${n}/${i}`;o!==t&&await vc(e,t,o,s)}async function mc(e,t,n){if(!(!e.client||!e.connected)){e.filesSelectedPath=t,e.filesPreviewLoading=!0,e.filesPreviewContent=null,e.filesPreviewBinary=!1,e.filesPreviewSize=null;try{const s={path:t};n&&(s.agentId=n);const i=await e.client.request("files.read",s);e.filesPreviewContent=i?.content??null,e.filesPreviewBinary=i?.binary??!1,e.filesPreviewSize=i?.size??null}catch(s){e.filesError=Fe(s)}finally{e.filesPreviewLoading=!1}}}async function yc(e,t,n){if(!(!e.client||!e.connected))try{const s={path:t};n&&(s.agentId=n);const i=await e.client.request("files.download",s);if(!i?.base64){e.filesMessage={kind:"error",text:"Download failed: no data"};return}const o=Uint8Array.from(atob(i.base64),c=>c.charCodeAt(0)),r=new Blob([o]),l=URL.createObjectURL(r),a=document.createElement("a");a.href=l,a.download=i.name??t.split("/").pop()??"download",document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(l)}catch(s){e.filesMessage={kind:"error",text:Fe(s)}}}async function Oy(e,t,n,s){if(!e.client||!e.connected)return;e.filesUploadBusy=!0,e.filesMessage=null;let i=0,o="";for(const r of n)try{const l=await r.arrayBuffer(),a=btoa(new Uint8Array(l).reduce((u,p)=>u+String.fromCharCode(p),"")),c={path:t,name:r.name,data:a};s&&(c.agentId=s),await e.client.request("files.upload",c),i++}catch(l){o=Fe(l)}e.filesUploadBusy=!1,o?e.filesMessage={kind:"error",text:i>0?`${i} uploaded, error: ${o}`:o}:sn(e,`${i} file${i!==1?"s":""} uploaded`),await on(e,s)}async function Dy(e,t,n){if(!(!e.client||!e.connected)){e.filesMessage=null;try{const s={path:t};n&&(s.agentId=n),await e.client.request("files.delete",s),sn(e,"File deleted"),e.filesSelectedPath===t&&(e.filesSelectedPath=null,e.filesPreviewContent=null),await on(e,n)}catch(s){e.filesMessage={kind:"error",text:Fe(s)}}}}async function vc(e,t,n,s){if(!(!e.client||!e.connected)){e.filesMessage=null;try{const i={from:t,to:n};s&&(i.agentId=s),await e.client.request("files.move",i),sn(e,"File moved"),e.filesSelectedPath===t&&(e.filesSelectedPath=n),await on(e,s)}catch(i){e.filesMessage={kind:"error",text:Fe(i)}}}}async function bc(e,t){if(!(!e.client||!e.connected))try{const n={};t&&(n.agentId=t);const s=await e.client.request("memory.status",n);s?.ok&&(e.filesMemoryStatus={dirty:s.dirty??!1,files:s.files??0,chunks:s.chunks??0})}catch{}}async function By(e,t){if(!(!e.client||!e.connected)&&!e.filesReindexBusy){e.filesReindexBusy=!0,e.filesMessage=null;try{const n={force:!0};t&&(n.agentId=t);const s=await e.client.request("memory.reindex",n),i=s?.files??0,o=s?.chunks??0;sn(e,`Re-indexed: ${i} files, ${o} chunks`),await bc(e,t)}catch(n){e.filesMessage={kind:"error",text:Fe(n)}}finally{e.filesReindexBusy=!1}}}function Fy(e,t){const n=new Set(e.filesExpandedDirs);n.has(t)?n.delete(t):n.add(t),e.filesExpandedDirs=n}function Uy(e,t="admin"){if(!e)return[];const n=e.bindings;if(!Array.isArray(n))return[];const s=[];for(const i of n){if(!i||typeof i!="object"||i.agentId!==t)continue;const o=i.match;if(!o||typeof o!="object"||(o.channel??"").toLowerCase()!=="whatsapp")continue;const l=o.peer;if(!l||typeof l!="object"||l.kind!=="dm")continue;const a=l.id??"";a&&s.push({phone:a,paired:i.meta?.paired===!0})}return s.sort((i,o)=>i.paired&&!o.paired?-1:!i.paired&&o.paired?1:0),s}function wc(e,t,n="admin",s){const i=new Map,o=new Map;for(const a of e){if(!a||typeof a!="object"||a.agentId!==n)continue;const c=a.match;if(!c||typeof c!="object"||(c.channel??"").toLowerCase()!=="whatsapp")continue;const p=c.peer;if(!p||typeof p!="object"||p.kind!=="dm")continue;const m=p.id??"";m&&(a.meta&&i.set(m,a.meta),c.accountId&&o.set(m,c.accountId))}const r=e.filter(a=>{if(!a||typeof a!="object"||a.agentId!==n)return!0;const c=a.match;if(!c||typeof c!="object"||(c.channel??"").toLowerCase()!=="whatsapp")return!0;const p=c.peer;return!p||typeof p!="object"?!0:p.kind!=="dm"}),l=t.map(a=>{const c=s??o.get(a.phone),u={channel:"whatsapp",peer:{kind:"dm",id:a.phone}};c&&(u.accountId=c);const p={agentId:n,match:u},m=i.get(a.phone);return m?p.meta=m:a.paired&&(p.meta={paired:!0}),p});return[...r,...l]}async function fs(e,t){if(!e.client||!e.connected)return;if(!t){e.adminPhones=[];return}if(e.adminsLoading)return;e.adminsLoading=!0,e.adminsError=null;const n=t;try{const s=await e.client.request("config.get",{});e.configSnapshot=s;const i=s.config;e.configForm=Oe(i??{}),e.adminPhones=Uy(i,n),e.configFormDirty=!1}catch(s){e.adminsError=String(s)}finally{e.adminsLoading=!1}}async function kc(e,t,n,s){if(!e.client||!e.connected)return;if(!n){e.adminsError="No business selected.";return}if(e.adminsSaving)return;const i=n;let o=t.trim();if(!o){e.adminsError="Phone number is required";return}if(o.startsWith("+")||(o="+"+o),!/^\+[1-9]\d{6,14}$/.test(o)){e.adminsError="Invalid phone number format. Use E.164 format (e.g., +14155552671)";return}if(e.adminPhones.some(r=>r.phone===o)){e.adminsError="Phone number already exists";return}e.adminsSaving=!0,e.adminsError=null;try{const r=Oe(e.configForm??e.configSnapshot?.config??{}),l=r.bindings??[],a=[...e.adminPhones,{phone:o}],c=wc(l,a,i,s);Ua(r,["bindings"],c);const u=e.configSnapshot?.hash;if(!u){e.adminsError="Config hash missing; reload and retry.";return}const p=Qe(r);await e.client.request("config.set",{raw:p,baseHash:u}),await fs(e,n)}catch(r){e.adminsError=String(r)}finally{e.adminsSaving=!1}}async function Sc(e,t,n,s){if(!e.client||!e.connected)return;if(!n){e.adminsError="No business selected.";return}if(e.adminsSaving)return;const i=n;if(e.adminPhones.find(r=>r.phone===t)?.paired){e.adminsError="Cannot remove the paired phone. Unlink WhatsApp first.";return}e.adminsSaving=!0,e.adminsError=null;try{const r=Oe(e.configForm??e.configSnapshot?.config??{}),l=r.bindings??[],a=e.adminPhones.filter(m=>m.phone!==t),c=wc(l,a,i,s);Ua(r,["bindings"],c);const u=e.configSnapshot?.hash;if(!u){e.adminsError="Config hash missing; reload and retry.";return}const p=Qe(r);await e.client.request("config.set",{raw:p,baseHash:u}),await fs(e,n)}catch(r){e.adminsError=String(r)}finally{e.adminsSaving=!1}}const Wy=Object.freeze(Object.defineProperty({__proto__:null,addAdmin:kc,loadAdmins:fs,removeAdmin:Sc},Symbol.toStringTag,{value:"Module"}));async function et(e,t){if(!(!e.client||!e.connected)){if(!t){e.customersRecords=[];return}if(!e.customersLoading){e.customersLoading=!0,e.customersError=null;try{const n=e.customersSearchQuery.trim(),s=n?await e.client.request("records.search",{query:n,workspace:t}):await e.client.request("records.list",{workspace:t});e.customersRecords=s.records??[]}catch(n){e.customersError=String(n)}finally{e.customersLoading=!1}}}}async function Ac(e,t,n,s){if(!e.client||!e.connected||e.customersSaving)return;let i=t.trim();const o=n.trim();if(!i){e.customersError="Phone number is required";return}if(!o){e.customersError="Name is required";return}if(i.startsWith("+")||(i="+"+i),!/^\+[1-9]\d{6,14}$/.test(i)){e.customersError="Invalid phone number format. Use E.164 (e.g. +447490553305)";return}e.customersSaving=!0,e.customersError=null;try{await e.client.request("records.set",{id:i,name:o,fields:{},workspace:s}),e.customersShowAddForm=!1,e.customersNewPhone="",e.customersNewName="",await et(e,s)}catch(r){e.customersError=String(r)}finally{e.customersSaving=!1}}async function xc(e,t,n){if(!(!e.client||!e.connected)&&!e.customersSaving){e.customersSaving=!0,e.customersError=null;try{await e.client.request("records.delete",{id:t}),e.customersEditingId===t&&(e.customersEditingId=null),await et(e,n)}catch(s){e.customersError=String(s)}finally{e.customersSaving=!1}}}async function $c(e,t,n,s,i){if(!(!e.client||!e.connected)&&!e.customersSaving){e.customersSaving=!0,e.customersError=null;try{await e.client.request("records.setField",{id:t,key:n,value:s}),await et(e,i)}catch(o){e.customersError=String(o)}finally{e.customersSaving=!1}}}async function Ec(e,t,n,s){if(!(!e.client||!e.connected)&&!e.customersSaving){e.customersSaving=!0,e.customersError=null;try{await e.client.request("records.deleteField",{id:t,key:n}),await et(e,s)}catch(i){e.customersError=String(i)}finally{e.customersSaving=!1}}}const Ky=Object.freeze(Object.defineProperty({__proto__:null,addCustomer:Ac,deleteCustomer:xc,deleteCustomerField:Ec,loadCustomers:et,setCustomerField:$c},Symbol.toStringTag,{value:"Module"}));function Ut(e){if(e.workspaces.length!==0)return{workspaces:e.workspaces,selectedWorkspace:e.selectedWorkspace,onWorkspaceSelect:t=>e.handleWorkspaceSelect(t),hasPins:e.accessState.hasPins,isMaster:e.accessState.master,onLogout:()=>e.handleLogout()}}function zy(e){if(e.workspaces.length!==0)return{workspaces:e.workspaces,selectedWorkspace:e.selectedWorkspace,onWorkspaceSelect:t=>e.handleWorkspaceSelect(t),onAddAccount:()=>{e.addingWorkspace=!0},hasPins:e.accessState.hasPins,isMaster:e.accessState.master,onLogout:()=>e.handleLogout()}}function jy(e){const t=J(e);return t?t.agents.find(s=>s.id.endsWith("-admin")||s.id==="admin")?.id:void 0}function Hy(e){return J(e)?.whatsappAccountId??void 0}function qy(e){const t=J(e);if(t)return t.agents[0]?.id}function Gy(e){return e.selectedWorkspace??void 0}function J(e){return e.selectedWorkspace?e.workspaces.find(t=>t.name===e.selectedWorkspace)??null:null}const Vy=/^data:/i,Qy=/^https?:\/\//i;function Yy(e){const t=e.agentsList?.agents??[],s=Ca(e.sessionKey)?.agentId??e.agentsList?.defaultId??"main",o=t.find(l=>l.id===s)?.identity,r=o?.avatarUrl??o?.avatar;if(r)return Vy.test(r)||Qy.test(r)?r:o?.avatarUrl}function Xy(e){if(!e)return null;const t=e.channelAccounts?.whatsapp;if(!t||t.length===0)return null;const n=t[0];return{running:n.running??!1,connected:n.connected??!1,linked:n.linked??!1,lastError:n.lastError}}function Zy(e){if(!e)return{configured:!1,running:!1,connected:!1,lastError:null,selfChatMode:!1,dmPolicy:null,cliPath:null};const t=e.channelAccounts?.imessage;if(!t||t.length===0)return{configured:!1,running:!1,connected:!1,lastError:null,selfChatMode:!1,dmPolicy:null,cliPath:null};const n=t[0],s=n.running??!1,i=n.probe,o=i!=null?i.ok===!0:s;return{configured:n.configured??!1,running:s,connected:o,lastError:n.lastError??null,selfChatMode:n.mode==="self-chat"||!!n.selfChatMode,dmPolicy:n.dmPolicy??null,cliPath:n.cliPath??null}}function Jy(e){const t=e.configSnapshot?.config;if(!t)return null;const n=t.bindings;if(!Array.isArray(n))return null;const s=n.find(r=>r.match?.channel==="imessage"&&r.meta?.imessageOwner);if(!s)return null;const i=s.agentId;for(const r of e.workspaces)if(r.agents.some(l=>l.id===i))return r.name;if(i==="admin"||i==="public")return e.workspaces.find(l=>l.isDefault)?.name??null;const o=i.replace(/-(admin|public)$/,"");return o!==i?e.workspaces.find(l=>l.name===o)?.name??null:null}function ev(e){if(e.connected&&e.accessState.checked){const{accessState:t}=e;if(t.hasPins&&!t.authenticated)return fa({show:!0,isFirstTime:!1,accounts:t.accounts,error:t.error,busy:t.busy,onSubmit:(n,s)=>{s!=null&&e.handlePinSubmit(n,s)},changePinMode:e.loginChangePinMode,onToggleChangePinMode:()=>e.toggleChangePinMode(),changePinBusy:e.changePinBusy,changePinError:e.changePinError,changePinSuccess:e.changePinSuccess,onChangePin:(n,s,i)=>e.handleChangePin(n,s,i)});if(!t.hasMasterPin&&!t.authenticated&&e.setup)return fa({show:!0,isFirstTime:!0,accounts:[],error:t.error,busy:t.busy,onSubmit:n=>e.handleSetMasterPin(n)});if(!t.hasMasterPin&&!t.authenticated&&!e.setup)return window.location.href="/setup",b}if(e.setup){const t=Xy(e.channelsSnapshot),n=e.channelsSnapshot?.channelAccounts?.whatsapp??[],s=Zy(e.channelsSnapshot),i=Jy(e);return eh({connected:e.connected,assistantName:e.assistantName,currentStep:e.setupStep,licenseKey:e.licenseKey,licenseBusy:e.licenseBusy,licenseValid:e.licenseValid,licenseMessage:e.licenseMessage,licenseTier:e.licenseTier,licenseDeviceId:e.licenseDeviceId,licenseStoredKey:e.licenseStoredKey,onLicenseKeyChange:o=>e.handleLicenseKeyChange(o),onLicenseActivate:()=>e.handleLicenseActivate(),onLicenseRemove:async()=>{await e.handleLicenseRemove(),e.licenseRemoveConfirm=!1},licenseRemoveConfirm:e.licenseRemoveConfirm,onLicenseRemoveConfirm:()=>{e.licenseRemoveConfirm=!0},onLicenseRemoveCancel:()=>{e.licenseRemoveConfirm=!1},authConnected:e.authConnected,authBusy:e.authBusy,authMessage:e.authMessage,authUrl:e.authUrl,authCodeInput:e.authCodeInput,authExpiresIn:e.authExpiresIn,whatsappBusy:e.whatsappBusy,whatsappLoginMessage:e.whatsappLoginMessage,whatsappLoginQrDataUrl:e.whatsappLoginQrDataUrl,whatsappLoginConnected:e.whatsappLoginConnected,whatsappChannelStatus:t,whatsappAccounts:n,whatsappActiveQrAccountId:e.whatsappActiveQrAccountId,whatsappAccountSaving:e.whatsappAccountSaving,gatewayHealthy:e.gatewayHealthy,gatewayHealthLoading:e.gatewayHealthLoading,gatewayHealthMessage:e.gatewayHealthMessage,gatewayRestartBusy:e.gatewayRestartBusy,updateAvailable:e.updateAvailable,currentVersion:e.currentVersion,latestVersion:e.latestVersion,updateChecking:e.updateChecking,updateRunning:e.updateRunning,updateMessage:e.updateMessage,updateProgressSteps:e.updateProgressSteps,updateLastResult:e.updateLastResult,onUpdateCheck:()=>e.handleUpdateCheck(),onUpdateRun:()=>e.handleUpdateRun(),onUpdateDismissResult:()=>e.handleUpdateDismissResult(),onStartAuth:()=>e.handleAuthStart(),onSubmitAuthCode:o=>e.handleAuthSubmitCode(o),onAuthCodeChange:o=>e.handleAuthCodeChange(o),onSkipToWhatsApp:()=>e.handleSkipToWhatsApp(),onWhatsAppRelink:async o=>{await e.handleWhatsAppStart(!0,o),e.whatsappLoginQrDataUrl&&(await e.handleWhatsAppWait(o),await z(e,!0),e.requestUpdate())},onWhatsAppReset:async o=>{await e.handleWhatsAppLogout(o),await e.handleWhatsAppStart(!0,o),e.whatsappLoginQrDataUrl&&(await e.handleWhatsAppWait(o),await z(e,!0),e.requestUpdate())},onRefreshStatus:async()=>{await z(e,!0),await e.handleGatewayHealthCheck()},onWhatsAppBack:()=>{e.whatsappLoginQrDataUrl=null,e.whatsappLoginMessage=null,e.whatsappLoginConnected=null,e.whatsappActiveQrAccountId=null,e.requestUpdate(),z(e,!0)},onRestartGateway:()=>e.handleGatewayRestart(),onRemoveWhatsAppAccount:o=>e.handleRemoveWhatsAppAccount(o),workspaces:e.workspaces,workspacesLoading:e.workspacesLoading,workspacesError:e.workspacesError,addingWorkspace:e.addingWorkspace,newWorkspaceName:e.newWorkspaceName,newWorkspacePath:e.newWorkspacePath,workspaceSaving:e.workspaceSaving,workspaceRemoveConfirm:e.workspaceRemoveConfirm,newWorkspacePin:e.newWorkspacePin,onSetNewWorkspacePin:o=>{e.newWorkspacePin=o},onWorkspaceCreate:async(o,r)=>{const l=e.newWorkspacePin;await e.handleWorkspaceCreate(o,r),l.match(/^\d{4,6}$/)&&(await ky(e,o,l),e.newWorkspacePin="")},onWorkspaceRemove:o=>e.handleWorkspaceRemove(o),onSetAddingWorkspace:o=>{e.addingWorkspace=o},onSetNewWorkspaceName:o=>{e.newWorkspaceName=o},onSetNewWorkspacePath:o=>{e.newWorkspacePath=o},onSetWorkspaceRemoveConfirm:o=>{e.workspaceRemoveConfirm=o},renamingWorkspace:e.renamingWorkspace,renameWorkspaceName:e.renameWorkspaceName,onWorkspaceRenameStart:()=>e.handleWorkspaceRenameStart(),onWorkspaceRenameCancel:()=>e.handleWorkspaceRenameCancel(),onWorkspaceRename:(o,r)=>e.handleWorkspaceRename(o,r),whatsappDmPolicy:(()=>{const r=J(e)?.whatsappAccountId;return(r?n.find(a=>a.accountId===r):n[0])?.dmPolicy??null})(),onWhatsAppDmToggle:async()=>{const r=J(e)?.whatsappAccountId,l=r?n.find(p=>p.accountId===r):n[0];if(!l)return;const c=l.dmPolicy!=null&&l.dmPolicy!=="disabled"?"disabled":"open",u=c==="open"?{dmPolicy:c,allowFrom:["*"]}:{dmPolicy:c};try{const p=await e.client.request("config.get"),x=(p.config?.channels?.whatsapp?.accounts??{})[l.accountId]?{channels:{whatsapp:{accounts:{[l.accountId]:u}}}}:{channels:{whatsapp:u}};await e.client.request("config.patch",{raw:JSON.stringify(x),baseHash:p.hash,note:`WhatsApp DM policy → ${c}`,skipRestart:!0}),await z(e,!1)}catch(p){console.error("DM toggle failed:",p)}},whatsappModel:(()=>{const o=J(e);if(!o)return null;const r=o.agents.find(p=>p.id.endsWith("-public")||p.id==="public");if(!r)return null;const a=e.configSnapshot?.config?.agents?.list;if(!Array.isArray(a))return null;const c=a.find(p=>p.id===r.id);return c?.model&&(typeof c.model=="string"?c.model:c.model.primary)?.trim()||null})(),whatsappModelCatalog:e.chatModelCatalog??[],onWhatsAppModelChange:async o=>{const r=J(e);if(!r)return;const l=r.agents.find(a=>a.id.endsWith("-public")||a.id==="public");if(l)try{const a=await e.client.request("config.get"),u=a.config?.agents??{},p=Array.isArray(u.list)?[...u.list]:[],m=p.findIndex(w=>w.id===l.id);if(o)m>=0?p[m]={...p[m],model:o}:p.push({id:l.id,model:o});else if(m>=0){const{model:w,...x}=p[m];Object.keys(x).length<=1?p.splice(m,1):p[m]=x}const v=p.length>0?{agents:{list:p}}:{agents:{list:null}};await e.client.request("config.patch",{raw:JSON.stringify(v),baseHash:a.hash,note:`Public agent model → ${o||"default"}`,skipRestart:!0}),e.configSnapshot=await e.client.request("config.get")}catch(a){console.error("Model change failed:",a)}},whatsappThinkingLevel:(()=>{const o=J(e);if(!o)return null;const r=o.agents.find(u=>u.id.endsWith("-public")||u.id==="public");if(!r)return null;const a=e.configSnapshot?.config?.agents?.list;return Array.isArray(a)&&a.find(u=>u.id===r.id)?.thinkingLevel?.trim()||null})(),onWhatsAppThinkingChange:async o=>{const r=J(e);if(!r)return;const l=r.agents.find(a=>a.id.endsWith("-public")||a.id==="public");if(l)try{const a=await e.client.request("config.get"),u=a.config?.agents??{},p=Array.isArray(u.list)?[...u.list]:[],m=p.findIndex(x=>x.id===l.id),v=o==="off"?void 0:o;if(v)m>=0?p[m]={...p[m],thinkingLevel:v}:p.push({id:l.id,thinkingLevel:v});else if(m>=0){const{thinkingLevel:x,..._}=p[m];Object.keys(_).length<=1?p.splice(m,1):p[m]=_}const w=p.length>0?{agents:{list:p}}:{agents:{list:null}};await e.client.request("config.patch",{raw:JSON.stringify(w),baseHash:a.hash,note:`Public agent thinking → ${v||"default"}`,skipRestart:!0}),e.configSnapshot=await e.client.request("config.get")}catch(a){console.error("Thinking change failed:",a)}},whatsappGroupPolicy:(()=>{const r=e.configSnapshot?.config?.channels?.whatsapp,a=J(e)?.whatsappAccountId,c=r?.accounts??{};return(a?c[a]:void 0)?.groupPolicy??r?.groupPolicy??"allowlist"})(),whatsappGroupRequireMention:(()=>{const r=e.configSnapshot?.config?.channels?.whatsapp,a=J(e)?.whatsappAccountId,c=r?.accounts??{};return((a?c[a]:void 0)?.groups??r?.groups??{})["*"]?.requireMention!==!1})(),onWhatsAppGroupToggle:async()=>{const r=J(e)?.whatsappAccountId;try{const l=await e.client.request("config.get"),c=l.config?.channels?.whatsapp??{},u=c.accounts??{},p=r?u[r]:void 0,m=p?.groupPolicy??c.groupPolicy??"allowlist",v=m==="disabled"||m==="allowlist",w=v?"open":"disabled",x=v?{"*":{}}:void 0,_={groupPolicy:w};x&&(_.groups=x);const j=p?{channels:{whatsapp:{accounts:{[r]:_}}}}:{channels:{whatsapp:_}};await e.client.request("config.patch",{raw:JSON.stringify(j),baseHash:l.hash,note:`WhatsApp groups → ${w}`,skipRestart:!0}),e.configSnapshot=await e.client.request("config.get")}catch(l){console.error("Group toggle failed:",l)}},onWhatsAppGroupMentionChange:async o=>{const l=J(e)?.whatsappAccountId;try{const a=await e.client.request("config.get"),p=(a.config?.channels?.whatsapp??{}).accounts??{},m=l?p[l]:void 0,v={"*":{requireMention:o}},w=m?{channels:{whatsapp:{accounts:{[l]:{groups:v}}}}}:{channels:{whatsapp:{groups:v}}};await e.client.request("config.patch",{raw:JSON.stringify(w),baseHash:a.hash,note:`WhatsApp group mention → ${o?"when mentioned":"always"}`,skipRestart:!0}),e.configSnapshot=await e.client.request("config.get")}catch(a){console.error("Group mention change failed:",a)}},whatsappSettingsOpen:e.whatsappSettingsOpen??!1,onWhatsAppSettingsOpen:()=>{e.whatsappSettingsOpen=!0},onWhatsAppSettingsClose:()=>{e.whatsappSettingsOpen=!1},imessageConfigured:s.configured,imessageRunning:s.running,imessageConnected:s.connected,imessageLastError:s.lastError,imessageSelfChatMode:s.selfChatMode,imessageCliPath:s.cliPath,imessageEnabling:e.imessageEnabling,imessageEnableConfirm:e.imessageEnableConfirm,imessageOwnerWorkspace:i,onIMessageEnable:()=>{e.imessageEnableConfirm=!0},onIMessageEnableConfirm:async()=>{e.imessageEnabling=!0;try{const o=await e.client.request("config.get"),l=o.config?.bindings??[],a=J(e),u=a?.agents.find(w=>w.id.endsWith("-admin")||w.id==="admin")?.id??"admin",p=l.filter(w=>w.match?.channel!=="imessage"),m=[{agentId:u,match:{channel:"imessage",peer:{kind:"dm",id:"__self__"}},meta:{imessageOwner:!0}}],v=[...p,...m];await e.client.request("config.patch",{raw:JSON.stringify({channels:{imessage:{selfChatMode:!0,dmPolicy:"disabled",allowFrom:["*"]}},bindings:v}),baseHash:o.hash,note:"Enable iMessage (self-chat) for "+(a?.name??"default")}),e.imessageEnableConfirm=!1,setTimeout(()=>{Promise.all([z(e,!0),we(e)]).then(()=>{e.imessageEnabling=!1})},3e3)}catch{e.imessageEnabling=!1}},onIMessageEnableCancel:()=>{e.imessageEnableConfirm=!1},onIMessageProbe:async()=>{e.imessageEnabling=!0,e.requestUpdate();try{await z(e,!0)}finally{e.imessageEnabling=!1}},onIMessageDisconnect:async()=>{e.imessageEnabling=!0;try{const o=await e.client.request("config.get"),a=(o.config?.bindings??[]).filter(c=>c.match?.channel!=="imessage");await e.client.request("config.patch",{raw:JSON.stringify({channels:{imessage:{selfChatMode:!1,dmPolicy:"disabled"}},bindings:a}),baseHash:o.hash,note:"Disconnect iMessage"}),e.imessageEnableConfirm=!1,setTimeout(()=>{Promise.all([z(e,!0),we(e)]).then(()=>{e.imessageEnabling=!1})},3e3)}catch{e.imessageEnabling=!1}},onIMessageReassign:async()=>{e.imessageEnabling=!0;try{const o=await e.client.request("config.get"),l=o.config?.bindings??[],a=J(e),u=a?.agents.find(v=>v.id.endsWith("-admin")||v.id==="admin")?.id??"admin",p=l.filter(v=>v.match?.channel!=="imessage"),m=[{agentId:u,match:{channel:"imessage",peer:{kind:"dm",id:"__self__"}},meta:{imessageOwner:!0}}];await e.client.request("config.patch",{raw:JSON.stringify({channels:{imessage:{selfChatMode:!0,dmPolicy:"disabled",allowFrom:["*"]}},bindings:[...p,...m]}),baseHash:o.hash,note:"Reassign iMessage to "+(a?.name??"default")}),e.imessageEnableConfirm=!1,setTimeout(()=>{Promise.all([z(e,!0),we(e)]).then(()=>{e.imessageEnabling=!1})},3e3)}catch{e.imessageEnabling=!1}},infoModalOpen:e.infoModalOpen,onInfoModalOpen:o=>{e.infoModalOpen=o},onInfoModalClose:()=>{e.infoModalOpen=null},isMaster:e.accessState.master,apiKeyProviders:e.apiKeyProviders,apiKeyModalOpen:e.apiKeyModalOpen,apiKeyBusy:e.apiKeyBusy,apiKeyError:e.apiKeyError,apiKeySuccess:e.apiKeySuccess,onApiKeyModalOpen:()=>{e.apiKeyModalOpen=!0,e.apiKeyError=null,e.apiKeySuccess=null},onApiKeyModalClose:()=>{e.apiKeyModalOpen=!1,e.apiKeyError=null,e.apiKeySuccess=null},onApiKeySave:async(o,r)=>{e.apiKeyBusy=!0,e.apiKeyError=null,e.apiKeySuccess=null;try{await ma(e.client,o,r),e.apiKeySuccess=`${o} key saved`;try{e.apiKeyProviders=await Pi(e.client)}catch{}o==="anthropic"&&await e.handleAuthStatusCheck()}catch(l){e.apiKeyError=l instanceof Error?l.message:"Failed to save key"}finally{e.apiKeyBusy=!1}},onApiKeyRemove:async o=>{e.apiKeyBusy=!0,e.apiKeyError=null,e.apiKeySuccess=null;try{await Ay(e.client,o),e.apiKeySuccess=`${o} key removed`;try{e.apiKeyProviders=await Pi(e.client)}catch{}}catch(r){e.apiKeyError=r instanceof Error?r.message:"Failed to remove key"}finally{e.apiKeyBusy=!1}},authApiKeyMode:e.authApiKeyMode,authApiKeyInput:e.authApiKeyInput,authApiKeyBusy:e.authApiKeyBusy,authApiKeyError:e.authApiKeyError,onAuthApiKeyToggle:()=>{e.authApiKeyMode=!e.authApiKeyMode,e.authApiKeyError=null},onAuthApiKeyChange:o=>{e.authApiKeyInput=o},onAuthApiKeySubmit:async()=>{const o=e.authApiKeyInput.trim();if(o){e.authApiKeyBusy=!0,e.authApiKeyError=null;try{await ma(e.client,"anthropic",o),await e.handleAuthStatusCheck(),e.authApiKeyMode=!1,e.authApiKeyInput=""}catch(r){e.authApiKeyError=r instanceof Error?r.message:"Failed to save API key"}finally{e.authApiKeyBusy=!1}}},accountHasPin:(()=>{const o=e.selectedWorkspace??e.workspaces[0]?.name;return o?e.accessState.accounts.some(r=>r.id===o):!1})(),accountPinModalOpen:e.accountPinModalOpen,accountPinBusy:e.accountPinBusy,accountPinError:e.accountPinError,accountPinSuccess:e.accountPinSuccess,onAccountPinModalOpen:()=>{e.accountPinModalOpen=!0,e.accountPinError=null,e.accountPinSuccess=null},onAccountPinModalClose:()=>{e.accountPinModalOpen=!1,e.accountPinError=null,e.accountPinSuccess=null},onAccountPinSave:(o,r)=>{const l=e.selectedWorkspace??e.workspaces[0]?.name;l&&e.handleAccountPinSave(l,o,r)},wsProps:zy(e)})}if(e.filesPage){const t=qy(e);return Wp({connected:e.connected,wsProps:Ut(e),loading:e.filesLoading,tree:e.filesTree,root:e.filesRoot,error:e.filesError,selectedPath:e.filesSelectedPath,selectedPaths:e.filesSelectedPaths,previewContent:e.filesPreviewContent,previewLoading:e.filesPreviewLoading,previewBinary:e.filesPreviewBinary,previewSize:e.filesPreviewSize,expandedDirs:e.filesExpandedDirs,message:e.filesMessage,uploadBusy:e.filesUploadBusy,reindexBusy:e.filesReindexBusy,memoryStatus:e.filesMemoryStatus,onRefresh:()=>on(e,t),onReindex:()=>By(e,t),onSelectFile:n=>Ly(e,n,t),onToggleSelectFile:n=>Ry(e,n,t),onToggleDir:n=>Fy(e,n),onUpload:(n,s)=>Oy(e,n,s,t),onDownload:n=>yc(e,n,t),onBulkDownload:()=>Iy(e,t),onDelete:n=>Dy(e,n,t),onMove:(n,s)=>vc(e,n,s,t),onMoveToDir:(n,s)=>Ny(e,n,s,t)})}if(e.browserPage)return Op({connected:e.connected,active:e.browserScreencastActive,loading:e.browserLoading,error:e.browserError,inputMode:e.browserInputMode,handoffPending:e.browserHandoffPending,handoffReason:e.browserHandoffReason,onStart:()=>$y(e),onStop:()=>Ey(e),onToggleInput:()=>Cy(e),onCompleteHandoff:()=>Ty(e),onCanvasMouseDown:t=>{const s=t.target.getBoundingClientRect(),o=Bn().translateCoordinates(t.clientX-s.left,t.clientY-s.top);ni(e,"mousePressed",o.x,o.y,t.button===2?"right":t.button===1?"middle":"left")},onCanvasMouseUp:t=>{const s=t.target.getBoundingClientRect(),o=Bn().translateCoordinates(t.clientX-s.left,t.clientY-s.top);ni(e,"mouseReleased",o.x,o.y)},onCanvasMouseMove:t=>{const n=Bn();if(n.shouldThrottleMouseMove())return;const i=t.target.getBoundingClientRect(),o=n.translateCoordinates(t.clientX-i.left,t.clientY-i.top);ni(e,"mouseMoved",o.x,o.y)},onCanvasKeyDown:t=>{let n=0;t.altKey&&(n|=1),t.ctrlKey&&(n|=2),t.metaKey&&(n|=4),t.shiftKey&&(n|=8),si(e,"keyDown",t.key,{code:t.code,modifiers:n||void 0}),t.key.length===1&&si(e,"char",t.key,{text:t.key})},onCanvasKeyUp:t=>{si(e,"keyUp",t.key,{code:t.code})}});if(e.adminsPage){const t=jy(e),n=Hy(e);return nh({connected:e.connected,wsProps:Ut(e),loading:e.adminsLoading,saving:e.adminsSaving,phones:e.adminPhones,error:e.adminsError,newPhone:e.adminsNewPhone,onRefresh:()=>fs(e,t),onAdd:s=>{kc(e,s,t,n).then(()=>{e.adminsError||(e.adminsNewPhone="")})},onRemove:s=>Sc(e,s,t,n),onNewPhoneChange:s=>e.handleAdminsNewPhoneChange(s)})}if(e.customersPage){const t=Gy(e);return rh({connected:e.connected,wsProps:Ut(e),loading:e.customersLoading,saving:e.customersSaving,records:e.customersRecords,error:e.customersError,searchQuery:e.customersSearchQuery,editingId:e.customersEditingId,showAddForm:e.customersShowAddForm,newRecordPhone:e.customersNewPhone,newRecordName:e.customersNewName,onSearch:n=>e.customersSearchQuery=n,onSearchSubmit:()=>et(e,t),onAdd:(n,s)=>Ac(e,n,s,t),onDelete:n=>xc(e,n,t),onSetField:(n,s,i)=>$c(e,n,s,i,t),onDeleteField:(n,s)=>Ec(e,n,s,t),onToggleExpand:n=>{e.customersEditingId=e.customersEditingId===n?null:n},onShowAddForm:()=>e.customersShowAddForm=!0,onCancelAddForm:()=>{e.customersShowAddForm=!1,e.customersNewPhone="",e.customersNewName=""},onNewRecordPhoneChange:n=>e.handleCustomersNewPhoneChange(n),onNewRecordNameChange:n=>e.handleCustomersNewNameChange(n),onRefresh:()=>et(e,t)})}if(e.chatPage){const t=e.connected?null:"Disconnected from gateway.",n=Yy(e),s=e.chatAvatarUrl??n??null;return Km({connected:e.connected,wsProps:Ut(e),sessionKey:e.sessionKey,onSessionKeyChange:i=>{e.sessionKey=i,e.chatMessage="",e.chatAttachments=[],e.chatStream=null,e.chatStreamStartedAt=null,e.chatRunId=null,e.chatQueue=[],e.resetToolStream(),e.resetChatScroll(),e.applySettings({...e.settings,sessionKey:i,lastActiveSessionKey:i}),e.loadAssistantIdentity(),Ce(e),fi(e)},thinkingLevel:e.chatThinkingLevel,showThinking:e.settings.chatShowThinking??!1,modelProvider:e.chatModelProvider,model:e.chatModel,modelCatalog:e.chatModelCatalog,onModelChange:i=>{wn(e,e.sessionKey,{model:i}).then(()=>{Ce(e)})},onThinkingLevelChange:i=>{wn(e,e.sessionKey,{thinkingLevel:i==="off"?null:i}).then(()=>{Ce(e)})},verboseLevel:e.chatVerboseLevel,fillerEnabled:e.chatFillerEnabled,onVerboseChange:i=>{wn(e,e.sessionKey,{verboseLevel:i==="off"?null:i}).then(()=>{Ce(e)})},onFillerChange:i=>{wn(e,e.sessionKey,{fillerEnabled:i}).then(()=>{Ce(e)})},loading:e.chatLoading,sending:e.chatSending,compactionStatus:e.compactionStatus,assistantAvatarUrl:s,messages:e.chatMessages,toolMessages:e.chatToolMessages,stream:e.chatStream,streamStartedAt:e.chatStreamStartedAt,draft:e.chatMessage,queue:e.chatQueue,canSend:e.connected,disabledReason:t,error:e.lastError,sessions:e.sessionsResult,focusMode:!1,onRefresh:()=>(e.resetToolStream(),Promise.all([Ce(e),fi(e)])),onToggleFocusMode:()=>{},onChatScroll:i=>e.handleChatScroll(i),nearBottom:e.chatUserNearBottom,onDraftChange:i=>e.chatMessage=i,attachments:e.chatAttachments,onAttachmentsChange:i=>e.chatAttachments=i,onSend:()=>e.handleSendChat(),canAbort:!!e.chatRunId,onAbort:()=>{e.handleAbortChat()},onQueueRemove:i=>e.removeQueuedMessage(i),onNewSession:()=>e.handleSendChat("/new",{restoreDraft:!0}),sidebarOpen:e.sidebarOpen,sidebarContent:e.sidebarContent,sidebarError:e.sidebarError,splitRatio:e.splitRatio,onOpenSidebar:i=>e.handleOpenSidebar(i),onCloseSidebar:()=>e.handleCloseSidebar(),onSplitRatioChange:i=>e.handleSplitRatioChange(i),assistantName:e.assistantName,assistantAvatar:e.assistantAvatar})}return e.advancedPage?yy({connected:e.connected,wsProps:Ut(e),activeTab:e.advancedTab,onTabChange:t=>{e.advancedTab=t,t==="cron"&&e.loadCron(),t==="skills"&&wt(e,{clearMessages:!0}),t==="logs"&&(e.logsSubTab==="session"?gt(e,{reset:!0}):qt(e,{reset:!0}))},cronProps:{loading:e.cronLoading,status:e.cronStatus,jobs:e.cronJobs,error:e.cronError,busy:e.cronBusy,form:e.cronForm,channels:e.channelsSnapshot?.channelMeta?.length?e.channelsSnapshot.channelMeta.map(t=>t.id):e.channelsSnapshot?.channelOrder??[],channelLabels:e.channelsSnapshot?.channelLabels??{},channelMeta:e.channelsSnapshot?.channelMeta??[],agentIds:J(e)?.agents?.map(n=>n.id)??[],runsJobId:e.cronRunsJobId,runs:e.cronRuns,newEventModalOpen:e.cronNewEventModal,onNewEventModalOpen:()=>{e.cronNewEventModal=!0},onNewEventModalClose:()=>{e.cronNewEventModal=!1},detailJobId:e.cronDetailJobId,onDetailOpen:t=>{e.cronDetailJobId=t.id,ci(e,t.id)},onDetailClose:()=>{e.cronDetailJobId=null},onFormChange:t=>e.cronForm={...e.cronForm,...t},onRefresh:()=>e.loadCron(),onAdd:()=>{cd(e).then(()=>{e.cronNewEventModal=!1})},onToggle:(t,n)=>ud(e,t,n),onRun:t=>dd(e,t),onRemove:t=>pd(e,t),onLoadRuns:t=>ci(e,t)},skillsProps:{loading:e.skillsLoading,report:e.skillsReport,error:e.skillsError,filter:e.skillsFilter,edits:e.skillEdits,messages:e.skillMessages,busyKey:e.skillsBusyKey,onFilterChange:t=>e.skillsFilter=t,onRefresh:()=>wt(e,{clearMessages:!0}),onToggle:(t,n)=>Jd(e,t,n),onEdit:(t,n)=>Zd(e,t,n),onSaveKey:t=>ep(e,t),onInstall:(t,n,s)=>tp(e,t,n,s)},logsProps:{logsSubTab:e.logsSubTab,onSubTabChange:t=>{e.logsSubTab=t,t==="session"?gt(e,{reset:!0}):qt(e,{reset:!0})},sessionLogsProps:{loading:e.sessionLogsLoading,error:e.sessionLogsError,entries:e.sessionLogsEntries,agents:e.sessionLogsAgents,filterText:e.sessionLogsFilterText,typeFilters:e.sessionLogsTypeFilters,agentFilters:e.sessionLogsAgentFilters,autoFollow:e.sessionLogsAutoFollow,full:e.sessionLogsFull,onFilterTextChange:t=>e.sessionLogsFilterText=t,onTypeToggle:(t,n)=>{const s=e;s.sessionLogsTypeFilters={...s.sessionLogsTypeFilters,[t]:n}},onAgentToggle:(t,n)=>{const s=e;s.sessionLogsAgentFilters={...s.sessionLogsAgentFilters,[t]:n}},onToggleAutoFollow:t=>e.sessionLogsAutoFollow=t,onToggleFull:t=>{e.sessionLogsFull=t,gt(e,{reset:!0})},onRefresh:()=>{gt(e,{reset:!0})},onExport:(t,n)=>e.exportSessionLogs(t,n),onScroll:t=>e.handleSessionLogsScroll(t)},loading:e.logsLoading,error:e.logsError,file:e.logsFile,entries:e.logsEntries,filterText:e.logsFilterText,levelFilters:e.logsLevelFilters,autoFollow:e.logsAutoFollow,truncated:e.logsTruncated,onFilterTextChange:t=>e.logsFilterText=t,onLevelToggle:(t,n)=>{e.logsLevelFilters={...e.logsLevelFilters,[t]:n}},onToggleAutoFollow:t=>e.logsAutoFollow=t,onRefresh:()=>qt(e,{reset:!0}),onExport:(t,n)=>e.exportSessionLogs(t,n),onScroll:t=>e.handleLogsScroll(t)}}):(window.location.replace("/chat"),d``)}const tv={trace:!0,debug:!0,info:!0,warn:!0,error:!0,fatal:!0},nv={name:"",description:"",agentId:"",enabled:!0,scheduleKind:"every",scheduleAt:"",everyAmount:"30",everyUnit:"minutes",cronExpr:"0 7 * * *",cronTz:"",sessionTarget:"main",wakeMode:"next-heartbeat",payloadKind:"systemEvent",payloadText:"",deliver:!1,channel:"last",to:"",timeoutSeconds:"",postToMainPrefix:""};async function sv(e){if(!(!e.client||!e.connected)&&!e.agentsLoading){e.agentsLoading=!0,e.agentsError=null;try{const t=await e.client.request("agents.list",{});t&&(e.agentsList=t)}catch(t){e.agentsError=String(t)}finally{e.agentsLoading=!1}}}async function rn(e){if(!(!e.client||!e.connected)&&!e.workspacesLoading){e.workspacesLoading=!0,e.workspacesError=null;try{const t=await e.client.request("workspaces.list",{});e.workspaces=t.workspaces}catch(t){e.workspacesError=String(t)}finally{e.workspacesLoading=!1}}}async function iv(e,t){if(!e.client||!e.connected||e.workspaceSaving)return;const n=t.name.trim();if(!n){e.workspacesError="Account name is required.";return}e.workspaceSaving=!0,e.workspacesError=null;try{const s=await e.client.request("config.get",{});e.configSnapshot=s;const i=s.hash;if(!i){e.workspacesError="Config hash missing; reload and retry.";return}const o={name:n,baseHash:i,whatsappAccountName:n};t.workspacePath?.trim()&&(o.workspaceDir=t.workspacePath.trim());const r=await e.client.request("workspaces.create",o);e.addingWorkspace=!1,e.newWorkspaceName="",e.newWorkspacePath="",await rn(e),t.onCreated?.(r)}catch(s){e.workspacesError=String(s)}finally{e.workspaceSaving=!1}}async function ov(e,t){if(!(!e.client||!e.connected)&&!e.workspaceSaving){e.workspaceSaving=!0,e.workspacesError=null;try{const n=await e.client.request("config.get",{});e.configSnapshot=n;const s=n.hash;if(!s){e.workspacesError="Config hash missing; reload and retry.";return}await e.client.request("workspaces.remove",{name:t,baseHash:s}),e.workspaceRemoveConfirm=null,await rn(e)}catch(n){e.workspacesError=String(n)}finally{e.workspaceSaving=!1}}}async function rv(e,t,n){if(!(!e.client||!e.connected)){e.workspacesError=null;try{const s=await e.client.request("config.get",{});e.configSnapshot=s;const i=s.hash;if(!i){e.workspacesError="Config hash missing; reload and retry.";return}await e.client.request("workspaces.rename",{name:t,displayName:n,baseHash:i}),await rn(e)}catch(s){e.workspacesError=String(s)}}}const Ln=Object.freeze(Object.defineProperty({__proto__:null,createWorkspace:iv,loadWorkspaces:rn,removeWorkspace:ov,renameWorkspace:rv},Symbol.toStringTag,{value:"Module"})),Tc={WEBCHAT_UI:"webchat-ui",CONTROL_UI:"taskmaster-control-ui",SETUP_UI:"setup-ui",WEBCHAT:"webchat",CLI:"cli",GATEWAY_CLIENT:"gateway-client",MACOS_APP:"taskmaster-macos",IOS_APP:"taskmaster-ios",ANDROID_APP:"taskmaster-android",NODE_HOST:"node-host",TEST:"test",FINGERPRINT:"fingerprint",PROBE:"taskmaster-probe"},ya=Tc,Li={WEBCHAT:"webchat",CLI:"cli",UI:"ui",BACKEND:"backend",NODE:"node",PROBE:"probe",TEST:"test"};new Set(Object.values(Tc));new Set(Object.values(Li));function av(e){const t=e.version??(e.nonce?"v2":"v1"),n=e.scopes.join(","),s=e.token??"",i=[t,e.deviceId,e.clientId,e.clientMode,e.role,n,String(e.signedAtMs),s];return t==="v2"&&i.push(e.nonce??""),i.join("|")}const lv=4008;class cv{constructor(t){this.opts=t,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}start(){this.closed=!1,this.connect()}stop(){this.closed=!0,this.ws?.close(),this.ws=null,this.flushPending(new Error("gateway client stopped"))}get connected(){return this.ws?.readyState===WebSocket.OPEN}connect(){this.closed||(this.ws=new WebSocket(this.opts.url),this.ws.onopen=()=>this.queueConnect(),this.ws.onmessage=t=>this.handleMessage(String(t.data??"")),this.ws.onclose=t=>{const n=String(t.reason??"");this.ws=null,this.flushPending(new Error(`gateway closed (${t.code}): ${n}`)),this.opts.onClose?.({code:t.code,reason:n}),this.scheduleReconnect()},this.ws.onerror=()=>{})}scheduleReconnect(){if(this.closed)return;const t=this.backoffMs;this.backoffMs=Math.min(this.backoffMs*1.7,15e3),window.setTimeout(()=>this.connect(),t)}flushPending(t){for(const[,n]of this.pending)n.reject(t);this.pending.clear()}async sendConnect(){if(this.connectSent)return;this.connectSent=!0,this.connectTimer!==null&&(window.clearTimeout(this.connectTimer),this.connectTimer=null);const t=typeof crypto<"u"&&!!crypto.subtle,n=["operator.admin","operator.approvals","operator.pairing"],s="operator";let i=null,o=!1,r=this.opts.token;if(t){i=await zd();const u=qd({deviceId:i.deviceId,role:s})?.token;r=u??this.opts.token,o=!!(u&&this.opts.token)}const l=r||this.opts.password?{token:r,password:this.opts.password}:void 0;let a;if(t&&i){const u=Date.now(),p=this.connectNonce??void 0,m=av({deviceId:i.deviceId,clientId:this.opts.clientName??ya.CONTROL_UI,clientMode:this.opts.mode??Li.WEBCHAT,role:s,scopes:n,signedAtMs:u,token:r??null,nonce:p}),v=await jd(i.privateKey,m);a={id:i.deviceId,publicKey:i.publicKey,signature:v,signedAt:u,nonce:p}}const c={minProtocol:3,maxProtocol:3,client:{id:this.opts.clientName??ya.CONTROL_UI,version:this.opts.clientVersion??"dev",platform:this.opts.platform??navigator.platform??"web",mode:this.opts.mode??Li.WEBCHAT,instanceId:this.opts.instanceId},role:s,scopes:n,device:a,caps:[],auth:l,userAgent:navigator.userAgent,locale:navigator.language};this.request("connect",c).then(u=>{u?.auth?.deviceToken&&i&&Gd({deviceId:i.deviceId,role:u.auth.role??s,token:u.auth.deviceToken,scopes:u.auth.scopes??[]}),this.backoffMs=800,this.opts.onHello?.(u)}).catch(()=>{o&&i&&Vd({deviceId:i.deviceId,role:s}),this.ws?.close(lv,"connect failed")})}handleMessage(t){let n;try{n=JSON.parse(t)}catch{return}const s=n;if(s.type==="event"){const i=n;if(i.event==="connect.challenge"){const r=i.payload,l=r&&typeof r.nonce=="string"?r.nonce:null;l&&(this.connectNonce=l,this.sendConnect());return}const o=typeof i.seq=="number"?i.seq:null;o!==null&&(this.lastSeq!==null&&o>this.lastSeq+1&&this.opts.onGap?.({expected:this.lastSeq+1,received:o}),this.lastSeq=o);try{this.opts.onEvent?.(i)}catch(r){console.error("[gateway] event handler error:",r)}return}if(s.type==="res"){const i=n,o=this.pending.get(i.id);if(!o)return;this.pending.delete(i.id),i.ok?o.resolve(i.payload):o.reject(new Error(i.error?.message??"request failed"));return}}request(t,n){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return Promise.reject(new Error("gateway not connected"));const s=Ui(),i={type:"req",id:s,method:t,params:n},o=new Promise((r,l)=>{this.pending.set(s,{resolve:a=>r(a),reject:l})});return this.ws.send(JSON.stringify(i)),o}queueConnect(){this.connectNonce=null,this.connectSent=!1,this.connectTimer!==null&&window.clearTimeout(this.connectTimer),this.connectTimer=window.setTimeout(()=>{this.sendConnect()},750)}}function Ri(e){return typeof e=="object"&&e!==null}function uv(e){if(!Ri(e))return null;const t=typeof e.id=="string"?e.id.trim():"",n=e.request;if(!t||!Ri(n))return null;const s=typeof n.command=="string"?n.command.trim():"";if(!s)return null;const i=typeof e.createdAtMs=="number"?e.createdAtMs:0,o=typeof e.expiresAtMs=="number"?e.expiresAtMs:0;return!i||!o?null:{id:t,request:{command:s,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:o}}function dv(e){if(!Ri(e))return null;const 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 Cc(e){const t=Date.now();return e.filter(n=>n.expiresAtMs>t)}function pv(e,t){const n=Cc(e).filter(s=>s.id!==t.id);return n.push(t),n}function va(e,t){return Cc(e).filter(n=>n.id!==t)}async function _c(e,t){if(!e.client||!e.connected)return;const n=e.sessionKey.trim(),s=n?{sessionKey:n}:{};try{const i=await e.client.request("agent.identity.get",s);if(!i)return;const o=ai(i);e.assistantName=o.name,e.assistantAvatar=o.avatar,e.assistantAgentId=o.agentId??null}catch{}}const es="taskmaster_update_pending";async function Mc(e){if(!(!e.client||!e.connected)&&!e.updateChecking){e.updateChecking=!0,e.updateMessage=null,e.requestUpdate?.();try{const t=await e.client.request("update.status",{});e.currentVersion=t.current,e.latestVersion=t.latest,e.updateAvailable=t.updateAvailable,e.updateMessage=t.updateAvailable?`v${t.latest} available`:"Up to date"}catch(t){e.updateMessage=`Check failed: ${String(t)}`,e.updateAvailable=null}finally{e.updateChecking=!1,e.requestUpdate?.()}}}async function hv(e){if(!(!e.client||e.updateRunning)){e.updateRunning=!0,e.updateMessage="Starting update...",e.updateProgressSteps=[],e.updateLastResult=null,e.requestUpdate?.();try{localStorage.setItem(es,String(Date.now()))}catch{}try{const t=await e.client.request("update.run",{restartDelayMs:2e3,note:"Update from setup page"});if(t.ok&&t.result.status==="ok")e.updateMessage="Updated — restarting gateway...",e.requestUpdate?.();else if(t.ok&&t.result.status==="skipped")Qt(),e.updateMessage=t.result.reason||"Update skipped",e.updateRunning=!1,e.requestUpdate?.();else throw Qt(),new Error(t.result.reason||"Update failed")}catch(t){Qt(),e.updateMessage=`Update failed: ${String(t)}`,e.updateRunning=!1,e.updateProgressSteps=[],e.requestUpdate?.()}}}function fv(e,t){const n=t.phase;if(n==="step-start"){const s=t.name,i=t.index,o=t.total;e.updateMessage=`Updating: ${s} (${i+1}/${o})`;const r=e.updateProgressSteps.find(l=>l.index===i);r?(r.status="running",r.name=s):e.updateProgressSteps=[...e.updateProgressSteps,{name:s,index:i,total:o,status:"running"}],e.requestUpdate?.()}else if(n==="step-done"){const s=t.name,i=t.index,o=t.total,r=t.ok,l=t.durationMs,a=e.updateProgressSteps.find(c=>c.index===i);a?(a.status=r?"done":"failed",a.durationMs=l):e.updateProgressSteps=[...e.updateProgressSteps,{name:s,index:i,total:o,status:r?"done":"failed",durationMs:l}],e.updateMessage=r?`Updating: ${s} done (${i+1}/${o})`:`Update step failed: ${s}`,e.requestUpdate?.()}else if(n==="complete"){if(t.status==="ok")e.updateMessage="Update complete — restarting gateway...";else{const i=t.reason;e.updateMessage=i?`Update failed: ${i}`:"Update failed",e.updateRunning=!1,Qt()}e.requestUpdate?.()}}async function gv(e){if(!e.client||!e.connected)return;const t=yv();Qt();try{const n=await e.client.request("update.lastResult",{});if(!n.ok||!n.result)return;const s=5*6e4,i=Date.now()-n.result.ts<s;if(!t&&!i)return;e.updateLastResult=n.result;const o=n.result.after?.version;if(n.result.status==="ok"&&o&&(e.currentVersion=o),e.updateAvailable=!1,n.result.status==="ok"){const r=n.result.before?.version,l=o??n.result.currentVersion;e.updateMessage=r?`Updated: v${r} → v${l}`:`Updated to v${l}`}else{const r=n.result.reason??n.result.failedStep?.name??"unknown error";e.updateMessage=`Update failed: ${r}`}}catch{}finally{e.updateRunning=!1,e.updateProgressSteps=[],e.requestUpdate?.()}}function mv(e){e.updateLastResult=null,e.requestUpdate?.()}function yv(){try{const e=localStorage.getItem(es);return e?Date.now()-Number(e)>30*6e4?(localStorage.removeItem(es),!1):!0:!1}catch{return!1}}function Qt(){try{localStorage.removeItem(es)}catch{}}function ii(e,t){const n=(e??"").trim(),s=t.mainSessionKey?.trim();if(!s)return n;if(!n)return s;const i=t.mainKey?.trim()||"main",o=t.defaultAgentId?.trim();return n==="main"||n===i||o&&(n===`agent:${o}:main`||n===`agent:${o}:${i}`)?s:n}function vv(e,t){if(!t?.mainSessionKey)return;const n=ii(e.sessionKey,t),s=ii(e.settings.sessionKey,t),i=ii(e.settings.lastActiveSessionKey,t),o=n||s||e.sessionKey,r={...e.settings,sessionKey:s||o,lastActiveSessionKey:i||o},l=r.sessionKey!==e.settings.sessionKey||r.lastActiveSessionKey!==e.settings.lastActiveSessionKey;o!==e.sessionKey&&(e.sessionKey=o),l&&Ie(e,r)}function Te(e){e.lastError=null,e.hello=null,e.connected=!1,e.execApprovalQueue=[],e.execApprovalError=null;const t=e.setup||e.filesPage||e.browserPage?"setup-ui":"taskmaster-control-ui";e.client?.stop(),e.client=new cv({url:e.settings.gatewayUrl,token:e.settings.token.trim()?e.settings.token:void 0,password:e.password.trim()?e.password:void 0,clientName:t,mode:"webchat",onHello:n=>{e.connected=!0,e.lastError=null,e.hello=n,kv(e,n),e.handleAccessCheck(),gv(e).then(()=>{Mc(e)}),_c(e),sv(e),(e.chatPage||e.setup)&&Sv(e),Xi(e,{quiet:!0}),Yi(e,{quiet:!0}),rn(e).then(()=>{e.initWorkspaceSelection()}),e.setup&&(we(e),Av(e)),oo(e)},onClose:({code:n,reason:s})=>{e.connected=!1,n!==1012&&(e.lastError=`disconnected (${n}): ${s||"no reason"}`)},onEvent:n=>bv(e,n),onGap:({expected:n,received:s})=>{e.lastError=`event gap detected (expected seq ${n}, got ${s}); refresh recommended`}}),e.client.start()}function bv(e,t){try{wv(e,t)}catch(n){console.error("[gateway] handleGatewayEvent error:",t.event,n)}}function wv(e,t){if(e.eventLogBuffer=[{ts:Date.now(),event:t.event,payload:t.payload},...e.eventLogBuffer].slice(0,250),e.tab==="debug"&&(e.eventLog=e.eventLogBuffer),t.event==="agent"){if(e.onboarding)return;Yu(e,t.payload);return}if(t.event==="chat"){const n=t.payload;n?.sessionKey&&pl(e,n.sessionKey);const s=Ba(e,n);(s==="final"||s==="error"||s==="aborted")&&(Ki(e),Ep(e)),s==="final"&&Ce(e);return}if(t.event==="presence"){const n=t.payload;n?.presence&&Array.isArray(n.presence)&&(e.presenceEntries=n.presence,e.presenceError=null,e.presenceStatus=null);return}if(t.event==="cron"&&e.tab==="cron"&&ro(e),(t.event==="device.pair.requested"||t.event==="device.pair.resolved")&&Yi(e,{quiet:!0}),t.event==="exec.approval.requested"){const n=uv(t.payload);if(n){e.execApprovalQueue=pv(e.execApprovalQueue,n),e.execApprovalError=null;const s=Math.max(0,n.expiresAtMs-Date.now()+500);window.setTimeout(()=>{e.execApprovalQueue=va(e.execApprovalQueue,n.id)},s)}return}if(t.event==="browser.screencast.frame"){_y(e,t.payload);return}if(t.event==="browser.handoff"){My(e,t.payload),e.browserPage||(window.location.href="/browser");return}if(t.event==="browser.handoff.resolved"){Py(e);return}if(t.event==="exec.approval.resolved"){const n=dv(t.payload);n&&(e.execApprovalQueue=va(e.execApprovalQueue,n.id));return}if(t.event==="update.progress"){fv(e,t.payload);return}}function kv(e,t){const n=t.snapshot;n?.presence&&Array.isArray(n.presence)&&(e.presenceEntries=n.presence),n?.health&&(e.debugHealth=n.health),n?.sessionDefaults&&vv(e,n.sessionDefaults)}async function Sv(e){if(!(!e.client||!e.connected))try{const t=await e.client.request("models.list",{});Array.isArray(t?.models)&&(e.chatModelCatalog=t.models)}catch{}}async function Av(e){if(!(!e.client||!e.connected))try{e.apiKeyProviders=await Pi(e.client)}catch{}}function xv(e){e.basePath=fp();const t=De();if(Lp(t.accentColor),window.scrollTo(0,0),e.setup){document.title=`${t.name} Setup`,Te(e);return}if(e.filesPage){document.title=`${t.name} Files`,Te(e);return}if(e.browserPage){document.title=`${t.name} Browser`,Te(e);return}if(e.adminsPage){document.title=`${t.name} Admins`,Te(e);return}if(e.customersPage){document.title=`${t.name} Customers`,Te(e);return}if(e.chatPage){document.title=`${t.name} Chat`,Te(e);return}if(e.advancedPage){document.title=`${t.name} Advanced`,Te(e);return}vp(e,!0),gp(e),mp(e),window.addEventListener("popstate",e.popStateHandler),dp(e),Te(e),cp(e),e.tab==="logs"&&(e.logsSubTab==="session"?to(e):Ji(e)),e.tab==="debug"&&so(e)}function $v(e){sd(e)}function Ev(e){window.removeEventListener("popstate",e.popStateHandler),up(e),eo(e),no(e),io(e),yp(e),e.topbarObserver?.disconnect(),e.topbarObserver=null}function Tv(e,t){if(e.filesPage&&e.connected&&t.has("connected")&&t.get("connected")===!1&&e.handleFilesLoad&&e.handleFilesLoad(),e.adminsPage&&e.connected&&t.has("connected")&&t.get("connected")===!1&&e.handleAdminsLoad&&e.handleAdminsLoad(),e.customersPage&&e.connected&&t.has("connected")&&t.get("connected")===!1&&e.handleCustomersLoad&&e.handleCustomersLoad(),e.chatPage&&e.connected&&t.has("connected")&&t.get("connected")===!1&&e.handleChatLoad&&e.handleChatLoad(),e.advancedPage&&e.connected&&t.has("connected")&&t.get("connected")===!1&&e.handleAdvancedLoad&&e.handleAdvancedLoad(),e.setup&&e.connected){const n=t.has("connected")&&t.get("connected")===!1;n&&e.handleLicenseStatusCheck&&e.licenseValid===null&&!e.licenseBusy&&e.handleLicenseStatusCheck(),n&&e.handleUpdateCheck&&e.handleUpdateCheck();const s=t.has("setupStep")&&e.setupStep==="auth";(n||s)&&e.setupStep==="auth"&&(e.authConnected===!0?e.setupStep="whatsapp":e.handleAuthStatusCheck&&e.authConnected===null&&!e.authBusy&&e.handleAuthStatusCheck()),e.setupStep==="whatsapp"&&t.has("setupStep")&&e.client&&!e.channelsLoading&&(e.channelsLoading=!0,e.client.request("channels.status",{probe:!0,timeoutMs:8e3}).then(o=>{e.channelsSnapshot=o,e.channelsLoading=!1}).catch(()=>{e.channelsLoading=!1})),t.has("whatsappLoginConnected")&&e.whatsappLoginConnected===!0&&e.client&&!e.channelsLoading&&(e.channelsLoading=!0,e.client.request("channels.status",{probe:!0,timeoutMs:8e3}).then(i=>{e.channelsSnapshot=i,e.channelsLoading=!1}).catch(()=>{e.channelsLoading=!1}))}if(e.tab==="chat"&&!e.advancedPage&&(t.has("chatMessages")||t.has("chatToolMessages")||t.has("chatStream")||t.has("chatLoading")||t.has("tab"))){const n=t.has("tab"),s=t.has("chatLoading")&&t.get("chatLoading")===!0&&e.chatLoading===!1;en(e,n||s||!e.chatHasAutoScrolled)}e.tab==="logs"&&!e.advancedPage&&(t.has("logsEntries")||t.has("logsAutoFollow")||t.has("tab"))&&e.logsAutoFollow&&e.logsAtBottom&&Fa(e,t.has("tab")||t.has("logsAutoFollow"))}function Cv(e){const t={name:e?.name??"",displayName:e?.displayName??"",about:e?.about??"",picture:e?.picture??"",banner:e?.banner??"",website:e?.website??"",nip05:e?.nip05??"",lud16:e?.lud16??""};return{values:t,original:{...t},saving:!1,importing:!1,error:null,success:null,fieldErrors:{},showAdvanced:!!(e?.banner||e?.website||e?.nip05||e?.lud16)}}async function _v(e,t,n){await zi(e,t,n),await z(e,!0)}async function Mv(e,t){await Ka(e,t),await z(e,!0)}async function Pv(e,t){await za(e,t),await z(e,!0)}async function Lv(e,t){await ja(e,t)}async function Rv(e,t){await Ha(e,t)}async function Iv(e){await rd(e),await we(e),await z(e,!0)}async function Nv(e){await we(e),await z(e,!0)}function Ov(e){if(!Array.isArray(e))return{};const t={};for(const n of e){if(typeof n!="string")continue;const[s,...i]=n.split(":");if(!s||i.length===0)continue;const o=s.trim(),r=i.join(":").trim();o&&r&&(t[o]=r)}return t}function Pc(e){return(e.channelsSnapshot?.channelAccounts?.nostr??[])[0]?.accountId??e.nostrProfileAccountId??"default"}function Lc(e,t=""){return`/api/channels/nostr/${encodeURIComponent(e)}/profile${t}`}function Dv(e,t,n){e.nostrProfileAccountId=t,e.nostrProfileFormState=Cv(n??void 0)}function Bv(e){e.nostrProfileFormState=null,e.nostrProfileAccountId=null}function Fv(e,t,n){const s=e.nostrProfileFormState;s&&(e.nostrProfileFormState={...s,values:{...s.values,[t]:n},fieldErrors:{...s.fieldErrors,[t]:""}})}function Uv(e){const t=e.nostrProfileFormState;t&&(e.nostrProfileFormState={...t,showAdvanced:!t.showAdvanced})}async function Wv(e){const t=e.nostrProfileFormState;if(!t||t.saving)return;const n=Pc(e);e.nostrProfileFormState={...t,saving:!0,error:null,success:null,fieldErrors:{}};try{const s=await fetch(Lc(n),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t.values)}),i=await s.json().catch(()=>null);if(!s.ok||i?.ok===!1||!i){const o=i?.error??`Profile update failed (${s.status})`;e.nostrProfileFormState={...t,saving:!1,error:o,success:null,fieldErrors:Ov(i?.details)};return}if(!i.persisted){e.nostrProfileFormState={...t,saving:!1,error:"Profile publish failed on all relays.",success:null};return}e.nostrProfileFormState={...t,saving:!1,error:null,success:"Profile published to relays.",fieldErrors:{},original:{...t.values}},await z(e,!0)}catch(s){e.nostrProfileFormState={...t,saving:!1,error:`Profile update failed: ${String(s)}`,success:null}}}async function Kv(e){const t=e.nostrProfileFormState;if(!t||t.importing)return;const n=Pc(e);e.nostrProfileFormState={...t,importing:!0,error:null,success:null};try{const s=await fetch(Lc(n,"/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({autoMerge:!0})}),i=await s.json().catch(()=>null);if(!s.ok||i?.ok===!1||!i){const a=i?.error??`Profile import failed (${s.status})`;e.nostrProfileFormState={...t,importing:!1,error:a,success:null};return}const o=i.merged??i.imported??null,r=o?{...t.values,...o}:t.values,l=!!(r.banner||r.website||r.nip05||r.lud16);e.nostrProfileFormState={...t,importing:!1,values:r,error:null,success:i.saved?"Profile imported from relays. Review and publish.":"Profile imported. Review and publish.",showAdvanced:l},i.saved&&await z(e,!0)}catch(s){e.nostrProfileFormState={...t,importing:!1,error:`Profile import failed: ${String(s)}`,success:null}}}async function zv(e){if(e.client){e.authBusy=!0,e.authMessage=null;try{const t=await e.client.request("auth.status",{});e.authConnected=t.connected,e.authExpiresIn=t.expiresIn??null,e.authMessage=t.message??null,t.connected&&(e.setupStep="whatsapp")}catch(t){e.authConnected=!1,e.authMessage=t instanceof Error?t.message:"Failed to check auth status"}finally{e.authBusy=!1}}}async function jv(e){if(e.client){e.authBusy=!0,e.authMessage=null,e.authUrl=null,e.authConnected=null;try{const t=await e.client.request("auth.oauth.start",{provider:"anthropic"});e.authUrl=t.authUrl,e.authMessage=t.message??"Sign in with your Claude Pro account"}catch(t){e.authConnected=!1,e.authMessage=t instanceof Error?t.message:"Failed to start auth flow"}finally{e.authBusy=!1}}}async function Hv(e,t){if(e.client){e.authBusy=!0,e.authMessage="Verifying code...";try{await e.client.request("auth.oauth.code",{code:t});const n=await e.client.request("auth.oauth.wait",{timeoutMs:3e4});n.connected?(e.authConnected=!0,e.authMessage=n.message??"Connected to Claude!",e.authUrl=null,e.authCodeInput="",setTimeout(()=>{e.setupStep="whatsapp"},1500)):e.authMessage=n.message??"Still waiting for authorization..."}catch(n){e.authConnected=!1,e.authMessage=n instanceof Error?n.message:"Verification failed"}finally{e.authBusy=!1}}}function qv(e,t){e.authCodeInput=t}function Gv(e){e.setupStep="whatsapp"}async function Vv(e){if(e.client){e.licenseBusy=!0,e.licenseMessage=null;try{const t=await e.client.request("license.status",{});e.licenseDeviceId=t.deviceId??null,e.licenseStoredKey=t.key??null,t.licensed?(e.licenseValid=!0,e.licenseTier=t.tier??null,e.setupStep="auth"):(e.licenseValid=null,e.setupStep="license")}catch(t){const n=t instanceof Error?t.message:String(t);n.includes("unknown method")?(e.licenseValid=!0,e.setupStep="auth"):(e.licenseValid=null,e.licenseMessage=n,e.setupStep="license")}finally{e.licenseBusy=!1}}}async function Qv(e){if(e.client&&e.licenseKey.trim()){e.licenseBusy=!0,e.licenseMessage=null,e.licenseValid=null;try{const t=await e.client.request("license.activate",{key:e.licenseKey.trim()});t.valid?(e.licenseValid=!0,e.licenseMessage=t.message??"License activated",e.licenseTier=t.tier??null,setTimeout(()=>{e.setupStep="auth"},1500)):(e.licenseValid=!1,e.licenseMessage=t.message??"Invalid license key")}catch(t){e.licenseValid=!1,e.licenseMessage=t instanceof Error?t.message:"Activation failed"}finally{e.licenseBusy=!1}}}async function Yv(e){if(e.client){e.licenseBusy=!0;try{await e.client.request("license.remove",{}),e.licenseValid=null,e.licenseKey="",e.licenseTier=null,e.licenseMessage=null,e.setupStep="license"}catch(t){e.licenseMessage=t instanceof Error?t.message:"Failed to remove license"}finally{e.licenseBusy=!1}}}function Xv(e,t){e.licenseKey=t}async function Zv(e){if(!(!e.client||!e.connected)&&!e.gatewayHealthLoading){e.gatewayHealthLoading=!0,e.requestUpdate?.();try{const t=await e.client.request("health",{probe:!0});e.gatewayHealthy=t.ok===!0,e.gatewayHealthMessage=t.ok?`Healthy${t.durationMs?` (${t.durationMs}ms)`:""}`:"Unhealthy"}catch(t){e.gatewayHealthy=!1,e.gatewayHealthMessage=`Error: ${String(t)}`}finally{e.gatewayHealthLoading=!1,e.requestUpdate?.()}}}async function Jv(e){if(!(!e.client||e.gatewayRestartBusy)){e.gatewayRestartBusy=!0,e.gatewayHealthMessage="Restarting...",e.requestUpdate?.();try{const t=await e.client.request("gateway.restart",{reason:"Manual restart from setup page",delayMs:1e3});if(t.ok&&t.restart?.ok)e.gatewayHealthMessage="Restarting...",setTimeout(()=>{window.location.reload()},3e3);else throw new Error("Restart not scheduled")}catch(t){e.gatewayHealthMessage=`Restart failed: ${String(t)}`,e.gatewayRestartBusy=!1,e.requestUpdate?.()}}}var eb=Object.defineProperty,tb=Object.getOwnPropertyDescriptor,f=(e,t,n,s)=>{for(var i=s>1?void 0:s?tb(t,n):t,o=e.length-1,r;o>=0;o--)(r=e[o])&&(i=(s?r(t,n,i):r(i))||i);return s&&i&&eb(t,n,i),i};const oi=vu();function nb(){if(!window.location.search)return!1;const t=new URLSearchParams(window.location.search).get("onboarding");if(!t)return!1;const n=t.trim().toLowerCase();return n==="1"||n==="true"||n==="yes"||n==="on"}function sb(){const e=window.location.pathname;if(e==="/setup"||e.endsWith("/setup"))return!0;if(!window.location.search)return!1;const n=new URLSearchParams(window.location.search).get("setup");if(!n)return!1;const s=n.trim().toLowerCase();return s==="1"||s==="true"||s==="yes"||s==="on"}function ib(){const e=window.location.pathname;return e==="/files"||e.endsWith("/files")}function ob(){const e=window.location.pathname;return e==="/browser"||e.endsWith("/browser")}function rb(){const e=window.location.pathname;return e==="/admins"||e.endsWith("/admins")}function ab(){const e=window.location.pathname;return e==="/customers"||e.endsWith("/customers")}function lb(){const e=window.location.pathname;return e==="/chat"||e.endsWith("/chat")}function cb(){const e=window.location.pathname;return e==="/advanced"||e.endsWith("/advanced")}let h=class extends mt{constructor(){super(...arguments),this.settings=Ms(),this.password="",this.tab="chat",this.onboarding=nb(),this.setup=sb(),this.filesPage=ib(),this.browserPage=ob(),this.adminsPage=rb(),this.customersPage=ab(),this.chatPage=lb(),this.advancedPage=cb(),this.advancedTab="cron",this.connected=!1,this.accessState=hc,this.theme=this.settings.theme??"system",this.themeResolved="dark",this.hello=null,this.lastError=null,this.eventLog=[],this.eventLogBuffer=[],this.toolStreamSyncTimer=null,this.sidebarCloseTimer=null,this.assistantName=oi.name,this.assistantAvatar=oi.avatar,this.assistantAgentId=oi.agentId??null,this.sessionKey=this.settings.sessionKey,this.chatLoading=!1,this.chatSending=!1,this.chatMessage="",this.chatMessages=[],this.chatToolMessages=[],this.chatStream=null,this.chatStreamStartedAt=null,this.chatRunId=null,this.compactionStatus=null,this.chatAvatarUrl=null,this.chatThinkingLevel=null,this.chatModelProvider=null,this.chatModel=null,this.chatModelCatalog=[],this.chatVerboseLevel=null,this.chatFillerEnabled=null,this.chatQueue=[],this.chatAttachments=[],this.sidebarOpen=!1,this.sidebarContent=null,this.sidebarError=null,this.splitRatio=this.settings.splitRatio,this.nodesLoading=!1,this.nodes=[],this.devicesLoading=!1,this.devicesError=null,this.devicesList=null,this.execApprovalsLoading=!1,this.execApprovalsSaving=!1,this.execApprovalsDirty=!1,this.execApprovalsSnapshot=null,this.execApprovalsForm=null,this.execApprovalsSelectedAgent=null,this.execApprovalsTarget="gateway",this.execApprovalsTargetNodeId=null,this.execApprovalQueue=[],this.execApprovalBusy=!1,this.execApprovalError=null,this.configLoading=!1,this.configRaw=`{
|
|
2859
|
+
`}const Eo="taskmaster-access-session",yc={checked:!1,hasPins:!1,hasMasterPin:!1,authenticated:!1,workspace:null,master:!1,accounts:[],error:null,busy:!1};function vc(){try{return localStorage.getItem(Eo)}catch{return null}}function bc(e){try{localStorage.setItem(Eo,e)}catch{}}function $y(){try{localStorage.removeItem(Eo)}catch{}}async function va(e){if(e.client)try{const t=vc(),n=await e.client.request("access.status",{token:t});e.accessState={...e.accessState,checked:!0,hasPins:n.hasPins,hasMasterPin:n.hasMasterPin,accounts:n.accounts??[],authenticated:n.authenticated,workspace:n.workspace,master:n.master,error:null}}catch{e.accessState={...e.accessState,checked:!0,hasPins:!1,hasMasterPin:!1,accounts:[],authenticated:!0,error:null}}}async function Ey(e,t,n){if(e.client){e.accessState={...e.accessState,busy:!0,error:null};try{const s=await e.client.request("access.verify",{account:t,pin:n});s.ok&&s.token?(bc(s.token),e.accessState={...e.accessState,authenticated:!0,workspace:s.workspace??null,master:s.master??!1,busy:!1,error:null}):e.accessState={...e.accessState,busy:!1,error:s.message??"Incorrect PIN"}}catch{e.accessState={...e.accessState,busy:!1,error:"Failed to verify PIN"}}}}async function Ty(e,t){if(e.client){e.accessState={...e.accessState,busy:!0,error:null};try{const n=await e.client.request("access.setMasterPin",{pin:t});n.ok&&n.token?(bc(n.token),e.accessState={...e.accessState,checked:!0,hasPins:!0,hasMasterPin:!0,authenticated:!0,workspace:null,master:!0,busy:!1,error:null}):e.accessState={...e.accessState,busy:!1,error:"Failed to set PIN"}}catch{e.accessState={...e.accessState,busy:!1,error:"Failed to set PIN"}}}}async function Cy(e,t,n){if(!e.client)return!1;try{return(await e.client.request("access.setAccountPin",{workspace:t,pin:n})).ok}catch{return!1}}async function _y(e){const t=vc();if(e.client&&t)try{await e.client.request("access.logout",{token:t})}catch{}$y(),e.accessState={...yc,checked:!0,hasPins:!0,hasMasterPin:e.accessState.hasMasterPin,accounts:e.accessState.accounts}}async function Li(e){return(await e.request("apikeys.list")).providers??[]}async function ba(e,t,n){await e.request("apikeys.set",{provider:t,apiKey:n})}async function My(e,t){await e.request("apikeys.remove",{provider:t})}class Ly{constructor(){this.canvas=null,this.ctx=null,this.img=new Image,this.pendingFrame=null,this.rafId=null,this.deviceWidth=1280,this.deviceHeight=720,this.lastMouseMoveAt=0,this.MOUSE_THROTTLE_MS=30}attach(t){this.canvas=t,this.ctx=t.getContext("2d")}detach(){this.rafId!=null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.canvas=null,this.ctx=null,this.pendingFrame=null}updateFrame(t,n){n?.deviceWidth&&(this.deviceWidth=n.deviceWidth),n?.deviceHeight&&(this.deviceHeight=n.deviceHeight),this.pendingFrame=t,this.rafId==null&&(this.rafId=requestAnimationFrame(()=>this.renderFrame()))}renderFrame(){this.rafId=null;const t=this.pendingFrame;!t||!this.canvas||!this.ctx||(this.pendingFrame=null,this.img.onload=()=>{!this.canvas||!this.ctx||((this.canvas.width!==this.img.width||this.canvas.height!==this.img.height)&&(this.canvas.width=this.img.width,this.canvas.height=this.img.height),this.ctx.drawImage(this.img,0,0))},this.img.src=`data:image/jpeg;base64,${t}`)}translateCoordinates(t,n){if(!this.canvas)return{x:t,y:n};const s=this.canvas.getBoundingClientRect(),i=this.canvas.width/s.width,o=this.canvas.height/s.height,r=this.deviceWidth/this.canvas.width,l=this.deviceHeight/this.canvas.height;return{x:Math.round(t*i*r),y:Math.round(n*o*l)}}shouldThrottleMouseMove(){const t=performance.now();return t-this.lastMouseMoveAt<this.MOUSE_THROTTLE_MS?!0:(this.lastMouseMoveAt=t,!1)}getDeviceDimensions(){return{width:this.deviceWidth,height:this.deviceHeight}}}let ti=null;function Bn(){return ti||(ti=new Ly),ti}function To(e){return e instanceof Error?e.message:String(e)}async function Py(e){if(!(!e.client||!e.connected)){e.browserLoading=!0,e.browserError=null;try{(await e.client.request("browser.screencast.start",{quality:60,maxWidth:1280,maxHeight:720}))?.ok&&(e.browserScreencastActive=!0)}catch(t){e.browserError=To(t)}finally{e.browserLoading=!1}}}async function Ry(e){if(!(!e.client||!e.connected)){e.browserLoading=!0;try{await e.client.request("browser.screencast.stop",{}),e.browserScreencastActive=!1,e.browserScreencastFrame=null,e.browserScreencastMetadata=null}catch(t){e.browserError=To(t)}finally{e.browserLoading=!1}}}async function ni(e,t,n,s,i){if(!(!e.client||!e.connected||!e.browserInputMode))try{await e.client.request("browser.screencast.input",{type:"mouse",action:t,x:n,y:s,button:i??"left",clickCount:t==="mousePressed"?1:0})}catch{}}async function si(e,t,n,s){if(!(!e.client||!e.connected||!e.browserInputMode))try{await e.client.request("browser.screencast.input",{type:"key",action:t,key:n,...s?.text?{text:s.text}:{},...s?.code?{code:s.code}:{},...s?.modifiers?{modifiers:s.modifiers}:{}})}catch{}}async function Iy(e){if(!(!e.client||!e.connected))try{await e.client.request("browser.handoff.complete",{}),e.browserHandoffPending=!1,e.browserHandoffReason=null,e.browserHandoffId=null}catch(t){e.browserError=To(t)}}function Ny(e){e.browserInputMode=!e.browserInputMode}function Dy(e,t){if(!t?.data)return;e.browserScreencastFrame=t.data,e.browserScreencastMetadata=t.metadata??null,Bn().updateFrame(t.data,t.metadata)}function Oy(e,t){t&&(e.browserHandoffPending=!0,e.browserHandoffReason=t.reason??"Action required",e.browserHandoffId=t.id??null)}function By(e){e.browserHandoffPending=!1,e.browserHandoffReason=null,e.browserHandoffId=null}function Fe(e){return e instanceof Error?e.message:String(e)}let Ln=null;function sn(e,t){Ln&&clearTimeout(Ln),e.filesMessage={kind:"success",text:t},Ln=setTimeout(()=>{e.filesMessage=null,Ln=null},3e3)}async function on(e,t){if(!(!e.client||!e.connected)){if(!t){e.filesTree=[],e.filesRoot="";return}if(!e.filesLoading){e.filesLoading=!0,e.filesError=null;try{const n={};t&&(n.agentId=t);const s=await e.client.request("files.tree",n);s?.tree&&(e.filesTree=s.tree,e.filesRoot=s.root??"")}catch(n){e.filesError=Fe(n)}finally{e.filesLoading=!1}}}}async function Fy(e,t,n){e.filesSelectedPaths=new Set([t]),await wc(e,t,n)}async function Uy(e,t,n){const s=new Set(e.filesSelectedPaths);if(s.has(t)?s.delete(t):s.add(t),e.filesSelectedPaths=s,s.size===1){const i=[...s][0];await wc(e,i,n)}else e.filesSelectedPath=null,e.filesPreviewContent=null,e.filesPreviewSize=null,e.filesPreviewBinary=!1}async function Wy(e,t){if(!e.client||!e.connected)return;const n=[...e.filesSelectedPaths];if(n.length===0)return;let s=0,i="";for(const o of n)try{await kc(e,o,t),s++}catch(r){i=Fe(r)}i?e.filesMessage={kind:"error",text:`${s} downloaded, error: ${i}`}:sn(e,`${s} file${s!==1?"s":""} downloaded`)}async function Ky(e,t,n,s){const i=t.split("/").pop()??t,o=n==="."?i:`${n}/${i}`;o!==t&&await Sc(e,t,o,s)}async function wc(e,t,n){if(!(!e.client||!e.connected)){e.filesSelectedPath=t,e.filesPreviewLoading=!0,e.filesPreviewContent=null,e.filesPreviewBinary=!1,e.filesPreviewSize=null;try{const s={path:t};n&&(s.agentId=n);const i=await e.client.request("files.read",s);e.filesPreviewContent=i?.content??null,e.filesPreviewBinary=i?.binary??!1,e.filesPreviewSize=i?.size??null}catch(s){e.filesError=Fe(s)}finally{e.filesPreviewLoading=!1}}}async function kc(e,t,n){if(!(!e.client||!e.connected))try{const s={path:t};n&&(s.agentId=n);const i=await e.client.request("files.download",s);if(!i?.base64){e.filesMessage={kind:"error",text:"Download failed: no data"};return}const o=Uint8Array.from(atob(i.base64),c=>c.charCodeAt(0)),r=new Blob([o]),l=URL.createObjectURL(r),a=document.createElement("a");a.href=l,a.download=i.name??t.split("/").pop()??"download",document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(l)}catch(s){e.filesMessage={kind:"error",text:Fe(s)}}}async function zy(e,t,n,s){if(!e.client||!e.connected)return;e.filesUploadBusy=!0,e.filesMessage=null;let i=0,o="";for(const r of n)try{const l=await r.arrayBuffer(),a=btoa(new Uint8Array(l).reduce((u,p)=>u+String.fromCharCode(p),"")),c={path:t,name:r.name,data:a};s&&(c.agentId=s),await e.client.request("files.upload",c),i++}catch(l){o=Fe(l)}e.filesUploadBusy=!1,o?e.filesMessage={kind:"error",text:i>0?`${i} uploaded, error: ${o}`:o}:sn(e,`${i} file${i!==1?"s":""} uploaded`),await on(e,s)}async function jy(e,t,n){if(!(!e.client||!e.connected)){e.filesMessage=null;try{const s={path:t};n&&(s.agentId=n),await e.client.request("files.delete",s),sn(e,"File deleted"),e.filesSelectedPath===t&&(e.filesSelectedPath=null,e.filesPreviewContent=null),await on(e,n)}catch(s){e.filesMessage={kind:"error",text:Fe(s)}}}}async function Sc(e,t,n,s){if(!(!e.client||!e.connected)){e.filesMessage=null;try{const i={from:t,to:n};s&&(i.agentId=s),await e.client.request("files.move",i),sn(e,"File moved"),e.filesSelectedPath===t&&(e.filesSelectedPath=n),await on(e,s)}catch(i){e.filesMessage={kind:"error",text:Fe(i)}}}}async function xc(e,t){if(!(!e.client||!e.connected))try{const n={};t&&(n.agentId=t);const s=await e.client.request("memory.status",n);s?.ok&&(e.filesMemoryStatus={dirty:s.dirty??!1,files:s.files??0,chunks:s.chunks??0})}catch{}}async function Hy(e,t){if(!(!e.client||!e.connected)&&!e.filesReindexBusy){e.filesReindexBusy=!0,e.filesMessage=null;try{const n={force:!0};t&&(n.agentId=t);const s=await e.client.request("memory.reindex",n),i=s?.files??0,o=s?.chunks??0;sn(e,`Re-indexed: ${i} files, ${o} chunks`),await xc(e,t)}catch(n){e.filesMessage={kind:"error",text:Fe(n)}}finally{e.filesReindexBusy=!1}}}function qy(e,t){const n=new Set(e.filesExpandedDirs);n.has(t)?n.delete(t):n.add(t),e.filesExpandedDirs=n}function Gy(e,t="admin"){if(!e)return[];const n=e.bindings;if(!Array.isArray(n))return[];const s=[];for(const i of n){if(!i||typeof i!="object"||i.agentId!==t)continue;const o=i.match;if(!o||typeof o!="object"||(o.channel??"").toLowerCase()!=="whatsapp")continue;const l=o.peer;if(!l||typeof l!="object"||l.kind!=="dm")continue;const a=l.id??"";a&&s.push({phone:a,paired:i.meta?.paired===!0})}return s.sort((i,o)=>i.paired&&!o.paired?-1:!i.paired&&o.paired?1:0),s}function Ac(e,t,n="admin",s){const i=new Map,o=new Map;for(const a of e){if(!a||typeof a!="object"||a.agentId!==n)continue;const c=a.match;if(!c||typeof c!="object"||(c.channel??"").toLowerCase()!=="whatsapp")continue;const p=c.peer;if(!p||typeof p!="object"||p.kind!=="dm")continue;const m=p.id??"";m&&(a.meta&&i.set(m,a.meta),c.accountId&&o.set(m,c.accountId))}const r=e.filter(a=>{if(!a||typeof a!="object"||a.agentId!==n)return!0;const c=a.match;if(!c||typeof c!="object"||(c.channel??"").toLowerCase()!=="whatsapp")return!0;const p=c.peer;return!p||typeof p!="object"?!0:p.kind!=="dm"}),l=t.map(a=>{const c=s??o.get(a.phone),u={channel:"whatsapp",peer:{kind:"dm",id:a.phone}};c&&(u.accountId=c);const p={agentId:n,match:u},m=i.get(a.phone);return m?p.meta=m:a.paired&&(p.meta={paired:!0}),p});return[...r,...l]}async function fs(e,t){if(!e.client||!e.connected)return;if(!t){e.adminPhones=[];return}if(e.adminsLoading)return;e.adminsLoading=!0,e.adminsError=null;const n=t;try{const s=await e.client.request("config.get",{});e.configSnapshot=s;const i=s.config;e.configForm=De(i??{}),e.adminPhones=Gy(i,n),e.configFormDirty=!1}catch(s){e.adminsError=String(s)}finally{e.adminsLoading=!1}}async function $c(e,t,n,s){if(!e.client||!e.connected)return;if(!n){e.adminsError="No business selected.";return}if(e.adminsSaving)return;const i=n;let o=t.trim();if(!o){e.adminsError="Phone number is required";return}if(o.startsWith("+")||(o="+"+o),!/^\+[1-9]\d{6,14}$/.test(o)){e.adminsError="Invalid phone number format. Use E.164 format (e.g., +14155552671)";return}if(e.adminPhones.some(r=>r.phone===o)){e.adminsError="Phone number already exists";return}e.adminsSaving=!0,e.adminsError=null;try{const r=De(e.configForm??e.configSnapshot?.config??{}),l=r.bindings??[],a=[...e.adminPhones,{phone:o}],c=Ac(l,a,i,s);za(r,["bindings"],c);const u=e.configSnapshot?.hash;if(!u){e.adminsError="Config hash missing; reload and retry.";return}const p=Ye(r);await e.client.request("config.set",{raw:p,baseHash:u}),await fs(e,n)}catch(r){e.adminsError=String(r)}finally{e.adminsSaving=!1}}async function Ec(e,t,n,s){if(!e.client||!e.connected)return;if(!n){e.adminsError="No business selected.";return}if(e.adminsSaving)return;const i=n;if(e.adminPhones.find(r=>r.phone===t)?.paired){e.adminsError="Cannot remove the paired phone. Unlink WhatsApp first.";return}e.adminsSaving=!0,e.adminsError=null;try{const r=De(e.configForm??e.configSnapshot?.config??{}),l=r.bindings??[],a=e.adminPhones.filter(m=>m.phone!==t),c=Ac(l,a,i,s);za(r,["bindings"],c);const u=e.configSnapshot?.hash;if(!u){e.adminsError="Config hash missing; reload and retry.";return}const p=Ye(r);await e.client.request("config.set",{raw:p,baseHash:u}),await fs(e,n)}catch(r){e.adminsError=String(r)}finally{e.adminsSaving=!1}}const Vy=Object.freeze(Object.defineProperty({__proto__:null,addAdmin:$c,loadAdmins:fs,removeAdmin:Ec},Symbol.toStringTag,{value:"Module"}));async function et(e,t){if(!(!e.client||!e.connected)){if(!t){e.customersRecords=[];return}if(!e.customersLoading){e.customersLoading=!0,e.customersError=null;try{const n=e.customersSearchQuery.trim(),s=n?await e.client.request("records.search",{query:n,workspace:t}):await e.client.request("records.list",{workspace:t});e.customersRecords=s.records??[]}catch(n){e.customersError=String(n)}finally{e.customersLoading=!1}}}}async function Tc(e,t,n,s){if(!e.client||!e.connected||e.customersSaving)return;let i=t.trim();const o=n.trim();if(!i){e.customersError="Phone number is required";return}if(!o){e.customersError="Name is required";return}if(i.startsWith("+")||(i="+"+i),!/^\+[1-9]\d{6,14}$/.test(i)){e.customersError="Invalid phone number format. Use E.164 (e.g. +447490553305)";return}e.customersSaving=!0,e.customersError=null;try{await e.client.request("records.set",{id:i,name:o,fields:{},workspace:s}),e.customersShowAddForm=!1,e.customersNewPhone="",e.customersNewName="",await et(e,s)}catch(r){e.customersError=String(r)}finally{e.customersSaving=!1}}async function Cc(e,t,n){if(!(!e.client||!e.connected)&&!e.customersSaving){e.customersSaving=!0,e.customersError=null;try{await e.client.request("records.delete",{id:t}),e.customersEditingId===t&&(e.customersEditingId=null),await et(e,n)}catch(s){e.customersError=String(s)}finally{e.customersSaving=!1}}}async function _c(e,t,n,s,i){if(!(!e.client||!e.connected)&&!e.customersSaving){e.customersSaving=!0,e.customersError=null;try{await e.client.request("records.setField",{id:t,key:n,value:s}),await et(e,i)}catch(o){e.customersError=String(o)}finally{e.customersSaving=!1}}}async function Mc(e,t,n,s){if(!(!e.client||!e.connected)&&!e.customersSaving){e.customersSaving=!0,e.customersError=null;try{await e.client.request("records.deleteField",{id:t,key:n}),await et(e,s)}catch(i){e.customersError=String(i)}finally{e.customersSaving=!1}}}const Yy=Object.freeze(Object.defineProperty({__proto__:null,addCustomer:Tc,deleteCustomer:Cc,deleteCustomerField:Mc,loadCustomers:et,setCustomerField:_c},Symbol.toStringTag,{value:"Module"}));function Ut(e){if(e.workspaces.length!==0)return{workspaces:e.workspaces,selectedWorkspace:e.selectedWorkspace,onWorkspaceSelect:t=>e.handleWorkspaceSelect(t),hasPins:e.accessState.hasPins,isMaster:e.accessState.master,onLogout:()=>e.handleLogout()}}function Qy(e){if(e.workspaces.length!==0)return{workspaces:e.workspaces,selectedWorkspace:e.selectedWorkspace,onWorkspaceSelect:t=>e.handleWorkspaceSelect(t),onAddAccount:()=>{e.addingWorkspace=!0},hasPins:e.accessState.hasPins,isMaster:e.accessState.master,onLogout:()=>e.handleLogout()}}function Xy(e){const t=J(e);return t?t.agents.find(s=>s.id.endsWith("-admin")||s.id==="admin")?.id:void 0}function Zy(e){return J(e)?.whatsappAccountId??void 0}function Jy(e){const t=J(e);if(t)return t.agents[0]?.id}function ev(e){return e.selectedWorkspace??void 0}function J(e){return e.selectedWorkspace?e.workspaces.find(t=>t.name===e.selectedWorkspace)??null:null}const tv=/^data:/i,nv=/^https?:\/\//i;function sv(e){const t=e.agentsList?.agents??[],s=La(e.sessionKey)?.agentId??e.agentsList?.defaultId??"main",o=t.find(l=>l.id===s)?.identity,r=o?.avatarUrl??o?.avatar;if(r)return tv.test(r)||nv.test(r)?r:o?.avatarUrl}function iv(e){if(!e)return null;const t=e.channelAccounts?.whatsapp;if(!t||t.length===0)return null;const n=t[0];return{running:n.running??!1,connected:n.connected??!1,linked:n.linked??!1,lastError:n.lastError}}function ov(e){if(!e)return{configured:!1,running:!1,connected:!1,lastError:null,selfChatMode:!1,dmPolicy:null,cliPath:null};const t=e.channelAccounts?.imessage;if(!t||t.length===0)return{configured:!1,running:!1,connected:!1,lastError:null,selfChatMode:!1,dmPolicy:null,cliPath:null};const n=t[0],s=n.running??!1,i=n.probe,o=i!=null?i.ok===!0:s;return{configured:n.configured??!1,running:s,connected:o,lastError:n.lastError??null,selfChatMode:n.mode==="self-chat"||!!n.selfChatMode,dmPolicy:n.dmPolicy??null,cliPath:n.cliPath??null}}function rv(e){const t=e.configSnapshot?.config;if(!t)return null;const n=t.bindings;if(!Array.isArray(n))return null;const s=n.find(r=>r.match?.channel==="imessage"&&r.meta?.imessageOwner);if(!s)return null;const i=s.agentId;for(const r of e.workspaces)if(r.agents.some(l=>l.id===i))return r.name;if(i==="admin"||i==="public")return e.workspaces.find(l=>l.isDefault)?.name??null;const o=i.replace(/-(admin|public)$/,"");return o!==i?e.workspaces.find(l=>l.name===o)?.name??null:null}function av(e){if(e.connected&&e.accessState.checked){const{accessState:t}=e;if(t.hasPins&&!t.authenticated)return ya({show:!0,isFirstTime:!1,accounts:t.accounts,error:t.error,busy:t.busy,onSubmit:(n,s)=>{s!=null&&e.handlePinSubmit(n,s)},changePinMode:e.loginChangePinMode,onToggleChangePinMode:()=>e.toggleChangePinMode(),changePinBusy:e.changePinBusy,changePinError:e.changePinError,changePinSuccess:e.changePinSuccess,onChangePin:(n,s,i)=>e.handleChangePin(n,s,i)});if(!t.hasMasterPin&&!t.authenticated&&e.setup)return ya({show:!0,isFirstTime:!0,accounts:[],error:t.error,busy:t.busy,onSubmit:n=>e.handleSetMasterPin(n)});if(!t.hasMasterPin&&!t.authenticated&&!e.setup)return window.location.href="/setup",b}if(e.setup){const t=iv(e.channelsSnapshot),n=e.channelsSnapshot?.channelAccounts?.whatsapp??[],s=ov(e.channelsSnapshot),i=rv(e);return ah({connected:e.connected,assistantName:e.assistantName,currentStep:e.setupStep,licenseKey:e.licenseKey,licenseBusy:e.licenseBusy,licenseValid:e.licenseValid,licenseMessage:e.licenseMessage,licenseTier:e.licenseTier,licenseDeviceId:e.licenseDeviceId,licenseStoredKey:e.licenseStoredKey,onLicenseKeyChange:o=>e.handleLicenseKeyChange(o),onLicenseActivate:()=>e.handleLicenseActivate(),onLicenseRemove:async()=>{await e.handleLicenseRemove(),e.licenseRemoveConfirm=!1},licenseRemoveConfirm:e.licenseRemoveConfirm,onLicenseRemoveConfirm:()=>{e.licenseRemoveConfirm=!0},onLicenseRemoveCancel:()=>{e.licenseRemoveConfirm=!1},authConnected:e.authConnected,authBusy:e.authBusy,authMessage:e.authMessage,authUrl:e.authUrl,authCodeInput:e.authCodeInput,authExpiresIn:e.authExpiresIn,whatsappBusy:e.whatsappBusy,whatsappLoginMessage:e.whatsappLoginMessage,whatsappLoginQrDataUrl:e.whatsappLoginQrDataUrl,whatsappLoginConnected:e.whatsappLoginConnected,whatsappChannelStatus:t,whatsappAccounts:n,whatsappActiveQrAccountId:e.whatsappActiveQrAccountId,whatsappAccountSaving:e.whatsappAccountSaving,gatewayHealthy:e.gatewayHealthy,gatewayHealthLoading:e.gatewayHealthLoading,gatewayHealthMessage:e.gatewayHealthMessage,gatewayRestartBusy:e.gatewayRestartBusy,updateAvailable:e.updateAvailable,currentVersion:e.currentVersion,latestVersion:e.latestVersion,updateChecking:e.updateChecking,updateRunning:e.updateRunning,updateMessage:e.updateMessage,updateProgressSteps:e.updateProgressSteps,updateLastResult:e.updateLastResult,onUpdateCheck:()=>e.handleUpdateCheck(),onUpdateRun:()=>e.handleUpdateRun(),onUpdateDismissResult:()=>e.handleUpdateDismissResult(),uninstallConfirm:e.uninstallConfirm,uninstallBusy:e.uninstallBusy,uninstallDone:e.uninstallDone,uninstallError:e.uninstallError,uninstallConfirmText:e.uninstallConfirmText,onUninstallConfirm:()=>e.handleUninstallConfirm(),onUninstallCancel:()=>e.handleUninstallCancel(),onUninstallConfirmTextChange:o=>e.handleUninstallConfirmTextChange(o),onUninstallRun:()=>e.handleUninstallRun(),onUninstallDismiss:()=>e.handleUninstallDismiss(),onStartAuth:()=>e.handleAuthStart(),onSubmitAuthCode:o=>e.handleAuthSubmitCode(o),onAuthCodeChange:o=>e.handleAuthCodeChange(o),onSkipToWhatsApp:()=>e.handleSkipToWhatsApp(),onWhatsAppRelink:async o=>{await e.handleWhatsAppStart(!0,o),e.whatsappLoginQrDataUrl&&(await e.handleWhatsAppWait(o),await z(e,!0),e.requestUpdate())},onWhatsAppReset:async o=>{await e.handleWhatsAppLogout(o),await e.handleWhatsAppStart(!0,o),e.whatsappLoginQrDataUrl&&(await e.handleWhatsAppWait(o),await z(e,!0),e.requestUpdate())},onRefreshStatus:async()=>{await z(e,!0),await e.handleGatewayHealthCheck()},onWhatsAppBack:()=>{e.whatsappLoginQrDataUrl=null,e.whatsappLoginMessage=null,e.whatsappLoginConnected=null,e.whatsappActiveQrAccountId=null,e.requestUpdate(),z(e,!0)},onRestartGateway:()=>e.handleGatewayRestart(),onRemoveWhatsAppAccount:o=>e.handleRemoveWhatsAppAccount(o),workspaces:e.workspaces,workspacesLoading:e.workspacesLoading,workspacesError:e.workspacesError,addingWorkspace:e.addingWorkspace,newWorkspaceName:e.newWorkspaceName,newWorkspacePath:e.newWorkspacePath,workspaceSaving:e.workspaceSaving,workspaceRemoveConfirm:e.workspaceRemoveConfirm,newWorkspacePin:e.newWorkspacePin,onSetNewWorkspacePin:o=>{e.newWorkspacePin=o},onWorkspaceCreate:async(o,r)=>{const l=e.newWorkspacePin;await e.handleWorkspaceCreate(o,r),l.match(/^\d{4,6}$/)&&(await Cy(e,o,l),e.newWorkspacePin="")},onWorkspaceRemove:o=>e.handleWorkspaceRemove(o),onSetAddingWorkspace:o=>{e.addingWorkspace=o},onSetNewWorkspaceName:o=>{e.newWorkspaceName=o},onSetNewWorkspacePath:o=>{e.newWorkspacePath=o},onSetWorkspaceRemoveConfirm:o=>{e.workspaceRemoveConfirm=o},renamingWorkspace:e.renamingWorkspace,renameWorkspaceName:e.renameWorkspaceName,onWorkspaceRenameStart:()=>e.handleWorkspaceRenameStart(),onWorkspaceRenameCancel:()=>e.handleWorkspaceRenameCancel(),onWorkspaceRename:(o,r)=>e.handleWorkspaceRename(o,r),whatsappDmPolicy:(()=>{const r=J(e)?.whatsappAccountId;return(r?n.find(a=>a.accountId===r):n[0])?.dmPolicy??null})(),onWhatsAppDmToggle:async()=>{const r=J(e)?.whatsappAccountId,l=r?n.find(p=>p.accountId===r):n[0];if(!l)return;const c=l.dmPolicy!=null&&l.dmPolicy!=="disabled"?"disabled":"open",u=c==="open"?{dmPolicy:c,allowFrom:["*"]}:{dmPolicy:c};try{const p=await e.client.request("config.get"),A=(p.config?.channels?.whatsapp?.accounts??{})[l.accountId]?{channels:{whatsapp:{accounts:{[l.accountId]:u}}}}:{channels:{whatsapp:u}};await e.client.request("config.patch",{raw:JSON.stringify(A),baseHash:p.hash,note:`WhatsApp DM policy → ${c}`,skipRestart:!0}),await z(e,!1)}catch(p){console.error("DM toggle failed:",p)}},whatsappModel:(()=>{const o=J(e);if(!o)return null;const r=o.agents.find(p=>p.id.endsWith("-public")||p.id==="public");if(!r)return null;const a=e.configSnapshot?.config?.agents?.list;if(!Array.isArray(a))return null;const c=a.find(p=>p.id===r.id);return c?.model&&(typeof c.model=="string"?c.model:c.model.primary)?.trim()||null})(),whatsappModelCatalog:e.chatModelCatalog??[],onWhatsAppModelChange:async o=>{const r=J(e);if(!r)return;const l=r.agents.find(a=>a.id.endsWith("-public")||a.id==="public");if(l)try{const a=await e.client.request("config.get"),u=a.config?.agents??{},p=Array.isArray(u.list)?[...u.list]:[],m=p.findIndex(w=>w.id===l.id);if(o)m>=0?p[m]={...p[m],model:o}:p.push({id:l.id,model:o});else if(m>=0){const{model:w,...A}=p[m];Object.keys(A).length<=1?p.splice(m,1):p[m]=A}const v=p.length>0?{agents:{list:p}}:{agents:{list:null}};await e.client.request("config.patch",{raw:JSON.stringify(v),baseHash:a.hash,note:`Public agent model → ${o||"default"}`,skipRestart:!0}),e.configSnapshot=await e.client.request("config.get")}catch(a){console.error("Model change failed:",a)}},whatsappThinkingLevel:(()=>{const o=J(e);if(!o)return null;const r=o.agents.find(u=>u.id.endsWith("-public")||u.id==="public");if(!r)return null;const a=e.configSnapshot?.config?.agents?.list;return Array.isArray(a)&&a.find(u=>u.id===r.id)?.thinkingLevel?.trim()||null})(),onWhatsAppThinkingChange:async o=>{const r=J(e);if(!r)return;const l=r.agents.find(a=>a.id.endsWith("-public")||a.id==="public");if(l)try{const a=await e.client.request("config.get"),u=a.config?.agents??{},p=Array.isArray(u.list)?[...u.list]:[],m=p.findIndex(A=>A.id===l.id),v=o==="off"?void 0:o;if(v)m>=0?p[m]={...p[m],thinkingLevel:v}:p.push({id:l.id,thinkingLevel:v});else if(m>=0){const{thinkingLevel:A,..._}=p[m];Object.keys(_).length<=1?p.splice(m,1):p[m]=_}const w=p.length>0?{agents:{list:p}}:{agents:{list:null}};await e.client.request("config.patch",{raw:JSON.stringify(w),baseHash:a.hash,note:`Public agent thinking → ${v||"default"}`,skipRestart:!0}),e.configSnapshot=await e.client.request("config.get")}catch(a){console.error("Thinking change failed:",a)}},whatsappGroupPolicy:(()=>{const r=e.configSnapshot?.config?.channels?.whatsapp,a=J(e)?.whatsappAccountId,c=r?.accounts??{};return(a?c[a]:void 0)?.groupPolicy??r?.groupPolicy??"allowlist"})(),whatsappGroupRequireMention:(()=>{const r=e.configSnapshot?.config?.channels?.whatsapp,a=J(e)?.whatsappAccountId,c=r?.accounts??{};return((a?c[a]:void 0)?.groups??r?.groups??{})["*"]?.requireMention!==!1})(),onWhatsAppGroupToggle:async()=>{const r=J(e)?.whatsappAccountId;try{const l=await e.client.request("config.get"),c=l.config?.channels?.whatsapp??{},u=c.accounts??{},p=r?u[r]:void 0,m=p?.groupPolicy??c.groupPolicy??"allowlist",v=m==="disabled"||m==="allowlist",w=v?"open":"disabled",A=v?{"*":{}}:void 0,_={groupPolicy:w};A&&(_.groups=A);const j=p?{channels:{whatsapp:{accounts:{[r]:_}}}}:{channels:{whatsapp:_}};await e.client.request("config.patch",{raw:JSON.stringify(j),baseHash:l.hash,note:`WhatsApp groups → ${w}`,skipRestart:!0}),e.configSnapshot=await e.client.request("config.get")}catch(l){console.error("Group toggle failed:",l)}},onWhatsAppGroupMentionChange:async o=>{const l=J(e)?.whatsappAccountId;try{const a=await e.client.request("config.get"),p=(a.config?.channels?.whatsapp??{}).accounts??{},m=l?p[l]:void 0,v={"*":{requireMention:o}},w=m?{channels:{whatsapp:{accounts:{[l]:{groups:v}}}}}:{channels:{whatsapp:{groups:v}}};await e.client.request("config.patch",{raw:JSON.stringify(w),baseHash:a.hash,note:`WhatsApp group mention → ${o?"when mentioned":"always"}`,skipRestart:!0}),e.configSnapshot=await e.client.request("config.get")}catch(a){console.error("Group mention change failed:",a)}},whatsappSettingsOpen:e.whatsappSettingsOpen??!1,onWhatsAppSettingsOpen:()=>{e.whatsappSettingsOpen=!0},onWhatsAppSettingsClose:()=>{e.whatsappSettingsOpen=!1},imessageConfigured:s.configured,imessageRunning:s.running,imessageConnected:s.connected,imessageLastError:s.lastError,imessageSelfChatMode:s.selfChatMode,imessageCliPath:s.cliPath,imessageEnabling:e.imessageEnabling,imessageEnableConfirm:e.imessageEnableConfirm,imessageOwnerWorkspace:i,onIMessageEnable:()=>{e.imessageEnableConfirm=!0},onIMessageEnableConfirm:async()=>{e.imessageEnabling=!0;try{const o=await e.client.request("config.get"),l=o.config?.bindings??[],a=J(e),u=a?.agents.find(w=>w.id.endsWith("-admin")||w.id==="admin")?.id??"admin",p=l.filter(w=>w.match?.channel!=="imessage"),m=[{agentId:u,match:{channel:"imessage",peer:{kind:"dm",id:"__self__"}},meta:{imessageOwner:!0}}],v=[...p,...m];await e.client.request("config.patch",{raw:JSON.stringify({channels:{imessage:{selfChatMode:!0,dmPolicy:"disabled",allowFrom:["*"]}},bindings:v}),baseHash:o.hash,note:"Enable iMessage (self-chat) for "+(a?.name??"default")}),e.imessageEnableConfirm=!1,setTimeout(()=>{Promise.all([z(e,!0),ke(e)]).then(()=>{e.imessageEnabling=!1})},3e3)}catch{e.imessageEnabling=!1}},onIMessageEnableCancel:()=>{e.imessageEnableConfirm=!1},onIMessageProbe:async()=>{e.imessageEnabling=!0,e.requestUpdate();try{await z(e,!0)}finally{e.imessageEnabling=!1}},onIMessageDisconnect:async()=>{e.imessageEnabling=!0;try{const o=await e.client.request("config.get"),a=(o.config?.bindings??[]).filter(c=>c.match?.channel!=="imessage");await e.client.request("config.patch",{raw:JSON.stringify({channels:{imessage:{selfChatMode:!1,dmPolicy:"disabled"}},bindings:a}),baseHash:o.hash,note:"Disconnect iMessage"}),e.imessageEnableConfirm=!1,setTimeout(()=>{Promise.all([z(e,!0),ke(e)]).then(()=>{e.imessageEnabling=!1})},3e3)}catch{e.imessageEnabling=!1}},onIMessageReassign:async()=>{e.imessageEnabling=!0;try{const o=await e.client.request("config.get"),l=o.config?.bindings??[],a=J(e),u=a?.agents.find(v=>v.id.endsWith("-admin")||v.id==="admin")?.id??"admin",p=l.filter(v=>v.match?.channel!=="imessage"),m=[{agentId:u,match:{channel:"imessage",peer:{kind:"dm",id:"__self__"}},meta:{imessageOwner:!0}}];await e.client.request("config.patch",{raw:JSON.stringify({channels:{imessage:{selfChatMode:!0,dmPolicy:"disabled",allowFrom:["*"]}},bindings:[...p,...m]}),baseHash:o.hash,note:"Reassign iMessage to "+(a?.name??"default")}),e.imessageEnableConfirm=!1,setTimeout(()=>{Promise.all([z(e,!0),ke(e)]).then(()=>{e.imessageEnabling=!1})},3e3)}catch{e.imessageEnabling=!1}},infoModalOpen:e.infoModalOpen,onInfoModalOpen:o=>{e.infoModalOpen=o},onInfoModalClose:()=>{e.infoModalOpen=null},isMaster:e.accessState.master,apiKeyProviders:e.apiKeyProviders,apiKeyModalOpen:e.apiKeyModalOpen,apiKeyBusy:e.apiKeyBusy,apiKeyError:e.apiKeyError,apiKeySuccess:e.apiKeySuccess,onApiKeyModalOpen:()=>{e.apiKeyModalOpen=!0,e.apiKeyError=null,e.apiKeySuccess=null},onApiKeyModalClose:()=>{e.apiKeyModalOpen=!1,e.apiKeyError=null,e.apiKeySuccess=null},onApiKeySave:async(o,r)=>{e.apiKeyBusy=!0,e.apiKeyError=null,e.apiKeySuccess=null;try{await ba(e.client,o,r),e.apiKeySuccess=`${o} key saved`;try{e.apiKeyProviders=await Li(e.client)}catch{}o==="anthropic"&&await e.handleAuthStatusCheck()}catch(l){e.apiKeyError=l instanceof Error?l.message:"Failed to save key"}finally{e.apiKeyBusy=!1}},onApiKeyRemove:async o=>{e.apiKeyBusy=!0,e.apiKeyError=null,e.apiKeySuccess=null;try{await My(e.client,o),e.apiKeySuccess=`${o} key removed`;try{e.apiKeyProviders=await Li(e.client)}catch{}}catch(r){e.apiKeyError=r instanceof Error?r.message:"Failed to remove key"}finally{e.apiKeyBusy=!1}},authApiKeyMode:e.authApiKeyMode,authApiKeyInput:e.authApiKeyInput,authApiKeyBusy:e.authApiKeyBusy,authApiKeyError:e.authApiKeyError,onAuthApiKeyToggle:()=>{e.authApiKeyMode=!e.authApiKeyMode,e.authApiKeyError=null},onAuthApiKeyChange:o=>{e.authApiKeyInput=o},onAuthApiKeySubmit:async()=>{const o=e.authApiKeyInput.trim();if(o){e.authApiKeyBusy=!0,e.authApiKeyError=null;try{await ba(e.client,"anthropic",o),await e.handleAuthStatusCheck(),e.authApiKeyMode=!1,e.authApiKeyInput=""}catch(r){e.authApiKeyError=r instanceof Error?r.message:"Failed to save API key"}finally{e.authApiKeyBusy=!1}}},accountHasPin:(()=>{const o=e.selectedWorkspace??e.workspaces[0]?.name;return o?e.accessState.accounts.some(r=>r.id===o):!1})(),accountPinModalOpen:e.accountPinModalOpen,accountPinBusy:e.accountPinBusy,accountPinError:e.accountPinError,accountPinSuccess:e.accountPinSuccess,onAccountPinModalOpen:()=>{e.accountPinModalOpen=!0,e.accountPinError=null,e.accountPinSuccess=null},onAccountPinModalClose:()=>{e.accountPinModalOpen=!1,e.accountPinError=null,e.accountPinSuccess=null},onAccountPinSave:(o,r)=>{const l=e.selectedWorkspace??e.workspaces[0]?.name;l&&e.handleAccountPinSave(l,o,r)},wsProps:Qy(e)})}if(e.filesPage){const t=Jy(e);return Hp({connected:e.connected,wsProps:Ut(e),loading:e.filesLoading,tree:e.filesTree,root:e.filesRoot,error:e.filesError,selectedPath:e.filesSelectedPath,selectedPaths:e.filesSelectedPaths,previewContent:e.filesPreviewContent,previewLoading:e.filesPreviewLoading,previewBinary:e.filesPreviewBinary,previewSize:e.filesPreviewSize,expandedDirs:e.filesExpandedDirs,message:e.filesMessage,uploadBusy:e.filesUploadBusy,reindexBusy:e.filesReindexBusy,memoryStatus:e.filesMemoryStatus,onRefresh:()=>on(e,t),onReindex:()=>Hy(e,t),onSelectFile:n=>Fy(e,n,t),onToggleSelectFile:n=>Uy(e,n,t),onToggleDir:n=>qy(e,n),onUpload:(n,s)=>zy(e,n,s,t),onDownload:n=>kc(e,n,t),onBulkDownload:()=>Wy(e,t),onDelete:n=>jy(e,n,t),onMove:(n,s)=>Sc(e,n,s,t),onMoveToDir:(n,s)=>Ky(e,n,s,t)})}if(e.browserPage)return Up({connected:e.connected,active:e.browserScreencastActive,loading:e.browserLoading,error:e.browserError,inputMode:e.browserInputMode,handoffPending:e.browserHandoffPending,handoffReason:e.browserHandoffReason,onStart:()=>Py(e),onStop:()=>Ry(e),onToggleInput:()=>Ny(e),onCompleteHandoff:()=>Iy(e),onCanvasMouseDown:t=>{const s=t.target.getBoundingClientRect(),o=Bn().translateCoordinates(t.clientX-s.left,t.clientY-s.top);ni(e,"mousePressed",o.x,o.y,t.button===2?"right":t.button===1?"middle":"left")},onCanvasMouseUp:t=>{const s=t.target.getBoundingClientRect(),o=Bn().translateCoordinates(t.clientX-s.left,t.clientY-s.top);ni(e,"mouseReleased",o.x,o.y)},onCanvasMouseMove:t=>{const n=Bn();if(n.shouldThrottleMouseMove())return;const i=t.target.getBoundingClientRect(),o=n.translateCoordinates(t.clientX-i.left,t.clientY-i.top);ni(e,"mouseMoved",o.x,o.y)},onCanvasKeyDown:t=>{let n=0;t.altKey&&(n|=1),t.ctrlKey&&(n|=2),t.metaKey&&(n|=4),t.shiftKey&&(n|=8),si(e,"keyDown",t.key,{code:t.code,modifiers:n||void 0}),t.key.length===1&&si(e,"char",t.key,{text:t.key})},onCanvasKeyUp:t=>{si(e,"keyUp",t.key,{code:t.code})}});if(e.adminsPage){const t=Xy(e),n=Zy(e);return ch({connected:e.connected,wsProps:Ut(e),loading:e.adminsLoading,saving:e.adminsSaving,phones:e.adminPhones,error:e.adminsError,newPhone:e.adminsNewPhone,onRefresh:()=>fs(e,t),onAdd:s=>{$c(e,s,t,n).then(()=>{e.adminsError||(e.adminsNewPhone="")})},onRemove:s=>Ec(e,s,t,n),onNewPhoneChange:s=>e.handleAdminsNewPhoneChange(s)})}if(e.customersPage){const t=ev(e);return hh({connected:e.connected,wsProps:Ut(e),loading:e.customersLoading,saving:e.customersSaving,records:e.customersRecords,error:e.customersError,searchQuery:e.customersSearchQuery,editingId:e.customersEditingId,showAddForm:e.customersShowAddForm,newRecordPhone:e.customersNewPhone,newRecordName:e.customersNewName,onSearch:n=>e.customersSearchQuery=n,onSearchSubmit:()=>et(e,t),onAdd:(n,s)=>Tc(e,n,s,t),onDelete:n=>Cc(e,n,t),onSetField:(n,s,i)=>_c(e,n,s,i,t),onDeleteField:(n,s)=>Mc(e,n,s,t),onToggleExpand:n=>{e.customersEditingId=e.customersEditingId===n?null:n},onShowAddForm:()=>e.customersShowAddForm=!0,onCancelAddForm:()=>{e.customersShowAddForm=!1,e.customersNewPhone="",e.customersNewName=""},onNewRecordPhoneChange:n=>e.handleCustomersNewPhoneChange(n),onNewRecordNameChange:n=>e.handleCustomersNewNameChange(n),onRefresh:()=>et(e,t)})}if(e.chatPage){const t=e.connected?null:"Disconnected from gateway.",n=sv(e),s=e.chatAvatarUrl??n??null;return Ym({connected:e.connected,wsProps:Ut(e),sessionKey:e.sessionKey,onSessionKeyChange:i=>{e.sessionKey=i,e.chatMessage="",e.chatAttachments=[],e.chatStream=null,e.chatStreamStartedAt=null,e.chatRunId=null,e.chatQueue=[],e.resetToolStream(),e.resetChatScroll(),e.applySettings({...e.settings,sessionKey:i,lastActiveSessionKey:i}),e.loadAssistantIdentity(),Ce(e),fi(e)},thinkingLevel:e.chatThinkingLevel,showThinking:e.settings.chatShowThinking??!1,modelProvider:e.chatModelProvider,model:e.chatModel,modelCatalog:e.chatModelCatalog,onModelChange:i=>{wn(e,e.sessionKey,{model:i}).then(()=>{Ce(e)})},onThinkingLevelChange:i=>{wn(e,e.sessionKey,{thinkingLevel:i==="off"?null:i}).then(()=>{Ce(e)})},verboseLevel:e.chatVerboseLevel,fillerEnabled:e.chatFillerEnabled,onVerboseChange:i=>{wn(e,e.sessionKey,{verboseLevel:i==="off"?null:i}).then(()=>{Ce(e)})},onFillerChange:i=>{wn(e,e.sessionKey,{fillerEnabled:i}).then(()=>{Ce(e)})},loading:e.chatLoading,sending:e.chatSending,compactionStatus:e.compactionStatus,assistantAvatarUrl:s,messages:e.chatMessages,toolMessages:e.chatToolMessages,stream:e.chatStream,streamStartedAt:e.chatStreamStartedAt,draft:e.chatMessage,queue:e.chatQueue,canSend:e.connected,disabledReason:t,error:e.lastError,sessions:e.sessionsResult,focusMode:!1,onRefresh:()=>(e.resetToolStream(),Promise.all([Ce(e),fi(e)])),onToggleFocusMode:()=>{},onChatScroll:i=>e.handleChatScroll(i),nearBottom:e.chatUserNearBottom,onDraftChange:i=>e.chatMessage=i,attachments:e.chatAttachments,onAttachmentsChange:i=>e.chatAttachments=i,onSend:()=>e.handleSendChat(),canAbort:!!e.chatRunId,onAbort:()=>{e.handleAbortChat()},onQueueRemove:i=>e.removeQueuedMessage(i),onNewSession:()=>e.handleSendChat("/new",{restoreDraft:!0}),sidebarOpen:e.sidebarOpen,sidebarContent:e.sidebarContent,sidebarError:e.sidebarError,splitRatio:e.splitRatio,onOpenSidebar:i=>e.handleOpenSidebar(i),onCloseSidebar:()=>e.handleCloseSidebar(),onSplitRatioChange:i=>e.handleSplitRatioChange(i),assistantName:e.assistantName,assistantAvatar:e.assistantAvatar})}return e.advancedPage?Ay({connected:e.connected,wsProps:Ut(e),activeTab:e.advancedTab,onTabChange:t=>{e.advancedTab=t,t==="cron"&&e.loadCron(),t==="skills"&&wt(e,{clearMessages:!0}),t==="logs"&&(e.logsSubTab==="session"?gt(e,{reset:!0}):qt(e,{reset:!0}))},cronProps:{loading:e.cronLoading,status:e.cronStatus,jobs:e.cronJobs,error:e.cronError,busy:e.cronBusy,form:e.cronForm,channels:e.channelsSnapshot?.channelMeta?.length?e.channelsSnapshot.channelMeta.map(t=>t.id):e.channelsSnapshot?.channelOrder??[],channelLabels:e.channelsSnapshot?.channelLabels??{},channelMeta:e.channelsSnapshot?.channelMeta??[],agentIds:J(e)?.agents?.map(n=>n.id)??[],runsJobId:e.cronRunsJobId,runs:e.cronRuns,newEventModalOpen:e.cronNewEventModal,onNewEventModalOpen:()=>{e.cronNewEventModal=!0},onNewEventModalClose:()=>{e.cronNewEventModal=!1},detailJobId:e.cronDetailJobId,onDetailOpen:t=>{e.cronDetailJobId=t.id,ci(e,t.id)},onDetailClose:()=>{e.cronDetailJobId=null},onFormChange:t=>e.cronForm={...e.cronForm,...t},onRefresh:()=>e.loadCron(),onAdd:()=>{hd(e).then(()=>{e.cronNewEventModal=!1})},onToggle:(t,n)=>fd(e,t,n),onRun:t=>gd(e,t),onRemove:t=>md(e,t),onLoadRuns:t=>ci(e,t)},skillsProps:{loading:e.skillsLoading,report:e.skillsReport,error:e.skillsError,filter:e.skillsFilter,edits:e.skillEdits,messages:e.skillMessages,busyKey:e.skillsBusyKey,onFilterChange:t=>e.skillsFilter=t,onRefresh:()=>wt(e,{clearMessages:!0}),onToggle:(t,n)=>sp(e,t,n),onEdit:(t,n)=>np(e,t,n),onSaveKey:t=>ip(e,t),onInstall:(t,n,s)=>op(e,t,n,s)},logsProps:{logsSubTab:e.logsSubTab,onSubTabChange:t=>{e.logsSubTab=t,t==="session"?gt(e,{reset:!0}):qt(e,{reset:!0})},sessionLogsProps:{loading:e.sessionLogsLoading,error:e.sessionLogsError,entries:e.sessionLogsEntries,agents:e.sessionLogsAgents,filterText:e.sessionLogsFilterText,typeFilters:e.sessionLogsTypeFilters,agentFilters:e.sessionLogsAgentFilters,autoFollow:e.sessionLogsAutoFollow,full:e.sessionLogsFull,onFilterTextChange:t=>e.sessionLogsFilterText=t,onTypeToggle:(t,n)=>{const s=e;s.sessionLogsTypeFilters={...s.sessionLogsTypeFilters,[t]:n}},onAgentToggle:(t,n)=>{const s=e;s.sessionLogsAgentFilters={...s.sessionLogsAgentFilters,[t]:n}},onToggleAutoFollow:t=>e.sessionLogsAutoFollow=t,onToggleFull:t=>{e.sessionLogsFull=t,gt(e,{reset:!0})},onRefresh:()=>{gt(e,{reset:!0})},onExport:(t,n)=>e.exportSessionLogs(t,n),onScroll:t=>e.handleSessionLogsScroll(t)},loading:e.logsLoading,error:e.logsError,file:e.logsFile,entries:e.logsEntries,filterText:e.logsFilterText,levelFilters:e.logsLevelFilters,autoFollow:e.logsAutoFollow,truncated:e.logsTruncated,onFilterTextChange:t=>e.logsFilterText=t,onLevelToggle:(t,n)=>{e.logsLevelFilters={...e.logsLevelFilters,[t]:n}},onToggleAutoFollow:t=>e.logsAutoFollow=t,onRefresh:()=>qt(e,{reset:!0}),onExport:(t,n)=>e.exportSessionLogs(t,n),onScroll:t=>e.handleLogsScroll(t)}}):(window.location.replace("/chat"),d``)}const lv={trace:!0,debug:!0,info:!0,warn:!0,error:!0,fatal:!0},cv={name:"",description:"",agentId:"",enabled:!0,scheduleKind:"every",scheduleAt:"",everyAmount:"30",everyUnit:"minutes",cronExpr:"0 7 * * *",cronTz:"",sessionTarget:"main",wakeMode:"next-heartbeat",payloadKind:"systemEvent",payloadText:"",deliver:!1,channel:"last",to:"",timeoutSeconds:"",postToMainPrefix:""};async function uv(e){if(!(!e.client||!e.connected)&&!e.agentsLoading){e.agentsLoading=!0,e.agentsError=null;try{const t=await e.client.request("agents.list",{});t&&(e.agentsList=t)}catch(t){e.agentsError=String(t)}finally{e.agentsLoading=!1}}}async function rn(e){if(!(!e.client||!e.connected)&&!e.workspacesLoading){e.workspacesLoading=!0,e.workspacesError=null;try{const t=await e.client.request("workspaces.list",{});e.workspaces=t.workspaces}catch(t){e.workspacesError=String(t)}finally{e.workspacesLoading=!1}}}async function dv(e,t){if(!e.client||!e.connected||e.workspaceSaving)return;const n=t.name.trim();if(!n){e.workspacesError="Account name is required.";return}e.workspaceSaving=!0,e.workspacesError=null;try{const s=await e.client.request("config.get",{});e.configSnapshot=s;const i=s.hash;if(!i){e.workspacesError="Config hash missing; reload and retry.";return}const o={name:n,baseHash:i,whatsappAccountName:n};t.workspacePath?.trim()&&(o.workspaceDir=t.workspacePath.trim());const r=await e.client.request("workspaces.create",o);e.addingWorkspace=!1,e.newWorkspaceName="",e.newWorkspacePath="",await rn(e),t.onCreated?.(r)}catch(s){e.workspacesError=String(s)}finally{e.workspaceSaving=!1}}async function pv(e,t){if(!(!e.client||!e.connected)&&!e.workspaceSaving){e.workspaceSaving=!0,e.workspacesError=null;try{const n=await e.client.request("config.get",{});e.configSnapshot=n;const s=n.hash;if(!s){e.workspacesError="Config hash missing; reload and retry.";return}await e.client.request("workspaces.remove",{name:t,baseHash:s}),e.workspaceRemoveConfirm=null,await rn(e)}catch(n){e.workspacesError=String(n)}finally{e.workspaceSaving=!1}}}async function hv(e,t,n){if(!(!e.client||!e.connected)){e.workspacesError=null;try{const s=await e.client.request("config.get",{});e.configSnapshot=s;const i=s.hash;if(!i){e.workspacesError="Config hash missing; reload and retry.";return}await e.client.request("workspaces.rename",{name:t,displayName:n,baseHash:i}),await rn(e)}catch(s){e.workspacesError=String(s)}}}const Pn=Object.freeze(Object.defineProperty({__proto__:null,createWorkspace:dv,loadWorkspaces:rn,removeWorkspace:pv,renameWorkspace:hv},Symbol.toStringTag,{value:"Module"})),Lc={WEBCHAT_UI:"webchat-ui",CONTROL_UI:"taskmaster-control-ui",SETUP_UI:"setup-ui",WEBCHAT:"webchat",CLI:"cli",GATEWAY_CLIENT:"gateway-client",MACOS_APP:"taskmaster-macos",IOS_APP:"taskmaster-ios",ANDROID_APP:"taskmaster-android",NODE_HOST:"node-host",TEST:"test",FINGERPRINT:"fingerprint",PROBE:"taskmaster-probe"},wa=Lc,Pi={WEBCHAT:"webchat",CLI:"cli",UI:"ui",BACKEND:"backend",NODE:"node",PROBE:"probe",TEST:"test"};new Set(Object.values(Lc));new Set(Object.values(Pi));function fv(e){const t=e.version??(e.nonce?"v2":"v1"),n=e.scopes.join(","),s=e.token??"",i=[t,e.deviceId,e.clientId,e.clientMode,e.role,n,String(e.signedAtMs),s];return t==="v2"&&i.push(e.nonce??""),i.join("|")}const gv=4008;class mv{constructor(t){this.opts=t,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}start(){this.closed=!1,this.connect()}stop(){this.closed=!0,this.ws?.close(),this.ws=null,this.flushPending(new Error("gateway client stopped"))}get connected(){return this.ws?.readyState===WebSocket.OPEN}connect(){this.closed||(this.ws=new WebSocket(this.opts.url),this.ws.onopen=()=>this.queueConnect(),this.ws.onmessage=t=>this.handleMessage(String(t.data??"")),this.ws.onclose=t=>{const n=String(t.reason??"");this.ws=null,this.flushPending(new Error(`gateway closed (${t.code}): ${n}`)),this.opts.onClose?.({code:t.code,reason:n}),this.scheduleReconnect()},this.ws.onerror=()=>{})}scheduleReconnect(){if(this.closed)return;const t=this.backoffMs;this.backoffMs=Math.min(this.backoffMs*1.7,15e3),window.setTimeout(()=>this.connect(),t)}flushPending(t){for(const[,n]of this.pending)n.reject(t);this.pending.clear()}async sendConnect(){if(this.connectSent)return;this.connectSent=!0,this.connectTimer!==null&&(window.clearTimeout(this.connectTimer),this.connectTimer=null);const t=typeof crypto<"u"&&!!crypto.subtle,n=["operator.admin","operator.approvals","operator.pairing"],s="operator";let i=null,o=!1,r=this.opts.token;if(t){i=await Gd();const u=Qd({deviceId:i.deviceId,role:s})?.token;r=u??this.opts.token,o=!!(u&&this.opts.token)}const l=r||this.opts.password?{token:r,password:this.opts.password}:void 0;let a;if(t&&i){const u=Date.now(),p=this.connectNonce??void 0,m=fv({deviceId:i.deviceId,clientId:this.opts.clientName??wa.CONTROL_UI,clientMode:this.opts.mode??Pi.WEBCHAT,role:s,scopes:n,signedAtMs:u,token:r??null,nonce:p}),v=await Vd(i.privateKey,m);a={id:i.deviceId,publicKey:i.publicKey,signature:v,signedAt:u,nonce:p}}const c={minProtocol:3,maxProtocol:3,client:{id:this.opts.clientName??wa.CONTROL_UI,version:this.opts.clientVersion??"dev",platform:this.opts.platform??navigator.platform??"web",mode:this.opts.mode??Pi.WEBCHAT,instanceId:this.opts.instanceId},role:s,scopes:n,device:a,caps:[],auth:l,userAgent:navigator.userAgent,locale:navigator.language};this.request("connect",c).then(u=>{u?.auth?.deviceToken&&i&&Xd({deviceId:i.deviceId,role:u.auth.role??s,token:u.auth.deviceToken,scopes:u.auth.scopes??[]}),this.backoffMs=800,this.opts.onHello?.(u)}).catch(()=>{o&&i&&Zd({deviceId:i.deviceId,role:s}),this.ws?.close(gv,"connect failed")})}handleMessage(t){let n;try{n=JSON.parse(t)}catch{return}const s=n;if(s.type==="event"){const i=n;if(i.event==="connect.challenge"){const r=i.payload,l=r&&typeof r.nonce=="string"?r.nonce:null;l&&(this.connectNonce=l,this.sendConnect());return}const o=typeof i.seq=="number"?i.seq:null;o!==null&&(this.lastSeq!==null&&o>this.lastSeq+1&&this.opts.onGap?.({expected:this.lastSeq+1,received:o}),this.lastSeq=o);try{this.opts.onEvent?.(i)}catch(r){console.error("[gateway] event handler error:",r)}return}if(s.type==="res"){const i=n,o=this.pending.get(i.id);if(!o)return;this.pending.delete(i.id),i.ok?o.resolve(i.payload):o.reject(new Error(i.error?.message??"request failed"));return}}request(t,n){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return Promise.reject(new Error("gateway not connected"));const s=Ui(),i={type:"req",id:s,method:t,params:n},o=new Promise((r,l)=>{this.pending.set(s,{resolve:a=>r(a),reject:l})});return this.ws.send(JSON.stringify(i)),o}queueConnect(){this.connectNonce=null,this.connectSent=!1,this.connectTimer!==null&&window.clearTimeout(this.connectTimer),this.connectTimer=window.setTimeout(()=>{this.sendConnect()},750)}}function Ri(e){return typeof e=="object"&&e!==null}function yv(e){if(!Ri(e))return null;const t=typeof e.id=="string"?e.id.trim():"",n=e.request;if(!t||!Ri(n))return null;const s=typeof n.command=="string"?n.command.trim():"";if(!s)return null;const i=typeof e.createdAtMs=="number"?e.createdAtMs:0,o=typeof e.expiresAtMs=="number"?e.expiresAtMs:0;return!i||!o?null:{id:t,request:{command:s,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:o}}function vv(e){if(!Ri(e))return null;const 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 Pc(e){const t=Date.now();return e.filter(n=>n.expiresAtMs>t)}function bv(e,t){const n=Pc(e).filter(s=>s.id!==t.id);return n.push(t),n}function ka(e,t){return Pc(e).filter(n=>n.id!==t)}async function Rc(e,t){if(!e.client||!e.connected)return;const n=e.sessionKey.trim(),s=n?{sessionKey:n}:{};try{const i=await e.client.request("agent.identity.get",s);if(!i)return;const o=ai(i);e.assistantName=o.name,e.assistantAvatar=o.avatar,e.assistantAgentId=o.agentId??null}catch{}}const es="taskmaster_update_pending";async function Ic(e){if(!(!e.client||!e.connected)&&!e.updateChecking){e.updateChecking=!0,e.updateMessage=null,e.requestUpdate?.();try{const t=await e.client.request("update.status",{});e.currentVersion=t.current,e.latestVersion=t.latest,e.updateAvailable=t.updateAvailable,e.updateMessage=t.updateAvailable?`v${t.latest} available`:"Up to date"}catch(t){e.updateMessage=`Check failed: ${String(t)}`,e.updateAvailable=null}finally{e.updateChecking=!1,e.requestUpdate?.()}}}async function wv(e){if(!(!e.client||e.updateRunning)){e.updateRunning=!0,e.updateMessage="Starting update...",e.updateProgressSteps=[],e.updateLastResult=null,e.requestUpdate?.();try{localStorage.setItem(es,String(Date.now()))}catch{}try{const t=await e.client.request("update.run",{restartDelayMs:2e3,note:"Update from setup page"});if(t.ok&&t.result.status==="ok")e.updateMessage="Updated — restarting gateway...",e.requestUpdate?.();else if(t.ok&&t.result.status==="skipped")Yt(),e.updateMessage=t.result.reason||"Update skipped",e.updateRunning=!1,e.requestUpdate?.();else throw Yt(),new Error(t.result.reason||"Update failed")}catch(t){Yt(),e.updateMessage=`Update failed: ${String(t)}`,e.updateRunning=!1,e.updateProgressSteps=[],e.requestUpdate?.()}}}function kv(e,t){const n=t.phase;if(n==="step-start"){const s=t.name,i=t.index,o=t.total;e.updateMessage=`Updating: ${s} (${i+1}/${o})`;const r=e.updateProgressSteps.find(l=>l.index===i);r?(r.status="running",r.name=s):e.updateProgressSteps=[...e.updateProgressSteps,{name:s,index:i,total:o,status:"running"}],e.requestUpdate?.()}else if(n==="step-done"){const s=t.name,i=t.index,o=t.total,r=t.ok,l=t.durationMs,a=e.updateProgressSteps.find(c=>c.index===i);a?(a.status=r?"done":"failed",a.durationMs=l):e.updateProgressSteps=[...e.updateProgressSteps,{name:s,index:i,total:o,status:r?"done":"failed",durationMs:l}],e.updateMessage=r?`Updating: ${s} done (${i+1}/${o})`:`Update step failed: ${s}`,e.requestUpdate?.()}else if(n==="complete"){if(t.status==="ok")e.updateMessage="Update complete — restarting gateway...";else{const i=t.reason;e.updateMessage=i?`Update failed: ${i}`:"Update failed",e.updateRunning=!1,Yt()}e.requestUpdate?.()}}async function Sv(e){if(!e.client||!e.connected)return;const t=Av();Yt();try{const n=await e.client.request("update.lastResult",{});if(!n.ok||!n.result)return;const s=5*6e4,i=Date.now()-n.result.ts<s;if(!t&&!i)return;e.updateLastResult=n.result;const o=n.result.after?.version;if(n.result.status==="ok"&&o&&(e.currentVersion=o),e.updateAvailable=!1,n.result.status==="ok"){const r=n.result.before?.version,l=o??n.result.currentVersion;e.updateMessage=r?`Updated: v${r} → v${l}`:`Updated to v${l}`}else{const r=n.result.reason??n.result.failedStep?.name??"unknown error";e.updateMessage=`Update failed: ${r}`}}catch{}finally{e.updateRunning=!1,e.updateProgressSteps=[],e.requestUpdate?.()}}function xv(e){e.updateLastResult=null,e.requestUpdate?.()}function Av(){try{const e=localStorage.getItem(es);return e?Date.now()-Number(e)>30*6e4?(localStorage.removeItem(es),!1):!0:!1}catch{return!1}}function Yt(){try{localStorage.removeItem(es)}catch{}}function ii(e,t){const n=(e??"").trim(),s=t.mainSessionKey?.trim();if(!s)return n;if(!n)return s;const i=t.mainKey?.trim()||"main",o=t.defaultAgentId?.trim();return n==="main"||n===i||o&&(n===`agent:${o}:main`||n===`agent:${o}:${i}`)?s:n}function $v(e,t){if(!t?.mainSessionKey)return;const n=ii(e.sessionKey,t),s=ii(e.settings.sessionKey,t),i=ii(e.settings.lastActiveSessionKey,t),o=n||s||e.sessionKey,r={...e.settings,sessionKey:s||o,lastActiveSessionKey:i||o},l=r.sessionKey!==e.settings.sessionKey||r.lastActiveSessionKey!==e.settings.lastActiveSessionKey;o!==e.sessionKey&&(e.sessionKey=o),l&&Ie(e,r)}function Te(e){e.lastError=null,e.hello=null,e.connected=!1,e.execApprovalQueue=[],e.execApprovalError=null;const t=e.setup||e.filesPage||e.browserPage?"setup-ui":"taskmaster-control-ui";e.client?.stop(),e.client=new mv({url:e.settings.gatewayUrl,token:e.settings.token.trim()?e.settings.token:void 0,password:e.password.trim()?e.password:void 0,clientName:t,mode:"webchat",onHello:n=>{e.connected=!0,e.lastError=null,e.hello=n,Cv(e,n),e.handleAccessCheck(),Sv(e).then(()=>{Ic(e)}),Rc(e),uv(e),(e.chatPage||e.setup)&&_v(e),Xi(e,{quiet:!0}),Qi(e,{quiet:!0}),rn(e).then(()=>{e.initWorkspaceSelection()}),e.setup&&(ke(e),Mv(e)),oo(e)},onClose:({code:n,reason:s})=>{e.connected=!1,n!==1012&&(e.lastError=`disconnected (${n}): ${s||"no reason"}`)},onEvent:n=>Ev(e,n),onGap:({expected:n,received:s})=>{e.lastError=`event gap detected (expected seq ${n}, got ${s}); refresh recommended`}}),e.client.start()}function Ev(e,t){try{Tv(e,t)}catch(n){console.error("[gateway] handleGatewayEvent error:",t.event,n)}}function Tv(e,t){if(e.eventLogBuffer=[{ts:Date.now(),event:t.event,payload:t.payload},...e.eventLogBuffer].slice(0,250),e.tab==="debug"&&(e.eventLog=e.eventLogBuffer),t.event==="agent"){if(e.onboarding)return;ed(e,t.payload);return}if(t.event==="chat"){const n=t.payload;n?.sessionKey&&gl(e,n.sessionKey);const s=Wa(e,n);(s==="final"||s==="error"||s==="aborted")&&(Ki(e),Mp(e)),s==="final"&&Ce(e);return}if(t.event==="presence"){const n=t.payload;n?.presence&&Array.isArray(n.presence)&&(e.presenceEntries=n.presence,e.presenceError=null,e.presenceStatus=null);return}if(t.event==="cron"&&e.tab==="cron"&&ro(e),(t.event==="device.pair.requested"||t.event==="device.pair.resolved")&&Qi(e,{quiet:!0}),t.event==="exec.approval.requested"){const n=yv(t.payload);if(n){e.execApprovalQueue=bv(e.execApprovalQueue,n),e.execApprovalError=null;const s=Math.max(0,n.expiresAtMs-Date.now()+500);window.setTimeout(()=>{e.execApprovalQueue=ka(e.execApprovalQueue,n.id)},s)}return}if(t.event==="browser.screencast.frame"){Dy(e,t.payload);return}if(t.event==="browser.handoff"){Oy(e,t.payload),e.browserPage||(window.location.href="/browser");return}if(t.event==="browser.handoff.resolved"){By(e);return}if(t.event==="exec.approval.resolved"){const n=vv(t.payload);n&&(e.execApprovalQueue=ka(e.execApprovalQueue,n.id));return}if(t.event==="update.progress"){kv(e,t.payload);return}}function Cv(e,t){const n=t.snapshot;n?.presence&&Array.isArray(n.presence)&&(e.presenceEntries=n.presence),n?.health&&(e.debugHealth=n.health),n?.sessionDefaults&&$v(e,n.sessionDefaults)}async function _v(e){if(!(!e.client||!e.connected))try{const t=await e.client.request("models.list",{});Array.isArray(t?.models)&&(e.chatModelCatalog=t.models)}catch{}}async function Mv(e){if(!(!e.client||!e.connected))try{e.apiKeyProviders=await Li(e.client)}catch{}}function Lv(e){e.basePath=vp();const t=Oe();if(Dp(t.accentColor),window.scrollTo(0,0),e.setup){document.title=`${t.name} Setup`,Te(e);return}if(e.filesPage){document.title=`${t.name} Files`,Te(e);return}if(e.browserPage){document.title=`${t.name} Browser`,Te(e);return}if(e.adminsPage){document.title=`${t.name} Admins`,Te(e);return}if(e.customersPage){document.title=`${t.name} Customers`,Te(e);return}if(e.chatPage){document.title=`${t.name} Chat`,Te(e);return}if(e.advancedPage){document.title=`${t.name} Advanced`,Te(e);return}Sp(e,!0),bp(e),wp(e),window.addEventListener("popstate",e.popStateHandler),gp(e),Te(e),hp(e),e.tab==="logs"&&(e.logsSubTab==="session"?to(e):Ji(e)),e.tab==="debug"&&so(e)}function Pv(e){ad(e)}function Rv(e){window.removeEventListener("popstate",e.popStateHandler),fp(e),eo(e),no(e),io(e),kp(e),e.topbarObserver?.disconnect(),e.topbarObserver=null}function Iv(e,t){if(e.filesPage&&e.connected&&t.has("connected")&&t.get("connected")===!1&&e.handleFilesLoad&&e.handleFilesLoad(),e.adminsPage&&e.connected&&t.has("connected")&&t.get("connected")===!1&&e.handleAdminsLoad&&e.handleAdminsLoad(),e.customersPage&&e.connected&&t.has("connected")&&t.get("connected")===!1&&e.handleCustomersLoad&&e.handleCustomersLoad(),e.chatPage&&e.connected&&t.has("connected")&&t.get("connected")===!1&&e.handleChatLoad&&e.handleChatLoad(),e.advancedPage&&e.connected&&t.has("connected")&&t.get("connected")===!1&&e.handleAdvancedLoad&&e.handleAdvancedLoad(),e.setup&&e.connected){const n=t.has("connected")&&t.get("connected")===!1;n&&e.handleLicenseStatusCheck&&e.licenseValid===null&&!e.licenseBusy&&e.handleLicenseStatusCheck(),n&&e.handleUpdateCheck&&e.handleUpdateCheck();const s=t.has("setupStep")&&e.setupStep==="auth";(n||s)&&e.setupStep==="auth"&&(e.authConnected===!0?e.setupStep="whatsapp":e.handleAuthStatusCheck&&e.authConnected===null&&!e.authBusy&&e.handleAuthStatusCheck()),e.setupStep==="whatsapp"&&t.has("setupStep")&&e.client&&!e.channelsLoading&&(e.channelsLoading=!0,e.client.request("channels.status",{probe:!0,timeoutMs:8e3}).then(o=>{e.channelsSnapshot=o,e.channelsLoading=!1}).catch(()=>{e.channelsLoading=!1})),t.has("whatsappLoginConnected")&&e.whatsappLoginConnected===!0&&e.client&&!e.channelsLoading&&(e.channelsLoading=!0,e.client.request("channels.status",{probe:!0,timeoutMs:8e3}).then(i=>{e.channelsSnapshot=i,e.channelsLoading=!1}).catch(()=>{e.channelsLoading=!1}))}if(e.tab==="chat"&&!e.advancedPage&&(t.has("chatMessages")||t.has("chatToolMessages")||t.has("chatStream")||t.has("chatLoading")||t.has("tab"))){const n=t.has("tab"),s=t.has("chatLoading")&&t.get("chatLoading")===!0&&e.chatLoading===!1;en(e,n||s||!e.chatHasAutoScrolled)}e.tab==="logs"&&!e.advancedPage&&(t.has("logsEntries")||t.has("logsAutoFollow")||t.has("tab"))&&e.logsAutoFollow&&e.logsAtBottom&&Ka(e,t.has("tab")||t.has("logsAutoFollow"))}function Nv(e){const t={name:e?.name??"",displayName:e?.displayName??"",about:e?.about??"",picture:e?.picture??"",banner:e?.banner??"",website:e?.website??"",nip05:e?.nip05??"",lud16:e?.lud16??""};return{values:t,original:{...t},saving:!1,importing:!1,error:null,success:null,fieldErrors:{},showAdvanced:!!(e?.banner||e?.website||e?.nip05||e?.lud16)}}async function Dv(e,t,n){await zi(e,t,n),await z(e,!0)}async function Ov(e,t){await Ha(e,t),await z(e,!0)}async function Bv(e,t){await qa(e,t),await z(e,!0)}async function Fv(e,t){await Ga(e,t)}async function Uv(e,t){await Va(e,t)}async function Wv(e){await ud(e),await ke(e),await z(e,!0)}async function Kv(e){await ke(e),await z(e,!0)}function zv(e){if(!Array.isArray(e))return{};const t={};for(const n of e){if(typeof n!="string")continue;const[s,...i]=n.split(":");if(!s||i.length===0)continue;const o=s.trim(),r=i.join(":").trim();o&&r&&(t[o]=r)}return t}function Nc(e){return(e.channelsSnapshot?.channelAccounts?.nostr??[])[0]?.accountId??e.nostrProfileAccountId??"default"}function Dc(e,t=""){return`/api/channels/nostr/${encodeURIComponent(e)}/profile${t}`}function jv(e,t,n){e.nostrProfileAccountId=t,e.nostrProfileFormState=Nv(n??void 0)}function Hv(e){e.nostrProfileFormState=null,e.nostrProfileAccountId=null}function qv(e,t,n){const s=e.nostrProfileFormState;s&&(e.nostrProfileFormState={...s,values:{...s.values,[t]:n},fieldErrors:{...s.fieldErrors,[t]:""}})}function Gv(e){const t=e.nostrProfileFormState;t&&(e.nostrProfileFormState={...t,showAdvanced:!t.showAdvanced})}async function Vv(e){const t=e.nostrProfileFormState;if(!t||t.saving)return;const n=Nc(e);e.nostrProfileFormState={...t,saving:!0,error:null,success:null,fieldErrors:{}};try{const s=await fetch(Dc(n),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t.values)}),i=await s.json().catch(()=>null);if(!s.ok||i?.ok===!1||!i){const o=i?.error??`Profile update failed (${s.status})`;e.nostrProfileFormState={...t,saving:!1,error:o,success:null,fieldErrors:zv(i?.details)};return}if(!i.persisted){e.nostrProfileFormState={...t,saving:!1,error:"Profile publish failed on all relays.",success:null};return}e.nostrProfileFormState={...t,saving:!1,error:null,success:"Profile published to relays.",fieldErrors:{},original:{...t.values}},await z(e,!0)}catch(s){e.nostrProfileFormState={...t,saving:!1,error:`Profile update failed: ${String(s)}`,success:null}}}async function Yv(e){const t=e.nostrProfileFormState;if(!t||t.importing)return;const n=Nc(e);e.nostrProfileFormState={...t,importing:!0,error:null,success:null};try{const s=await fetch(Dc(n,"/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({autoMerge:!0})}),i=await s.json().catch(()=>null);if(!s.ok||i?.ok===!1||!i){const a=i?.error??`Profile import failed (${s.status})`;e.nostrProfileFormState={...t,importing:!1,error:a,success:null};return}const o=i.merged??i.imported??null,r=o?{...t.values,...o}:t.values,l=!!(r.banner||r.website||r.nip05||r.lud16);e.nostrProfileFormState={...t,importing:!1,values:r,error:null,success:i.saved?"Profile imported from relays. Review and publish.":"Profile imported. Review and publish.",showAdvanced:l},i.saved&&await z(e,!0)}catch(s){e.nostrProfileFormState={...t,importing:!1,error:`Profile import failed: ${String(s)}`,success:null}}}async function Qv(e){if(e.client){e.authBusy=!0,e.authMessage=null;try{const t=await e.client.request("auth.status",{});e.authConnected=t.connected,e.authExpiresIn=t.expiresIn??null,e.authMessage=t.message??null,t.connected&&(e.setupStep="whatsapp")}catch(t){e.authConnected=!1,e.authMessage=t instanceof Error?t.message:"Failed to check auth status"}finally{e.authBusy=!1}}}async function Xv(e){if(e.client){e.authBusy=!0,e.authMessage=null,e.authUrl=null,e.authConnected=null;try{const t=await e.client.request("auth.oauth.start",{provider:"anthropic"});e.authUrl=t.authUrl,e.authMessage=t.message??"Sign in with your Claude Pro account"}catch(t){e.authConnected=!1,e.authMessage=t instanceof Error?t.message:"Failed to start auth flow"}finally{e.authBusy=!1}}}async function Zv(e,t){if(e.client){e.authBusy=!0,e.authMessage="Verifying code...";try{await e.client.request("auth.oauth.code",{code:t});const n=await e.client.request("auth.oauth.wait",{timeoutMs:3e4});n.connected?(e.authConnected=!0,e.authMessage=n.message??"Connected to Claude!",e.authUrl=null,e.authCodeInput="",setTimeout(()=>{e.setupStep="whatsapp"},1500)):e.authMessage=n.message??"Still waiting for authorization..."}catch(n){e.authConnected=!1,e.authMessage=n instanceof Error?n.message:"Verification failed"}finally{e.authBusy=!1}}}function Jv(e,t){e.authCodeInput=t}function eb(e){e.setupStep="whatsapp"}async function tb(e){if(e.client){e.licenseBusy=!0,e.licenseMessage=null;try{const t=await e.client.request("license.status",{});e.licenseDeviceId=t.deviceId??null,e.licenseStoredKey=t.key??null,t.licensed?(e.licenseValid=!0,e.licenseTier=t.tier??null,e.setupStep="auth"):(e.licenseValid=null,e.setupStep="license")}catch(t){const n=t instanceof Error?t.message:String(t);n.includes("unknown method")?(e.licenseValid=!0,e.setupStep="auth"):(e.licenseValid=null,e.licenseMessage=n,e.setupStep="license")}finally{e.licenseBusy=!1}}}async function nb(e){if(e.client&&e.licenseKey.trim()){e.licenseBusy=!0,e.licenseMessage=null,e.licenseValid=null;try{const t=await e.client.request("license.activate",{key:e.licenseKey.trim()});t.valid?(e.licenseValid=!0,e.licenseMessage=t.message??"License activated",e.licenseTier=t.tier??null,setTimeout(()=>{e.setupStep="auth"},1500)):(e.licenseValid=!1,e.licenseMessage=t.message??"Invalid license key")}catch(t){e.licenseValid=!1,e.licenseMessage=t instanceof Error?t.message:"Activation failed"}finally{e.licenseBusy=!1}}}async function sb(e){if(e.client){e.licenseBusy=!0;try{await e.client.request("license.remove",{}),e.licenseValid=null,e.licenseKey="",e.licenseTier=null,e.licenseMessage=null,e.setupStep="license"}catch(t){e.licenseMessage=t instanceof Error?t.message:"Failed to remove license"}finally{e.licenseBusy=!1}}}function ib(e,t){e.licenseKey=t}async function ob(e){if(!(!e.client||!e.connected)&&!e.gatewayHealthLoading){e.gatewayHealthLoading=!0,e.requestUpdate?.();try{const t=await e.client.request("health",{probe:!0});e.gatewayHealthy=t.ok===!0,e.gatewayHealthMessage=t.ok?`Healthy${t.durationMs?` (${t.durationMs}ms)`:""}`:"Unhealthy"}catch(t){e.gatewayHealthy=!1,e.gatewayHealthMessage=`Error: ${String(t)}`}finally{e.gatewayHealthLoading=!1,e.requestUpdate?.()}}}async function rb(e){if(!(!e.client||e.gatewayRestartBusy)){e.gatewayRestartBusy=!0,e.gatewayHealthMessage="Restarting...",e.requestUpdate?.();try{const t=await e.client.request("gateway.restart",{reason:"Manual restart from setup page",delayMs:1e3});if(t.ok&&t.restart?.ok)e.gatewayHealthMessage="Restarting...",setTimeout(()=>{window.location.reload()},3e3);else throw new Error("Restart not scheduled")}catch(t){e.gatewayHealthMessage=`Restart failed: ${String(t)}`,e.gatewayRestartBusy=!1,e.requestUpdate?.()}}}var ab=Object.defineProperty,lb=Object.getOwnPropertyDescriptor,f=(e,t,n,s)=>{for(var i=s>1?void 0:s?lb(t,n):t,o=e.length-1,r;o>=0;o--)(r=e[o])&&(i=(s?r(t,n,i):r(i))||i);return s&&i&&ab(t,n,i),i};const oi=Su();function cb(){if(!window.location.search)return!1;const t=new URLSearchParams(window.location.search).get("onboarding");if(!t)return!1;const n=t.trim().toLowerCase();return n==="1"||n==="true"||n==="yes"||n==="on"}function ub(){const e=window.location.pathname;if(e==="/setup"||e.endsWith("/setup"))return!0;if(!window.location.search)return!1;const n=new URLSearchParams(window.location.search).get("setup");if(!n)return!1;const s=n.trim().toLowerCase();return s==="1"||s==="true"||s==="yes"||s==="on"}function db(){const e=window.location.pathname;return e==="/files"||e.endsWith("/files")}function pb(){const e=window.location.pathname;return e==="/browser"||e.endsWith("/browser")}function hb(){const e=window.location.pathname;return e==="/admins"||e.endsWith("/admins")}function fb(){const e=window.location.pathname;return e==="/customers"||e.endsWith("/customers")}function gb(){const e=window.location.pathname;return e==="/chat"||e.endsWith("/chat")}function mb(){const e=window.location.pathname;return e==="/advanced"||e.endsWith("/advanced")}let h=class extends mt{constructor(){super(...arguments),this.settings=Ms(),this.password="",this.tab="chat",this.onboarding=cb(),this.setup=ub(),this.filesPage=db(),this.browserPage=pb(),this.adminsPage=hb(),this.customersPage=fb(),this.chatPage=gb(),this.advancedPage=mb(),this.advancedTab="cron",this.connected=!1,this.accessState=yc,this.theme=this.settings.theme??"system",this.themeResolved="dark",this.hello=null,this.lastError=null,this.eventLog=[],this.eventLogBuffer=[],this.toolStreamSyncTimer=null,this.sidebarCloseTimer=null,this.assistantName=oi.name,this.assistantAvatar=oi.avatar,this.assistantAgentId=oi.agentId??null,this.sessionKey=this.settings.sessionKey,this.chatLoading=!1,this.chatSending=!1,this.chatMessage="",this.chatMessages=[],this.chatToolMessages=[],this.chatStream=null,this.chatStreamStartedAt=null,this.chatRunId=null,this.compactionStatus=null,this.chatAvatarUrl=null,this.chatThinkingLevel=null,this.chatModelProvider=null,this.chatModel=null,this.chatModelCatalog=[],this.chatVerboseLevel=null,this.chatFillerEnabled=null,this.chatQueue=[],this.chatAttachments=[],this.sidebarOpen=!1,this.sidebarContent=null,this.sidebarError=null,this.splitRatio=this.settings.splitRatio,this.nodesLoading=!1,this.nodes=[],this.devicesLoading=!1,this.devicesError=null,this.devicesList=null,this.execApprovalsLoading=!1,this.execApprovalsSaving=!1,this.execApprovalsDirty=!1,this.execApprovalsSnapshot=null,this.execApprovalsForm=null,this.execApprovalsSelectedAgent=null,this.execApprovalsTarget="gateway",this.execApprovalsTargetNodeId=null,this.execApprovalQueue=[],this.execApprovalBusy=!1,this.execApprovalError=null,this.configLoading=!1,this.configRaw=`{
|
|
2781
2860
|
}
|
|
2782
|
-
`,this.configRawOriginal="",this.configValid=null,this.configIssues=[],this.configSaving=!1,this.configApplying=!1,this.updateRunning=!1,this.applySessionKey=this.settings.lastActiveSessionKey,this.configSnapshot=null,this.configSchema=null,this.configSchemaVersion=null,this.configSchemaLoading=!1,this.configUiHints={},this.configForm=null,this.configFormOriginal=null,this.configFormDirty=!1,this.configFormMode="form",this.configSearchQuery="",this.configActiveSection=null,this.configActiveSubsection=null,this.channelsLoading=!1,this.channelsSnapshot=null,this.channelsError=null,this.channelsLastSuccess=null,this.whatsappLoginMessage=null,this.whatsappLoginQrDataUrl=null,this.whatsappLoginConnected=null,this.whatsappBusy=!1,this.whatsappActiveQrAccountId=null,this.whatsappPairedPhone=null,this.addingWhatsAppAccount=!1,this.newWhatsAppAccountName="",this.whatsappAccountError=null,this.whatsappAccountSaving=!1,this.whatsappSettingsOpen=!1,this.licenseKey="",this.licenseBusy=!1,this.licenseValid=null,this.licenseMessage=null,this.licenseTier=null,this.licenseDeviceId=null,this.licenseStoredKey=null,this.licenseRemoveConfirm=!1,this.authConnected=null,this.authBusy=!1,this.authMessage=null,this.authUrl=null,this.authCodeInput="",this.authExpiresIn=null,this.setupStep="license",this.gatewayHealthy=null,this.gatewayHealthLoading=!1,this.gatewayHealthMessage=null,this.gatewayRestartBusy=!1,this.updateAvailable=null,this.currentVersion=null,this.latestVersion=null,this.updateChecking=!1,this.updateMessage=null,this.updateProgressSteps=[],this.updateLastResult=null,this.nostrProfileFormState=null,this.nostrProfileAccountId=null,this.presenceLoading=!1,this.presenceEntries=[],this.presenceError=null,this.presenceStatus=null,this.agentsLoading=!1,this.agentsList=null,this.agentsError=null,this.sessionsLoading=!1,this.sessionsResult=null,this.sessionsError=null,this.cronLoading=!1,this.cronJobs=[],this.cronStatus=null,this.cronError=null,this.cronForm={...nv},this.cronRunsJobId=null,this.cronRuns=[],this.cronBusy=!1,this.cronNewEventModal=!1,this.cronDetailJobId=null,this.browserScreencastActive=!1,this.browserScreencastFrame=null,this.browserScreencastMetadata=null,this.browserHandoffPending=!1,this.browserHandoffReason=null,this.browserHandoffId=null,this.browserInputMode=!1,this.browserLoading=!1,this.browserError=null,this.filesLoading=!1,this.filesTree=[],this.filesRoot="",this.filesError=null,this.filesSelectedPath=null,this.filesSelectedPaths=new Set,this.filesPreviewContent=null,this.filesPreviewLoading=!1,this.filesPreviewBinary=!1,this.filesPreviewSize=null,this.filesExpandedDirs=new Set,this.filesMessage=null,this.filesUploadBusy=!1,this.filesReindexBusy=!1,this.filesMemoryStatus=null,this.skillsLoading=!1,this.skillsReport=null,this.skillsError=null,this.skillsFilter="",this.skillEdits={},this.skillsBusyKey=null,this.skillMessages={},this.adminsLoading=!1,this.adminPhones=[],this.adminsError=null,this.adminsSaving=!1,this.adminsNewPhone="",this.customersLoading=!1,this.customersSaving=!1,this.customersRecords=[],this.customersError=null,this.customersSearchQuery="",this.customersEditingId=null,this.customersShowAddForm=!1,this.customersNewPhone="",this.customersNewName="",this.imessageEnableConfirm=!1,this.imessageEnabling=!1,this.infoModalOpen=null,this.workspaces=[],this.workspacesLoading=!1,this.workspacesError=null,this.selectedWorkspace=null,this.addingWorkspace=!1,this.newWorkspaceName="",this.newWorkspacePath="",this.newWorkspacePin="",this.accountPinModalOpen=!1,this.accountPinBusy=!1,this.accountPinError=null,this.accountPinSuccess=null,this.apiKeyProviders=[],this.apiKeyModalOpen=!1,this.apiKeyBusy=!1,this.apiKeyError=null,this.apiKeySuccess=null,this.authApiKeyMode=!1,this.authApiKeyInput="",this.authApiKeyBusy=!1,this.authApiKeyError=null,this.pinChanging=null,this.pinChangeBusy=!1,this.pinChangeError=null,this.loginChangePinMode=!1,this.changePinBusy=!1,this.changePinError=null,this.changePinSuccess=null,this.workspaceSaving=!1,this.workspaceRemoveConfirm=null,this.renamingWorkspace=!1,this.renameWorkspaceName="",this.debugLoading=!1,this.debugStatus=null,this.debugHealth=null,this.debugModels=[],this.debugHeartbeat=null,this.debugCallMethod="",this.debugCallParams="{}",this.debugCallResult=null,this.debugCallError=null,this.logsLoading=!1,this.logsError=null,this.logsFile=null,this.logsEntries=[],this.logsFilterText="",this.logsLevelFilters={...tv},this.logsAutoFollow=!0,this.logsTruncated=!1,this.logsCursor=null,this.logsLastFetchAt=null,this.logsLimit=500,this.logsMaxBytes=25e4,this.logsAtBottom=!0,this.logsSubTab="session",this.sessionLogsLoading=!1,this.sessionLogsError=null,this.sessionLogsEntries=[],this.sessionLogsFilterText="",this.sessionLogsTypeFilters={user:!0,assistant:!0,tool:!0,thinking:!0,error:!0,system:!0},this.sessionLogsAgentFilters={},this.sessionLogsAgents=[],this.sessionLogsAutoFollow=!0,this.sessionLogsFull=!1,this.sessionLogsCursors={},this.sessionLogsLastFetchAt=null,this.sessionLogsAtBottom=!0,this.client=null,this.chatScrollFrame=null,this.chatScrollTimeout=null,this.chatHasAutoScrolled=!1,this.chatUserNearBottom=!0,this.nodesPollInterval=null,this.logsPollInterval=null,this.sessionLogsPollInterval=null,this.debugPollInterval=null,this.logsScrollFrame=null,this.toolStreamById=new Map,this.toolStreamOrder=[],this.basePath="",this.popStateHandler=()=>bp(this),this.themeMedia=null,this.themeMediaHandler=null,this.topbarObserver=null}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),xv(this)}firstUpdated(){$v(this)}disconnectedCallback(){Ev(this),super.disconnectedCallback()}updated(e){Tv(this,e)}connect(){Te(this)}handleChatScroll(e){Xu(this,e)}handleLogsScroll(e){Zu(this,e)}handleSessionLogsScroll(e){Ju(this,e)}exportLogs(e,t){td(e,t)}exportSessionLogs(e,t){nd(e,t)}resetToolStream(){Ki(this)}resetChatScroll(){ed(this)}async loadAssistantIdentity(){await _c(this)}applySettings(e){Ie(this,e)}setTab(e){pp(this,e)}setTheme(e,t){hp(this,e,t)}async loadOverview(){await gl(this)}async loadCron(){const e=this.getSelectedWorkspaceInfo();this.workspaceAgentIds=e?.agents?.map(t=>t.id)??void 0,this.cronForm={...this.cronForm,accountId:e?.whatsappAccountId??void 0},await ro(this)}async handleAbortChat(){await yl(this)}removeQueuedMessage(e){Ap(this,e)}async handleSendChat(e,t){await xp(this,e,t)}async handleWhatsAppStart(e,t){await _v(this,e,t)}async handleWhatsAppWait(e){await Mv(this,e)}async handleWhatsAppLogout(e){await Pv(this,e)}async handleAddWhatsAppAccount(e){await Lv(this,e)}async handleRemoveWhatsAppAccount(e){await Rv(this,e)}async handleAccessCheck(){await ga(this)}async handlePinSubmit(e,t){await by(this,e,t),this.accessState.authenticated&&this.accessState.workspace&&this.handleWorkspaceSelect(this.accessState.workspace)}async handleSetMasterPin(e){await wy(this,e)}async handleLogout(){await Sy(this)}toggleChangePinMode(){this.loginChangePinMode=!this.loginChangePinMode,this.changePinError=null,this.changePinSuccess=null}async handleChangePin(e,t,n){if(this.client){this.changePinBusy=!0,this.changePinError=null,this.changePinSuccess=null;try{const s=await this.client.request("access.verify",{account:e,pin:t});if(!s.ok){this.changePinError=s.message??"Incorrect current PIN",this.changePinBusy=!1;return}e==="__master__"?await this.client.request("access.setMasterPin",{pin:n}):await this.client.request("access.setAccountPin",{workspace:e,pin:n}),this.changePinSuccess="PIN changed successfully",this.changePinBusy=!1,setTimeout(()=>{this.loginChangePinMode=!1,this.changePinSuccess=null},2e3)}catch{this.changePinError="Failed to change PIN",this.changePinBusy=!1}}}async handleAccountPinSave(e,t,n){if(this.client){this.accountPinBusy=!0,this.accountPinError=null,this.accountPinSuccess=null;try{if(t!==null){const s=await this.client.request("access.verify",{account:e,pin:t});if(!s.ok){this.accountPinError=s.message??"Incorrect current PIN",this.accountPinBusy=!1;return}}await this.client.request("access.setAccountPin",{workspace:e,pin:n}),this.accountPinSuccess="PIN saved",this.accountPinBusy=!1,await ga(this),setTimeout(()=>{this.accountPinModalOpen=!1,this.accountPinSuccess=null,this.accountPinError=null},1500)}catch{this.accountPinError="Failed to save PIN",this.accountPinBusy=!1}}}async handleLicenseStatusCheck(){await Vv(this)}async handleLicenseActivate(){await Qv(this)}async handleLicenseRemove(){await Yv(this)}handleLicenseKeyChange(e){Xv(this,e)}async handleAuthStatusCheck(){await zv(this)}async handleAuthStart(){await jv(this)}async handleAuthSubmitCode(e){await Hv(this,e)}handleAuthCodeChange(e){qv(this,e)}handleSkipToWhatsApp(){Gv(this)}async handleGatewayHealthCheck(){await Zv(this)}async handleGatewayRestart(){await Jv(this)}async handleUpdateCheck(){await Mc(this)}async handleUpdateRun(){await hv(this)}handleUpdateDismissResult(){mv(this)}handleFilesLoad(){const e=this.resolveFilesAgentId();on(this,e),bc(this,e)}handleAdminsLoad(){const e=this.resolveAdminAgentId();$e(async()=>{const{loadAdmins:t}=await Promise.resolve().then(()=>Wy);return{loadAdmins:t}},void 0,import.meta.url).then(({loadAdmins:t})=>{t(this,e)})}resolveAdminAgentId(){const e=this.getSelectedWorkspaceInfo();return e?e.agents.find(n=>n.id.endsWith("-admin")||n.id==="admin")?.id:void 0}resolveFilesAgentId(){const e=this.getSelectedWorkspaceInfo();if(e)return e.agents[0]?.id}handleChatLoad(){const e=this.resolveAdminAgentId();if(e){const t=`agent:${e}:main`;t!==this.sessionKey&&(this.sessionKey=t,this.chatMessages=[],this.chatStream=null,this.chatRunId=null,this.applySettings({...this.settings,sessionKey:t,lastActiveSessionKey:t}),this.loadAssistantIdentity())}$e(async()=>{const{loadChatHistory:t}=await Promise.resolve().then(()=>Uu);return{loadChatHistory:t}},void 0,import.meta.url).then(({loadChatHistory:t})=>{t(this)})}handleAdvancedLoad(){this.loadCron()}async handleChannelConfigSave(){await Iv(this)}async handleChannelConfigReload(){await Nv(this)}handleNostrProfileEdit(e,t){Dv(this,e,t)}handleNostrProfileCancel(){Bv(this)}handleNostrProfileFieldChange(e,t){Fv(this,e,t)}async handleNostrProfileSave(){await Wv(this)}async handleNostrProfileImport(){await Kv(this)}handleNostrProfileToggleAdvanced(){Uv(this)}async handleExecApprovalDecision(e){const t=this.execApprovalQueue[0];if(!(!t||!this.client||this.execApprovalBusy)){this.execApprovalBusy=!0,this.execApprovalError=null;try{await this.client.request("exec.approval.resolve",{id:t.id,decision:e}),this.execApprovalQueue=this.execApprovalQueue.filter(n=>n.id!==t.id)}catch(n){this.execApprovalError=`Exec approval failed: ${String(n)}`}finally{this.execApprovalBusy=!1}}}handleOpenSidebar(e){this.sidebarCloseTimer!=null&&(window.clearTimeout(this.sidebarCloseTimer),this.sidebarCloseTimer=null),this.sidebarContent=e,this.sidebarError=null,this.sidebarOpen=!0}handleCloseSidebar(){this.sidebarOpen=!1,this.sidebarCloseTimer!=null&&window.clearTimeout(this.sidebarCloseTimer),this.sidebarCloseTimer=window.setTimeout(()=>{this.sidebarOpen||(this.sidebarContent=null,this.sidebarError=null,this.sidebarCloseTimer=null)},200)}handleSplitRatioChange(e){const t=Math.max(.4,Math.min(.7,e));this.splitRatio=t,this.applySettings({...this.settings,splitRatio:t})}handleAdminsNewPhoneChange(e){this.adminsNewPhone=e,this.adminsError&&(this.adminsError=null)}handleCustomersLoad(){const e=this.selectedWorkspace??void 0;$e(async()=>{const{loadCustomers:t}=await Promise.resolve().then(()=>Ky);return{loadCustomers:t}},void 0,import.meta.url).then(({loadCustomers:t})=>{t(this,e)})}handleCustomersNewPhoneChange(e){this.customersNewPhone=e,this.customersError&&(this.customersError=null)}handleCustomersNewNameChange(e){this.customersNewName=e,this.customersError&&(this.customersError=null)}async handleWorkspacesLoad(){const{loadWorkspaces:e}=await $e(async()=>{const{loadWorkspaces:t}=await Promise.resolve().then(()=>Ln);return{loadWorkspaces:t}},void 0,import.meta.url);await e(this)}async handleWorkspaceCreate(e,t){const{createWorkspace:n}=await $e(async()=>{const{createWorkspace:i}=await Promise.resolve().then(()=>Ln);return{createWorkspace:i}},void 0,import.meta.url),{loadChannels:s}=await $e(async()=>{const{loadChannels:i}=await Promise.resolve().then(()=>hd);return{loadChannels:i}},void 0,import.meta.url);await n(this,{name:e,workspacePath:t,onCreated:i=>{if(!i.whatsappAccountId)return;const o=i.whatsappAccountId;this.handleWorkspaceSelect(e),setTimeout(async()=>{try{await s(this,!0),await this.handleWhatsAppStart(!0,o),this.whatsappLoginQrDataUrl&&(await this.handleWhatsAppWait(o),await s(this,!0),await this.handleWorkspacesLoad())}catch{}this.requestUpdate()},3e3)}})}async handleWorkspaceRemove(e){const{removeWorkspace:t}=await $e(async()=>{const{removeWorkspace:n}=await Promise.resolve().then(()=>Ln);return{removeWorkspace:n}},void 0,import.meta.url);await t(this,e)}handleWorkspaceRenameStart(){const e=this.getSelectedWorkspaceInfo();this.renameWorkspaceName=e?.displayName??e?.name??"",this.renamingWorkspace=!0}handleWorkspaceRenameCancel(){this.renamingWorkspace=!1,this.renameWorkspaceName=""}async handleWorkspaceRename(e,t){const{renameWorkspace:n}=await $e(async()=>{const{renameWorkspace:s}=await Promise.resolve().then(()=>Ln);return{renameWorkspace:s}},void 0,import.meta.url);await n(this,e,t),this.renamingWorkspace=!1,this.renameWorkspaceName=""}handleWorkspaceSelect(e){this.selectedWorkspace=e,localStorage.setItem("taskmaster-selected-workspace",e),sr(e),this.settings=Ms(),this.chatMessage="",this.chatAttachments=[],this.chatStream=null,this.chatStreamStartedAt=null,this.chatRunId=null,this.chatQueue=[],this.lastError=null,this.reloadCurrentPageData()}getSelectedWorkspaceInfo(){return this.selectedWorkspace?this.workspaces.find(e=>e.name===this.selectedWorkspace)??null:null}reloadCurrentPageData(){this.adminsPage?this.handleAdminsLoad():this.customersPage?this.handleCustomersLoad():this.filesPage?this.handleFilesLoad():this.chatPage?this.handleChatLoad():this.advancedPage&&this.handleAdvancedLoad()}initWorkspaceSelection(){if(this.workspaces.length===0)return;const e=localStorage.getItem("taskmaster-selected-workspace"),t=e?this.workspaces.find(n=>n.name===e):null;if(t)this.selectedWorkspace=t.name;else{const n=this.workspaces.find(s=>s.isDefault)??this.workspaces[0];this.selectedWorkspace=n.name,localStorage.setItem("taskmaster-selected-workspace",n.name)}sr(this.selectedWorkspace),this.settings=Ms(),this.reloadCurrentPageData()}render(){return ev(this)}};f([g()],h.prototype,"settings",2);f([g()],h.prototype,"password",2);f([g()],h.prototype,"tab",2);f([g()],h.prototype,"onboarding",2);f([g()],h.prototype,"setup",2);f([g()],h.prototype,"filesPage",2);f([g()],h.prototype,"browserPage",2);f([g()],h.prototype,"adminsPage",2);f([g()],h.prototype,"customersPage",2);f([g()],h.prototype,"chatPage",2);f([g()],h.prototype,"advancedPage",2);f([g()],h.prototype,"advancedTab",2);f([g()],h.prototype,"connected",2);f([g()],h.prototype,"accessState",2);f([g()],h.prototype,"theme",2);f([g()],h.prototype,"themeResolved",2);f([g()],h.prototype,"hello",2);f([g()],h.prototype,"lastError",2);f([g()],h.prototype,"eventLog",2);f([g()],h.prototype,"assistantName",2);f([g()],h.prototype,"assistantAvatar",2);f([g()],h.prototype,"assistantAgentId",2);f([g()],h.prototype,"sessionKey",2);f([g()],h.prototype,"chatLoading",2);f([g()],h.prototype,"chatSending",2);f([g()],h.prototype,"chatMessage",2);f([g()],h.prototype,"chatMessages",2);f([g()],h.prototype,"chatToolMessages",2);f([g()],h.prototype,"chatStream",2);f([g()],h.prototype,"chatStreamStartedAt",2);f([g()],h.prototype,"chatRunId",2);f([g()],h.prototype,"compactionStatus",2);f([g()],h.prototype,"chatAvatarUrl",2);f([g()],h.prototype,"chatThinkingLevel",2);f([g()],h.prototype,"chatModelProvider",2);f([g()],h.prototype,"chatModel",2);f([g()],h.prototype,"chatModelCatalog",2);f([g()],h.prototype,"chatVerboseLevel",2);f([g()],h.prototype,"chatFillerEnabled",2);f([g()],h.prototype,"chatQueue",2);f([g()],h.prototype,"chatAttachments",2);f([g()],h.prototype,"sidebarOpen",2);f([g()],h.prototype,"sidebarContent",2);f([g()],h.prototype,"sidebarError",2);f([g()],h.prototype,"splitRatio",2);f([g()],h.prototype,"nodesLoading",2);f([g()],h.prototype,"nodes",2);f([g()],h.prototype,"devicesLoading",2);f([g()],h.prototype,"devicesError",2);f([g()],h.prototype,"devicesList",2);f([g()],h.prototype,"execApprovalsLoading",2);f([g()],h.prototype,"execApprovalsSaving",2);f([g()],h.prototype,"execApprovalsDirty",2);f([g()],h.prototype,"execApprovalsSnapshot",2);f([g()],h.prototype,"execApprovalsForm",2);f([g()],h.prototype,"execApprovalsSelectedAgent",2);f([g()],h.prototype,"execApprovalsTarget",2);f([g()],h.prototype,"execApprovalsTargetNodeId",2);f([g()],h.prototype,"execApprovalQueue",2);f([g()],h.prototype,"execApprovalBusy",2);f([g()],h.prototype,"execApprovalError",2);f([g()],h.prototype,"configLoading",2);f([g()],h.prototype,"configRaw",2);f([g()],h.prototype,"configRawOriginal",2);f([g()],h.prototype,"configValid",2);f([g()],h.prototype,"configIssues",2);f([g()],h.prototype,"configSaving",2);f([g()],h.prototype,"configApplying",2);f([g()],h.prototype,"updateRunning",2);f([g()],h.prototype,"applySessionKey",2);f([g()],h.prototype,"configSnapshot",2);f([g()],h.prototype,"configSchema",2);f([g()],h.prototype,"configSchemaVersion",2);f([g()],h.prototype,"configSchemaLoading",2);f([g()],h.prototype,"configUiHints",2);f([g()],h.prototype,"configForm",2);f([g()],h.prototype,"configFormOriginal",2);f([g()],h.prototype,"configFormDirty",2);f([g()],h.prototype,"configFormMode",2);f([g()],h.prototype,"configSearchQuery",2);f([g()],h.prototype,"configActiveSection",2);f([g()],h.prototype,"configActiveSubsection",2);f([g()],h.prototype,"channelsLoading",2);f([g()],h.prototype,"channelsSnapshot",2);f([g()],h.prototype,"channelsError",2);f([g()],h.prototype,"channelsLastSuccess",2);f([g()],h.prototype,"whatsappLoginMessage",2);f([g()],h.prototype,"whatsappLoginQrDataUrl",2);f([g()],h.prototype,"whatsappLoginConnected",2);f([g()],h.prototype,"whatsappBusy",2);f([g()],h.prototype,"whatsappActiveQrAccountId",2);f([g()],h.prototype,"whatsappPairedPhone",2);f([g()],h.prototype,"addingWhatsAppAccount",2);f([g()],h.prototype,"newWhatsAppAccountName",2);f([g()],h.prototype,"whatsappAccountError",2);f([g()],h.prototype,"whatsappAccountSaving",2);f([g()],h.prototype,"whatsappSettingsOpen",2);f([g()],h.prototype,"licenseKey",2);f([g()],h.prototype,"licenseBusy",2);f([g()],h.prototype,"licenseValid",2);f([g()],h.prototype,"licenseMessage",2);f([g()],h.prototype,"licenseTier",2);f([g()],h.prototype,"licenseDeviceId",2);f([g()],h.prototype,"licenseStoredKey",2);f([g()],h.prototype,"licenseRemoveConfirm",2);f([g()],h.prototype,"authConnected",2);f([g()],h.prototype,"authBusy",2);f([g()],h.prototype,"authMessage",2);f([g()],h.prototype,"authUrl",2);f([g()],h.prototype,"authCodeInput",2);f([g()],h.prototype,"authExpiresIn",2);f([g()],h.prototype,"setupStep",2);f([g()],h.prototype,"gatewayHealthy",2);f([g()],h.prototype,"gatewayHealthLoading",2);f([g()],h.prototype,"gatewayHealthMessage",2);f([g()],h.prototype,"gatewayRestartBusy",2);f([g()],h.prototype,"updateAvailable",2);f([g()],h.prototype,"currentVersion",2);f([g()],h.prototype,"latestVersion",2);f([g()],h.prototype,"updateChecking",2);f([g()],h.prototype,"updateMessage",2);f([g()],h.prototype,"updateProgressSteps",2);f([g()],h.prototype,"updateLastResult",2);f([g()],h.prototype,"nostrProfileFormState",2);f([g()],h.prototype,"nostrProfileAccountId",2);f([g()],h.prototype,"presenceLoading",2);f([g()],h.prototype,"presenceEntries",2);f([g()],h.prototype,"presenceError",2);f([g()],h.prototype,"presenceStatus",2);f([g()],h.prototype,"agentsLoading",2);f([g()],h.prototype,"agentsList",2);f([g()],h.prototype,"agentsError",2);f([g()],h.prototype,"sessionsLoading",2);f([g()],h.prototype,"sessionsResult",2);f([g()],h.prototype,"sessionsError",2);f([g()],h.prototype,"cronLoading",2);f([g()],h.prototype,"cronJobs",2);f([g()],h.prototype,"cronStatus",2);f([g()],h.prototype,"cronError",2);f([g()],h.prototype,"cronForm",2);f([g()],h.prototype,"cronRunsJobId",2);f([g()],h.prototype,"cronRuns",2);f([g()],h.prototype,"cronBusy",2);f([g()],h.prototype,"cronNewEventModal",2);f([g()],h.prototype,"cronDetailJobId",2);f([g()],h.prototype,"browserScreencastActive",2);f([g()],h.prototype,"browserScreencastFrame",2);f([g()],h.prototype,"browserScreencastMetadata",2);f([g()],h.prototype,"browserHandoffPending",2);f([g()],h.prototype,"browserHandoffReason",2);f([g()],h.prototype,"browserHandoffId",2);f([g()],h.prototype,"browserInputMode",2);f([g()],h.prototype,"browserLoading",2);f([g()],h.prototype,"browserError",2);f([g()],h.prototype,"filesLoading",2);f([g()],h.prototype,"filesTree",2);f([g()],h.prototype,"filesRoot",2);f([g()],h.prototype,"filesError",2);f([g()],h.prototype,"filesSelectedPath",2);f([g()],h.prototype,"filesSelectedPaths",2);f([g()],h.prototype,"filesPreviewContent",2);f([g()],h.prototype,"filesPreviewLoading",2);f([g()],h.prototype,"filesPreviewBinary",2);f([g()],h.prototype,"filesPreviewSize",2);f([g()],h.prototype,"filesExpandedDirs",2);f([g()],h.prototype,"filesMessage",2);f([g()],h.prototype,"filesUploadBusy",2);f([g()],h.prototype,"filesReindexBusy",2);f([g()],h.prototype,"filesMemoryStatus",2);f([g()],h.prototype,"skillsLoading",2);f([g()],h.prototype,"skillsReport",2);f([g()],h.prototype,"skillsError",2);f([g()],h.prototype,"skillsFilter",2);f([g()],h.prototype,"skillEdits",2);f([g()],h.prototype,"skillsBusyKey",2);f([g()],h.prototype,"skillMessages",2);f([g()],h.prototype,"adminsLoading",2);f([g()],h.prototype,"adminPhones",2);f([g()],h.prototype,"adminsError",2);f([g()],h.prototype,"adminsSaving",2);f([g()],h.prototype,"adminsNewPhone",2);f([g()],h.prototype,"customersLoading",2);f([g()],h.prototype,"customersSaving",2);f([g()],h.prototype,"customersRecords",2);f([g()],h.prototype,"customersError",2);f([g()],h.prototype,"customersSearchQuery",2);f([g()],h.prototype,"customersEditingId",2);f([g()],h.prototype,"customersShowAddForm",2);f([g()],h.prototype,"customersNewPhone",2);f([g()],h.prototype,"customersNewName",2);f([g()],h.prototype,"imessageEnableConfirm",2);f([g()],h.prototype,"imessageEnabling",2);f([g()],h.prototype,"infoModalOpen",2);f([g()],h.prototype,"workspaces",2);f([g()],h.prototype,"workspacesLoading",2);f([g()],h.prototype,"workspacesError",2);f([g()],h.prototype,"selectedWorkspace",2);f([g()],h.prototype,"addingWorkspace",2);f([g()],h.prototype,"newWorkspaceName",2);f([g()],h.prototype,"newWorkspacePath",2);f([g()],h.prototype,"newWorkspacePin",2);f([g()],h.prototype,"accountPinModalOpen",2);f([g()],h.prototype,"accountPinBusy",2);f([g()],h.prototype,"accountPinError",2);f([g()],h.prototype,"accountPinSuccess",2);f([g()],h.prototype,"apiKeyProviders",2);f([g()],h.prototype,"apiKeyModalOpen",2);f([g()],h.prototype,"apiKeyBusy",2);f([g()],h.prototype,"apiKeyError",2);f([g()],h.prototype,"apiKeySuccess",2);f([g()],h.prototype,"authApiKeyMode",2);f([g()],h.prototype,"authApiKeyInput",2);f([g()],h.prototype,"authApiKeyBusy",2);f([g()],h.prototype,"authApiKeyError",2);f([g()],h.prototype,"pinChanging",2);f([g()],h.prototype,"pinChangeBusy",2);f([g()],h.prototype,"pinChangeError",2);f([g()],h.prototype,"loginChangePinMode",2);f([g()],h.prototype,"changePinBusy",2);f([g()],h.prototype,"changePinError",2);f([g()],h.prototype,"changePinSuccess",2);f([g()],h.prototype,"workspaceSaving",2);f([g()],h.prototype,"workspaceRemoveConfirm",2);f([g()],h.prototype,"renamingWorkspace",2);f([g()],h.prototype,"renameWorkspaceName",2);f([g()],h.prototype,"debugLoading",2);f([g()],h.prototype,"debugStatus",2);f([g()],h.prototype,"debugHealth",2);f([g()],h.prototype,"debugModels",2);f([g()],h.prototype,"debugHeartbeat",2);f([g()],h.prototype,"debugCallMethod",2);f([g()],h.prototype,"debugCallParams",2);f([g()],h.prototype,"debugCallResult",2);f([g()],h.prototype,"debugCallError",2);f([g()],h.prototype,"logsLoading",2);f([g()],h.prototype,"logsError",2);f([g()],h.prototype,"logsFile",2);f([g()],h.prototype,"logsEntries",2);f([g()],h.prototype,"logsFilterText",2);f([g()],h.prototype,"logsLevelFilters",2);f([g()],h.prototype,"logsAutoFollow",2);f([g()],h.prototype,"logsTruncated",2);f([g()],h.prototype,"logsCursor",2);f([g()],h.prototype,"logsLastFetchAt",2);f([g()],h.prototype,"logsLimit",2);f([g()],h.prototype,"logsMaxBytes",2);f([g()],h.prototype,"logsAtBottom",2);f([g()],h.prototype,"logsSubTab",2);f([g()],h.prototype,"sessionLogsLoading",2);f([g()],h.prototype,"sessionLogsError",2);f([g()],h.prototype,"sessionLogsEntries",2);f([g()],h.prototype,"sessionLogsFilterText",2);f([g()],h.prototype,"sessionLogsTypeFilters",2);f([g()],h.prototype,"sessionLogsAgentFilters",2);f([g()],h.prototype,"sessionLogsAgents",2);f([g()],h.prototype,"sessionLogsAutoFollow",2);f([g()],h.prototype,"sessionLogsFull",2);f([g()],h.prototype,"sessionLogsCursors",2);f([g()],h.prototype,"sessionLogsLastFetchAt",2);f([g()],h.prototype,"sessionLogsAtBottom",2);f([g()],h.prototype,"chatUserNearBottom",2);h=f([Ea("taskmaster-app")],h);
|
|
2783
|
-
//# sourceMappingURL=index-
|
|
2861
|
+
`,this.configRawOriginal="",this.configValid=null,this.configIssues=[],this.configSaving=!1,this.configApplying=!1,this.updateRunning=!1,this.applySessionKey=this.settings.lastActiveSessionKey,this.configSnapshot=null,this.configSchema=null,this.configSchemaVersion=null,this.configSchemaLoading=!1,this.configUiHints={},this.configForm=null,this.configFormOriginal=null,this.configFormDirty=!1,this.configFormMode="form",this.configSearchQuery="",this.configActiveSection=null,this.configActiveSubsection=null,this.channelsLoading=!1,this.channelsSnapshot=null,this.channelsError=null,this.channelsLastSuccess=null,this.whatsappLoginMessage=null,this.whatsappLoginQrDataUrl=null,this.whatsappLoginConnected=null,this.whatsappBusy=!1,this.whatsappActiveQrAccountId=null,this.whatsappPairedPhone=null,this.addingWhatsAppAccount=!1,this.newWhatsAppAccountName="",this.whatsappAccountError=null,this.whatsappAccountSaving=!1,this.whatsappSettingsOpen=!1,this.licenseKey="",this.licenseBusy=!1,this.licenseValid=null,this.licenseMessage=null,this.licenseTier=null,this.licenseDeviceId=null,this.licenseStoredKey=null,this.licenseRemoveConfirm=!1,this.authConnected=null,this.authBusy=!1,this.authMessage=null,this.authUrl=null,this.authCodeInput="",this.authExpiresIn=null,this.setupStep="license",this.gatewayHealthy=null,this.gatewayHealthLoading=!1,this.gatewayHealthMessage=null,this.gatewayRestartBusy=!1,this.updateAvailable=null,this.currentVersion=null,this.latestVersion=null,this.updateChecking=!1,this.updateMessage=null,this.updateProgressSteps=[],this.updateLastResult=null,this.uninstallConfirm=!1,this.uninstallBusy=!1,this.uninstallDone=!1,this.uninstallError=null,this.uninstallConfirmText="",this.nostrProfileFormState=null,this.nostrProfileAccountId=null,this.presenceLoading=!1,this.presenceEntries=[],this.presenceError=null,this.presenceStatus=null,this.agentsLoading=!1,this.agentsList=null,this.agentsError=null,this.sessionsLoading=!1,this.sessionsResult=null,this.sessionsError=null,this.cronLoading=!1,this.cronJobs=[],this.cronStatus=null,this.cronError=null,this.cronForm={...cv},this.cronRunsJobId=null,this.cronRuns=[],this.cronBusy=!1,this.cronNewEventModal=!1,this.cronDetailJobId=null,this.browserScreencastActive=!1,this.browserScreencastFrame=null,this.browserScreencastMetadata=null,this.browserHandoffPending=!1,this.browserHandoffReason=null,this.browserHandoffId=null,this.browserInputMode=!1,this.browserLoading=!1,this.browserError=null,this.filesLoading=!1,this.filesTree=[],this.filesRoot="",this.filesError=null,this.filesSelectedPath=null,this.filesSelectedPaths=new Set,this.filesPreviewContent=null,this.filesPreviewLoading=!1,this.filesPreviewBinary=!1,this.filesPreviewSize=null,this.filesExpandedDirs=new Set,this.filesMessage=null,this.filesUploadBusy=!1,this.filesReindexBusy=!1,this.filesMemoryStatus=null,this.skillsLoading=!1,this.skillsReport=null,this.skillsError=null,this.skillsFilter="",this.skillEdits={},this.skillsBusyKey=null,this.skillMessages={},this.adminsLoading=!1,this.adminPhones=[],this.adminsError=null,this.adminsSaving=!1,this.adminsNewPhone="",this.customersLoading=!1,this.customersSaving=!1,this.customersRecords=[],this.customersError=null,this.customersSearchQuery="",this.customersEditingId=null,this.customersShowAddForm=!1,this.customersNewPhone="",this.customersNewName="",this.imessageEnableConfirm=!1,this.imessageEnabling=!1,this.infoModalOpen=null,this.workspaces=[],this.workspacesLoading=!1,this.workspacesError=null,this.selectedWorkspace=null,this.addingWorkspace=!1,this.newWorkspaceName="",this.newWorkspacePath="",this.newWorkspacePin="",this.accountPinModalOpen=!1,this.accountPinBusy=!1,this.accountPinError=null,this.accountPinSuccess=null,this.apiKeyProviders=[],this.apiKeyModalOpen=!1,this.apiKeyBusy=!1,this.apiKeyError=null,this.apiKeySuccess=null,this.authApiKeyMode=!1,this.authApiKeyInput="",this.authApiKeyBusy=!1,this.authApiKeyError=null,this.pinChanging=null,this.pinChangeBusy=!1,this.pinChangeError=null,this.loginChangePinMode=!1,this.changePinBusy=!1,this.changePinError=null,this.changePinSuccess=null,this.workspaceSaving=!1,this.workspaceRemoveConfirm=null,this.renamingWorkspace=!1,this.renameWorkspaceName="",this.debugLoading=!1,this.debugStatus=null,this.debugHealth=null,this.debugModels=[],this.debugHeartbeat=null,this.debugCallMethod="",this.debugCallParams="{}",this.debugCallResult=null,this.debugCallError=null,this.logsLoading=!1,this.logsError=null,this.logsFile=null,this.logsEntries=[],this.logsFilterText="",this.logsLevelFilters={...lv},this.logsAutoFollow=!0,this.logsTruncated=!1,this.logsCursor=null,this.logsLastFetchAt=null,this.logsLimit=500,this.logsMaxBytes=25e4,this.logsAtBottom=!0,this.logsSubTab="session",this.sessionLogsLoading=!1,this.sessionLogsError=null,this.sessionLogsEntries=[],this.sessionLogsFilterText="",this.sessionLogsTypeFilters={user:!0,assistant:!0,tool:!0,thinking:!0,error:!0,system:!0},this.sessionLogsAgentFilters={},this.sessionLogsAgents=[],this.sessionLogsAutoFollow=!0,this.sessionLogsFull=!1,this.sessionLogsCursors={},this.sessionLogsLastFetchAt=null,this.sessionLogsAtBottom=!0,this.client=null,this.chatScrollFrame=null,this.chatScrollTimeout=null,this.chatHasAutoScrolled=!1,this.chatUserNearBottom=!0,this.nodesPollInterval=null,this.logsPollInterval=null,this.sessionLogsPollInterval=null,this.debugPollInterval=null,this.logsScrollFrame=null,this.toolStreamById=new Map,this.toolStreamOrder=[],this.basePath="",this.popStateHandler=()=>xp(this),this.themeMedia=null,this.themeMediaHandler=null,this.topbarObserver=null}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),Lv(this)}firstUpdated(){Pv(this)}disconnectedCallback(){Rv(this),super.disconnectedCallback()}updated(e){Iv(this,e)}connect(){Te(this)}handleChatScroll(e){td(this,e)}handleLogsScroll(e){nd(this,e)}handleSessionLogsScroll(e){sd(this,e)}exportLogs(e,t){od(e,t)}exportSessionLogs(e,t){rd(e,t)}resetToolStream(){Ki(this)}resetChatScroll(){id(this)}async loadAssistantIdentity(){await Rc(this)}applySettings(e){Ie(this,e)}setTab(e){mp(this,e)}setTheme(e,t){yp(this,e,t)}async loadOverview(){await vl(this)}async loadCron(){const e=this.getSelectedWorkspaceInfo();this.workspaceAgentIds=e?.agents?.map(t=>t.id)??void 0,this.cronForm={...this.cronForm,accountId:e?.whatsappAccountId??void 0},await ro(this)}async handleAbortChat(){await wl(this)}removeQueuedMessage(e){Tp(this,e)}async handleSendChat(e,t){await Cp(this,e,t)}async handleWhatsAppStart(e,t){await Dv(this,e,t)}async handleWhatsAppWait(e){await Ov(this,e)}async handleWhatsAppLogout(e){await Bv(this,e)}async handleAddWhatsAppAccount(e){await Fv(this,e)}async handleRemoveWhatsAppAccount(e){await Uv(this,e)}async handleAccessCheck(){await va(this)}async handlePinSubmit(e,t){await Ey(this,e,t),this.accessState.authenticated&&this.accessState.workspace&&this.handleWorkspaceSelect(this.accessState.workspace)}async handleSetMasterPin(e){await Ty(this,e)}async handleLogout(){await _y(this)}toggleChangePinMode(){this.loginChangePinMode=!this.loginChangePinMode,this.changePinError=null,this.changePinSuccess=null}async handleChangePin(e,t,n){if(this.client){this.changePinBusy=!0,this.changePinError=null,this.changePinSuccess=null;try{const s=await this.client.request("access.verify",{account:e,pin:t});if(!s.ok){this.changePinError=s.message??"Incorrect current PIN",this.changePinBusy=!1;return}e==="__master__"?await this.client.request("access.setMasterPin",{pin:n}):await this.client.request("access.setAccountPin",{workspace:e,pin:n}),this.changePinSuccess="PIN changed successfully",this.changePinBusy=!1,setTimeout(()=>{this.loginChangePinMode=!1,this.changePinSuccess=null},2e3)}catch{this.changePinError="Failed to change PIN",this.changePinBusy=!1}}}async handleAccountPinSave(e,t,n){if(this.client){this.accountPinBusy=!0,this.accountPinError=null,this.accountPinSuccess=null;try{if(t!==null){const s=await this.client.request("access.verify",{account:e,pin:t});if(!s.ok){this.accountPinError=s.message??"Incorrect current PIN",this.accountPinBusy=!1;return}}await this.client.request("access.setAccountPin",{workspace:e,pin:n}),this.accountPinSuccess="PIN saved",this.accountPinBusy=!1,await va(this),setTimeout(()=>{this.accountPinModalOpen=!1,this.accountPinSuccess=null,this.accountPinError=null},1500)}catch{this.accountPinError="Failed to save PIN",this.accountPinBusy=!1}}}async handleLicenseStatusCheck(){await tb(this)}async handleLicenseActivate(){await nb(this)}async handleLicenseRemove(){await sb(this)}handleLicenseKeyChange(e){ib(this,e)}async handleAuthStatusCheck(){await Qv(this)}async handleAuthStart(){await Xv(this)}async handleAuthSubmitCode(e){await Zv(this,e)}handleAuthCodeChange(e){Jv(this,e)}handleSkipToWhatsApp(){eb(this)}async handleGatewayHealthCheck(){await ob(this)}async handleGatewayRestart(){await rb(this)}async handleUpdateCheck(){await Ic(this)}async handleUpdateRun(){await wv(this)}handleUpdateDismissResult(){xv(this)}handleUninstallConfirm(){this.uninstallConfirm=!0,this.uninstallConfirmText=""}handleUninstallCancel(){this.uninstallConfirm=!1,this.uninstallConfirmText="",this.uninstallError=null}handleUninstallConfirmTextChange(e){this.uninstallConfirmText=e}async handleUninstallRun(){const{runUninstall:e}=await de(async()=>{const{runUninstall:t}=await Promise.resolve().then(()=>yr);return{runUninstall:t}},void 0,import.meta.url);await e(this)}handleUninstallDismiss(){de(async()=>{const{clearUninstallDone:e}=await Promise.resolve().then(()=>yr);return{clearUninstallDone:e}},void 0,import.meta.url).then(({clearUninstallDone:e})=>{e()}),this.uninstallDone=!1,this.uninstallConfirm=!1,this.uninstallConfirmText=""}handleFilesLoad(){const e=this.resolveFilesAgentId();on(this,e),xc(this,e)}handleAdminsLoad(){const e=this.resolveAdminAgentId();de(async()=>{const{loadAdmins:t}=await Promise.resolve().then(()=>Vy);return{loadAdmins:t}},void 0,import.meta.url).then(({loadAdmins:t})=>{t(this,e)})}resolveAdminAgentId(){const e=this.getSelectedWorkspaceInfo();return e?e.agents.find(n=>n.id.endsWith("-admin")||n.id==="admin")?.id:void 0}resolveFilesAgentId(){const e=this.getSelectedWorkspaceInfo();if(e)return e.agents[0]?.id}handleChatLoad(){const e=this.resolveAdminAgentId();if(e){const t=`agent:${e}:main`;t!==this.sessionKey&&(this.sessionKey=t,this.chatMessages=[],this.chatStream=null,this.chatRunId=null,this.applySettings({...this.settings,sessionKey:t,lastActiveSessionKey:t}),this.loadAssistantIdentity())}de(async()=>{const{loadChatHistory:t}=await Promise.resolve().then(()=>ju);return{loadChatHistory:t}},void 0,import.meta.url).then(({loadChatHistory:t})=>{t(this)})}handleAdvancedLoad(){this.loadCron()}async handleChannelConfigSave(){await Wv(this)}async handleChannelConfigReload(){await Kv(this)}handleNostrProfileEdit(e,t){jv(this,e,t)}handleNostrProfileCancel(){Hv(this)}handleNostrProfileFieldChange(e,t){qv(this,e,t)}async handleNostrProfileSave(){await Vv(this)}async handleNostrProfileImport(){await Yv(this)}handleNostrProfileToggleAdvanced(){Gv(this)}async handleExecApprovalDecision(e){const t=this.execApprovalQueue[0];if(!(!t||!this.client||this.execApprovalBusy)){this.execApprovalBusy=!0,this.execApprovalError=null;try{await this.client.request("exec.approval.resolve",{id:t.id,decision:e}),this.execApprovalQueue=this.execApprovalQueue.filter(n=>n.id!==t.id)}catch(n){this.execApprovalError=`Exec approval failed: ${String(n)}`}finally{this.execApprovalBusy=!1}}}handleOpenSidebar(e){this.sidebarCloseTimer!=null&&(window.clearTimeout(this.sidebarCloseTimer),this.sidebarCloseTimer=null),this.sidebarContent=e,this.sidebarError=null,this.sidebarOpen=!0}handleCloseSidebar(){this.sidebarOpen=!1,this.sidebarCloseTimer!=null&&window.clearTimeout(this.sidebarCloseTimer),this.sidebarCloseTimer=window.setTimeout(()=>{this.sidebarOpen||(this.sidebarContent=null,this.sidebarError=null,this.sidebarCloseTimer=null)},200)}handleSplitRatioChange(e){const t=Math.max(.4,Math.min(.7,e));this.splitRatio=t,this.applySettings({...this.settings,splitRatio:t})}handleAdminsNewPhoneChange(e){this.adminsNewPhone=e,this.adminsError&&(this.adminsError=null)}handleCustomersLoad(){const e=this.selectedWorkspace??void 0;de(async()=>{const{loadCustomers:t}=await Promise.resolve().then(()=>Yy);return{loadCustomers:t}},void 0,import.meta.url).then(({loadCustomers:t})=>{t(this,e)})}handleCustomersNewPhoneChange(e){this.customersNewPhone=e,this.customersError&&(this.customersError=null)}handleCustomersNewNameChange(e){this.customersNewName=e,this.customersError&&(this.customersError=null)}async handleWorkspacesLoad(){const{loadWorkspaces:e}=await de(async()=>{const{loadWorkspaces:t}=await Promise.resolve().then(()=>Pn);return{loadWorkspaces:t}},void 0,import.meta.url);await e(this)}async handleWorkspaceCreate(e,t){const{createWorkspace:n}=await de(async()=>{const{createWorkspace:i}=await Promise.resolve().then(()=>Pn);return{createWorkspace:i}},void 0,import.meta.url),{loadChannels:s}=await de(async()=>{const{loadChannels:i}=await Promise.resolve().then(()=>yd);return{loadChannels:i}},void 0,import.meta.url);await n(this,{name:e,workspacePath:t,onCreated:i=>{if(!i.whatsappAccountId)return;const o=i.whatsappAccountId;this.handleWorkspaceSelect(e),setTimeout(async()=>{try{await s(this,!0),await this.handleWhatsAppStart(!0,o),this.whatsappLoginQrDataUrl&&(await this.handleWhatsAppWait(o),await s(this,!0),await this.handleWorkspacesLoad())}catch{}this.requestUpdate()},3e3)}})}async handleWorkspaceRemove(e){const{removeWorkspace:t}=await de(async()=>{const{removeWorkspace:n}=await Promise.resolve().then(()=>Pn);return{removeWorkspace:n}},void 0,import.meta.url);await t(this,e)}handleWorkspaceRenameStart(){const e=this.getSelectedWorkspaceInfo();this.renameWorkspaceName=e?.displayName??e?.name??"",this.renamingWorkspace=!0}handleWorkspaceRenameCancel(){this.renamingWorkspace=!1,this.renameWorkspaceName=""}async handleWorkspaceRename(e,t){const{renameWorkspace:n}=await de(async()=>{const{renameWorkspace:s}=await Promise.resolve().then(()=>Pn);return{renameWorkspace:s}},void 0,import.meta.url);await n(this,e,t),this.renamingWorkspace=!1,this.renameWorkspaceName=""}handleWorkspaceSelect(e){this.selectedWorkspace=e,localStorage.setItem("taskmaster-selected-workspace",e),ir(e),this.settings=Ms(),this.chatMessage="",this.chatAttachments=[],this.chatStream=null,this.chatStreamStartedAt=null,this.chatRunId=null,this.chatQueue=[],this.lastError=null,this.reloadCurrentPageData()}getSelectedWorkspaceInfo(){return this.selectedWorkspace?this.workspaces.find(e=>e.name===this.selectedWorkspace)??null:null}reloadCurrentPageData(){this.adminsPage?this.handleAdminsLoad():this.customersPage?this.handleCustomersLoad():this.filesPage?this.handleFilesLoad():this.chatPage?this.handleChatLoad():this.advancedPage&&this.handleAdvancedLoad()}initWorkspaceSelection(){if(this.workspaces.length===0)return;const e=localStorage.getItem("taskmaster-selected-workspace"),t=e?this.workspaces.find(n=>n.name===e):null;if(t)this.selectedWorkspace=t.name;else{const n=this.workspaces.find(s=>s.isDefault)??this.workspaces[0];this.selectedWorkspace=n.name,localStorage.setItem("taskmaster-selected-workspace",n.name)}ir(this.selectedWorkspace),this.settings=Ms(),this.reloadCurrentPageData()}render(){return av(this)}};f([g()],h.prototype,"settings",2);f([g()],h.prototype,"password",2);f([g()],h.prototype,"tab",2);f([g()],h.prototype,"onboarding",2);f([g()],h.prototype,"setup",2);f([g()],h.prototype,"filesPage",2);f([g()],h.prototype,"browserPage",2);f([g()],h.prototype,"adminsPage",2);f([g()],h.prototype,"customersPage",2);f([g()],h.prototype,"chatPage",2);f([g()],h.prototype,"advancedPage",2);f([g()],h.prototype,"advancedTab",2);f([g()],h.prototype,"connected",2);f([g()],h.prototype,"accessState",2);f([g()],h.prototype,"theme",2);f([g()],h.prototype,"themeResolved",2);f([g()],h.prototype,"hello",2);f([g()],h.prototype,"lastError",2);f([g()],h.prototype,"eventLog",2);f([g()],h.prototype,"assistantName",2);f([g()],h.prototype,"assistantAvatar",2);f([g()],h.prototype,"assistantAgentId",2);f([g()],h.prototype,"sessionKey",2);f([g()],h.prototype,"chatLoading",2);f([g()],h.prototype,"chatSending",2);f([g()],h.prototype,"chatMessage",2);f([g()],h.prototype,"chatMessages",2);f([g()],h.prototype,"chatToolMessages",2);f([g()],h.prototype,"chatStream",2);f([g()],h.prototype,"chatStreamStartedAt",2);f([g()],h.prototype,"chatRunId",2);f([g()],h.prototype,"compactionStatus",2);f([g()],h.prototype,"chatAvatarUrl",2);f([g()],h.prototype,"chatThinkingLevel",2);f([g()],h.prototype,"chatModelProvider",2);f([g()],h.prototype,"chatModel",2);f([g()],h.prototype,"chatModelCatalog",2);f([g()],h.prototype,"chatVerboseLevel",2);f([g()],h.prototype,"chatFillerEnabled",2);f([g()],h.prototype,"chatQueue",2);f([g()],h.prototype,"chatAttachments",2);f([g()],h.prototype,"sidebarOpen",2);f([g()],h.prototype,"sidebarContent",2);f([g()],h.prototype,"sidebarError",2);f([g()],h.prototype,"splitRatio",2);f([g()],h.prototype,"nodesLoading",2);f([g()],h.prototype,"nodes",2);f([g()],h.prototype,"devicesLoading",2);f([g()],h.prototype,"devicesError",2);f([g()],h.prototype,"devicesList",2);f([g()],h.prototype,"execApprovalsLoading",2);f([g()],h.prototype,"execApprovalsSaving",2);f([g()],h.prototype,"execApprovalsDirty",2);f([g()],h.prototype,"execApprovalsSnapshot",2);f([g()],h.prototype,"execApprovalsForm",2);f([g()],h.prototype,"execApprovalsSelectedAgent",2);f([g()],h.prototype,"execApprovalsTarget",2);f([g()],h.prototype,"execApprovalsTargetNodeId",2);f([g()],h.prototype,"execApprovalQueue",2);f([g()],h.prototype,"execApprovalBusy",2);f([g()],h.prototype,"execApprovalError",2);f([g()],h.prototype,"configLoading",2);f([g()],h.prototype,"configRaw",2);f([g()],h.prototype,"configRawOriginal",2);f([g()],h.prototype,"configValid",2);f([g()],h.prototype,"configIssues",2);f([g()],h.prototype,"configSaving",2);f([g()],h.prototype,"configApplying",2);f([g()],h.prototype,"updateRunning",2);f([g()],h.prototype,"applySessionKey",2);f([g()],h.prototype,"configSnapshot",2);f([g()],h.prototype,"configSchema",2);f([g()],h.prototype,"configSchemaVersion",2);f([g()],h.prototype,"configSchemaLoading",2);f([g()],h.prototype,"configUiHints",2);f([g()],h.prototype,"configForm",2);f([g()],h.prototype,"configFormOriginal",2);f([g()],h.prototype,"configFormDirty",2);f([g()],h.prototype,"configFormMode",2);f([g()],h.prototype,"configSearchQuery",2);f([g()],h.prototype,"configActiveSection",2);f([g()],h.prototype,"configActiveSubsection",2);f([g()],h.prototype,"channelsLoading",2);f([g()],h.prototype,"channelsSnapshot",2);f([g()],h.prototype,"channelsError",2);f([g()],h.prototype,"channelsLastSuccess",2);f([g()],h.prototype,"whatsappLoginMessage",2);f([g()],h.prototype,"whatsappLoginQrDataUrl",2);f([g()],h.prototype,"whatsappLoginConnected",2);f([g()],h.prototype,"whatsappBusy",2);f([g()],h.prototype,"whatsappActiveQrAccountId",2);f([g()],h.prototype,"whatsappPairedPhone",2);f([g()],h.prototype,"addingWhatsAppAccount",2);f([g()],h.prototype,"newWhatsAppAccountName",2);f([g()],h.prototype,"whatsappAccountError",2);f([g()],h.prototype,"whatsappAccountSaving",2);f([g()],h.prototype,"whatsappSettingsOpen",2);f([g()],h.prototype,"licenseKey",2);f([g()],h.prototype,"licenseBusy",2);f([g()],h.prototype,"licenseValid",2);f([g()],h.prototype,"licenseMessage",2);f([g()],h.prototype,"licenseTier",2);f([g()],h.prototype,"licenseDeviceId",2);f([g()],h.prototype,"licenseStoredKey",2);f([g()],h.prototype,"licenseRemoveConfirm",2);f([g()],h.prototype,"authConnected",2);f([g()],h.prototype,"authBusy",2);f([g()],h.prototype,"authMessage",2);f([g()],h.prototype,"authUrl",2);f([g()],h.prototype,"authCodeInput",2);f([g()],h.prototype,"authExpiresIn",2);f([g()],h.prototype,"setupStep",2);f([g()],h.prototype,"gatewayHealthy",2);f([g()],h.prototype,"gatewayHealthLoading",2);f([g()],h.prototype,"gatewayHealthMessage",2);f([g()],h.prototype,"gatewayRestartBusy",2);f([g()],h.prototype,"updateAvailable",2);f([g()],h.prototype,"currentVersion",2);f([g()],h.prototype,"latestVersion",2);f([g()],h.prototype,"updateChecking",2);f([g()],h.prototype,"updateMessage",2);f([g()],h.prototype,"updateProgressSteps",2);f([g()],h.prototype,"updateLastResult",2);f([g()],h.prototype,"uninstallConfirm",2);f([g()],h.prototype,"uninstallBusy",2);f([g()],h.prototype,"uninstallDone",2);f([g()],h.prototype,"uninstallError",2);f([g()],h.prototype,"uninstallConfirmText",2);f([g()],h.prototype,"nostrProfileFormState",2);f([g()],h.prototype,"nostrProfileAccountId",2);f([g()],h.prototype,"presenceLoading",2);f([g()],h.prototype,"presenceEntries",2);f([g()],h.prototype,"presenceError",2);f([g()],h.prototype,"presenceStatus",2);f([g()],h.prototype,"agentsLoading",2);f([g()],h.prototype,"agentsList",2);f([g()],h.prototype,"agentsError",2);f([g()],h.prototype,"sessionsLoading",2);f([g()],h.prototype,"sessionsResult",2);f([g()],h.prototype,"sessionsError",2);f([g()],h.prototype,"cronLoading",2);f([g()],h.prototype,"cronJobs",2);f([g()],h.prototype,"cronStatus",2);f([g()],h.prototype,"cronError",2);f([g()],h.prototype,"cronForm",2);f([g()],h.prototype,"cronRunsJobId",2);f([g()],h.prototype,"cronRuns",2);f([g()],h.prototype,"cronBusy",2);f([g()],h.prototype,"cronNewEventModal",2);f([g()],h.prototype,"cronDetailJobId",2);f([g()],h.prototype,"browserScreencastActive",2);f([g()],h.prototype,"browserScreencastFrame",2);f([g()],h.prototype,"browserScreencastMetadata",2);f([g()],h.prototype,"browserHandoffPending",2);f([g()],h.prototype,"browserHandoffReason",2);f([g()],h.prototype,"browserHandoffId",2);f([g()],h.prototype,"browserInputMode",2);f([g()],h.prototype,"browserLoading",2);f([g()],h.prototype,"browserError",2);f([g()],h.prototype,"filesLoading",2);f([g()],h.prototype,"filesTree",2);f([g()],h.prototype,"filesRoot",2);f([g()],h.prototype,"filesError",2);f([g()],h.prototype,"filesSelectedPath",2);f([g()],h.prototype,"filesSelectedPaths",2);f([g()],h.prototype,"filesPreviewContent",2);f([g()],h.prototype,"filesPreviewLoading",2);f([g()],h.prototype,"filesPreviewBinary",2);f([g()],h.prototype,"filesPreviewSize",2);f([g()],h.prototype,"filesExpandedDirs",2);f([g()],h.prototype,"filesMessage",2);f([g()],h.prototype,"filesUploadBusy",2);f([g()],h.prototype,"filesReindexBusy",2);f([g()],h.prototype,"filesMemoryStatus",2);f([g()],h.prototype,"skillsLoading",2);f([g()],h.prototype,"skillsReport",2);f([g()],h.prototype,"skillsError",2);f([g()],h.prototype,"skillsFilter",2);f([g()],h.prototype,"skillEdits",2);f([g()],h.prototype,"skillsBusyKey",2);f([g()],h.prototype,"skillMessages",2);f([g()],h.prototype,"adminsLoading",2);f([g()],h.prototype,"adminPhones",2);f([g()],h.prototype,"adminsError",2);f([g()],h.prototype,"adminsSaving",2);f([g()],h.prototype,"adminsNewPhone",2);f([g()],h.prototype,"customersLoading",2);f([g()],h.prototype,"customersSaving",2);f([g()],h.prototype,"customersRecords",2);f([g()],h.prototype,"customersError",2);f([g()],h.prototype,"customersSearchQuery",2);f([g()],h.prototype,"customersEditingId",2);f([g()],h.prototype,"customersShowAddForm",2);f([g()],h.prototype,"customersNewPhone",2);f([g()],h.prototype,"customersNewName",2);f([g()],h.prototype,"imessageEnableConfirm",2);f([g()],h.prototype,"imessageEnabling",2);f([g()],h.prototype,"infoModalOpen",2);f([g()],h.prototype,"workspaces",2);f([g()],h.prototype,"workspacesLoading",2);f([g()],h.prototype,"workspacesError",2);f([g()],h.prototype,"selectedWorkspace",2);f([g()],h.prototype,"addingWorkspace",2);f([g()],h.prototype,"newWorkspaceName",2);f([g()],h.prototype,"newWorkspacePath",2);f([g()],h.prototype,"newWorkspacePin",2);f([g()],h.prototype,"accountPinModalOpen",2);f([g()],h.prototype,"accountPinBusy",2);f([g()],h.prototype,"accountPinError",2);f([g()],h.prototype,"accountPinSuccess",2);f([g()],h.prototype,"apiKeyProviders",2);f([g()],h.prototype,"apiKeyModalOpen",2);f([g()],h.prototype,"apiKeyBusy",2);f([g()],h.prototype,"apiKeyError",2);f([g()],h.prototype,"apiKeySuccess",2);f([g()],h.prototype,"authApiKeyMode",2);f([g()],h.prototype,"authApiKeyInput",2);f([g()],h.prototype,"authApiKeyBusy",2);f([g()],h.prototype,"authApiKeyError",2);f([g()],h.prototype,"pinChanging",2);f([g()],h.prototype,"pinChangeBusy",2);f([g()],h.prototype,"pinChangeError",2);f([g()],h.prototype,"loginChangePinMode",2);f([g()],h.prototype,"changePinBusy",2);f([g()],h.prototype,"changePinError",2);f([g()],h.prototype,"changePinSuccess",2);f([g()],h.prototype,"workspaceSaving",2);f([g()],h.prototype,"workspaceRemoveConfirm",2);f([g()],h.prototype,"renamingWorkspace",2);f([g()],h.prototype,"renameWorkspaceName",2);f([g()],h.prototype,"debugLoading",2);f([g()],h.prototype,"debugStatus",2);f([g()],h.prototype,"debugHealth",2);f([g()],h.prototype,"debugModels",2);f([g()],h.prototype,"debugHeartbeat",2);f([g()],h.prototype,"debugCallMethod",2);f([g()],h.prototype,"debugCallParams",2);f([g()],h.prototype,"debugCallResult",2);f([g()],h.prototype,"debugCallError",2);f([g()],h.prototype,"logsLoading",2);f([g()],h.prototype,"logsError",2);f([g()],h.prototype,"logsFile",2);f([g()],h.prototype,"logsEntries",2);f([g()],h.prototype,"logsFilterText",2);f([g()],h.prototype,"logsLevelFilters",2);f([g()],h.prototype,"logsAutoFollow",2);f([g()],h.prototype,"logsTruncated",2);f([g()],h.prototype,"logsCursor",2);f([g()],h.prototype,"logsLastFetchAt",2);f([g()],h.prototype,"logsLimit",2);f([g()],h.prototype,"logsMaxBytes",2);f([g()],h.prototype,"logsAtBottom",2);f([g()],h.prototype,"logsSubTab",2);f([g()],h.prototype,"sessionLogsLoading",2);f([g()],h.prototype,"sessionLogsError",2);f([g()],h.prototype,"sessionLogsEntries",2);f([g()],h.prototype,"sessionLogsFilterText",2);f([g()],h.prototype,"sessionLogsTypeFilters",2);f([g()],h.prototype,"sessionLogsAgentFilters",2);f([g()],h.prototype,"sessionLogsAgents",2);f([g()],h.prototype,"sessionLogsAutoFollow",2);f([g()],h.prototype,"sessionLogsFull",2);f([g()],h.prototype,"sessionLogsCursors",2);f([g()],h.prototype,"sessionLogsLastFetchAt",2);f([g()],h.prototype,"sessionLogsAtBottom",2);f([g()],h.prototype,"chatUserNearBottom",2);h=f([_a("taskmaster-app")],h);
|
|
2862
|
+
//# sourceMappingURL=index-D9HCutTJ.js.map
|