@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 gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var Fe=(e,t,s)=>(ft(e,typeof t!="symbol"?t+"":t,s),s);import{render as ht}from"preact";import{html as Mt}from"htm/preact";import{html as G}from"htm/preact";import{useState as q,useEffect as pe,useCallback as le,useMemo as Ae}from"preact/hooks";import{html as ee}from"htm/preact";function $t(e){return e.replace(/_([a-z])/g,(t,s)=>s.toUpperCase())}function Te(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])=>[$t(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])=>[Te(t),ge(s)])):e}function fe(){return"msg-"+Date.now()+"-"+Math.random().toString(36).substr(2,9)}function H(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function Pe(e){if(!e)return"";try{let t=new Date(e),n=new Date-t,l=Math.floor(n/6e4),r=Math.floor(n/36e5),$=Math.floor(n/864e5);return l<1?"Just now":l<60?`${l}m ago`:r<24?`${r}h ago`:$<7?`${$}d ago`:t.toLocaleDateString()}catch{return""}}function Ke(e,t=null){if(t)return t(e);let s=H(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 Le(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 l=t(s);n===null?localStorage.removeItem(l):localStorage.setItem(l,n)}catch{}}}}function Ne(e="csrftoken"){let t=document.cookie.split(";");for(let n of t){let[l,r]=n.trim().split("=");if(l===e)return decodeURIComponent(r)}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 yt(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,l=parseInt(s.substr(2,2),16)/255,r=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*$(l)+.0722*$(r)}function We(e){return yt(e)>.179?"#000000":"#ffffff"}function He({config:e,debugMode:t,isExpanded:s,isSpeaking:n,messagesCount:l,isLoading:r,currentAgent:$,onClose:i,onToggleExpand:f,onToggleDebug:y,onToggleTTS:u,onClear:k,onToggleSidebar:c}){let{title:S,primaryColor:a,embedded:g,showConversationSidebar:w,showClearButton:v,showDebugButton:T,enableDebugMode:m,showTTSButton:N,showExpandButton:U,enableTTS:x,elevenLabsApiKey:R,ttsProxyUrl:D}=e,P=R||D;return ee`
1
+ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var Oe=(e,t,s)=>(ft(e,typeof t!="symbol"?t+"":t,s),s);import{render as ht}from"preact";import{html as Mt}from"htm/preact";import{html as z}from"htm/preact";import{useState as q,useEffect as pe,useCallback as le,useMemo as Ae}from"preact/hooks";import{html as ee}from"htm/preact";function $t(e){return e.replace(/_([a-z])/g,(t,s)=>s.toUpperCase())}function Te(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])=>[$t(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])=>[Te(t),ge(s)])):e}function fe(){return"msg-"+Date.now()+"-"+Math.random().toString(36).substr(2,9)}function W(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function Pe(e){if(!e)return"";try{let t=new Date(e),n=new Date-t,l=Math.floor(n/6e4),r=Math.floor(n/36e5),$=Math.floor(n/864e5);return l<1?"Just now":l<60?`${l}m ago`:r<24?`${r}h ago`:$<7?`${$}d ago`:t.toLocaleDateString()}catch{return""}}function Ke(e,t=null){if(t)return t(e);let s=W(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 Le(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 l=t(s);n===null?localStorage.removeItem(l):localStorage.setItem(l,n)}catch{}}}}function Ne(e="csrftoken"){let t=document.cookie.split(";");for(let n of t){let[l,r]=n.trim().split("=");if(l===e)return decodeURIComponent(r)}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 yt(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,l=parseInt(s.substr(2,2),16)/255,r=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*$(l)+.0722*$(r)}function He(e){return yt(e)>.179?"#000000":"#ffffff"}function We({config:e,debugMode:t,isExpanded:s,isSpeaking:n,messagesCount:l,isLoading:r,currentAgent:$,onClose:i,onToggleExpand:f,onToggleDebug:y,onToggleTTS:u,onClear:k,onToggleSidebar:c}){let{title:S,primaryColor:a,embedded:g,showConversationSidebar:w,showClearButton:v,showDebugButton:T,enableDebugMode:m,showTTSButton:N,showExpandButton:U,enableTTS:x,elevenLabsApiKey:R,ttsProxyUrl:D}=e,P=R||D;return ee`
2
2
  <div class="cw-header" style=${{backgroundColor:a}}>
3
3
  ${w&&ee`
4
4
  <button
@@ -15,11 +15,11 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
15
15
  `}
16
16
 
17
17
  <div class="cw-title-container">
18
- <span class="cw-title">${H(S)}</span>
18
+ <span class="cw-title">${W(S)}</span>
19
19
  ${$&&ee`
20
20
  <span class="cw-current-agent" title="Currently active agent">
21
21
  <span class="cw-agent-indicator">🤖</span>
22
- <span class="cw-agent-name">${H($.name||$.key)}</span>
22
+ <span class="cw-agent-name">${W($.name||$.key)}</span>
23
23
  </span>
24
24
  `}
25
25
  </div>
@@ -144,11 +144,11 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
144
144
  ${b&&L`<span class="cw-tool-expand">${i?"\u25BC":"\u25B6"}</span>`}
145
145
  </span>
146
146
  ${i&&b&&L`
147
- <pre class="cw-tool-details">${H(E(g?e.metadata.arguments:e.metadata.result))}</pre>
147
+ <pre class="cw-tool-details">${W(E(g?e.metadata.arguments:e.metadata.result))}</pre>
148
148
  `}
149
149
  ${t&&L`<${_e} msg=${e} show=${y} onToggle=${()=>u(!y)} />`}
150
150
  </div>
151
- `}let U=["cw-message",S&&"cw-message-user",v&&"cw-message-error"].filter(Boolean).join(" "),x=`cw-message-row ${S?"cw-message-row-user":""}`,R=e.role==="assistant"?Ke(e.content,s):H(e.content),D=e.files&&e.files.length>0,P=()=>D?L`
151
+ `}let U=["cw-message",S&&"cw-message-user",v&&"cw-message-error"].filter(Boolean).join(" "),x=`cw-message-row ${S?"cw-message-row-user":""}`,R=e.role==="assistant"?Ke(e.content,s):W(e.content),D=e.files&&e.files.length>0,P=()=>D?L`
152
152
  <div class="cw-message-attachments">
153
153
  ${e.files.map(b=>b.type&&b.type.startsWith("image/")?L`
154
154
  <a class="cw-attachment-thumbnail" href=${b.url} target="_blank" title=${b.name}>
@@ -164,7 +164,7 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
164
164
  </a>
165
165
  `)}
166
166
  </div>
167
- `:null,B=b=>{c(!1),n&&n($,b)},W=()=>{l&&l($)};if(S&&k)return L`
167
+ `:null,B=b=>{c(!1),n&&n($,b)},H=()=>{l&&l($)};if(S&&k)return L`
168
168
  <div class=${x} style="position: relative;">
169
169
  ${P()}
170
170
  <${kt}
@@ -180,7 +180,7 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
180
180
  <div class="cw-user-actions-wrapper">
181
181
  <${Ve}
182
182
  onEdit=${()=>c(!0)}
183
- onRetry=${W}
183
+ onRetry=${H}
184
184
  isLoading=${r}
185
185
  position="left"
186
186
  showEdit=${!0}
@@ -193,7 +193,7 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
193
193
  `}
194
194
  ${p&&L`
195
195
  <${Ve}
196
- onRetry=${W}
196
+ onRetry=${H}
197
197
  isLoading=${r}
198
198
  position="right"
199
199
  showEdit=${!1}
@@ -208,8 +208,8 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
208
208
  <svg class="cw-empty-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
209
209
  <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>
210
210
  </svg>
211
- <h3>${H(y)}</h3>
212
- <p>${H(u)}</p>
211
+ <h3>${W(y)}</h3>
212
+ <p>${W(u)}</p>
213
213
  </div>
214
214
  `}
215
215
 
@@ -241,7 +241,7 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
241
241
  </div>
242
242
  `}
243
243
  </div>
244
- `}import{html as X}from"htm/preact";import{useState as ie,useRef as ve,useEffect as Me}from"preact/hooks";var Ee=typeof window<"u"?window.SpeechRecognition||window.webkitSpeechRecognition:null;function ze({onSend:e,onCancel:t,isLoading:s,placeholder:n,primaryColor:l,enableVoice:r=!0,enableFiles:$=!0}){let[i,f]=ie(""),[y,u]=ie([]),[k,c]=ie(!1),[S,a]=ie(!1),[g]=ie(()=>!!Ee),w=ve(null),v=ve(null),T=ve(null),m=ve(!1);Me(()=>{!s&&w.current&&w.current.focus()},[s]),Me(()=>{w.current&&(w.current.style.height="auto",w.current.style.height=Math.min(w.current.scrollHeight,150)+"px")},[i]),Me(()=>()=>{m.current=!1,T.current&&T.current.abort()},[]);let N=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=""))},U=d=>{let A=Array.from(d.target.files||[]);A.length>0&&u(F=>[...F,...A])},x=d=>{u(A=>A.filter((F,o)=>o!==d))},R=d=>{d.preventDefault(),v.current&&!s&&v.current.click()},D=d=>{d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),N(d))},P=d=>{s&&t&&(d.preventDefault(),t())},B=()=>{if(!Ee||s)return;m.current=!0;let d=new Ee;d.continuous=!0,d.interimResults=!0,d.lang=navigator.language||"en-US";let A=i,F="";d.onstart=()=>{a(!0)},d.onresult=o=>{F="";for(let I=o.resultIndex;I<o.results.length;I++){let K=o.results[I][0].transcript;o.results[I].isFinal?A+=(A?" ":"")+K:F+=K}f(A+(F?" "+F:""))},d.onerror=o=>{if(o.error==="no-speech"||o.error==="aborted"){console.log("[ChatWidget] Speech recognition:",o.error,"- continuing...");return}console.warn("[ChatWidget] Speech recognition error:",o.error),m.current=!1,a(!1),f(A||i)},d.onend=()=>{if(m.current){console.log("[ChatWidget] Recognition paused, restarting...");try{d.start();return}catch(o){console.warn("[ChatWidget] Could not restart recognition:",o)}}a(!1),A&&f(A),T.current=null},T.current=d,d.start()},W=()=>{m.current=!1,T.current&&T.current.stop()},h=d=>{d.preventDefault(),S?W():B()},M=X`
244
+ `}import{html as X}from"htm/preact";import{useState as ie,useRef as ve,useEffect as Me}from"preact/hooks";var Ee=typeof window<"u"?window.SpeechRecognition||window.webkitSpeechRecognition:null;function ze({onSend:e,onCancel:t,isLoading:s,placeholder:n,primaryColor:l,enableVoice:r=!0,enableFiles:$=!0}){let[i,f]=ie(""),[y,u]=ie([]),[k,c]=ie(!1),[S,a]=ie(!1),[g]=ie(()=>!!Ee),w=ve(null),v=ve(null),T=ve(null),m=ve(!1);Me(()=>{!s&&w.current&&w.current.focus()},[s]),Me(()=>{w.current&&(w.current.style.height="auto",w.current.style.height=Math.min(w.current.scrollHeight,150)+"px")},[i]),Me(()=>()=>{m.current=!1,T.current&&T.current.abort()},[]);let N=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=""))},U=d=>{let A=Array.from(d.target.files||[]);A.length>0&&u(O=>[...O,...A])},x=d=>{u(A=>A.filter((O,o)=>o!==d))},R=d=>{d.preventDefault(),v.current&&!s&&v.current.click()},D=d=>{d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),N(d))},P=d=>{s&&t&&(d.preventDefault(),t())},B=()=>{if(!Ee||s)return;m.current=!0;let d=new Ee;d.continuous=!0,d.interimResults=!0,d.lang=navigator.language||"en-US";let A=i,O="";d.onstart=()=>{a(!0)},d.onresult=o=>{O="";for(let I=o.resultIndex;I<o.results.length;I++){let K=o.results[I][0].transcript;o.results[I].isFinal?A+=(A?" ":"")+K:O+=K}f(A+(O?" "+O:""))},d.onerror=o=>{if(o.error==="no-speech"||o.error==="aborted"){console.log("[ChatWidget] Speech recognition:",o.error,"- continuing...");return}console.warn("[ChatWidget] Speech recognition error:",o.error),m.current=!1,a(!1),f(A||i)},d.onend=()=>{if(m.current){console.log("[ChatWidget] Recognition paused, restarting...");try{d.start();return}catch(o){console.warn("[ChatWidget] Could not restart recognition:",o)}}a(!1),A&&f(A),T.current=null},T.current=d,d.start()},H=()=>{m.current=!1,T.current&&T.current.stop()},h=d=>{d.preventDefault(),S?H():B()},M=X`
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>
@@ -285,7 +285,7 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
285
285
  <textarea
286
286
  ref=${w}
287
287
  class="cw-input"
288
- placeholder=${H(n)}
288
+ placeholder=${W(n)}
289
289
  value=${i}
290
290
  onInput=${d=>f(d.target.value)}
291
291
  onKeyDown=${D}
@@ -354,7 +354,7 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
354
354
  class="cw-conversation-item ${i.id===n?"cw-conversation-active":""}"
355
355
  onClick=${()=>$(i.id)}
356
356
  >
357
- <div class="cw-conversation-title">${H(i.title||"Untitled")}</div>
357
+ <div class="cw-conversation-title">${W(i.title||"Untitled")}</div>
358
358
  <div class="cw-conversation-date">${Pe(i.updatedAt||i.createdAt)}</div>
359
359
  </div>
360
360
  `)}
@@ -374,7 +374,7 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
374
374
  title="Select Model"
375
375
  >
376
376
  <span class="cw-model-icon">🤖</span>
377
- <span class="cw-model-name">${H(y)}</span>
377
+ <span class="cw-model-name">${W(y)}</span>
378
378
  <span class="cw-model-chevron">${$?"\u25B2":"\u25BC"}</span>
379
379
  </button>
380
380
 
@@ -398,12 +398,12 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
398
398
  onClick=${()=>c(a.id)}
399
399
  >
400
400
  <span class="cw-model-option-name">
401
- ${H(a.name)}
401
+ ${W(a.name)}
402
402
  ${a.supports_thinking&&oe`<span class="cw-thinking-badge" title="Supports extended thinking">🧠</span>`}
403
403
  </span>
404
- <span class="cw-model-option-provider">${H(a.provider)}</span>
404
+ <span class="cw-model-option-provider">${W(a.provider)}</span>
405
405
  ${a.description&&oe`
406
- <span class="cw-model-option-desc">${H(a.description)}</span>
406
+ <span class="cw-model-option-desc">${W(a.description)}</span>
407
407
  `}
408
408
  </button>
409
409
  `)}
