@makemore/agent-frontend 2.9.0 → 2.10.0

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.
@@ -1,4 +1,4 @@
1
- var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var lt=(e,t,s)=>t in e?he(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var it=(e,t)=>{for(var s in t)he(e,s,{get:t[s],enumerable:!0})},ct=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of ot(t))!rt.call(e,a)&&a!==s&&he(e,a,{get:()=>t[a],enumerable:!(n=at(t,a))||n.enumerable});return e};var dt=e=>ct(he({},"__esModule",{value:!0}),e);var Ie=(e,t,s)=>(lt(e,typeof t!="symbol"?t+"":t,s),s);var At={};it(At,{ChatWidget:()=>ke,default:()=>xt});module.exports=dt(At);var _e=require("preact"),st=require("htm/preact");var Z=require("htm/preact"),R=require("preact/hooks");var ae=require("htm/preact");function ut(e){return e.replace(/_([a-z])/g,(t,s)=>s.toUpperCase())}function be(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function me(e){return Array.isArray(e)?e.map(me):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,s])=>[ut(t),me(s)])):e}function ge(e){return Array.isArray(e)?e.map(ge):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,s])=>[be(t),ge(s)])):e}function fe(){return"msg-"+Date.now()+"-"+Math.random().toString(36).substr(2,9)}function U(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function xe(e){if(!e)return"";try{let t=new Date(e),n=new Date-t,a=Math.floor(n/6e4),l=Math.floor(n/36e5),$=Math.floor(n/864e5);return a<1?"Just now":a<60?`${a}m ago`:l<24?`${l}h ago`:$<7?`${$}d ago`:t.toLocaleDateString()}catch{return""}}function Ae(e,t=null){if(t)return t(e);let s=U(e);return s=s.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>"),s=s.replace(/__(.+?)__/g,"<strong>$1</strong>"),s=s.replace(/\*(.+?)\*/g,"<em>$1</em>"),s=s.replace(/_(.+?)_/g,"<em>$1</em>"),s=s.replace(/`(.+?)`/g,"<code>$1</code>"),s=s.replace(/\[(.+?)\]\((.+?)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>'),s=s.replace(/\n/g,"<br>"),s}function Re(e=""){let t=s=>e?`${s}_${e}`:s;return{get(s){try{return localStorage.getItem(t(s))}catch{return null}},set(s,n){try{let a=t(s);n===null?localStorage.removeItem(a):localStorage.setItem(a,n)}catch{}}}}function De(e="csrftoken"){let t=document.cookie.split(";");for(let n of t){let[a,l]=n.trim().split("=");if(a===e)return decodeURIComponent(l)}let s=document.querySelector('meta[name="csrf-token"]');return s?s.getAttribute("content"):null}function $e(e){if(e===0)return"0 B";let t=1024,s=["B","KB","MB","GB"],n=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,n)).toFixed(1))+" "+s[n]}function ye(e){return e?e.startsWith("image/")?"\u{1F5BC}\uFE0F":e.startsWith("video/")?"\u{1F3AC}":e.startsWith("audio/")?"\u{1F3B5}":e.includes("pdf")?"\u{1F4D5}":e.includes("spreadsheet")||e.includes("excel")?"\u{1F4CA}":e.includes("document")||e.includes("word")?"\u{1F4DD}":e.includes("presentation")||e.includes("powerpoint")?"\u{1F4FD}\uFE0F":e.includes("zip")||e.includes("compressed")?"\u{1F5DC}\uFE0F":(e.includes("text/"),"\u{1F4C4}"):"\u{1F4C4}"}function pt(e){if(!e||typeof e!="string")return 0;let t=e.replace("#","");if(t.length!==6&&t.length!==3)return 0;let s=t.length===3?t.split("").map(i=>i+i).join(""):t,n=parseInt(s.substr(0,2),16)/255,a=parseInt(s.substr(2,2),16)/255,l=parseInt(s.substr(4,2),16)/255,$=i=>i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4);return .2126*$(n)+.7152*$(a)+.0722*$(l)}function Oe(e){return pt(e)>.179?"#000000":"#ffffff"}function Fe({config:e,debugMode:t,isExpanded:s,isSpeaking:n,messagesCount:a,isLoading:l,currentAgent:$,onClose:i,onToggleExpand:f,onToggleDebug:y,onToggleTTS:u,onClear:k,onToggleSidebar:c}){let{title:S,primaryColor:o,embedded:g,showConversationSidebar:w,showClearButton:v,showDebugButton:T,enableDebugMode:m,showTTSButton:H,showExpandButton:J,enableTTS:x,elevenLabsApiKey:D,ttsProxyUrl:O}=e,K=D||O;return ae.html`
1
+ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var lt=(e,t,s)=>t in e?he(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var it=(e,t)=>{for(var s in t)he(e,s,{get:t[s],enumerable:!0})},ct=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of ot(t))!rt.call(e,a)&&a!==s&&he(e,a,{get:()=>t[a],enumerable:!(n=at(t,a))||n.enumerable});return e};var dt=e=>ct(he({},"__esModule",{value:!0}),e);var Ie=(e,t,s)=>(lt(e,typeof t!="symbol"?t+"":t,s),s);var At={};it(At,{ChatWidget:()=>ke,default:()=>xt});module.exports=dt(At);var _e=require("preact"),st=require("htm/preact");var Z=require("htm/preact"),R=require("preact/hooks");var ae=require("htm/preact");function ut(e){return e.replace(/_([a-z])/g,(t,s)=>s.toUpperCase())}function be(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function me(e){return Array.isArray(e)?e.map(me):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,s])=>[ut(t),me(s)])):e}function ge(e){return Array.isArray(e)?e.map(ge):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,s])=>[be(t),ge(s)])):e}function fe(){return"msg-"+Date.now()+"-"+Math.random().toString(36).substr(2,9)}function U(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function xe(e){if(!e)return"";try{let t=new Date(e),n=new Date-t,a=Math.floor(n/6e4),l=Math.floor(n/36e5),$=Math.floor(n/864e5);return a<1?"Just now":a<60?`${a}m ago`:l<24?`${l}h ago`:$<7?`${$}d ago`:t.toLocaleDateString()}catch{return""}}function Ae(e,t=null){if(t)return t(e);let s=U(e);return s=s.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>"),s=s.replace(/__(.+?)__/g,"<strong>$1</strong>"),s=s.replace(/\*(.+?)\*/g,"<em>$1</em>"),s=s.replace(/_(.+?)_/g,"<em>$1</em>"),s=s.replace(/`(.+?)`/g,"<code>$1</code>"),s=s.replace(/\[(.+?)\]\((.+?)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>'),s=s.replace(/\n/g,"<br>"),s}function Re(e=""){let t=s=>e?`${s}_${e}`:s;return{get(s){try{return localStorage.getItem(t(s))}catch{return null}},set(s,n){try{let a=t(s);n===null?localStorage.removeItem(a):localStorage.setItem(a,n)}catch{}}}}function De(e="csrftoken"){let t=document.cookie.split(";");for(let n of t){let[a,l]=n.trim().split("=");if(a===e)return decodeURIComponent(l)}let s=document.querySelector('meta[name="csrf-token"]');return s?s.getAttribute("content"):null}function $e(e){if(e===0)return"0 B";let t=1024,s=["B","KB","MB","GB"],n=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,n)).toFixed(1))+" "+s[n]}function ye(e){return e?e.startsWith("image/")?"\u{1F5BC}\uFE0F":e.startsWith("video/")?"\u{1F3AC}":e.startsWith("audio/")?"\u{1F3B5}":e.includes("pdf")?"\u{1F4D5}":e.includes("spreadsheet")||e.includes("excel")?"\u{1F4CA}":e.includes("document")||e.includes("word")?"\u{1F4DD}":e.includes("presentation")||e.includes("powerpoint")?"\u{1F4FD}\uFE0F":e.includes("zip")||e.includes("compressed")?"\u{1F5DC}\uFE0F":(e.includes("text/"),"\u{1F4C4}"):"\u{1F4C4}"}function pt(e){if(!e||typeof e!="string")return 0;let t=e.replace("#","");if(t.length!==6&&t.length!==3)return 0;let s=t.length===3?t.split("").map(i=>i+i).join(""):t,n=parseInt(s.substr(0,2),16)/255,a=parseInt(s.substr(2,2),16)/255,l=parseInt(s.substr(4,2),16)/255,$=i=>i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4);return .2126*$(n)+.7152*$(a)+.0722*$(l)}function Fe(e){return pt(e)>.179?"#000000":"#ffffff"}function Oe({config:e,debugMode:t,isExpanded:s,isSpeaking:n,messagesCount:a,isLoading:l,currentAgent:$,onClose:i,onToggleExpand:f,onToggleDebug:y,onToggleTTS:u,onClear:k,onToggleSidebar:c}){let{title:S,primaryColor:o,embedded:g,showConversationSidebar:w,showClearButton:v,showDebugButton:T,enableDebugMode:m,showTTSButton:W,showExpandButton:J,enableTTS:x,elevenLabsApiKey:D,ttsProxyUrl:F}=e,K=D||F;return ae.html`
2
2
  <div class="cw-header" style=${{backgroundColor:o}}>
3
3
  ${w&&ae.html`
4
4
  <button
@@ -42,7 +42,7 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
42
42
  >🐛</button>
43
43
  `}
44
44
 
45
- ${H&&K&&ae.html`
45
+ ${W&&K&&ae.html`
46
46
  <button
47
47
  class="cw-header-btn ${x?"cw-btn-active":""}"
48
48
  onClick=${u}
@@ -67,20 +67,20 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
67
67
  `}
68
68
  </div>
69
69
  </div>
70
- `}var ie=require("htm/preact"),de=require("preact/hooks");var W=require("htm/preact"),oe=require("preact/hooks");function Se({msg:e,show:t,onToggle:s}){return t?W.html`
70
+ `}var ie=require("htm/preact"),de=require("preact/hooks");var H=require("htm/preact"),oe=require("preact/hooks");function Se({msg:e,show:t,onToggle:s}){return t?H.html`
71
71
  <div class="cw-debug-payload">
72
72
  <button class="cw-debug-payload-close" onClick=${s}>×</button>
73
73
  <pre class="cw-debug-payload-content">${JSON.stringify(e,null,2)}</pre>
74
74
  </div>
75
- `:W.html`
75
+ `:H.html`
76
76
  <button
77
77
  class="cw-debug-payload-btn"
78
78
  onClick=${s}
79
79
  title="Show message payload"
80
80
  >{ }</button>
81
- `}function Pe({onEdit:e,onRetry:t,isLoading:s,position:n,showEdit:a=!0}){return s?null:W.html`
81
+ `}function Pe({onEdit:e,onRetry:t,isLoading:s,position:n,showEdit:a=!0}){return s?null:H.html`
82
82
  <div class="cw-message-actions cw-message-actions-${n||"left"}">
83
- ${a&&W.html`
83
+ ${a&&H.html`
84
84
  <button
85
85
  class="cw-message-action-btn"
86
86
  onClick=${e}
@@ -104,7 +104,7 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
104
104
  </svg>
105
105
  </button>
106
106
  </div>
107
- `}function ht({initialContent:e,onSave:t,onCancel:s}){let[n,a]=(0,oe.useState)(e),l=(0,oe.useRef)(null);return(0,oe.useEffect)(()=>{l.current&&(l.current.focus(),l.current.setSelectionRange(n.length,n.length),l.current.style.height="auto",l.current.style.height=l.current.scrollHeight+"px")},[]),W.html`
107
+ `}function ht({initialContent:e,onSave:t,onCancel:s}){let[n,a]=(0,oe.useState)(e),l=(0,oe.useRef)(null);return(0,oe.useEffect)(()=>{l.current&&(l.current.focus(),l.current.setSelectionRange(n.length,n.length),l.current.style.height="auto",l.current.style.height=l.current.scrollHeight+"px")},[]),H.html`
108
108
  <div class="cw-inline-edit">
109
109
  <textarea
110
110
  ref=${l}
@@ -128,33 +128,33 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
128
128
  >Save & Send</button>
129
129
  </div>
130
130
  </div>
131
- `}function Ke({msg:e,debugMode:t,markdownParser:s,onEdit:n,onRetry:a,isLoading:l,messageIndex:$}){let[i,f]=(0,oe.useState)(!1),[y,u]=(0,oe.useState)(!1),[k,c]=(0,oe.useState)(!1),S=e.role==="user",o=e.role==="system",g=e.type==="tool_call",w=e.type==="tool_result",v=e.type==="error",T=e.type==="sub_agent_start",m=e.type==="sub_agent_end",H=e.type==="agent_context";if(o&&!t)return null;if(T||m||H)return W.html`
131
+ `}function Ke({msg:e,debugMode:t,markdownParser:s,onEdit:n,onRetry:a,isLoading:l,messageIndex:$}){let[i,f]=(0,oe.useState)(!1),[y,u]=(0,oe.useState)(!1),[k,c]=(0,oe.useState)(!1),S=e.role==="user",o=e.role==="system",g=e.type==="tool_call",w=e.type==="tool_result",v=e.type==="error",T=e.type==="sub_agent_start",m=e.type==="sub_agent_end",W=e.type==="agent_context";if(o&&!t)return null;if(T||m||W)return H.html`
132
132
  <div class="cw-agent-context ${T?"cw-agent-delegating":""} ${m?"cw-agent-returned":""}" style="position: relative;">
133
133
  <span class="cw-agent-context-icon">${T?"\u{1F517}":m?"\u2713":"\u{1F916}"}</span>
134
134
  <span class="cw-agent-context-text">${e.content}</span>
135
- ${e.metadata?.agentName&&W.html`
135
+ ${e.metadata?.agentName&&H.html`
136
136
  <span class="cw-agent-context-name">${e.metadata.agentName}</span>
137
137
  `}
138
- ${t&&W.html`<${Se} msg=${e} show=${y} onToggle=${()=>u(!y)} />`}
138
+ ${t&&H.html`<${Se} msg=${e} show=${y} onToggle=${()=>u(!y)} />`}
139
139
  </div>
140
- `;if(g||w){let b=e.metadata?.arguments||e.metadata?.result,E=d=>{if(typeof d=="string")try{return JSON.stringify(JSON.parse(d),null,2)}catch{return d}return JSON.stringify(d,null,2)};return W.html`
140
+ `;if(g||w){let b=e.metadata?.arguments||e.metadata?.result,E=d=>{if(typeof d=="string")try{return JSON.stringify(JSON.parse(d),null,2)}catch{return d}return JSON.stringify(d,null,2)};return H.html`
141
141
  <div class="cw-tool-message ${w?"cw-tool-result":"cw-tool-call"}" style="position: relative;">
142
142
  <span class="cw-tool-label" onClick=${()=>b&&f(!i)}>
143
143
  ${e.content}
144
- ${b&&W.html`<span class="cw-tool-expand">${i?"\u25BC":"\u25B6"}</span>`}
144
+ ${b&&H.html`<span class="cw-tool-expand">${i?"\u25BC":"\u25B6"}</span>`}
145
145
  </span>
146
- ${i&&b&&W.html`
146
+ ${i&&b&&H.html`
147
147
  <pre class="cw-tool-details">${U(E(g?e.metadata.arguments:e.metadata.result))}</pre>
148
148
  `}
149
- ${t&&W.html`<${Se} msg=${e} show=${y} onToggle=${()=>u(!y)} />`}
149
+ ${t&&H.html`<${Se} msg=${e} show=${y} onToggle=${()=>u(!y)} />`}
150
150
  </div>
151
- `}let J=["cw-message",S&&"cw-message-user",v&&"cw-message-error"].filter(Boolean).join(" "),x=`cw-message-row ${S?"cw-message-row-user":""}`,D=e.role==="assistant"?Ae(e.content,s):U(e.content),O=e.files&&e.files.length>0,K=()=>O?W.html`
151
+ `}let J=["cw-message",S&&"cw-message-user",v&&"cw-message-error"].filter(Boolean).join(" "),x=`cw-message-row ${S?"cw-message-row-user":""}`,D=e.role==="assistant"?Ae(e.content,s):U(e.content),F=e.files&&e.files.length>0,K=()=>F?H.html`
152
152
  <div class="cw-message-attachments">
153
- ${e.files.map(b=>b.type&&b.type.startsWith("image/")?W.html`
153
+ ${e.files.map(b=>b.type&&b.type.startsWith("image/")?H.html`
154
154
  <a class="cw-attachment-thumbnail" href=${b.url} target="_blank" title=${b.name}>
155
155
  <img src=${b.url} alt=${b.name} />
156
156
  </a>
157
- `:W.html`
157
+ `:H.html`
158
158
  <a class="cw-attachment-file" href=${b.url} target="_blank" title=${b.name}>
159
159
  <span class="cw-attachment-icon">${ye(b.type)}</span>
160
160
  <span class="cw-attachment-info">
@@ -164,7 +164,7 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
164
164
  </a>
165
165
  `)}
166
166
  </div>
167
- `:null,z=b=>{c(!1),n&&n($,b)},V=()=>{a&&a($)};if(S&&k)return W.html`
167
+ `:null,z=b=>{c(!1),n&&n($,b)},V=()=>{a&&a($)};if(S&&k)return H.html`
168
168
  <div class=${x} style="position: relative;">
169
169
  ${K()}
170
170
  <${ht}
@@ -173,10 +173,10 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
173
173
  onCancel=${()=>c(!1)}
174
174
  />
175
175
  </div>
176
- `;let h=S&&n&&a,p=e.role==="assistant"&&a&&!l;return W.html`
176
+ `;let h=S&&n&&a,p=e.role==="assistant"&&a&&!l;return H.html`
177
177
  <div class="${x} ${h||p?"cw-message-row-with-actions":""}">
178
178
  ${K()}
179
- ${h&&W.html`
179
+ ${h&&H.html`
180
180
  <div class="cw-user-actions-wrapper">
181
181
  <${Pe}
182
182
  onEdit=${()=>c(!0)}
@@ -188,10 +188,10 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
188
188
  <div class=${J} dangerouslySetInnerHTML=${{__html:D}} />
189
189
  </div>
190
190
  `}
191
- ${!h&&W.html`
191
+ ${!h&&H.html`
192
192
  <div class=${J} dangerouslySetInnerHTML=${{__html:D}} />
193
193
  `}
194
- ${p&&W.html`
194
+ ${p&&H.html`
195
195
  <${Pe}
196
196
  onRetry=${V}
197
197
  isLoading=${l}
@@ -199,7 +199,7 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
199
199
  showEdit=${!1}
200
200
  />
201
201
  `}
202
- ${t&&W.html`<${Se} msg=${e} show=${y} onToggle=${()=>u(!y)} />`}
202
+ ${t&&H.html`<${Se} msg=${e} show=${y} onToggle=${()=>u(!y)} />`}
203
203
  </div>
204
204
  `}function Le({messages:e,isLoading:t,hasMoreMessages:s,loadingMoreMessages:n,onLoadMore:a,onEditMessage:l,onRetryMessage:$,debugMode:i,markdownParser:f,emptyStateTitle:y,emptyStateMessage:u}){let k=(0,de.useRef)(null),c=(0,de.useRef)(!0),S=g=>{let w=g.target,v=w.scrollHeight-w.scrollTop-w.clientHeight<100;if(c.current=v,w.scrollTop<50&&s&&!n){let T=w.scrollHeight;a().then(()=>{let m=w.scrollHeight;w.scrollTop=m-T+w.scrollTop})}};(0,de.useEffect)(()=>{let g=k.current;g&&c.current&&requestAnimationFrame(()=>{g.scrollTop=g.scrollHeight})},[e,t]),(0,de.useEffect)(()=>{let g=k.current;g&&e.length<=2&&(c.current=!0,requestAnimationFrame(()=>{g.scrollTop=g.scrollHeight}))},[e.length]);let o=e.length===0;return ie.html`
205
205
  <div class="cw-messages" ref=${k} onScroll=${S}>
@@ -241,7 +241,7 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
241
241
  </div>
242
242
  `}
243
243
  </div>
244
- `}var te=require("htm/preact"),G=require("preact/hooks");var Ce=typeof window<"u"?window.SpeechRecognition||window.webkitSpeechRecognition:null;function Ne({onSend:e,onCancel:t,isLoading:s,placeholder:n,primaryColor:a,enableVoice:l=!0,enableFiles:$=!0}){let[i,f]=(0,G.useState)(""),[y,u]=(0,G.useState)([]),[k,c]=(0,G.useState)(!1),[S,o]=(0,G.useState)(!1),[g]=(0,G.useState)(()=>!!Ce),w=(0,G.useRef)(null),v=(0,G.useRef)(null),T=(0,G.useRef)(null),m=(0,G.useRef)(!1);(0,G.useEffect)(()=>{!s&&w.current&&w.current.focus()},[s]),(0,G.useEffect)(()=>{w.current&&(w.current.style.height="auto",w.current.style.height=Math.min(w.current.scrollHeight,150)+"px")},[i]),(0,G.useEffect)(()=>()=>{m.current=!1,T.current&&T.current.abort()},[]);let H=d=>{d.preventDefault(),(i.trim()||y.length>0)&&!s&&(e(i,y),f(""),u([]),w.current&&(w.current.style.height="auto"),v.current&&(v.current.value=""))},J=d=>{let A=Array.from(d.target.files||[]);A.length>0&&u(P=>[...P,...A])},x=d=>{u(A=>A.filter((P,r)=>r!==d))},D=d=>{d.preventDefault(),v.current&&!s&&v.current.click()},O=d=>{d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),H(d))},K=d=>{s&&t&&(d.preventDefault(),t())},z=()=>{if(!Ce||s)return;m.current=!0;let d=new Ce;d.continuous=!0,d.interimResults=!0,d.lang=navigator.language||"en-US";let A=i,P="";d.onstart=()=>{o(!0)},d.onresult=r=>{P="";for(let I=r.resultIndex;I<r.results.length;I++){let N=r.results[I][0].transcript;r.results[I].isFinal?A+=(A?" ":"")+N:P+=N}f(A+(P?" "+P:""))},d.onerror=r=>{if(r.error==="no-speech"||r.error==="aborted"){console.log("[ChatWidget] Speech recognition:",r.error,"- continuing...");return}console.warn("[ChatWidget] Speech recognition error:",r.error),m.current=!1,o(!1),f(A||i)},d.onend=()=>{if(m.current){console.log("[ChatWidget] Recognition paused, restarting...");try{d.start();return}catch(r){console.warn("[ChatWidget] Could not restart recognition:",r)}}o(!1),A&&f(A),T.current=null},T.current=d,d.start()},V=()=>{m.current=!1,T.current&&T.current.stop()},h=d=>{d.preventDefault(),S?V():z()},M=te.html`
244
+ `}var te=require("htm/preact"),G=require("preact/hooks");var Ce=typeof window<"u"?window.SpeechRecognition||window.webkitSpeechRecognition:null;function Ne({onSend:e,onCancel:t,isLoading:s,placeholder:n,primaryColor:a,enableVoice:l=!0,enableFiles:$=!0}){let[i,f]=(0,G.useState)(""),[y,u]=(0,G.useState)([]),[k,c]=(0,G.useState)(!1),[S,o]=(0,G.useState)(!1),[g]=(0,G.useState)(()=>!!Ce),w=(0,G.useRef)(null),v=(0,G.useRef)(null),T=(0,G.useRef)(null),m=(0,G.useRef)(!1);(0,G.useEffect)(()=>{!s&&w.current&&w.current.focus()},[s]),(0,G.useEffect)(()=>{w.current&&(w.current.style.height="auto",w.current.style.height=Math.min(w.current.scrollHeight,150)+"px")},[i]),(0,G.useEffect)(()=>()=>{m.current=!1,T.current&&T.current.abort()},[]);let W=d=>{d.preventDefault(),(i.trim()||y.length>0)&&!s&&(e(i,y),f(""),u([]),w.current&&(w.current.style.height="auto"),v.current&&(v.current.value=""))},J=d=>{let A=Array.from(d.target.files||[]);A.length>0&&u(P=>[...P,...A])},x=d=>{u(A=>A.filter((P,r)=>r!==d))},D=d=>{d.preventDefault(),v.current&&!s&&v.current.click()},F=d=>{d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),W(d))},K=d=>{s&&t&&(d.preventDefault(),t())},z=()=>{if(!Ce||s)return;m.current=!0;let d=new Ce;d.continuous=!0,d.interimResults=!0,d.lang=navigator.language||"en-US";let A=i,P="";d.onstart=()=>{o(!0)},d.onresult=r=>{P="";for(let I=r.resultIndex;I<r.results.length;I++){let N=r.results[I][0].transcript;r.results[I].isFinal?A+=(A?" ":"")+N:P+=N}f(A+(P?" "+P:""))},d.onerror=r=>{if(r.error==="no-speech"||r.error==="aborted"){console.log("[ChatWidget] Speech recognition:",r.error,"- continuing...");return}console.warn("[ChatWidget] Speech recognition error:",r.error),m.current=!1,o(!1),f(A||i)},d.onend=()=>{if(m.current){console.log("[ChatWidget] Recognition paused, restarting...");try{d.start();return}catch(r){console.warn("[ChatWidget] Could not restart recognition:",r)}}o(!1),A&&f(A),T.current=null},T.current=d,d.start()},V=()=>{m.current=!1,T.current&&T.current.stop()},h=d=>{d.preventDefault(),S?V():z()},M=te.html`
245
245
  <svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor">
246
246
  <rect x="2" y="2" width="10" height="10" rx="1" />
247
247
  </svg>
@@ -257,7 +257,7 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
257
257
  <path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path>
258
258
  </svg>
259
259
  `,b=l&&g,E=$;return te.html`
260
- <form class="cw-input-form" onSubmit=${H}>
260
+ <form class="cw-input-form" onSubmit=${W}>
261
261
  <input
262
262
  type="file"
263
263
  ref=${v}
@@ -288,7 +288,7 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
288
288
  placeholder=${U(n)}
289
289
  value=${i}
290
290
  onInput=${d=>f(d.target.value)}
291
- onKeyDown=${O}
291
+ onKeyDown=${F}
292
292
  disabled=${s}
293
293
  rows="1"
294
294
  />
@@ -326,7 +326,7 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
326
326
  ${s?k?M:te.html`<span class="cw-spinner"></span>`:"\u27A4"}
327
327
  </button>
328
328
  </form>
329
- `}var ue=require("htm/preact");function We({isOpen:e,conversations:t,conversationsLoading:s,currentConversationId:n,onClose:a,onNewConversation:l,onSwitchConversation:$}){return ue.html`
329
+ `}var ue=require("htm/preact");function He({isOpen:e,conversations:t,conversationsLoading:s,currentConversationId:n,onClose:a,onNewConversation:l,onSwitchConversation:$}){return ue.html`
330
330
  <div class="cw-sidebar ${e?"cw-sidebar-open":""}">
331
331
  <div class="cw-sidebar-header">
332
332
  <span>Conversations</span>
@@ -365,7 +365,7 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
365
365
  class="cw-sidebar-overlay ${e?"cw-sidebar-overlay-visible":""}"
366
366
  onClick=${a}
367
367
  />
368
- `}var ce=require("htm/preact"),He=require("preact/hooks");function Ve({availableModels:e,selectedModel:t,onSelectModel:s,thinkingEnabled:n,onToggleThinking:a,disabled:l}){let[$,i]=(0,He.useState)(!1);if(!e||e.length===0)return null;let f=e.find(o=>o.id===t),y=f?.name||"Select Model",u=f?.supports_thinking||!1,k=()=>{l||i(!$)},c=o=>{s(o),i(!1)},S=o=>{o.stopPropagation(),a&&u&&a(!n)};return ce.html`
368
+ `}var ce=require("htm/preact"),We=require("preact/hooks");function Ve({availableModels:e,selectedModel:t,onSelectModel:s,thinkingEnabled:n,onToggleThinking:a,disabled:l}){let[$,i]=(0,We.useState)(!1);if(!e||e.length===0)return null;let f=e.find(o=>o.id===t),y=f?.name||"Select Model",u=f?.supports_thinking||!1,k=()=>{l||i(!$)},c=o=>{s(o),i(!1)},S=o=>{o.stopPropagation(),a&&u&&a(!n)};return ce.html`
369
369
  <div class="cw-model-selector">
370
370
  <button
371
371
  class="cw-model-btn"
@@ -583,7 +583,7 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
583
583
  </div>
584
584
  </div>
585
585
  </div>
586
- `}var L=require("preact/hooks");function je(e,t,s){let[n,a]=(0,L.useState)([]),[l,$]=(0,L.useState)(!1),[i,f]=(0,L.useState)(null),[y,u]=(0,L.useState)(()=>s?.get(e.conversationIdKey)||null),[k,c]=(0,L.useState)(!1),[S,o]=(0,L.useState)(!1),[g,w]=(0,L.useState)(0),v=(0,L.useRef)(null),T=(0,L.useRef)(null);(0,L.useEffect)(()=>{y&&s?.set(e.conversationIdKey,y)},[y,e.conversationIdKey,s]);let m=(0,L.useCallback)(async(h,M,p)=>{v.current&&v.current.close();let C=e.apiPaths.runEvents.replace("{runId}",h),b=`${e.backendUrl}${C}`;M&&(b+=`?anonymous_token=${encodeURIComponent(M)}`);let E=new EventSource(b);v.current=E;let d="";E.addEventListener("assistant.message",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("assistant.message",r.payload);let I=r.payload.content;I&&(d+=I,a(N=>{let q=N[N.length-1];return q?.role==="assistant"&&q.id.startsWith("assistant-stream-")?[...N.slice(0,-1),{...q,content:d}]:[...N,{id:"assistant-stream-"+Date.now(),role:"assistant",content:d,timestamp:new Date,type:"message"}]}))}catch(r){console.error("[ChatWidget] Parse error:",r)}}),E.addEventListener("tool.call",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("tool.call",r.payload),a(I=>[...I,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${r.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:r.payload.name,arguments:r.payload.arguments,toolCallId:r.payload.id}}])}catch(r){console.error("[ChatWidget] Parse error:",r)}}),E.addEventListener("tool.result",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("tool.result",r.payload);let I=r.payload.result,N=I?.error;a(q=>[...q,{id:"tool-result-"+Date.now(),role:"system",content:N?`\u274C ${I.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:r.payload.name,result:I,toolCallId:r.payload.tool_call_id}}])}catch(r){console.error("[ChatWidget] Parse error:",r)}}),E.addEventListener("custom",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("custom",r.payload),r.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(r.payload),r.payload?.type==="agent_context"&&a(I=>[...I,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${r.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:r.payload.agent_key,agentName:r.payload.agent_name,action:r.payload.action}}])}catch(r){console.error("[ChatWidget] Parse error:",r)}}),E.addEventListener("sub_agent.start",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("sub_agent.start",r.payload),a(I=>[...I,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${r.payload.agent_name||r.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:r.payload.sub_agent_key,agentName:r.payload.agent_name,invocationMode:r.payload.invocation_mode}}])}catch(r){console.error("[ChatWidget] Parse error:",r)}}),E.addEventListener("sub_agent.end",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("sub_agent.end",r.payload),a(I=>[...I,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${r.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:r.payload.sub_agent_key,agentName:r.payload.agent_name}}])}catch(r){console.error("[ChatWidget] Parse error:",r)}});let A=P=>{try{let r=JSON.parse(P.data);if(e.onEvent&&e.onEvent(r.type,r.payload),r.type==="run.failed"){let I=r.payload.error||"Agent run failed";f(I),a(N=>[...N,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${I}`,timestamp:new Date,type:"error"}])}}catch(r){console.error("[ChatWidget] Parse error:",r)}$(!1),E.close(),v.current=null,d&&p&&p(d)};E.addEventListener("run.succeeded",A),E.addEventListener("run.failed",A),E.addEventListener("run.cancelled",A),E.addEventListener("run.timed_out",A),E.onerror=()=>{$(!1),E.close(),v.current=null}},[e]),H=(0,L.useCallback)(async(h,M={},p={})=>{if(!h.trim()||l)return;let C=[],b={};typeof M=="function"?b={onAssistantMessage:M}:Array.isArray(M)?(C=M,b=p):b=M||{};let{model:E,thinking:d,onAssistantMessage:A,supersedeFromMessageIndex:P}=b;$(!0),f(null);let r={id:fe(),role:"user",content:h.trim(),timestamp:new Date,type:"message",files:C.length>0?C.map(I=>({name:I.name,size:I.size,type:I.type})):void 0};a(I=>[...I,r]);try{let I=await t.getOrCreateSession(),N;if(C.length>0){let B=e.apiCaseStyle!=="camel",Ee=pe=>B?be(pe):pe,le=new FormData;le.append(Ee("agentKey"),e.agentKey),y&&le.append(Ee("conversationId"),y),le.append("messages",JSON.stringify([{role:"user",content:h.trim()}])),le.append("metadata",JSON.stringify(B?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),E&&le.append("model",E),d&&le.append("thinking","true"),C.forEach(pe=>{le.append("files",pe)}),N=t.getFetchOptions({method:"POST",body:le},I)}else{let B=t.transformRequest({agentKey:e.agentKey,conversationId:y,messages:[{role:"user",content:h.trim()}],metadata:{...e.metadata,journeyType:e.defaultJourneyType},...E&&{model:E},...d&&{thinking:!0},...P!==void 0&&{supersedeFromMessageIndex:P}});N=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(B)},I)}let q=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,N),_=I;if(q.status===401){t.clearSession();let B=await t.getOrCreateSession(!0);B&&(_=B,C.length>0?N=t.getFetchOptions({method:"POST",body:N.body},B):N=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:N.body},B),q=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,N))}if(!q.ok){let B=await q.json().catch(()=>({}));throw new Error(B.error||B.detail||`HTTP ${q.status}`)}let Q=await q.json(),ne=t.transformResponse(Q);T.current=ne.id,!y&&ne.conversationId&&u(ne.conversationId),await m(ne.id,_,A)}catch(I){f(I.message||"Failed to send message"),$(!1)}finally{T.current=null}},[e,t,y,l,m]),J=(0,L.useCallback)(async()=>{let h=T.current;if(!(!h||!l))try{let M=e.apiPaths.cancelRun?e.apiPaths.cancelRun.replace("{runId}",h):`${e.apiPaths.runs}${h}/cancel/`;(await fetch(`${e.backendUrl}${M}`,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"}}))).ok&&(v.current&&(v.current.close(),v.current=null),$(!1),T.current=null,a(C=>[...C,{id:"cancelled-"+Date.now(),role:"system",content:"\u23F9 Run cancelled",timestamp:new Date,type:"cancelled"}]))}catch(M){console.error("[ChatWidget] Failed to cancel run:",M)}},[e,t,l]),x=(0,L.useCallback)(()=>{a([]),u(null),f(null),c(!1),w(0),s?.set(e.conversationIdKey,null)},[e.conversationIdKey,s]),D=h=>{let M={id:fe(),role:h.role,timestamp:h.timestamp?new Date(h.timestamp):new Date};if(h.role==="tool")return{...M,role:"system",content:"\u2713 Done",type:"tool_result",metadata:{result:h.content,toolCallId:h.toolCallId}};if(h.role==="assistant"&&h.toolCalls&&h.toolCalls.length>0)return h.toolCalls.map(C=>({id:fe(),role:"assistant",content:`\u{1F527} ${C.function?.name||C.name||"tool"}`,timestamp:M.timestamp,type:"tool_call",metadata:{toolName:C.function?.name||C.name,arguments:C.function?.arguments||C.arguments,toolCallId:C.id}}));let p=typeof h.content=="string"?h.content:JSON.stringify(h.content);return h.role==="assistant"&&!p?.trim()?null:{...M,content:p,type:"message"}},O=(0,L.useCallback)(async h=>{console.log("[ChatWidget] loadConversation called with:",h),$(!0),a([]),u(h);try{let M=await t.getOrCreateSession(),C=`${e.backendUrl}${e.apiPaths.conversations}${h}/?limit=10&offset=0`;console.log("[ChatWidget] Fetching conversation from:",C);let b=await fetch(C,t.getFetchOptions({method:"GET"},M));if(console.log("[ChatWidget] Response status:",b.status),b.ok){let E=await b.json();console.log("[ChatWidget] Raw conversation:",E);let d=t.transformResponse(E);if(console.log("[ChatWidget] Transformed conversation:",d),d.messages){let A=d.messages.flatMap(D).filter(Boolean);console.log("[ChatWidget] Mapped messages:",A),a(A)}c(d.hasMore||!1),w(d.messages?.length||0)}else b.status===404?(console.log("[ChatWidget] Conversation not found, clearing"),u(null),s?.set(e.conversationIdKey,null)):console.error("[ChatWidget] Unexpected response status:",b.status)}catch(M){console.error("[ChatWidget] Failed to load conversation:",M)}finally{$(!1)}},[e,t,s]),K=(0,L.useCallback)(async()=>{if(!(!y||S||!k)){o(!0);try{let h=await t.getOrCreateSession(),p=`${e.backendUrl}${e.apiPaths.conversations}${y}/?limit=10&offset=${g}`,C=await fetch(p,t.getFetchOptions({method:"GET"},h));if(C.ok){let b=await C.json(),E=t.transformResponse(b);if(E.messages?.length>0){let d=E.messages.flatMap(D).filter(Boolean);a(A=>[...d,...A]),w(A=>A+E.messages.length),c(E.hasMore||!1)}else c(!1)}}catch(h){console.error("[ChatWidget] Failed to load more messages:",h)}finally{o(!1)}}},[e,t,y,g,S,k]),z=(0,L.useCallback)(async(h,M,p={})=>{if(l)return;let C=n[h];if(!C||C.role!=="user")return;let b=n.slice(0,h);a(b),await H(M,{...p,supersedeFromMessageIndex:h})},[n,l,H]),V=(0,L.useCallback)(async(h,M={})=>{if(l)return;let p=n[h];if(!p)return;let C=h,b=p;if(p.role==="assistant"){for(let d=h-1;d>=0;d--)if(n[d].role==="user"){C=d,b=n[d];break}if(b.role!=="user")return}else if(p.role!=="user")return;let E=n.slice(0,C);a(E),await H(b.content,{...M,supersedeFromMessageIndex:C})},[n,l,H]);return(0,L.useEffect)(()=>()=>{v.current&&v.current.close()},[]),{messages:n,isLoading:l,error:i,conversationId:y,hasMoreMessages:k,loadingMoreMessages:S,sendMessage:H,cancelRun:J,clearMessages:x,loadConversation:O,loadMoreMessages:K,setConversationId:u,editMessage:z,retryMessage:V}}var X=require("preact/hooks"),Je="cw_thinking_enabled";function ze(e,t,s){let[n,a]=(0,X.useState)([]),[l,$]=(0,X.useState)(null),[i,f]=(0,X.useState)(null),[y,u]=(0,X.useState)(!1),[k,c]=(0,X.useState)(!1);(0,X.useEffect)(()=>{(async()=>{if(e.showModelSelector){u(!0);try{let T=await fetch(`${e.backendUrl}${e.apiPaths.models}`,t.getFetchOptions({method:"GET"}));if(T.ok){let m=await T.json(),H=m.models||[];a(H),f(m.default);let J=s?.get(e.modelKey);J&&H.some(D=>D.id===J)?$(J):$(m.default),s?.get(Je)==="true"&&c(!0)}}catch(T){console.warn("[ChatWidget] Failed to load models:",T)}finally{u(!1)}}})()},[e.backendUrl,e.apiPaths.models,e.showModelSelector,e.modelKey,t,s]);let S=(0,X.useCallback)(v=>{$(v),s?.set(e.modelKey,v)},[e.modelKey,s]),o=(0,X.useCallback)(v=>{c(v),s?.set(Je,v?"true":"false")},[s]),g=(0,X.useCallback)(()=>n.find(v=>v.id===l)||null,[n,l]),w=(0,X.useCallback)(()=>g()?.supports_thinking||!1,[g]);return{availableModels:n,selectedModel:l,defaultModel:i,isLoading:y,selectModel:S,getSelectedModelInfo:g,thinkingEnabled:k,toggleThinking:o,supportsThinking:w}}var ee=require("preact/hooks");function Ge(e,t){let[s,n]=(0,ee.useState)(null),[a,l]=(0,ee.useState)(!1),[$,i]=(0,ee.useState)(null),f=e.apiPaths?.tasks||"/api/agent/tasks/",y=(0,ee.useCallback)(async()=>{l(!0),i(null);try{let g=`${e.backendUrl}${f}`,w=await fetch(g,t.getFetchOptions({method:"GET"}));if(w.ok){let v=await w.json();n(v)}else{let v=await w.json().catch(()=>({}));i(v.error||"Failed to load tasks")}}catch(g){console.error("[useTasks] Failed to load task list:",g),i("Failed to load tasks")}finally{l(!1)}},[e.backendUrl,f,t]),u=(0,ee.useCallback)(async g=>{if(!s)return null;try{let w=`${e.backendUrl}${f}${s.id}/add_task/`,v=await fetch(w,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(g)}));if(v.ok){let T=await v.json();return await y(),T}else{let T=await v.json().catch(()=>({}));return i(T.error||"Failed to add task"),null}}catch(w){return console.error("[useTasks] Failed to add task:",w),i("Failed to add task"),null}},[e.backendUrl,f,s,t,y]),k=(0,ee.useCallback)(async(g,w)=>{if(!s)return null;try{let v=`${e.backendUrl}${f}${s.id}/update_task/${g}/`,T=await fetch(v,t.getFetchOptions({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(w)}));if(T.ok){let m=await T.json();return await y(),m}else{let m=await T.json().catch(()=>({}));return i(m.error||"Failed to update task"),null}}catch(v){return console.error("[useTasks] Failed to update task:",v),i("Failed to update task"),null}},[e.backendUrl,f,s,t,y]),c=(0,ee.useCallback)(async g=>{if(!s)return!1;try{let w=`${e.backendUrl}${f}${s.id}/remove_task/${g}/`,v=await fetch(w,t.getFetchOptions({method:"DELETE"}));if(v.ok)return await y(),!0;{let T=await v.json().catch(()=>({}));return i(T.error||"Failed to remove task"),!1}}catch(w){return console.error("[useTasks] Failed to remove task:",w),i("Failed to remove task"),!1}},[e.backendUrl,f,s,t,y]),S=(0,ee.useCallback)(async()=>{if(!s)return!1;try{let g=`${e.backendUrl}${f}${s.id}/clear/`,w=await fetch(g,t.getFetchOptions({method:"POST"}));if(w.ok)return await y(),!0;{let v=await w.json().catch(()=>({}));return i(v.error||"Failed to clear tasks"),!1}}catch(g){return console.error("[useTasks] Failed to clear tasks:",g),i("Failed to clear tasks"),!1}},[e.backendUrl,f,s,t,y]),o=(0,ee.useCallback)(()=>i(null),[]);return{taskList:s,tasks:s?.tasks||[],progress:s?.progress||{total:0,completed:0,percent_complete:0},isLoading:a,error:$,loadTaskList:y,addTask:u,updateTask:k,removeTask:c,clearTasks:S,clearError:o}}var j=require("preact/hooks"),qe="cw_selected_system",Te="cw_selected_agent",Ye="cw_selected_system_version",we="cw_selected_agent_version";function Xe(e,t,s){let[n,a]=(0,j.useState)([]),[l,$]=(0,j.useState)([]),[i,f]=(0,j.useState)(null),[y,u]=(0,j.useState)(null),[k,c]=(0,j.useState)(null),[S,o]=(0,j.useState)(null),[g,w]=(0,j.useState)(!1),v=(0,j.useCallback)(()=>{if(y)return y;if(i){let x=n.find(D=>D.slug===i);if(x?.entry_agent)return x.entry_agent.slug}return e.agentKey},[y,i,n,e.agentKey]);(0,j.useEffect)(()=>{if(!e.showDevTools)return;(async()=>{w(!0);try{let D=await fetch(`${e.backendUrl}${e.apiPaths.systems}`,t.getFetchOptions({method:"GET"}));if(D.ok){let O=await D.json(),K=O.results||O;a(K);let z=s?.get(qe);z&&K.some(V=>V.slug===z)?f(z):K.length===1&&f(K[0].slug)}}catch(D){console.warn("[ChatWidget] Failed to load systems:",D)}finally{w(!1)}})()},[e.backendUrl,e.apiPaths.systems,e.showDevTools,t,s]),(0,j.useEffect)(()=>{if(!e.showDevTools)return;(async()=>{try{let D=i?`?system=${encodeURIComponent(i)}`:"",O=await fetch(`${e.backendUrl}${e.apiPaths.agents}${D}`,t.getFetchOptions({method:"GET"}));if(O.ok){let K=await O.json(),z=K.results||K;$(z);let V=s?.get(Te);if(V&&z.some(M=>M.slug===V))u(V);else if(i){let M=n.find(p=>p.slug===i);M?.entry_agent&&u(M.entry_agent.slug)}let h=s?.get(we);h&&o(h)}}catch(D){console.warn("[ChatWidget] Failed to load agents:",D)}})()},[e.backendUrl,e.apiPaths.agents,e.showDevTools,i,t,s,n]);let T=(0,j.useCallback)(x=>{f(x),s?.set(qe,x),u(null),o(null),s?.set(Te,null),s?.set(we,null);let O=n.find(K=>K.slug===x)?.active_version||null;c(O),s?.set(Ye,O)},[s,n]),m=(0,j.useCallback)(x=>{u(x),s?.set(Te,x);let O=l.find(K=>K.slug===x)?.active_version||null;o(O),s?.set(we,O)},[s,l]),H=(0,j.useCallback)(x=>{c(x),s?.set(Ye,x)},[s]),J=(0,j.useCallback)(x=>{o(x),s?.set(we,x)},[s]);return{systems:n,agents:l,selectedSystem:i,selectedAgent:y,selectedSystemVersion:k,selectedAgentVersion:S,isLoading:g,selectSystem:T,selectAgent:m,selectSystemVersion:H,selectAgentVersion:J,getEffectiveAgentKey:v}}function Ze(e,t,s){let n=u=>!u||typeof u!="object"||e.apiCaseStyle==="camel"?u:ge(u),a=u=>!u||typeof u!="object"||e.apiCaseStyle==="snake"?u:me(u),l=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",$=(u=null)=>{let k=l(),c={},S=u||e.authToken||t().authToken;if(k==="token"&&S){let o=e.authHeader||"Authorization",g=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";c[o]=g?`${g} ${S}`:S}else if(k==="jwt"&&S){let o=e.authHeader||"Authorization",g=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";c[o]=g?`${g} ${S}`:S}else if(k==="anonymous"&&S){let o=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";c[o]=S}if(k==="session"){let o=De(e.csrfCookieName);o&&(c["X-CSRFToken"]=o)}return c};return{getAuthStrategy:l,getAuthHeaders:$,getFetchOptions:(u={},k=null)=>{let c=l(),S={...u},o=$(k);return console.log("[ChatWidget] getFetchOptions - strategy:",c,"overrideToken:",k,"authHeaders:",o),S.headers={...S.headers,...o},c==="session"&&(S.credentials="include"),S},getOrCreateSession:async(u=!1)=>{let k=l(),c=t(),S=e.anonymousTokenKey||e.sessionTokenKey;if(k!=="anonymous")return e.authToken||c.authToken;if(!u){if(c.authToken)return c.authToken;let o=c.storage?.get(S);if(o)return s(g=>({...g,authToken:o})),o}try{let o=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,g=await fetch(`${e.backendUrl}${o}`,{method:"POST",headers:{"Content-Type":"application/json"}});if(g.ok){let w=await g.json();return s(v=>({...v,authToken:w.token})),c.storage?.set(S,w.token),w.token}}catch(o){console.warn("[ChatWidget] Failed to create session:",o)}return null},clearSession:()=>{let u=e.anonymousTokenKey||e.sessionTokenKey,k=t();s(c=>({...c,authToken:null})),k.storage?.set(u,null)},transformRequest:n,transformResponse:a}}function Qe({config:e,onStateChange:t,markdownParser:s,apiRef:n}){console.log("[ChatWidget] Config:",{showConversationSidebar:e.showConversationSidebar,apiPaths:e.apiPaths});let[a,l]=(0,R.useState)(e.embedded||e.forceOpen===!0),[$,i]=(0,R.useState)(!1),[f,y]=(0,R.useState)(!1),[u,k]=(0,R.useState)(!1),[c,S]=(0,R.useState)([]),[o,g]=(0,R.useState)("chat"),[w,v]=(0,R.useState)(!1),[T,m]=(0,R.useState)(e.enableTTS),[H,J]=(0,R.useState)(!1),[x,D]=(0,R.useState)(null);(0,R.useEffect)(()=>{e.forceOpen!==void 0&&l(e.forceOpen)},[e.forceOpen]);let O=(0,R.useMemo)(()=>Re(e.containerId),[e.containerId]),[K,z]=(0,R.useState)(e.authToken||null),V=(0,R.useMemo)(()=>Ze(e,()=>({authToken:K,storage:O}),ne=>{let B=ne({authToken:K,storage:O});B.authToken!==K&&z(B.authToken)}),[e,K,O]),h=Xe(e,V,O),M=(0,R.useMemo)(()=>{if(!e.showDevTools)return e;let _=h.getEffectiveAgentKey();return _&&_!==e.agentKey?{...e,agentKey:_}:e},[e,h.getEffectiveAgentKey]),p=je(M,V,O),C=ze(e,V,O),b=Ge(e,V);(0,R.useEffect)(()=>{for(let _=p.messages.length-1;_>=0;_--){let Q=p.messages[_];if(Q.type==="sub_agent_start"){D({key:Q.metadata?.subAgentKey,name:Q.metadata?.agentName});return}if(Q.type==="sub_agent_end"){D(null);return}}},[p.messages]),(0,R.useEffect)(()=>{let _=O.get(e.conversationIdKey);console.log("[ChatWidget] Initial load - storedConvId:",_,"key:",e.conversationIdKey),console.log("[ChatWidget] apiPaths.conversations:",e.apiPaths.conversations),_&&(console.log("[ChatWidget] Loading conversation:",_),p.loadConversation(_))},[]),(0,R.useEffect)(()=>{t&&t({isOpen:a,isExpanded:$,debugMode:f,messages:p.messages,conversationId:p.conversationId,isLoading:p.isLoading,error:p.error})},[a,$,f,p.messages,p.conversationId,p.isLoading,p.error]);let E=(0,R.useCallback)(async()=>{if(e.showConversationSidebar){v(!0);try{let _=M.agentKey,Q=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(_)}`,ne=await fetch(Q,V.getFetchOptions({method:"GET"}));if(ne.ok){let B=await ne.json();S(B.results||B)}}catch(_){console.error("[ChatWidget] Failed to load conversations:",_),S([])}finally{v(!1)}}},[e,M,V]),d=(0,R.useCallback)(()=>{let _=!u;k(_),_&&E()},[u,E]),A=(0,R.useCallback)(_=>{_!==p.conversationId&&p.loadConversation(_),k(!1)},[p]),P=(0,R.useCallback)(()=>{p.clearMessages(),k(!1)},[p]),r=(0,R.useCallback)(_=>{p.sendMessage(_,{model:C.selectedModel,thinking:C.thinkingEnabled&&C.supportsThinking(),onAssistantMessage:Q=>{}})},[p,T,C.selectedModel,C.thinkingEnabled,C.supportsThinking]),I=(0,R.useCallback)(_=>{g(_),_==="tasks"&&b.loadTaskList()},[b]);if((0,R.useEffect)(()=>{n&&(n.current={open:()=>l(!0),close:()=>l(!1),send:_=>r(_),clearMessages:()=>p.clearMessages(),toggleTTS:()=>m(_=>!_),stopSpeech:()=>J(!1),setAuth:_=>{_.token!==void 0&&z(_.token)},clearAuth:()=>z(null)})},[p,n,r]),!e.embedded&&!a)return Z.html`
586
+ `}var L=require("preact/hooks");function je(e,t,s){let[n,a]=(0,L.useState)([]),[l,$]=(0,L.useState)(!1),[i,f]=(0,L.useState)(null),[y,u]=(0,L.useState)(()=>s?.get(e.conversationIdKey)||null),[k,c]=(0,L.useState)(!1),[S,o]=(0,L.useState)(!1),[g,w]=(0,L.useState)(0),v=(0,L.useRef)(null),T=(0,L.useRef)(null);(0,L.useEffect)(()=>{y&&s?.set(e.conversationIdKey,y)},[y,e.conversationIdKey,s]);let m=(0,L.useCallback)(async(h,M,p)=>{v.current&&v.current.close();let C=e.apiPaths.runEvents.replace("{runId}",h),b=`${e.backendUrl}${C}`;M&&(b+=`?anonymous_token=${encodeURIComponent(M)}`);let E=new EventSource(b);v.current=E;let d="";E.addEventListener("assistant.message",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("assistant.message",r.payload);let I=r.payload.content;I&&(d+=I,a(N=>{let q=N[N.length-1];return q?.role==="assistant"&&q.id.startsWith("assistant-stream-")?[...N.slice(0,-1),{...q,content:d}]:[...N,{id:"assistant-stream-"+Date.now(),role:"assistant",content:d,timestamp:new Date,type:"message"}]}))}catch(r){console.error("[ChatWidget] Parse error:",r)}}),E.addEventListener("tool.call",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("tool.call",r.payload),a(I=>[...I,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${r.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:r.payload.name,arguments:r.payload.arguments,toolCallId:r.payload.id}}])}catch(r){console.error("[ChatWidget] Parse error:",r)}}),E.addEventListener("tool.result",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("tool.result",r.payload);let I=r.payload.result,N=I?.error;a(q=>[...q,{id:"tool-result-"+Date.now(),role:"system",content:N?`\u274C ${I.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:r.payload.name,result:I,toolCallId:r.payload.tool_call_id}}])}catch(r){console.error("[ChatWidget] Parse error:",r)}}),E.addEventListener("custom",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("custom",r.payload),r.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(r.payload),r.payload?.type==="agent_context"&&a(I=>[...I,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${r.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:r.payload.agent_key,agentName:r.payload.agent_name,action:r.payload.action}}])}catch(r){console.error("[ChatWidget] Parse error:",r)}}),E.addEventListener("sub_agent.start",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("sub_agent.start",r.payload),a(I=>[...I,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${r.payload.agent_name||r.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:r.payload.sub_agent_key,agentName:r.payload.agent_name,invocationMode:r.payload.invocation_mode}}])}catch(r){console.error("[ChatWidget] Parse error:",r)}}),E.addEventListener("sub_agent.end",P=>{try{let r=JSON.parse(P.data);e.onEvent&&e.onEvent("sub_agent.end",r.payload),a(I=>[...I,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${r.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:r.payload.sub_agent_key,agentName:r.payload.agent_name}}])}catch(r){console.error("[ChatWidget] Parse error:",r)}});let A=P=>{try{let r=JSON.parse(P.data);if(e.onEvent&&e.onEvent(r.type,r.payload),r.type==="run.failed"){let I=r.payload.error||"Agent run failed";f(I),a(N=>[...N,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${I}`,timestamp:new Date,type:"error"}])}}catch(r){console.error("[ChatWidget] Parse error:",r)}$(!1),E.close(),v.current=null,d&&p&&p(d)};E.addEventListener("run.succeeded",A),E.addEventListener("run.failed",A),E.addEventListener("run.cancelled",A),E.addEventListener("run.timed_out",A),E.onerror=()=>{$(!1),E.close(),v.current=null}},[e]),W=(0,L.useCallback)(async(h,M={},p={})=>{if(!h.trim()||l)return;let C=[],b={};typeof M=="function"?b={onAssistantMessage:M}:Array.isArray(M)?(C=M,b=p):b=M||{};let{model:E,thinking:d,onAssistantMessage:A,supersedeFromMessageIndex:P}=b;$(!0),f(null);let r={id:fe(),role:"user",content:h.trim(),timestamp:new Date,type:"message",files:C.length>0?C.map(I=>({name:I.name,size:I.size,type:I.type})):void 0};a(I=>[...I,r]);try{let I=await t.getOrCreateSession(),N;if(C.length>0){let B=e.apiCaseStyle!=="camel",Ee=pe=>B?be(pe):pe,le=new FormData;le.append(Ee("agentKey"),e.agentKey),y&&le.append(Ee("conversationId"),y),le.append("messages",JSON.stringify([{role:"user",content:h.trim()}])),le.append("metadata",JSON.stringify(B?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),E&&le.append("model",E),d&&le.append("thinking","true"),C.forEach(pe=>{le.append("files",pe)}),N=t.getFetchOptions({method:"POST",body:le},I)}else{let B=t.transformRequest({agentKey:e.agentKey,conversationId:y,messages:[{role:"user",content:h.trim()}],metadata:{...e.metadata,journeyType:e.defaultJourneyType},...E&&{model:E},...d&&{thinking:!0},...P!==void 0&&{supersedeFromMessageIndex:P}});N=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(B)},I)}let q=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,N),_=I;if(q.status===401){t.clearSession();let B=await t.getOrCreateSession(!0);B&&(_=B,C.length>0?N=t.getFetchOptions({method:"POST",body:N.body},B):N=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:N.body},B),q=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,N))}if(!q.ok){let B=await q.json().catch(()=>({}));throw new Error(B.error||B.detail||`HTTP ${q.status}`)}let Q=await q.json(),ne=t.transformResponse(Q);T.current=ne.id,!y&&ne.conversationId&&u(ne.conversationId),await m(ne.id,_,A)}catch(I){f(I.message||"Failed to send message"),$(!1)}finally{T.current=null}},[e,t,y,l,m]),J=(0,L.useCallback)(async()=>{let h=T.current;if(!(!h||!l))try{let M=e.apiPaths.cancelRun?e.apiPaths.cancelRun.replace("{runId}",h):`${e.apiPaths.runs}${h}/cancel/`;(await fetch(`${e.backendUrl}${M}`,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"}}))).ok&&(v.current&&(v.current.close(),v.current=null),$(!1),T.current=null,a(C=>[...C,{id:"cancelled-"+Date.now(),role:"system",content:"\u23F9 Run cancelled",timestamp:new Date,type:"cancelled"}]))}catch(M){console.error("[ChatWidget] Failed to cancel run:",M)}},[e,t,l]),x=(0,L.useCallback)(()=>{a([]),u(null),f(null),c(!1),w(0),s?.set(e.conversationIdKey,null)},[e.conversationIdKey,s]),D=h=>{let M={id:fe(),role:h.role,timestamp:h.timestamp?new Date(h.timestamp):new Date};if(h.role==="tool")return{...M,role:"system",content:"\u2713 Done",type:"tool_result",metadata:{result:h.content,toolCallId:h.toolCallId}};if(h.role==="assistant"&&h.toolCalls&&h.toolCalls.length>0)return h.toolCalls.map(C=>({id:fe(),role:"assistant",content:`\u{1F527} ${C.function?.name||C.name||"tool"}`,timestamp:M.timestamp,type:"tool_call",metadata:{toolName:C.function?.name||C.name,arguments:C.function?.arguments||C.arguments,toolCallId:C.id}}));let p=typeof h.content=="string"?h.content:JSON.stringify(h.content);return h.role==="assistant"&&!p?.trim()?null:{...M,content:p,type:"message"}},F=(0,L.useCallback)(async h=>{console.log("[ChatWidget] loadConversation called with:",h),$(!0),a([]),u(h);try{let M=await t.getOrCreateSession(),C=`${e.backendUrl}${e.apiPaths.conversations}${h}/?limit=10&offset=0`;console.log("[ChatWidget] Fetching conversation from:",C);let b=await fetch(C,t.getFetchOptions({method:"GET"},M));if(console.log("[ChatWidget] Response status:",b.status),b.ok){let E=await b.json();console.log("[ChatWidget] Raw conversation:",E);let d=t.transformResponse(E);if(console.log("[ChatWidget] Transformed conversation:",d),d.messages){let A=d.messages.flatMap(D).filter(Boolean);console.log("[ChatWidget] Mapped messages:",A),a(A)}c(d.hasMore||!1),w(d.messages?.length||0)}else b.status===404?(console.log("[ChatWidget] Conversation not found, clearing"),u(null),s?.set(e.conversationIdKey,null)):console.error("[ChatWidget] Unexpected response status:",b.status)}catch(M){console.error("[ChatWidget] Failed to load conversation:",M)}finally{$(!1)}},[e,t,s]),K=(0,L.useCallback)(async()=>{if(!(!y||S||!k)){o(!0);try{let h=await t.getOrCreateSession(),p=`${e.backendUrl}${e.apiPaths.conversations}${y}/?limit=10&offset=${g}`,C=await fetch(p,t.getFetchOptions({method:"GET"},h));if(C.ok){let b=await C.json(),E=t.transformResponse(b);if(E.messages?.length>0){let d=E.messages.flatMap(D).filter(Boolean);a(A=>[...d,...A]),w(A=>A+E.messages.length),c(E.hasMore||!1)}else c(!1)}}catch(h){console.error("[ChatWidget] Failed to load more messages:",h)}finally{o(!1)}}},[e,t,y,g,S,k]),z=(0,L.useCallback)(async(h,M,p={})=>{if(l)return;let C=n[h];if(!C||C.role!=="user")return;let b=n.slice(0,h);a(b),await W(M,{...p,supersedeFromMessageIndex:h})},[n,l,W]),V=(0,L.useCallback)(async(h,M={})=>{if(l)return;let p=n[h];if(!p)return;let C=h,b=p;if(p.role==="assistant"){for(let d=h-1;d>=0;d--)if(n[d].role==="user"){C=d,b=n[d];break}if(b.role!=="user")return}else if(p.role!=="user")return;let E=n.slice(0,C);a(E),await W(b.content,{...M,supersedeFromMessageIndex:C})},[n,l,W]);return(0,L.useEffect)(()=>()=>{v.current&&v.current.close()},[]),{messages:n,isLoading:l,error:i,conversationId:y,hasMoreMessages:k,loadingMoreMessages:S,sendMessage:W,cancelRun:J,clearMessages:x,loadConversation:F,loadMoreMessages:K,setConversationId:u,editMessage:z,retryMessage:V}}var X=require("preact/hooks"),Je="cw_thinking_enabled";function ze(e,t,s){let[n,a]=(0,X.useState)([]),[l,$]=(0,X.useState)(null),[i,f]=(0,X.useState)(null),[y,u]=(0,X.useState)(!1),[k,c]=(0,X.useState)(!1);(0,X.useEffect)(()=>{(async()=>{if(e.showModelSelector){u(!0);try{let T=await fetch(`${e.backendUrl}${e.apiPaths.models}`,t.getFetchOptions({method:"GET"}));if(T.ok){let m=await T.json(),W=m.models||[];a(W),f(m.default);let J=s?.get(e.modelKey);J&&W.some(D=>D.id===J)?$(J):$(m.default),s?.get(Je)==="true"&&c(!0)}}catch(T){console.warn("[ChatWidget] Failed to load models:",T)}finally{u(!1)}}})()},[e.backendUrl,e.apiPaths.models,e.showModelSelector,e.modelKey,t,s]);let S=(0,X.useCallback)(v=>{$(v),s?.set(e.modelKey,v)},[e.modelKey,s]),o=(0,X.useCallback)(v=>{c(v),s?.set(Je,v?"true":"false")},[s]),g=(0,X.useCallback)(()=>n.find(v=>v.id===l)||null,[n,l]),w=(0,X.useCallback)(()=>g()?.supports_thinking||!1,[g]);return{availableModels:n,selectedModel:l,defaultModel:i,isLoading:y,selectModel:S,getSelectedModelInfo:g,thinkingEnabled:k,toggleThinking:o,supportsThinking:w}}var ee=require("preact/hooks");function Ge(e,t){let[s,n]=(0,ee.useState)(null),[a,l]=(0,ee.useState)(!1),[$,i]=(0,ee.useState)(null),f=e.apiPaths?.tasks||"/api/agent/tasks/",y=(0,ee.useCallback)(async()=>{l(!0),i(null);try{let g=`${e.backendUrl}${f}`,w=await fetch(g,t.getFetchOptions({method:"GET"}));if(w.ok){let v=await w.json();n(v)}else{let v=await w.json().catch(()=>({}));i(v.error||"Failed to load tasks")}}catch(g){console.error("[useTasks] Failed to load task list:",g),i("Failed to load tasks")}finally{l(!1)}},[e.backendUrl,f,t]),u=(0,ee.useCallback)(async g=>{if(!s)return null;try{let w=`${e.backendUrl}${f}${s.id}/add_task/`,v=await fetch(w,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(g)}));if(v.ok){let T=await v.json();return await y(),T}else{let T=await v.json().catch(()=>({}));return i(T.error||"Failed to add task"),null}}catch(w){return console.error("[useTasks] Failed to add task:",w),i("Failed to add task"),null}},[e.backendUrl,f,s,t,y]),k=(0,ee.useCallback)(async(g,w)=>{if(!s)return null;try{let v=`${e.backendUrl}${f}${s.id}/update_task/${g}/`,T=await fetch(v,t.getFetchOptions({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(w)}));if(T.ok){let m=await T.json();return await y(),m}else{let m=await T.json().catch(()=>({}));return i(m.error||"Failed to update task"),null}}catch(v){return console.error("[useTasks] Failed to update task:",v),i("Failed to update task"),null}},[e.backendUrl,f,s,t,y]),c=(0,ee.useCallback)(async g=>{if(!s)return!1;try{let w=`${e.backendUrl}${f}${s.id}/remove_task/${g}/`,v=await fetch(w,t.getFetchOptions({method:"DELETE"}));if(v.ok)return await y(),!0;{let T=await v.json().catch(()=>({}));return i(T.error||"Failed to remove task"),!1}}catch(w){return console.error("[useTasks] Failed to remove task:",w),i("Failed to remove task"),!1}},[e.backendUrl,f,s,t,y]),S=(0,ee.useCallback)(async()=>{if(!s)return!1;try{let g=`${e.backendUrl}${f}${s.id}/clear/`,w=await fetch(g,t.getFetchOptions({method:"POST"}));if(w.ok)return await y(),!0;{let v=await w.json().catch(()=>({}));return i(v.error||"Failed to clear tasks"),!1}}catch(g){return console.error("[useTasks] Failed to clear tasks:",g),i("Failed to clear tasks"),!1}},[e.backendUrl,f,s,t,y]),o=(0,ee.useCallback)(()=>i(null),[]);return{taskList:s,tasks:s?.tasks||[],progress:s?.progress||{total:0,completed:0,percent_complete:0},isLoading:a,error:$,loadTaskList:y,addTask:u,updateTask:k,removeTask:c,clearTasks:S,clearError:o}}var j=require("preact/hooks"),qe="cw_selected_system",Te="cw_selected_agent",Ye="cw_selected_system_version",we="cw_selected_agent_version";function Xe(e,t,s){let[n,a]=(0,j.useState)([]),[l,$]=(0,j.useState)([]),[i,f]=(0,j.useState)(null),[y,u]=(0,j.useState)(null),[k,c]=(0,j.useState)(null),[S,o]=(0,j.useState)(null),[g,w]=(0,j.useState)(!1),v=(0,j.useCallback)(()=>{if(y)return y;if(i){let x=n.find(D=>D.slug===i);if(x?.entry_agent)return x.entry_agent.slug}return e.agentKey},[y,i,n,e.agentKey]);(0,j.useEffect)(()=>{if(!e.showDevTools)return;(async()=>{w(!0);try{let D=await fetch(`${e.backendUrl}${e.apiPaths.systems}`,t.getFetchOptions({method:"GET"}));if(D.ok){let F=await D.json(),K=F.results||F;a(K);let z=s?.get(qe);z&&K.some(V=>V.slug===z)?f(z):K.length===1&&f(K[0].slug)}}catch(D){console.warn("[ChatWidget] Failed to load systems:",D)}finally{w(!1)}})()},[e.backendUrl,e.apiPaths.systems,e.showDevTools,t,s]),(0,j.useEffect)(()=>{if(!e.showDevTools)return;(async()=>{try{let D=i?`?system=${encodeURIComponent(i)}`:"",F=await fetch(`${e.backendUrl}${e.apiPaths.agents}${D}`,t.getFetchOptions({method:"GET"}));if(F.ok){let K=await F.json(),z=K.results||K;$(z);let V=s?.get(Te);if(V&&z.some(M=>M.slug===V))u(V);else if(i){let M=n.find(p=>p.slug===i);M?.entry_agent&&u(M.entry_agent.slug)}let h=s?.get(we);h&&o(h)}}catch(D){console.warn("[ChatWidget] Failed to load agents:",D)}})()},[e.backendUrl,e.apiPaths.agents,e.showDevTools,i,t,s,n]);let T=(0,j.useCallback)(x=>{f(x),s?.set(qe,x),u(null),o(null),s?.set(Te,null),s?.set(we,null);let F=n.find(K=>K.slug===x)?.active_version||null;c(F),s?.set(Ye,F)},[s,n]),m=(0,j.useCallback)(x=>{u(x),s?.set(Te,x);let F=l.find(K=>K.slug===x)?.active_version||null;o(F),s?.set(we,F)},[s,l]),W=(0,j.useCallback)(x=>{c(x),s?.set(Ye,x)},[s]),J=(0,j.useCallback)(x=>{o(x),s?.set(we,x)},[s]);return{systems:n,agents:l,selectedSystem:i,selectedAgent:y,selectedSystemVersion:k,selectedAgentVersion:S,isLoading:g,selectSystem:T,selectAgent:m,selectSystemVersion:W,selectAgentVersion:J,getEffectiveAgentKey:v}}function Ze(e,t,s){let n=u=>!u||typeof u!="object"||e.apiCaseStyle==="camel"?u:ge(u),a=u=>!u||typeof u!="object"||e.apiCaseStyle==="snake"?u:me(u),l=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",$=(u=null)=>{let k=l(),c={},S=u||e.authToken||t().authToken;if(k==="token"&&S){let o=e.authHeader||"Authorization",g=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";c[o]=g?`${g} ${S}`:S}else if(k==="jwt"&&S){let o=e.authHeader||"Authorization",g=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";c[o]=g?`${g} ${S}`:S}else if(k==="anonymous"&&S){let o=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";c[o]=S}if(k==="session"){let o=De(e.csrfCookieName);o&&(c["X-CSRFToken"]=o)}return c};return{getAuthStrategy:l,getAuthHeaders:$,getFetchOptions:(u={},k=null)=>{let c=l(),S={...u},o=$(k);return console.log("[ChatWidget] getFetchOptions - strategy:",c,"overrideToken:",k,"authHeaders:",o),S.headers={...S.headers,...o},c==="session"&&(S.credentials="include"),S},getOrCreateSession:async(u=!1)=>{let k=l(),c=t(),S=e.anonymousTokenKey||e.sessionTokenKey;if(k!=="anonymous")return e.authToken||c.authToken;if(!u){if(c.authToken)return c.authToken;let o=c.storage?.get(S);if(o)return s(g=>({...g,authToken:o})),o}try{let o=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,g=await fetch(`${e.backendUrl}${o}`,{method:"POST",headers:{"Content-Type":"application/json"}});if(g.ok){let w=await g.json();return s(v=>({...v,authToken:w.token})),c.storage?.set(S,w.token),w.token}}catch(o){console.warn("[ChatWidget] Failed to create session:",o)}return null},clearSession:()=>{let u=e.anonymousTokenKey||e.sessionTokenKey,k=t();s(c=>({...c,authToken:null})),k.storage?.set(u,null)},transformRequest:n,transformResponse:a}}function Qe({config:e,onStateChange:t,markdownParser:s,apiRef:n}){console.log("[ChatWidget] Config:",{showConversationSidebar:e.showConversationSidebar,apiPaths:e.apiPaths});let[a,l]=(0,R.useState)(e.embedded||e.forceOpen===!0),[$,i]=(0,R.useState)(!1),[f,y]=(0,R.useState)(!1),[u,k]=(0,R.useState)(!1),[c,S]=(0,R.useState)([]),[o,g]=(0,R.useState)("chat"),[w,v]=(0,R.useState)(!1),[T,m]=(0,R.useState)(e.enableTTS),[W,J]=(0,R.useState)(!1),[x,D]=(0,R.useState)(null);(0,R.useEffect)(()=>{e.forceOpen!==void 0&&l(e.forceOpen)},[e.forceOpen]);let F=(0,R.useMemo)(()=>Re(e.containerId),[e.containerId]),[K,z]=(0,R.useState)(e.authToken||null),V=(0,R.useMemo)(()=>Ze(e,()=>({authToken:K,storage:F}),ne=>{let B=ne({authToken:K,storage:F});B.authToken!==K&&z(B.authToken)}),[e,K,F]),h=Xe(e,V,F),M=(0,R.useMemo)(()=>{if(!e.showDevTools)return e;let _=h.getEffectiveAgentKey();return _&&_!==e.agentKey?{...e,agentKey:_}:e},[e,h.getEffectiveAgentKey]),p=je(M,V,F),C=ze(e,V,F),b=Ge(e,V);(0,R.useEffect)(()=>{for(let _=p.messages.length-1;_>=0;_--){let Q=p.messages[_];if(Q.type==="sub_agent_start"){D({key:Q.metadata?.subAgentKey,name:Q.metadata?.agentName});return}if(Q.type==="sub_agent_end"){D(null);return}}},[p.messages]),(0,R.useEffect)(()=>{let _=F.get(e.conversationIdKey);console.log("[ChatWidget] Initial load - storedConvId:",_,"key:",e.conversationIdKey),console.log("[ChatWidget] apiPaths.conversations:",e.apiPaths.conversations),_&&(console.log("[ChatWidget] Loading conversation:",_),p.loadConversation(_))},[]),(0,R.useEffect)(()=>{t&&t({isOpen:a,isExpanded:$,debugMode:f,messages:p.messages,conversationId:p.conversationId,isLoading:p.isLoading,error:p.error})},[a,$,f,p.messages,p.conversationId,p.isLoading,p.error]);let E=(0,R.useCallback)(async()=>{if(e.showConversationSidebar){v(!0);try{let _=M.agentKey,Q=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(_)}`,ne=await fetch(Q,V.getFetchOptions({method:"GET"}));if(ne.ok){let B=await ne.json();S(B.results||B)}}catch(_){console.error("[ChatWidget] Failed to load conversations:",_),S([])}finally{v(!1)}}},[e,M,V]),d=(0,R.useCallback)(()=>{let _=!u;k(_),_&&E()},[u,E]),A=(0,R.useCallback)(_=>{_!==p.conversationId&&p.loadConversation(_),k(!1)},[p]),P=(0,R.useCallback)(()=>{p.clearMessages(),k(!1)},[p]),r=(0,R.useCallback)(_=>{p.sendMessage(_,{model:C.selectedModel,thinking:C.thinkingEnabled&&C.supportsThinking(),onAssistantMessage:Q=>{}})},[p,T,C.selectedModel,C.thinkingEnabled,C.supportsThinking]),I=(0,R.useCallback)(_=>{g(_),_==="tasks"&&b.loadTaskList()},[b]);if((0,R.useEffect)(()=>{n&&(n.current={open:()=>l(!0),close:()=>l(!1),send:_=>r(_),clearMessages:()=>p.clearMessages(),toggleTTS:()=>m(_=>!_),stopSpeech:()=>J(!1),setAuth:_=>{_.token!==void 0&&z(_.token)},clearAuth:()=>z(null)})},[p,n,r]),!e.embedded&&!a)return Z.html`
587
587
  <button
588
588
  class="cw-fab"
589
589
  style=${{backgroundColor:e.primaryColor}}
@@ -593,10 +593,10 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
593
593
  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
594
594
  </svg>
595
595
  </button>
596
- `;let N=["cw-widget",$&&"cw-widget-expanded",e.embedded&&"cw-widget-embedded"].filter(Boolean).join(" "),q=e.headerTextColor||Oe(e.primaryColor);return Z.html`
596
+ `;let N=["cw-widget",$&&"cw-widget-expanded",e.embedded&&"cw-widget-embedded"].filter(Boolean).join(" "),q=e.headerTextColor||Fe(e.primaryColor);return Z.html`
597
597
  <div class=${N} style=${{"--cw-primary":e.primaryColor,"--cw-header-text":q}}>
598
598
  ${e.showConversationSidebar&&Z.html`
599
- <${We}
599
+ <${He}
600
600
  isOpen=${u}
601
601
  conversations=${c}
602
602
  conversationsLoading=${w}
@@ -607,21 +607,23 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
607
607
  />
608
608
  `}
609
609
 
610
- <${Fe}
611
- config=${e}
612
- debugMode=${f}
613
- isExpanded=${$}
614
- isSpeaking=${H}
615
- messagesCount=${p.messages.length}
616
- isLoading=${p.isLoading}
617
- currentAgent=${x}
618
- onClose=${()=>l(!1)}
619
- onToggleExpand=${()=>i(!$)}
620
- onToggleDebug=${()=>y(!f)}
621
- onToggleTTS=${()=>m(!T)}
622
- onClear=${p.clearMessages}
623
- onToggleSidebar=${d}
624
- />
610
+ ${e.showHeader!==!1&&Z.html`
611
+ <${Oe}
612
+ config=${e}
613
+ debugMode=${f}
614
+ isExpanded=${$}
615
+ isSpeaking=${W}
616
+ messagesCount=${p.messages.length}
617
+ isLoading=${p.isLoading}
618
+ currentAgent=${x}
619
+ onClose=${()=>l(!1)}
620
+ onToggleExpand=${()=>i(!$)}
621
+ onToggleDebug=${()=>y(!f)}
622
+ onToggleTTS=${()=>m(!T)}
623
+ onClear=${p.clearMessages}
624
+ onToggleSidebar=${d}
625
+ />
626
+ `}
625
627
 
626
628
  ${e.showDevTools&&Z.html`
627
629
  <${Be}
@@ -693,6 +695,7 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
693
695
  placeholder=${e.placeholder}
694
696
  primaryColor=${e.primaryColor}
695
697
  enableVoice=${e.enableVoice}
698
+ enableFiles=${e.showFileAttachment!==!1}
696
699
  />
697
700
  `:Z.html`
698
701
  <${Ue}
@@ -707,9 +710,9 @@ var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Objec
707
710
  />
708
711
  `}
709
712
  </div>
710
- `}var et={backendUrl:"http://localhost:8000",agentKey:"default-agent",title:"Chat Assistant",subtitle:"How can we help you today?",primaryColor:"#0066cc",headerTextColor:null,position:"bottom-right",defaultJourneyType:"general",enableDebugMode:!0,enableAutoRun:!0,journeyTypes:{},customerPrompts:{},placeholder:"Type your message...",emptyStateTitle:"Start a Conversation",emptyStateMessage:"Send a message to get started.",authStrategy:null,authToken:null,authHeader:null,authTokenPrefix:null,anonymousSessionEndpoint:null,anonymousTokenKey:"chat_widget_anonymous_token",onAuthError:null,anonymousTokenHeader:"X-Anonymous-Token",conversationIdKey:"chat_widget_conversation_id",sessionTokenKey:"chat_widget_session_token",apiPaths:{anonymousSession:"/api/accounts/anonymous-session/",conversations:"/api/agent-runtime/conversations/",runs:"/api/agent-runtime/runs/",runEvents:"/api/agent-runtime/runs/{runId}/events/",simulateCustomer:"/api/agent-runtime/simulate-customer/",ttsVoices:"/api/tts/voices/",ttsSetVoice:"/api/tts/set-voice/",models:"/api/agent-runtime/models/",systems:"/api/agent-runtime/systems/",agents:"/api/agent-runtime/agents/"},apiCaseStyle:"auto",theme:"light",showConversationSidebar:!0,showClearButton:!0,showDebugButton:!0,showTTSButton:!0,showVoiceSettings:!0,showExpandButton:!0,showModelSelector:!1,showDevTools:!1,enableVoice:!0,modelKey:"chat_widget_selected_model",autoRunDelay:1e3,autoRunMode:"automatic",enableTTS:!1,ttsProxyUrl:null,elevenLabsApiKey:null,ttsVoices:{assistant:null,user:null},ttsModel:"eleven_turbo_v2_5",ttsSettings:{stability:.5,similarity_boost:.75,style:0,use_speaker_boost:!0},availableVoices:[],onEvent:null,containerId:null,embedded:!1,metadata:{}};function tt(e){let t={...et.apiPaths,...e.apiPaths||{}};return{...et,...e,apiPaths:t}}var ve=new Map,$t=0,F=null,Me=class{constructor(t={}){Ie(this,"_handleStateChange",t=>{this._state=t});this.instanceId=`cw-${++$t}`,this.config=tt(t),this.container=null,this._state={},this._apiRef={current:null},ve.set(this.instanceId,this)}init(){if(this.config.containerId){if(this.container=document.getElementById(this.config.containerId),!this.container)return console.error(`[ChatWidget] Container not found: ${this.config.containerId}`),this;this.container.classList.add("cw-container-embedded")}else this.container=document.createElement("div"),this.container.id=this.instanceId,this.container.className=`cw-container cw-position-${this.config.position}`,document.body.appendChild(this.container);return this._applyTheme(),this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} initialized`),this}_applyTheme(){this.container&&(this.container.classList.remove("cw-dark","cw-auto"),this.config.theme==="dark"?this.container.classList.add("cw-dark"):this.config.theme==="auto"&&this.container.classList.add("cw-auto"))}_render(t={}){this.container&&(0,_e.render)(st.html`<${Qe}
713
+ `}var et={backendUrl:"http://localhost:8000",agentKey:"default-agent",title:"Chat Assistant",subtitle:"How can we help you today?",primaryColor:"#0066cc",headerTextColor:null,position:"bottom-right",defaultJourneyType:"general",enableDebugMode:!0,enableAutoRun:!0,journeyTypes:{},customerPrompts:{},placeholder:"Type your message...",emptyStateTitle:"Start a Conversation",emptyStateMessage:"Send a message to get started.",authStrategy:null,authToken:null,authHeader:null,authTokenPrefix:null,anonymousSessionEndpoint:null,anonymousTokenKey:"chat_widget_anonymous_token",onAuthError:null,anonymousTokenHeader:"X-Anonymous-Token",conversationIdKey:"chat_widget_conversation_id",sessionTokenKey:"chat_widget_session_token",apiPaths:{anonymousSession:"/api/accounts/anonymous-session/",conversations:"/api/agent-runtime/conversations/",runs:"/api/agent-runtime/runs/",runEvents:"/api/agent-runtime/runs/{runId}/events/",simulateCustomer:"/api/agent-runtime/simulate-customer/",ttsVoices:"/api/tts/voices/",ttsSetVoice:"/api/tts/set-voice/",models:"/api/agent-runtime/models/",systems:"/api/agent-runtime/systems/",agents:"/api/agent-runtime/agents/"},apiCaseStyle:"auto",theme:"light",showHeader:!0,showFileAttachment:!0,showTasksTab:!0,showConversationSidebar:!0,showClearButton:!0,showDebugButton:!0,showTTSButton:!0,showVoiceSettings:!0,showExpandButton:!0,showModelSelector:!1,showDevTools:!1,enableVoice:!0,modelKey:"chat_widget_selected_model",autoRunDelay:1e3,autoRunMode:"automatic",enableTTS:!1,ttsProxyUrl:null,elevenLabsApiKey:null,ttsVoices:{assistant:null,user:null},ttsModel:"eleven_turbo_v2_5",ttsSettings:{stability:.5,similarity_boost:.75,style:0,use_speaker_boost:!0},availableVoices:[],onEvent:null,containerId:null,embedded:!1,metadata:{}};function tt(e){let t={...et.apiPaths,...e.apiPaths||{}};return{...et,...e,apiPaths:t}}var ve=new Map,$t=0,O=null,Me=class{constructor(t={}){Ie(this,"_handleStateChange",t=>{this._state=t});this.instanceId=`cw-${++$t}`,this.config=tt(t),this.container=null,this._state={},this._apiRef={current:null},ve.set(this.instanceId,this)}init(){if(this.config.containerId){if(this.container=document.getElementById(this.config.containerId),!this.container)return console.error(`[ChatWidget] Container not found: ${this.config.containerId}`),this;this.container.classList.add("cw-container-embedded")}else this.container=document.createElement("div"),this.container.id=this.instanceId,this.container.className=`cw-container cw-position-${this.config.position}`,document.body.appendChild(this.container);return this._applyTheme(),this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} initialized`),this}_applyTheme(){this.container&&(this.container.classList.remove("cw-dark","cw-auto"),this.config.theme==="dark"?this.container.classList.add("cw-dark"):this.config.theme==="auto"&&this.container.classList.add("cw-auto"))}_render(t={}){this.container&&(0,_e.render)(st.html`<${Qe}
711
714
  config=${{...this.config,...t}}
712
715
  onStateChange=${this._handleStateChange}
713
716
  markdownParser=${ke._enhancedMarkdownParser}
714
717
  apiRef=${this._apiRef}
715
- />`,this.container)}destroy(){this.container&&((0,_e.render)(null,this.container),this.config.containerId?this.container.classList.remove("cw-container-embedded"):this.container.remove(),this.container=null),ve.delete(this.instanceId),console.log(`[ChatWidget] Instance ${this.instanceId} destroyed`)}open(){this._apiRef.current?this._apiRef.current.open():this._render({forceOpen:!0})}close(){this._apiRef.current?this._apiRef.current.close():this._render({forceOpen:!1})}send(t){this._apiRef.current&&this._apiRef.current.send(t)}clearMessages(){this._apiRef.current&&this._apiRef.current.clearMessages()}toggleTTS(){this._apiRef.current&&this._apiRef.current.toggleTTS()}stopSpeech(){this._apiRef.current&&this._apiRef.current.stopSpeech()}setAuth(t){this._apiRef.current&&this._apiRef.current.setAuth(t)}clearAuth(){this._apiRef.current&&this._apiRef.current.clearAuth()}getState(){return{...this._state}}getConfig(){return{...this.config}}updateMetadata(t){this.config.metadata={...this.config.metadata,...t},this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} metadata updated:`,t)}updateConfig(t){this.config={...this.config,...t},"theme"in t&&this._applyTheme(),this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} config updated`)}};function nt(e={}){return new Me(e).init()}function yt(e={}){return F&&F.destroy(),F=nt(e),F}function wt(){F&&(F.destroy(),F=null)}function vt(){F&&F.open()}function kt(){F&&F.close()}function bt(e){F&&F.send(e)}function St(){F&&F.clearMessages()}function Ct(){F&&F.toggleTTS()}function Tt(){F&&F.stopSpeech()}function _t(e){F&&F.setAuth(e)}function Mt(){F&&F.clearAuth()}function Et(){return F?F.getState():null}function It(){return F?F.getConfig():null}var ke={createInstance:nt,getInstance:e=>ve.get(e),getAllInstances:()=>Array.from(ve.values()),init:yt,destroy:wt,open:vt,close:kt,send:bt,clearMessages:St,toggleTTS:Ct,stopSpeech:Tt,setAuth:_t,clearAuth:Mt,getState:Et,getConfig:It,_enhancedMarkdownParser:null};var xt=ke;typeof window<"u"&&(window.ChatWidget=ke);
718
+ />`,this.container)}destroy(){this.container&&((0,_e.render)(null,this.container),this.config.containerId?this.container.classList.remove("cw-container-embedded"):this.container.remove(),this.container=null),ve.delete(this.instanceId),console.log(`[ChatWidget] Instance ${this.instanceId} destroyed`)}open(){this._apiRef.current?this._apiRef.current.open():this._render({forceOpen:!0})}close(){this._apiRef.current?this._apiRef.current.close():this._render({forceOpen:!1})}send(t){this._apiRef.current&&this._apiRef.current.send(t)}clearMessages(){this._apiRef.current&&this._apiRef.current.clearMessages()}toggleTTS(){this._apiRef.current&&this._apiRef.current.toggleTTS()}stopSpeech(){this._apiRef.current&&this._apiRef.current.stopSpeech()}setAuth(t){this._apiRef.current&&this._apiRef.current.setAuth(t)}clearAuth(){this._apiRef.current&&this._apiRef.current.clearAuth()}getState(){return{...this._state}}getConfig(){return{...this.config}}updateMetadata(t){this.config.metadata={...this.config.metadata,...t},this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} metadata updated:`,t)}updateConfig(t){this.config={...this.config,...t},"theme"in t&&this._applyTheme(),this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} config updated`)}};function nt(e={}){return new Me(e).init()}function yt(e={}){return O&&O.destroy(),O=nt(e),O}function wt(){O&&(O.destroy(),O=null)}function vt(){O&&O.open()}function kt(){O&&O.close()}function bt(e){O&&O.send(e)}function St(){O&&O.clearMessages()}function Ct(){O&&O.toggleTTS()}function Tt(){O&&O.stopSpeech()}function _t(e){O&&O.setAuth(e)}function Mt(){O&&O.clearAuth()}function Et(){return O?O.getState():null}function It(){return O?O.getConfig():null}var ke={createInstance:nt,getInstance:e=>ve.get(e),getAllInstances:()=>Array.from(ve.values()),init:yt,destroy:wt,open:vt,close:kt,send:bt,clearMessages:St,toggleTTS:Ct,stopSpeech:Tt,setAuth:_t,clearAuth:Mt,getState:Et,getConfig:It,_enhancedMarkdownParser:null};var xt=ke;typeof window<"u"&&(window.ChatWidget=ke);