@@ -583,7 +583,7 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
583
583
  </div>
584
584
  </div>
585
585
  </div>
586
- `}import{useState as ne,useCallback as te,useRef as Qe,useEffect as et}from"preact/hooks";function tt(e,t,s){let[n,l]=ne([]),[r,$]=ne(!1),[i,f]=ne(null),[y,u]=ne(()=>s?.get(e.conversationIdKey)||null),[k,c]=ne(!1),[S,a]=ne(!1),[g,w]=ne(0),v=Qe(null),T=Qe(null);et(()=>{y&&s?.set(e.conversationIdKey,y)},[y,e.conversationIdKey,s]);let m=te(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",F=>{try{let o=JSON.parse(F.data);e.onEvent&&e.onEvent("assistant.message",o.payload);let I=o.payload.content;I&&(d+=I,l(K=>{let j=K[K.length-1];return j?.role==="assistant"&&j.id.startsWith("assistant-stream-")?[...K.slice(0,-1),{...j,content:d}]:[...K,{id:"assistant-stream-"+Date.now(),role:"assistant",content:d,timestamp:new Date,type:"message"}]}))}catch(o){console.error("[ChatWidget] Parse error:",o)}}),E.addEventListener("tool.call",F=>{try{let o=JSON.parse(F.data);e.onEvent&&e.onEvent("tool.call",o.payload),l(I=>[...I,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${o.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:o.payload.name,arguments:o.payload.arguments,toolCallId:o.payload.id}}])}catch(o){console.error("[ChatWidget] Parse error:",o)}}),E.addEventListener("tool.result",F=>{try{let o=JSON.parse(F.data);e.onEvent&&e.onEvent("tool.result",o.payload);let I=o.payload.result,K=I?.error;l(j=>[...j,{id:"tool-result-"+Date.now(),role:"system",content:K?`\u274C ${I.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:o.payload.name,result:I,toolCallId:o.payload.tool_call_id}}])}catch(o){console.error("[ChatWidget] Parse error:",o)}}),E.addEventListener("custom",F=>{try{let o=JSON.parse(F.data);e.onEvent&&e.onEvent("custom",o.payload),o.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(o.payload),o.payload?.type==="agent_context"&&l(I=>[...I,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${o.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:o.payload.agent_key,agentName:o.payload.agent_name,action:o.payload.action}}])}catch(o){console.error("[ChatWidget] Parse error:",o)}}),E.addEventListener("sub_agent.start",F=>{try{let o=JSON.parse(F.data);e.onEvent&&e.onEvent("sub_agent.start",o.payload),l(I=>[...I,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${o.payload.agent_name||o.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:o.payload.sub_agent_key,agentName:o.payload.agent_name,invocationMode:o.payload.invocation_mode}}])}catch(o){console.error("[ChatWidget] Parse error:",o)}}),E.addEventListener("sub_agent.end",F=>{try{let o=JSON.parse(F.data);e.onEvent&&e.onEvent("sub_agent.end",o.payload),l(I=>[...I,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${o.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:o.payload.sub_agent_key,agentName:o.payload.agent_name}}])}catch(o){console.error("[ChatWidget] Parse error:",o)}});let A=F=>{try{let o=JSON.parse(F.data);if(e.onEvent&&e.onEvent(o.type,o.payload),o.type==="run.failed"){let I=o.payload.error||"Agent run failed";f(I),l(K=>[...K,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${I}`,timestamp:new Date,type:"error"}])}}catch(o){console.error("[ChatWidget] Parse error:",o)}$(!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]),N=te(async(h,M={},p={})=>{if(!h.trim()||r)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:F}=b;$(!0),f(null);let o={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};l(I=>[...I,o]);try{let I=await t.getOrCreateSession(),K;if(C.length>0){let V=e.apiCaseStyle!=="camel",Oe=he=>V?Te(he):he,Q=new FormData;Q.append(Oe("agentKey"),e.agentKey),y&&Q.append(Oe("conversationId"),y),Q.append("messages",JSON.stringify([{role:"user",content:h.trim()}])),Q.append("metadata",JSON.stringify(V?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),E&&Q.append("model",E),d&&Q.append("thinking","true"),C.forEach(he=>{Q.append("files",he)}),K=t.getFetchOptions({method:"POST",body:Q},I)}else{let V=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},...F!==void 0&&{supersedeFromMessageIndex:F}});K=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(V)},I)}let j=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,K),_=I;if(j.status===401){t.clearSession();let V=await t.getOrCreateSession(!0);V&&(_=V,C.length>0?K=t.getFetchOptions({method:"POST",body:K.body},V):K=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:K.body},V),j=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,K))}if(!j.ok){let V=await j.json().catch(()=>({}));throw new Error(V.error||V.detail||`HTTP ${j.status}`)}let z=await j.json(),Y=t.transformResponse(z);T.current=Y.id,!y&&Y.conversationId&&u(Y.conversationId),await m(Y.id,_,A)}catch(I){f(I.message||"Failed to send message"),$(!1)}finally{T.current=null}},[e,t,y,r,m]),U=te(async()=>{let h=T.current;if(!(!h||!r))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,l(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,r]),x=te(()=>{l([]),u(null),f(null),c(!1),w(0),s?.set(e.conversationIdKey,null)},[e.conversationIdKey,s]),R=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"}},D=te(async h=>{console.log("[ChatWidget] loadConversation called with:",h),$(!0),l([]),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(R).filter(Boolean);console.log("[ChatWidget] Mapped messages:",A),l(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]),P=te(async()=>{if(!(!y||S||!k)){a(!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(R).filter(Boolean);l(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{a(!1)}}},[e,t,y,g,S,k]),B=te(async(h,M,p={})=>{if(r)return;let C=n[h];if(!C||C.role!=="user")return;let b=n.slice(0,h);l(b),await N(M,{...p,supersedeFromMessageIndex:h})},[n,r,N]),W=te(async(h,M={})=>{if(r)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);l(E),await N(b.content,{...M,supersedeFromMessageIndex:C})},[n,r,N]);return et(()=>()=>{v.current&&v.current.close()},[]),{messages:n,isLoading:r,error:i,conversationId:y,hasMoreMessages:k,loadingMoreMessages:S,sendMessage:N,cancelRun:U,clearMessages:x,loadConversation:D,loadMoreMessages:P,setConversationId:u,editMessage:B,retryMessage:W}}import{useState as de,useEffect as _t,useCallback as be}from"preact/hooks";var st="cw_thinking_enabled";function nt(e,t,s){let[n,l]=de([]),[r,$]=de(null),[i,f]=de(null),[y,u]=de(!1),[k,c]=de(!1);_t(()=>{(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(),N=m.models||[];l(N),f(m.default);let U=s?.get(e.modelKey);U&&N.some(R=>R.id===U)?$(U):$(m.default),s?.get(st)==="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=be(v=>{$(v),s?.set(e.modelKey,v)},[e.modelKey,s]),a=be(v=>{c(v),s?.set(st,v?"true":"false")},[s]),g=be(()=>n.find(v=>v.id===r)||null,[n,r]),w=be(()=>g()?.supports_thinking||!1,[g]);return{availableModels:n,selectedModel:r,defaultModel:i,isLoading:y,selectModel:S,getSelectedModelInfo:g,thinkingEnabled:k,toggleThinking:a,supportsThinking:w}}import{useState as Ie,useCallback as re}from"preact/hooks";function at(e,t){let[s,n]=Ie(null),[l,r]=Ie(!1),[$,i]=Ie(null),f=e.apiPaths?.tasks||"/api/agent/tasks/",y=re(async()=>{r(!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{r(!1)}},[e.backendUrl,f,t]),u=re(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=re(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=re(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=re(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]),a=re(()=>i(null),[]);return{taskList:s,tasks:s?.tasks||[],progress:s?.progress||{total:0,completed:0,percent_complete:0},isLoading:l,error:$,loadTaskList:y,addTask:u,updateTask:k,removeTask:c,clearTasks:S,clearError:a}}import{useState as ae,useEffect as ot,useCallback as ue}from"preact/hooks";var rt="cw_selected_system",xe="cw_selected_agent",lt="cw_selected_system_version",Se="cw_selected_agent_version";function it(e,t,s){let[n,l]=ae([]),[r,$]=ae([]),[i,f]=ae(null),[y,u]=ae(null),[k,c]=ae(null),[S,a]=ae(null),[g,w]=ae(!1),v=ue(()=>{if(y)return y;if(i){let x=n.find(R=>R.slug===i);if(x?.entry_agent)return x.entry_agent.slug}return e.agentKey},[y,i,n,e.agentKey]);ot(()=>{if(!e.showDevTools)return;(async()=>{w(!0);try{let R=await fetch(`${e.backendUrl}${e.apiPaths.systems}`,t.getFetchOptions({method:"GET"}));if(R.ok){let D=await R.json(),P=D.results||D;l(P);let B=s?.get(rt);B&&P.some(W=>W.slug===B)?f(B):P.length===1&&f(P[0].slug)}}catch(R){console.warn("[ChatWidget] Failed to load systems:",R)}finally{w(!1)}})()},[e.backendUrl,e.apiPaths.systems,e.showDevTools,t,s]),ot(()=>{if(!e.showDevTools)return;(async()=>{try{let R=i?`?system=${encodeURIComponent(i)}`:"",D=await fetch(`${e.backendUrl}${e.apiPaths.agents}${R}`,t.getFetchOptions({method:"GET"}));if(D.ok){let P=await D.json(),B=P.results||P;$(B);let W=s?.get(xe);if(W&&B.some(M=>M.slug===W))u(W);else if(i){let M=n.find(p=>p.slug===i);M?.entry_agent&&u(M.entry_agent.slug)}let h=s?.get(Se);h&&a(h)}}catch(R){console.warn("[ChatWidget] Failed to load agents:",R)}})()},[e.backendUrl,e.apiPaths.agents,e.showDevTools,i,t,s,n]);let T=ue(x=>{f(x),s?.set(rt,x),u(null),a(null),s?.set(xe,null),s?.set(Se,null);let D=n.find(P=>P.slug===x)?.active_version||null;c(D),s?.set(lt,D)},[s,n]),m=ue(x=>{u(x),s?.set(xe,x);let D=r.find(P=>P.slug===x)?.active_version||null;a(D),s?.set(Se,D)},[s,r]),N=ue(x=>{c(x),s?.set(lt,x)},[s]),U=ue(x=>{a(x),s?.set(Se,x)},[s]);return{systems:n,agents:r,selectedSystem:i,selectedAgent:y,selectedSystemVersion:k,selectedAgentVersion:S,isLoading:g,selectSystem:T,selectAgent:m,selectSystemVersion:N,selectAgentVersion:U,getEffectiveAgentKey:v}}function ct(e,t,s){let n=u=>!u||typeof u!="object"||e.apiCaseStyle==="camel"?u:ge(u),l=u=>!u||typeof u!="object"||e.apiCaseStyle==="snake"?u:me(u),r=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",$=(u=null)=>{let k=r(),c={},S=u||e.authToken||t().authToken;if(k==="token"&&S){let a=e.authHeader||"Authorization",g=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";c[a]=g?`${g} ${S}`:S}else if(k==="jwt"&&S){let a=e.authHeader||"Authorization",g=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";c[a]=g?`${g} ${S}`:S}else if(k==="anonymous"&&S){let a=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";c[a]=S}if(k==="session"){let a=Ne(e.csrfCookieName);a&&(c["X-CSRFToken"]=a)}return c};return{getAuthStrategy:r,getAuthHeaders:$,getFetchOptions:(u={},k=null)=>{let c=r(),S={...u},a=$(k);return console.log("[ChatWidget] getFetchOptions - strategy:",c,"overrideToken:",k,"authHeaders:",a),S.headers={...S.headers,...a},c==="session"&&(S.credentials="include"),S},getOrCreateSession:async(u=!1)=>{let k=r(),c=t(),S=e.anonymousTokenKey||e.sessionTokenKey;if(k!=="anonymous")return e.authToken||c.authToken;if(!u){if(c.authToken)return c.authToken;let a=c.storage?.get(S);if(a)return s(g=>({...g,authToken:a})),a}try{let a=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,g=await fetch(`${e.backendUrl}${a}`,{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(a){console.warn("[ChatWidget] Failed to create session:",a)}return null},clearSession:()=>{let u=e.anonymousTokenKey||e.sessionTokenKey,k=t();s(c=>({...c,authToken:null})),k.storage?.set(u,null)},transformRequest:n,transformResponse:l}}function dt({config:e,onStateChange:t,markdownParser:s,apiRef:n}){console.log("[ChatWidget] Config:",{showConversationSidebar:e.showConversationSidebar,apiPaths:e.apiPaths});let[l,r]=q(e.embedded||e.forceOpen===!0),[$,i]=q(!1),[f,y]=q(!1),[u,k]=q(!1),[c,S]=q([]),[a,g]=q("chat"),[w,v]=q(!1),[T,m]=q(e.enableTTS),[N,U]=q(!1),[x,R]=q(null);pe(()=>{e.forceOpen!==void 0&&r(e.forceOpen)},[e.forceOpen]);let D=Ae(()=>Le(e.containerId),[e.containerId]),[P,B]=q(e.authToken||null),W=Ae(()=>ct(e,()=>({authToken:P,storage:D}),Y=>{let V=Y({authToken:P,storage:D});V.authToken!==P&&B(V.authToken)}),[e,P,D]),h=it(e,W,D),M=Ae(()=>{if(!e.showDevTools)return e;let _=h.getEffectiveAgentKey();return _&&_!==e.agentKey?{...e,agentKey:_}:e},[e,h.getEffectiveAgentKey]),p=tt(M,W,D),C=nt(e,W,D),b=at(e,W);pe(()=>{for(let _=p.messages.length-1;_>=0;_--){let z=p.messages[_];if(z.type==="sub_agent_start"){R({key:z.metadata?.subAgentKey,name:z.metadata?.agentName});return}if(z.type==="sub_agent_end"){R(null);return}}},[p.messages]),pe(()=>{let _=D.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(_))},[]),pe(()=>{t&&t({isOpen:l,isExpanded:$,debugMode:f,messages:p.messages,conversationId:p.conversationId,isLoading:p.isLoading,error:p.error})},[l,$,f,p.messages,p.conversationId,p.isLoading,p.error]);let E=le(async()=>{if(e.showConversationSidebar){v(!0);try{let _=M.agentKey,z=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(_)}`,Y=await fetch(z,W.getFetchOptions({method:"GET"}));if(Y.ok){let V=await Y.json();S(V.results||V)}}catch(_){console.error("[ChatWidget] Failed to load conversations:",_),S([])}finally{v(!1)}}},[e,M,W]),d=le(()=>{let _=!u;k(_),_&&E()},[u,E]),A=le(_=>{_!==p.conversationId&&p.loadConversation(_),k(!1)},[p]),F=le(()=>{p.clearMessages(),k(!1)},[p]),o=le(_=>{p.sendMessage(_,{model:C.selectedModel,thinking:C.thinkingEnabled&&C.supportsThinking(),onAssistantMessage:z=>{}})},[p,T,C.selectedModel,C.thinkingEnabled,C.supportsThinking]),I=le(_=>{g(_),_==="tasks"&&b.loadTaskList()},[b]);if(pe(()=>{n&&(n.current={open:()=>r(!0),close:()=>r(!1),send:_=>o(_),clearMessages:()=>p.clearMessages(),toggleTTS:()=>m(_=>!_),stopSpeech:()=>U(!1),setAuth:_=>{_.token!==void 0&&B(_.token)},clearAuth:()=>B(null)})},[p,n,o]),!e.embedded&&!l)return G`
586
+ `}import{useState as ne,useCallback as te,useRef as Qe,useEffect as et}from"preact/hooks";function tt(e,t,s){let[n,l]=ne([]),[r,$]=ne(!1),[i,f]=ne(null),[y,u]=ne(()=>s?.get(e.conversationIdKey)||null),[k,c]=ne(!1),[S,a]=ne(!1),[g,w]=ne(0),v=Qe(null),T=Qe(null);et(()=>{y&&s?.set(e.conversationIdKey,y)},[y,e.conversationIdKey,s]);let m=te(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",O=>{try{let o=JSON.parse(O.data);e.onEvent&&e.onEvent("assistant.message",o.payload);let I=o.payload.content;I&&(d+=I,l(K=>{let j=K[K.length-1];return j?.role==="assistant"&&j.id.startsWith("assistant-stream-")?[...K.slice(0,-1),{...j,content:d}]:[...K,{id:"assistant-stream-"+Date.now(),role:"assistant",content:d,timestamp:new Date,type:"message"}]}))}catch(o){console.error("[ChatWidget] Parse error:",o)}}),E.addEventListener("tool.call",O=>{try{let o=JSON.parse(O.data);e.onEvent&&e.onEvent("tool.call",o.payload),l(I=>[...I,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${o.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:o.payload.name,arguments:o.payload.arguments,toolCallId:o.payload.id}}])}catch(o){console.error("[ChatWidget] Parse error:",o)}}),E.addEventListener("tool.result",O=>{try{let o=JSON.parse(O.data);e.onEvent&&e.onEvent("tool.result",o.payload);let I=o.payload.result,K=I?.error;l(j=>[...j,{id:"tool-result-"+Date.now(),role:"system",content:K?`\u274C ${I.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:o.payload.name,result:I,toolCallId:o.payload.tool_call_id}}])}catch(o){console.error("[ChatWidget] Parse error:",o)}}),E.addEventListener("custom",O=>{try{let o=JSON.parse(O.data);e.onEvent&&e.onEvent("custom",o.payload),o.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(o.payload),o.payload?.type==="agent_context"&&l(I=>[...I,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${o.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:o.payload.agent_key,agentName:o.payload.agent_name,action:o.payload.action}}])}catch(o){console.error("[ChatWidget] Parse error:",o)}}),E.addEventListener("sub_agent.start",O=>{try{let o=JSON.parse(O.data);e.onEvent&&e.onEvent("sub_agent.start",o.payload),l(I=>[...I,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${o.payload.agent_name||o.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:o.payload.sub_agent_key,agentName:o.payload.agent_name,invocationMode:o.payload.invocation_mode}}])}catch(o){console.error("[ChatWidget] Parse error:",o)}}),E.addEventListener("sub_agent.end",O=>{try{let o=JSON.parse(O.data);e.onEvent&&e.onEvent("sub_agent.end",o.payload),l(I=>[...I,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${o.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:o.payload.sub_agent_key,agentName:o.payload.agent_name}}])}catch(o){console.error("[ChatWidget] Parse error:",o)}});let A=O=>{try{let o=JSON.parse(O.data);if(e.onEvent&&e.onEvent(o.type,o.payload),o.type==="run.failed"){let I=o.payload.error||"Agent run failed";f(I),l(K=>[...K,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${I}`,timestamp:new Date,type:"error"}])}}catch(o){console.error("[ChatWidget] Parse error:",o)}$(!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]),N=te(async(h,M={},p={})=>{if(!h.trim()||r)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:O}=b;$(!0),f(null);let o={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};l(I=>[...I,o]);try{let I=await t.getOrCreateSession(),K;if(C.length>0){let V=e.apiCaseStyle!=="camel",Fe=he=>V?Te(he):he,Q=new FormData;Q.append(Fe("agentKey"),e.agentKey),y&&Q.append(Fe("conversationId"),y),Q.append("messages",JSON.stringify([{role:"user",content:h.trim()}])),Q.append("metadata",JSON.stringify(V?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),E&&Q.append("model",E),d&&Q.append("thinking","true"),C.forEach(he=>{Q.append("files",he)}),K=t.getFetchOptions({method:"POST",body:Q},I)}else{let V=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},...O!==void 0&&{supersedeFromMessageIndex:O}});K=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(V)},I)}let j=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,K),_=I;if(j.status===401){t.clearSession();let V=await t.getOrCreateSession(!0);V&&(_=V,C.length>0?K=t.getFetchOptions({method:"POST",body:K.body},V):K=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:K.body},V),j=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,K))}if(!j.ok){let V=await j.json().catch(()=>({}));throw new Error(V.error||V.detail||`HTTP ${j.status}`)}let G=await j.json(),Y=t.transformResponse(G);T.current=Y.id,!y&&Y.conversationId&&u(Y.conversationId),await m(Y.id,_,A)}catch(I){f(I.message||"Failed to send message"),$(!1)}finally{T.current=null}},[e,t,y,r,m]),U=te(async()=>{let h=T.current;if(!(!h||!r))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,l(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,r]),x=te(()=>{l([]),u(null),f(null),c(!1),w(0),s?.set(e.conversationIdKey,null)},[e.conversationIdKey,s]),R=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"}},D=te(async h=>{console.log("[ChatWidget] loadConversation called with:",h),$(!0),l([]),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(R).filter(Boolean);console.log("[ChatWidget] Mapped messages:",A),l(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]),P=te(async()=>{if(!(!y||S||!k)){a(!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(R).filter(Boolean);l(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{a(!1)}}},[e,t,y,g,S,k]),B=te(async(h,M,p={})=>{if(r)return;let C=n[h];if(!C||C.role!=="user")return;let b=n.slice(0,h);l(b),await N(M,{...p,supersedeFromMessageIndex:h})},[n,r,N]),H=te(async(h,M={})=>{if(r)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);l(E),await N(b.content,{...M,supersedeFromMessageIndex:C})},[n,r,N]);return et(()=>()=>{v.current&&v.current.close()},[]),{messages:n,isLoading:r,error:i,conversationId:y,hasMoreMessages:k,loadingMoreMessages:S,sendMessage:N,cancelRun:U,clearMessages:x,loadConversation:D,loadMoreMessages:P,setConversationId:u,editMessage:B,retryMessage:H}}import{useState as de,useEffect as _t,useCallback as be}from"preact/hooks";var st="cw_thinking_enabled";function nt(e,t,s){let[n,l]=de([]),[r,$]=de(null),[i,f]=de(null),[y,u]=de(!1),[k,c]=de(!1);_t(()=>{(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(),N=m.models||[];l(N),f(m.default);let U=s?.get(e.modelKey);U&&N.some(R=>R.id===U)?$(U):$(m.default),s?.get(st)==="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=be(v=>{$(v),s?.set(e.modelKey,v)},[e.modelKey,s]),a=be(v=>{c(v),s?.set(st,v?"true":"false")},[s]),g=be(()=>n.find(v=>v.id===r)||null,[n,r]),w=be(()=>g()?.supports_thinking||!1,[g]);return{availableModels:n,selectedModel:r,defaultModel:i,isLoading:y,selectModel:S,getSelectedModelInfo:g,thinkingEnabled:k,toggleThinking:a,supportsThinking:w}}import{useState as Ie,useCallback as re}from"preact/hooks";function at(e,t){let[s,n]=Ie(null),[l,r]=Ie(!1),[$,i]=Ie(null),f=e.apiPaths?.tasks||"/api/agent/tasks/",y=re(async()=>{r(!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{r(!1)}},[e.backendUrl,f,t]),u=re(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=re(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=re(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=re(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]),a=re(()=>i(null),[]);return{taskList:s,tasks:s?.tasks||[],progress:s?.progress||{total:0,completed:0,percent_complete:0},isLoading:l,error:$,loadTaskList:y,addTask:u,updateTask:k,removeTask:c,clearTasks:S,clearError:a}}import{useState as ae,useEffect as ot,useCallback as ue}from"preact/hooks";var rt="cw_selected_system",xe="cw_selected_agent",lt="cw_selected_system_version",Se="cw_selected_agent_version";function it(e,t,s){let[n,l]=ae([]),[r,$]=ae([]),[i,f]=ae(null),[y,u]=ae(null),[k,c]=ae(null),[S,a]=ae(null),[g,w]=ae(!1),v=ue(()=>{if(y)return y;if(i){let x=n.find(R=>R.slug===i);if(x?.entry_agent)return x.entry_agent.slug}return e.agentKey},[y,i,n,e.agentKey]);ot(()=>{if(!e.showDevTools)return;(async()=>{w(!0);try{let R=await fetch(`${e.backendUrl}${e.apiPaths.systems}`,t.getFetchOptions({method:"GET"}));if(R.ok){let D=await R.json(),P=D.results||D;l(P);let B=s?.get(rt);B&&P.some(H=>H.slug===B)?f(B):P.length===1&&f(P[0].slug)}}catch(R){console.warn("[ChatWidget] Failed to load systems:",R)}finally{w(!1)}})()},[e.backendUrl,e.apiPaths.systems,e.showDevTools,t,s]),ot(()=>{if(!e.showDevTools)return;(async()=>{try{let R=i?`?system=${encodeURIComponent(i)}`:"",D=await fetch(`${e.backendUrl}${e.apiPaths.agents}${R}`,t.getFetchOptions({method:"GET"}));if(D.ok){let P=await D.json(),B=P.results||P;$(B);let H=s?.get(xe);if(H&&B.some(M=>M.slug===H))u(H);else if(i){let M=n.find(p=>p.slug===i);M?.entry_agent&&u(M.entry_agent.slug)}let h=s?.get(Se);h&&a(h)}}catch(R){console.warn("[ChatWidget] Failed to load agents:",R)}})()},[e.backendUrl,e.apiPaths.agents,e.showDevTools,i,t,s,n]);let T=ue(x=>{f(x),s?.set(rt,x),u(null),a(null),s?.set(xe,null),s?.set(Se,null);let D=n.find(P=>P.slug===x)?.active_version||null;c(D),s?.set(lt,D)},[s,n]),m=ue(x=>{u(x),s?.set(xe,x);let D=r.find(P=>P.slug===x)?.active_version||null;a(D),s?.set(Se,D)},[s,r]),N=ue(x=>{c(x),s?.set(lt,x)},[s]),U=ue(x=>{a(x),s?.set(Se,x)},[s]);return{systems:n,agents:r,selectedSystem:i,selectedAgent:y,selectedSystemVersion:k,selectedAgentVersion:S,isLoading:g,selectSystem:T,selectAgent:m,selectSystemVersion:N,selectAgentVersion:U,getEffectiveAgentKey:v}}function ct(e,t,s){let n=u=>!u||typeof u!="object"||e.apiCaseStyle==="camel"?u:ge(u),l=u=>!u||typeof u!="object"||e.apiCaseStyle==="snake"?u:me(u),r=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",$=(u=null)=>{let k=r(),c={},S=u||e.authToken||t().authToken;if(k==="token"&&S){let a=e.authHeader||"Authorization",g=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";c[a]=g?`${g} ${S}`:S}else if(k==="jwt"&&S){let a=e.authHeader||"Authorization",g=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";c[a]=g?`${g} ${S}`:S}else if(k==="anonymous"&&S){let a=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";c[a]=S}if(k==="session"){let a=Ne(e.csrfCookieName);a&&(c["X-CSRFToken"]=a)}return c};return{getAuthStrategy:r,getAuthHeaders:$,getFetchOptions:(u={},k=null)=>{let c=r(),S={...u},a=$(k);return console.log("[ChatWidget] getFetchOptions - strategy:",c,"overrideToken:",k,"authHeaders:",a),S.headers={...S.headers,...a},c==="session"&&(S.credentials="include"),S},getOrCreateSession:async(u=!1)=>{let k=r(),c=t(),S=e.anonymousTokenKey||e.sessionTokenKey;if(k!=="anonymous")return e.authToken||c.authToken;if(!u){if(c.authToken)return c.authToken;let a=c.storage?.get(S);if(a)return s(g=>({...g,authToken:a})),a}try{let a=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,g=await fetch(`${e.backendUrl}${a}`,{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(a){console.warn("[ChatWidget] Failed to create session:",a)}return null},clearSession:()=>{let u=e.anonymousTokenKey||e.sessionTokenKey,k=t();s(c=>({...c,authToken:null})),k.storage?.set(u,null)},transformRequest:n,transformResponse:l}}function dt({config:e,onStateChange:t,markdownParser:s,apiRef:n}){console.log("[ChatWidget] Config:",{showConversationSidebar:e.showConversationSidebar,apiPaths:e.apiPaths});let[l,r]=q(e.embedded||e.forceOpen===!0),[$,i]=q(!1),[f,y]=q(!1),[u,k]=q(!1),[c,S]=q([]),[a,g]=q("chat"),[w,v]=q(!1),[T,m]=q(e.enableTTS),[N,U]=q(!1),[x,R]=q(null);pe(()=>{e.forceOpen!==void 0&&r(e.forceOpen)},[e.forceOpen]);let D=Ae(()=>Le(e.containerId),[e.containerId]),[P,B]=q(e.authToken||null),H=Ae(()=>ct(e,()=>({authToken:P,storage:D}),Y=>{let V=Y({authToken:P,storage:D});V.authToken!==P&&B(V.authToken)}),[e,P,D]),h=it(e,H,D),M=Ae(()=>{if(!e.showDevTools)return e;let _=h.getEffectiveAgentKey();return _&&_!==e.agentKey?{...e,agentKey:_}:e},[e,h.getEffectiveAgentKey]),p=tt(M,H,D),C=nt(e,H,D),b=at(e,H);pe(()=>{for(let _=p.messages.length-1;_>=0;_--){let G=p.messages[_];if(G.type==="sub_agent_start"){R({key:G.metadata?.subAgentKey,name:G.metadata?.agentName});return}if(G.type==="sub_agent_end"){R(null);return}}},[p.messages]),pe(()=>{let _=D.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(_))},[]),pe(()=>{t&&t({isOpen:l,isExpanded:$,debugMode:f,messages:p.messages,conversationId:p.conversationId,isLoading:p.isLoading,error:p.error})},[l,$,f,p.messages,p.conversationId,p.isLoading,p.error]);let E=le(async()=>{if(e.showConversationSidebar){v(!0);try{let _=M.agentKey,G=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(_)}`,Y=await fetch(G,H.getFetchOptions({method:"GET"}));if(Y.ok){let V=await Y.json();S(V.results||V)}}catch(_){console.error("[ChatWidget] Failed to load conversations:",_),S([])}finally{v(!1)}}},[e,M,H]),d=le(()=>{let _=!u;k(_),_&&E()},[u,E]),A=le(_=>{_!==p.conversationId&&p.loadConversation(_),k(!1)},[p]),O=le(()=>{p.clearMessages(),k(!1)},[p]),o=le(_=>{p.sendMessage(_,{model:C.selectedModel,thinking:C.thinkingEnabled&&C.supportsThinking(),onAssistantMessage:G=>{}})},[p,T,C.selectedModel,C.thinkingEnabled,C.supportsThinking]),I=le(_=>{g(_),_==="tasks"&&b.loadTaskList()},[b]);if(pe(()=>{n&&(n.current={open:()=>r(!0),close:()=>r(!1),send:_=>o(_),clearMessages:()=>p.clearMessages(),toggleTTS:()=>m(_=>!_),stopSpeech:()=>U(!1),setAuth:_=>{_.token!==void 0&&B(_.token)},clearAuth:()=>B(null)})},[p,n,o]),!e.embedded&&!l)return z`
587
587
  <button
588
588
  class="cw-fab"
589
589
  style=${{backgroundColor:e.primaryColor}}
@@ -593,37 +593,39 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
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 K=["cw-widget",$&&"cw-widget-expanded",e.embedded&&"cw-widget-embedded"].filter(Boolean).join(" "),j=e.headerTextColor||We(e.primaryColor);return G`
596
+ `;let K=["cw-widget",$&&"cw-widget-expanded",e.embedded&&"cw-widget-embedded"].filter(Boolean).join(" "),j=e.headerTextColor||He(e.primaryColor);return z`
597
597
  <div class=${K} style=${{"--cw-primary":e.primaryColor,"--cw-header-text":j}}>
598
- ${e.showConversationSidebar&&G`
598
+ ${e.showConversationSidebar&&z`
599
599
  <${Ge}
600
600
  isOpen=${u}
601
601
  conversations=${c}
602
602
  conversationsLoading=${w}
603
603
  currentConversationId=${p.conversationId}
604
604
  onClose=${()=>k(!1)}
605
- onNewConversation=${F}
605
+ onNewConversation=${O}
606
606
  onSwitchConversation=${A}
607
607
  />
608
608
  `}
609
609
 
610
- <${He}
611
- config=${e}
612
- debugMode=${f}
613
- isExpanded=${$}
614
- isSpeaking=${N}
615
- messagesCount=${p.messages.length}
616
- isLoading=${p.isLoading}
617
- currentAgent=${x}
618
- onClose=${()=>r(!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`
611
+ <${We}
612
+ config=${e}
613
+ debugMode=${f}
614
+ isExpanded=${$}
615
+ isSpeaking=${N}
616
+ messagesCount=${p.messages.length}
617
+ isLoading=${p.isLoading}
618
+ currentAgent=${x}
619
+ onClose=${()=>r(!1)}
620
+ onToggleExpand=${()=>i(!$)}
621
+ onToggleDebug=${()=>y(!f)}
622
+ onToggleTTS=${()=>m(!T)}
623
+ onClear=${p.clearMessages}
624
+ onToggleSidebar=${d}
625
+ />
626
+ `}
625
627
 
626
- ${e.showDevTools&&G`
628
+ ${e.showDevTools&&z`
627
629
  <${Ze}
628
630
  systems=${h.systems}
629
631
  agents=${h.agents}
@@ -639,7 +641,7 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
639
641
  />
640
642
  `}
641
643
 
642
- ${e.showTasksTab!==!1&&G`
644
+ ${e.showTasksTab!==!1&&z`
643
645
  <div class="cw-tabs">
644
646
  <button
645
647
  class=${`cw-tab ${a==="chat"?"cw-tab-active":""}`}
@@ -651,14 +653,14 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
651
653
  class=${`cw-tab ${a==="tasks"?"cw-tab-active":""}`}
652
654
  onClick=${()=>I("tasks")}
653
655
  >
654
- Tasks ${b.progress.total>0?G`<span class="cw-tab-badge">${b.progress.completed}/${b.progress.total}</span>`:""}
656
+ Tasks ${b.progress.total>0?z`<span class="cw-tab-badge">${b.progress.completed}/${b.progress.total}</span>`:""}
655
657
  </button>
656
658
  </div>
657
659
  `}
658
660
 
659
- ${f&&G`<div class="cw-status-bar"><span>🐛 Debug</span></div>`}
661
+ ${f&&z`<div class="cw-status-bar"><span>🐛 Debug</span></div>`}
660
662
 
661
- ${a==="chat"?G`
663
+ ${a==="chat"?z`
662
664
  <${Je}
663
665
  messages=${p.messages}
664
666
  isLoading=${p.isLoading}
@@ -673,9 +675,9 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
673
675
  emptyStateMessage=${e.emptyStateMessage}
674
676
  />
675
677
 
676
- ${p.error&&G`<div class="cw-error-bar">${p.error}</div>`}
678
+ ${p.error&&z`<div class="cw-error-bar">${p.error}</div>`}
677
679
 
678
- ${e.showModelSelector&&C.availableModels.length>0&&G`
680
+ ${e.showModelSelector&&C.availableModels.length>0&&z`
679
681
  <${qe}
680
682
  availableModels=${C.availableModels}
681
683
  selectedModel=${C.selectedModel}
@@ -693,8 +695,9 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
693
695
  placeholder=${e.placeholder}
694
696
  primaryColor=${e.primaryColor}
695
697
  enableVoice=${e.enableVoice}
698
+ enableFiles=${e.showFileAttachment!==!1}
696
699
  />
697
- `:G`
700
+ `:z`
698
701
  <${Xe}
699
702
  tasks=${b.tasks}
700
703
  progress=${b.progress}
@@ -707,9 +710,9 @@ var gt=Object.defineProperty;var ft=(e,t,s)=>t in e?gt(e,t,{enumerable:!0,config
707
710
  />
708
711
  `}
709
712
  </div>
710
- `}var ut={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 pt(e){let t={...ut.apiPaths,...e.apiPaths||{}};return{...ut,...e,apiPaths:t}}var Ce=new Map,Et=0,O=null,Re=class{constructor(t={}){Fe(this,"_handleStateChange",t=>{this._state=t});this.instanceId=`cw-${++Et}`,this.config=pt(t),this.container=null,this._state={},this._apiRef={current:null},Ce.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&&ht(Mt`<${dt}
713
+ `}var ut={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 pt(e){let t={...ut.apiPaths,...e.apiPaths||{}};return{...ut,...e,apiPaths:t}}var Ce=new Map,Et=0,F=null,Re=class{constructor(t={}){Oe(this,"_handleStateChange",t=>{this._state=t});this.instanceId=`cw-${++Et}`,this.config=pt(t),this.container=null,this._state={},this._apiRef={current:null},Ce.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&&ht(Mt`<${dt}
711
714
  config=${{...this.config,...t}}
712
715
  onStateChange=${this._handleStateChange}
713
716
  markdownParser=${De._enhancedMarkdownParser}
714
717
  apiRef=${this._apiRef}
715
- />`,this.container)}destroy(){this.container&&(ht(null,this.container),this.config.containerId?this.container.classList.remove("cw-container-embedded"):this.container.remove(),this.container=null),Ce.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 mt(e={}){return new Re(e).init()}function It(e={}){return O&&O.destroy(),O=mt(e),O}function xt(){O&&(O.destroy(),O=null)}function At(){O&&O.open()}function Rt(){O&&O.close()}function Dt(e){O&&O.send(e)}function Ot(){O&&O.clearMessages()}function Ft(){O&&O.toggleTTS()}function Pt(){O&&O.stopSpeech()}function Kt(e){O&&O.setAuth(e)}function Lt(){O&&O.clearAuth()}function Nt(){return O?O.getState():null}function Wt(){return O?O.getConfig():null}var De={createInstance:mt,getInstance:e=>Ce.get(e),getAllInstances:()=>Array.from(Ce.values()),init:It,destroy:xt,open:At,close:Rt,send:Dt,clearMessages:Ot,toggleTTS:Ft,stopSpeech:Pt,setAuth:Kt,clearAuth:Lt,getState:Nt,getConfig:Wt,_enhancedMarkdownParser:null};var Qs=De;typeof window<"u"&&(window.ChatWidget=De);export{De as ChatWidget,Qs as default};
718
+ />`,this.container)}destroy(){this.container&&(ht(null,this.container),this.config.containerId?this.container.classList.remove("cw-container-embedded"):this.container.remove(),this.container=null),Ce.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 mt(e={}){return new Re(e).init()}function It(e={}){return F&&F.destroy(),F=mt(e),F}function xt(){F&&(F.destroy(),F=null)}function At(){F&&F.open()}function Rt(){F&&F.close()}function Dt(e){F&&F.send(e)}function Ft(){F&&F.clearMessages()}function Ot(){F&&F.toggleTTS()}function Pt(){F&&F.stopSpeech()}function Kt(e){F&&F.setAuth(e)}function Lt(){F&&F.clearAuth()}function Nt(){return F?F.getState():null}function Ht(){return F?F.getConfig():null}var De={createInstance:mt,getInstance:e=>Ce.get(e),getAllInstances:()=>Array.from(Ce.values()),init:It,destroy:xt,open:At,close:Rt,send:Dt,clearMessages:Ft,toggleTTS:Ot,stopSpeech:Pt,setAuth:Kt,clearAuth:Lt,getState:Nt,getConfig:Ht,_enhancedMarkdownParser:null};var Qs=De;typeof window<"u"&&(window.ChatWidget=De);export{De as ChatWidget,Qs as default};