@makemore/agent-frontend 2.7.0 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,22 +1,83 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 Agent Frontend
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ Business Source License 1.1
2
+
3
+ License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
4
+ "Business Source License" is a trademark of MariaDB Corporation Ab.
5
+
6
+ Parameters
7
+
8
+ Licensor: Chris Barry
9
+ Licensed Work: agent-frontend
10
+ The Licensed Work is (c) 2025 Chris Barry
11
+ Additional Use Grant: You may use the Licensed Work for non-production purposes,
12
+ including development, testing, and evaluation. Production
13
+ use requires a commercial license from the Licensor.
14
+ Change Date: 2029-01-24
15
+ Change License: MIT
16
+
17
+ Terms
18
+
19
+ The Licensor hereby grants you the right to copy, modify, create derivative
20
+ works, redistribute, and make non-production use of the Licensed Work. The
21
+ Licensor may make an Additional Use Grant, above, permitting limited production
22
+ use.
23
+
24
+ Effective on the Change Date, or the fourth anniversary of the first publicly
25
+ available distribution of a specific version of the Licensed Work under this
26
+ License, whichever comes first, the Licensor hereby grants you rights under
27
+ the terms of the Change License, and the rights granted in the paragraph above
28
+ terminate.
29
+
30
+ If your use of the Licensed Work does not comply with the requirements
31
+ currently in effect as described in this License, you must purchase a
32
+ commercial license from the Licensor, its affiliated entities, or authorized
33
+ resellers, or you must refrain from using the Licensed Work.
34
+
35
+ All copies of the original and modified Licensed Work, and derivative works
36
+ of the Licensed Work, are subject to this License. This License applies
37
+ separately for each version of the Licensed Work and the Change Date may vary
38
+ for each version of the Licensed Work released by Licensor.
39
+
40
+ You must conspicuously display this License on each original or modified copy
41
+ of the Licensed Work. If you receive the Licensed Work in original or
42
+ modified form from a third party, the terms and conditions set forth in this
43
+ License apply to your use of that work.
44
+
45
+ Any use of the Licensed Work in violation of this License will automatically
46
+ terminate your rights under this License for the current and all other
47
+ versions of the Licensed Work.
48
+
49
+ This License does not grant you any right in any trademark or logo of
50
+ Licensor or its affiliates (provided that you may use a trademark or logo of
51
+ Licensor as expressly required by this License).
52
+
53
+ TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
54
+ AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
55
+ EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
56
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
57
+ TITLE.
58
+
59
+ MariaDB hereby grants you permission to use this License's text to license
60
+ your works, and to refer to it using the trademark "Business Source License",
61
+ as long as you comply with the Covenants of Licensor below.
62
+
63
+ Covenants of Licensor
64
+
65
+ In consideration of the right to use this License's text and the "Business
66
+ Source License" name and trademark, Licensor covenants to MariaDB, and to all
67
+ other recipients of the licensed work to be provided by Licensor:
68
+
69
+ 1. To specify as the Change License the GPL Version 2.0 or any later version,
70
+ or a license that is compatible with GPL Version 2.0 or a later version,
71
+ where "compatible" means that software provided under the Change License can
72
+ be included in a program with software provided under GPL Version 2.0 or a
73
+ later version. Licensor may specify additional Change Licenses without
74
+ limitation.
75
+
76
+ 2. To either: (a) specify an additional grant of rights to use that does not
77
+ impose any additional restriction on the right granted in this License, as
78
+ the Additional Use Grant; or (b) insert the text "None".
79
+
80
+ 3. To specify a Change Date.
81
+
82
+ 4. Not to modify this License in any other way.
22
83
 
@@ -1,7 +1,7 @@
1
- var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnPropertyDescriptor;var Ot=Object.getOwnPropertyNames;var Nt=Object.prototype.hasOwnProperty;var Lt=(e,t)=>{for(var n in t)Se(e,n,{get:t[n],enumerable:!0})},Ut=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Ot(t))!Nt.call(e,a)&&a!==n&&Se(e,a,{get:()=>t[a],enumerable:!(s=Ht(t,a))||s.enumerable});return e};var Wt=e=>Ut(Se({},"__esModule",{value:!0}),e);var yn={};Lt(yn,{ChatWidget:()=>Ce,default:()=>gn});var _e,H,ze,Kt,ee,We,Je,Ve,qe,Ee,Te,Me,Bt,oe={},Ge=[],jt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,pe=Array.isArray;function Q(e,t){for(var n in t)e[n]=t[n];return e}function Ie(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function fe(e,t,n){var s,a,o,l={};for(o in t)o=="key"?s=t[o]:o=="ref"?a=t[o]:l[o]=t[o];if(arguments.length>2&&(l.children=arguments.length>3?_e.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(o in e.defaultProps)l[o]===void 0&&(l[o]=e.defaultProps[o]);return ue(e,l,s,a,null)}function ue(e,t,n,s,a){var o={type:e,props:t,key:n,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:a??++ze,__i:-1,__u:0};return a==null&&H.vnode!=null&&H.vnode(o),o}function he(e){return e.children}function se(e,t){this.props=e,this.context=t}function ne(e,t){if(t==null)return e.__?ne(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?ne(e):null}function Xe(e){var t,n;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null){e.__e=e.__c.base=n.__e;break}return Xe(e)}}function Ke(e){(!e.__d&&(e.__d=!0)&&ee.push(e)&&!de.__r++||We!=H.debounceRendering)&&((We=H.debounceRendering)||Je)(de)}function de(){for(var e,t,n,s,a,o,l,c=1;ee.length;)ee.length>c&&ee.sort(Ve),e=ee.shift(),c=ee.length,e.__d&&(n=void 0,s=void 0,a=(s=(t=e).__v).__e,o=[],l=[],t.__P&&((n=Q({},s)).__v=s.__v+1,H.vnode&&H.vnode(n),Ae(t.__P,n,s,t.__n,t.__P.namespaceURI,32&s.__u?[a]:null,o,a??ne(s),!!(32&s.__u),l),n.__v=s.__v,n.__.__k[n.__i]=n,Ye(o,n,l),s.__e=s.__=null,n.__e!=a&&Xe(n)));de.__r=0}function Qe(e,t,n,s,a,o,l,c,u,i,d){var r,_,p,k,w,y,g,$=s&&s.__k||Ge,I=t.length;for(u=zt(n,t,$,u,I),r=0;r<I;r++)(p=n.__k[r])!=null&&(_=p.__i==-1?oe:$[p.__i]||oe,p.__i=r,y=Ae(e,p,_,a,o,l,c,u,i,d),k=p.__e,p.ref&&_.ref!=p.ref&&(_.ref&&De(_.ref,null,p),d.push(p.ref,p.__c||k,p)),w==null&&k!=null&&(w=k),(g=!!(4&p.__u))||_.__k===p.__k?u=Ze(p,u,e,g):typeof p.type=="function"&&y!==void 0?u=y:k&&(u=k.nextSibling),p.__u&=-7);return n.__e=w,u}function zt(e,t,n,s,a){var o,l,c,u,i,d=n.length,r=d,_=0;for(e.__k=new Array(a),o=0;o<a;o++)(l=t[o])!=null&&typeof l!="boolean"&&typeof l!="function"?(typeof l=="string"||typeof l=="number"||typeof l=="bigint"||l.constructor==String?l=e.__k[o]=ue(null,l,null,null,null):pe(l)?l=e.__k[o]=ue(he,{children:l},null,null,null):l.constructor===void 0&&l.__b>0?l=e.__k[o]=ue(l.type,l.props,l.key,l.ref?l.ref:null,l.__v):e.__k[o]=l,u=o+_,l.__=e,l.__b=e.__b+1,c=null,(i=l.__i=Jt(l,n,u,r))!=-1&&(r--,(c=n[i])&&(c.__u|=2)),c==null||c.__v==null?(i==-1&&(a>d?_--:a<d&&_++),typeof l.type!="function"&&(l.__u|=4)):i!=u&&(i==u-1?_--:i==u+1?_++:(i>u?_--:_++,l.__u|=4))):e.__k[o]=null;if(r)for(o=0;o<d;o++)(c=n[o])!=null&&!(2&c.__u)&&(c.__e==s&&(s=ne(c)),tt(c,c));return s}function Ze(e,t,n,s){var a,o;if(typeof e.type=="function"){for(a=e.__k,o=0;a&&o<a.length;o++)a[o]&&(a[o].__=e,t=Ze(a[o],t,n,s));return t}e.__e!=t&&(s&&(t&&e.type&&!t.parentNode&&(t=ne(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function Jt(e,t,n,s){var a,o,l,c=e.key,u=e.type,i=t[n],d=i!=null&&(2&i.__u)==0;if(i===null&&c==null||d&&c==i.key&&u==i.type)return n;if(s>(d?1:0)){for(a=n-1,o=n+1;a>=0||o<t.length;)if((i=t[l=a>=0?a--:o++])!=null&&!(2&i.__u)&&c==i.key&&u==i.type)return l}return-1}function Be(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||jt.test(t)?n:n+"px"}function ce(e,t,n,s,a){var o,l;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof s=="string"&&(e.style.cssText=s=""),s)for(t in s)n&&t in n||Be(e.style,t,"");if(n)for(t in n)s&&n[t]==s[t]||Be(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")o=t!=(t=t.replace(qe,"$1")),l=t.toLowerCase(),t=l in e||t=="onFocusOut"||t=="onFocusIn"?l.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+o]=n,n?s?n.u=s.u:(n.u=Ee,e.addEventListener(t,o?Me:Te,o)):e.removeEventListener(t,o?Me:Te,o);else{if(a=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function je(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t.t==null)t.t=Ee++;else if(t.t<n.u)return;return n(H.event?H.event(t):t)}}}function Ae(e,t,n,s,a,o,l,c,u,i){var d,r,_,p,k,w,y,g,$,I,N,J,z,V,K,B,q,O=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(u=!!(32&n.__u),o=[c=t.__e=n.__e]),(d=H.__b)&&d(t);e:if(typeof O=="function")try{if(g=t.props,$="prototype"in O&&O.prototype.render,I=(d=O.contextType)&&s[d.__c],N=d?I?I.props.value:d.__:s,n.__c?y=(r=t.__c=n.__c).__=r.__E:($?t.__c=r=new O(g,N):(t.__c=r=new se(g,N),r.constructor=O,r.render=qt),I&&I.sub(r),r.state||(r.state={}),r.__n=s,_=r.__d=!0,r.__h=[],r._sb=[]),$&&r.__s==null&&(r.__s=r.state),$&&O.getDerivedStateFromProps!=null&&(r.__s==r.state&&(r.__s=Q({},r.__s)),Q(r.__s,O.getDerivedStateFromProps(g,r.__s))),p=r.props,k=r.state,r.__v=t,_)$&&O.getDerivedStateFromProps==null&&r.componentWillMount!=null&&r.componentWillMount(),$&&r.componentDidMount!=null&&r.__h.push(r.componentDidMount);else{if($&&O.getDerivedStateFromProps==null&&g!==p&&r.componentWillReceiveProps!=null&&r.componentWillReceiveProps(g,N),t.__v==n.__v||!r.__e&&r.shouldComponentUpdate!=null&&r.shouldComponentUpdate(g,r.__s,N)===!1){for(t.__v!=n.__v&&(r.props=g,r.state=r.__s,r.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(f){f&&(f.__=t)}),J=0;J<r._sb.length;J++)r.__h.push(r._sb[J]);r._sb=[],r.__h.length&&l.push(r);break e}r.componentWillUpdate!=null&&r.componentWillUpdate(g,r.__s,N),$&&r.componentDidUpdate!=null&&r.__h.push(function(){r.componentDidUpdate(p,k,w)})}if(r.context=N,r.props=g,r.__P=e,r.__e=!1,z=H.__r,V=0,$){for(r.state=r.__s,r.__d=!1,z&&z(t),d=r.render(r.props,r.state,r.context),K=0;K<r._sb.length;K++)r.__h.push(r._sb[K]);r._sb=[]}else do r.__d=!1,z&&z(t),d=r.render(r.props,r.state,r.context),r.state=r.__s;while(r.__d&&++V<25);r.state=r.__s,r.getChildContext!=null&&(s=Q(Q({},s),r.getChildContext())),$&&!_&&r.getSnapshotBeforeUpdate!=null&&(w=r.getSnapshotBeforeUpdate(p,k)),B=d,d!=null&&d.type===he&&d.key==null&&(B=et(d.props.children)),c=Qe(e,pe(B)?B:[B],t,n,s,a,o,l,c,u,i),r.base=t.__e,t.__u&=-161,r.__h.length&&l.push(r),y&&(r.__E=r.__=null)}catch(f){if(t.__v=null,u||o!=null)if(f.then){for(t.__u|=u?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;o[o.indexOf(c)]=null,t.__e=c}else{for(q=o.length;q--;)Ie(o[q]);xe(t)}else t.__e=n.__e,t.__k=n.__k,f.then||xe(t);H.__e(f,t,n)}else o==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):c=t.__e=Vt(n.__e,t,n,s,a,o,l,u,i);return(d=H.diffed)&&d(t),128&t.__u?void 0:c}function xe(e){e&&e.__c&&(e.__c.__e=!0),e&&e.__k&&e.__k.forEach(xe)}function Ye(e,t,n){for(var s=0;s<n.length;s++)De(n[s],n[++s],n[++s]);H.__c&&H.__c(t,e),e.some(function(a){try{e=a.__h,a.__h=[],e.some(function(o){o.call(a)})}catch(o){H.__e(o,a.__v)}})}function et(e){return typeof e!="object"||e==null||e.__b&&e.__b>0?e:pe(e)?e.map(et):Q({},e)}function Vt(e,t,n,s,a,o,l,c,u){var i,d,r,_,p,k,w,y=n.props||oe,g=t.props,$=t.type;if($=="svg"?a="http://www.w3.org/2000/svg":$=="math"?a="http://www.w3.org/1998/Math/MathML":a||(a="http://www.w3.org/1999/xhtml"),o!=null){for(i=0;i<o.length;i++)if((p=o[i])&&"setAttribute"in p==!!$&&($?p.localName==$:p.nodeType==3)){e=p,o[i]=null;break}}if(e==null){if($==null)return document.createTextNode(g);e=document.createElementNS(a,$,g.is&&g),c&&(H.__m&&H.__m(t,o),c=!1),o=null}if($==null)y===g||c&&e.data==g||(e.data=g);else{if(o=o&&_e.call(e.childNodes),!c&&o!=null)for(y={},i=0;i<e.attributes.length;i++)y[(p=e.attributes[i]).name]=p.value;for(i in y)if(p=y[i],i!="children"){if(i=="dangerouslySetInnerHTML")r=p;else if(!(i in g)){if(i=="value"&&"defaultValue"in g||i=="checked"&&"defaultChecked"in g)continue;ce(e,i,null,p,a)}}for(i in g)p=g[i],i=="children"?_=p:i=="dangerouslySetInnerHTML"?d=p:i=="value"?k=p:i=="checked"?w=p:c&&typeof p!="function"||y[i]===p||ce(e,i,p,y[i],a);if(d)c||r&&(d.__html==r.__html||d.__html==e.innerHTML)||(e.innerHTML=d.__html),t.__k=[];else if(r&&(e.innerHTML=""),Qe(t.type=="template"?e.content:e,pe(_)?_:[_],t,n,s,$=="foreignObject"?"http://www.w3.org/1999/xhtml":a,o,l,o?o[0]:n.__k&&ne(n,0),c,u),o!=null)for(i=o.length;i--;)Ie(o[i]);c||(i="value",$=="progress"&&k==null?e.removeAttribute("value"):k!=null&&(k!==e[i]||$=="progress"&&!k||$=="option"&&k!=y[i])&&ce(e,i,k,y[i],a),i="checked",w!=null&&w!=e[i]&&ce(e,i,w,y[i],a))}return e}function De(e,t,n){try{if(typeof e=="function"){var s=typeof e.__u=="function";s&&e.__u(),s&&t==null||(e.__u=e(t))}else e.current=t}catch(a){H.__e(a,n)}}function tt(e,t,n){var s,a;if(H.unmount&&H.unmount(e),(s=e.ref)&&(s.current&&s.current!=e.__e||De(s,null,t)),(s=e.__c)!=null){if(s.componentWillUnmount)try{s.componentWillUnmount()}catch(o){H.__e(o,t)}s.base=s.__P=null}if(s=e.__k)for(a=0;a<s.length;a++)s[a]&&tt(s[a],t,n||typeof e.type!="function");n||Ie(e.__e),e.__c=e.__=e.__e=void 0}function qt(e,t,n){return this.constructor(e,n)}function me(e,t,n){var s,a,o,l;t==document&&(t=document.documentElement),H.__&&H.__(e,t),a=(s=typeof n=="function")?null:n&&n.__k||t.__k,o=[],l=[],Ae(t,e=(!s&&n||t).__k=fe(he,null,[e]),a||oe,oe,t.namespaceURI,!s&&n?[n]:a?null:t.firstChild?_e.call(t.childNodes):null,o,!s&&n?n:a?a.__e:t.firstChild,s,l),Ye(o,e,l)}_e=Ge.slice,H={__e:function(e,t,n,s){for(var a,o,l;t=t.__;)if((a=t.__c)&&!a.__)try{if((o=a.constructor)&&o.getDerivedStateFromError!=null&&(a.setState(o.getDerivedStateFromError(e)),l=a.__d),a.componentDidCatch!=null&&(a.componentDidCatch(e,s||{}),l=a.__d),l)return a.__E=a}catch(c){e=c}throw e}},ze=0,Kt=function(e){return e!=null&&e.constructor===void 0},se.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=Q({},this.state),typeof e=="function"&&(e=e(Q({},n),this.props)),e&&Q(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),Ke(this))},se.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Ke(this))},se.prototype.render=he,ee=[],Je=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Ve=function(e,t){return e.__v.__b-t.__v.__b},de.__r=0,qe=/(PointerCapture)$|Capture$/i,Ee=0,Te=je(!1),Me=je(!0),Bt=0;var st=function(e,t,n,s){var a;t[0]=0;for(var o=1;o<t.length;o++){var l=t[o++],c=t[o]?(t[0]|=l?1:2,n[t[o++]]):t[++o];l===3?s[0]=c:l===4?s[1]=Object.assign(s[1]||{},c):l===5?(s[1]=s[1]||{})[t[++o]]=c:l===6?s[1][t[++o]]+=c+"":l?(a=e.apply(c,st(e,c,n,["",null])),s.push(a),c[0]?t[0]|=2:(t[o-2]=0,t[o]=a)):s.push(c)}return s},nt=new Map;function ot(e){var t=nt.get(this);return t||(t=new Map,nt.set(this,t)),(t=st(this,t.get(e)||(t.set(e,t=function(n){for(var s,a,o=1,l="",c="",u=[0],i=function(_){o===1&&(_||(l=l.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?u.push(0,_,l):o===3&&(_||l)?(u.push(3,_,l),o=2):o===2&&l==="..."&&_?u.push(4,_,0):o===2&&l&&!_?u.push(5,0,!0,l):o>=5&&((l||!_&&o===5)&&(u.push(o,0,l,a),o=6),_&&(u.push(o,_,0,a),o=6)),l=""},d=0;d<n.length;d++){d&&(o===1&&i(),i(d));for(var r=0;r<n[d].length;r++)s=n[d][r],o===1?s==="<"?(i(),u=[u],o=3):l+=s:o===4?l==="--"&&s===">"?(o=1,l=""):l=s+l[0]:c?s===c?c="":l+=s:s==='"'||s==="'"?c=s:s===">"?(i(),o=1):o&&(s==="="?(o=5,a=l,l=""):s==="/"&&(o<5||n[d][r+1]===">")?(i(),o===3&&(u=u[0]),o=u,(u=u[0]).push(2,0,o),o=0):s===" "||s===" "||s===`
2
- `||s==="\r"?(i(),o=2):l+=s),o===3&&l==="!--"&&(o=4,u=u[0])}return i(),u}(e)),t),arguments,[])).length>1?t:t[0]}var h=ot.bind(fe);var ae,L,Re,at,re=0,pt=[],U=H,rt=U.__b,it=U.__r,lt=U.diffed,ct=U.__c,ut=U.unmount,dt=U.__;function Fe(e,t){U.__h&&U.__h(L,e,re||t),re=0;var n=L.__H||(L.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function C(e){return re=1,Gt(ht,e)}function Gt(e,t,n){var s=Fe(ae++,2);if(s.t=e,!s.__c&&(s.__=[n?n(t):ht(void 0,t),function(c){var u=s.__N?s.__N[0]:s.__[0],i=s.t(u,c);u!==i&&(s.__N=[i,s.__[1]],s.__c.setState({}))}],s.__c=L,!L.__f)){var a=function(c,u,i){if(!s.__c.__H)return!0;var d=s.__c.__H.__.filter(function(_){return!!_.__c});if(d.every(function(_){return!_.__N}))return!o||o.call(this,c,u,i);var r=s.__c.props!==c;return d.forEach(function(_){if(_.__N){var p=_.__[0];_.__=_.__N,_.__N=void 0,p!==_.__[0]&&(r=!0)}}),o&&o.call(this,c,u,i)||r};L.__f=!0;var o=L.shouldComponentUpdate,l=L.componentWillUpdate;L.componentWillUpdate=function(c,u,i){if(this.__e){var d=o;o=void 0,a(c,u,i),o=d}l&&l.call(this,c,u,i)},L.shouldComponentUpdate=a}return s.__N||s.__}function W(e,t){var n=Fe(ae++,3);!U.__s&&ft(n.__H,t)&&(n.__=e,n.u=t,L.__H.__h.push(n))}function G(e){return re=5,ie(function(){return{current:e}},[])}function ie(e,t){var n=Fe(ae++,7);return ft(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function A(e,t){return re=8,ie(function(){return e},t)}function Xt(){for(var e;e=pt.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(ge),e.__H.__h.forEach(Pe),e.__H.__h=[]}catch(t){e.__H.__h=[],U.__e(t,e.__v)}}U.__b=function(e){L=null,rt&&rt(e)},U.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),dt&&dt(e,t)},U.__r=function(e){it&&it(e),ae=0;var t=(L=e.__c).__H;t&&(Re===L?(t.__h=[],L.__h=[],t.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.forEach(ge),t.__h.forEach(Pe),t.__h=[],ae=0)),Re=L},U.diffed=function(e){lt&&lt(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(pt.push(t)!==1&&at===U.requestAnimationFrame||((at=U.requestAnimationFrame)||Qt)(Xt)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),Re=L=null},U.__c=function(e,t){t.some(function(n){try{n.__h.forEach(ge),n.__h=n.__h.filter(function(s){return!s.__||Pe(s)})}catch(s){t.some(function(a){a.__h&&(a.__h=[])}),t=[],U.__e(s,n.__v)}}),ct&&ct(e,t)},U.unmount=function(e){ut&&ut(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach(function(s){try{ge(s)}catch(a){t=a}}),n.__H=void 0,t&&U.__e(t,n.__v))};var _t=typeof requestAnimationFrame=="function";function Qt(e){var t,n=function(){clearTimeout(s),_t&&cancelAnimationFrame(t),setTimeout(e)},s=setTimeout(n,35);_t&&(t=requestAnimationFrame(n))}function ge(e){var t=L,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),L=t}function Pe(e){var t=L;e.__c=e.__(),L=t}function ft(e,t){return!e||e.length!==t.length||t.some(function(n,s){return n!==e[s]})}function ht(e,t){return typeof t=="function"?t(e):t}function Zt(e){return e.replace(/_([a-z])/g,(t,n)=>n.toUpperCase())}function He(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function ye(e){return Array.isArray(e)?e.map(ye):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[Zt(t),ye(n)])):e}function ve(e){return Array.isArray(e)?e.map(ve):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[He(t),ve(n)])):e}function we(){return"msg-"+Date.now()+"-"+Math.random().toString(36).substr(2,9)}function j(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function mt(e){if(!e)return"";try{let t=new Date(e),s=new Date-t,a=Math.floor(s/6e4),o=Math.floor(s/36e5),l=Math.floor(s/864e5);return a<1?"Just now":a<60?`${a}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:t.toLocaleDateString()}catch{return""}}function gt(e,t=null){if(t)return t(e);let n=j(e);return n=n.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>"),n=n.replace(/__(.+?)__/g,"<strong>$1</strong>"),n=n.replace(/\*(.+?)\*/g,"<em>$1</em>"),n=n.replace(/_(.+?)_/g,"<em>$1</em>"),n=n.replace(/`(.+?)`/g,"<code>$1</code>"),n=n.replace(/\[(.+?)\]\((.+?)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>'),n=n.replace(/\n/g,"<br>"),n}function yt(e=""){let t=n=>e?`${n}_${e}`:n;return{get(n){try{return localStorage.getItem(t(n))}catch{return null}},set(n,s){try{let a=t(n);s===null?localStorage.removeItem(a):localStorage.setItem(a,s)}catch{}}}}function vt(e="csrftoken"){let t=document.cookie.split(";");for(let s of t){let[a,o]=s.trim().split("=");if(a===e)return decodeURIComponent(o)}let n=document.querySelector('meta[name="csrf-token"]');return n?n.getAttribute("content"):null}function $e(e){if(e===0)return"0 B";let t=1024,n=["B","KB","MB","GB"],s=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,s)).toFixed(1))+" "+n[s]}function ke(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 wt({config:e,debugMode:t,isExpanded:n,isSpeaking:s,messagesCount:a,isLoading:o,currentAgent:l,onClose:c,onToggleExpand:u,onToggleDebug:i,onToggleTTS:d,onClear:r,onToggleSidebar:_}){let{title:p,primaryColor:k,embedded:w,showConversationSidebar:y,showClearButton:g,showDebugButton:$,enableDebugMode:I,showTTSButton:N,showExpandButton:J,enableTTS:z,elevenLabsApiKey:V,ttsProxyUrl:K}=e,B=V||K;return h`
3
- <div class="cw-header" style=${{backgroundColor:k}}>
4
- ${y&&h`
1
+ var ChatWidgetModule=(()=>{var Te=Object.defineProperty;var Ht=Object.getOwnPropertyDescriptor;var Nt=Object.getOwnPropertyNames;var Lt=Object.prototype.hasOwnProperty;var Ut=(e,t)=>{for(var n in t)Te(e,n,{get:t[n],enumerable:!0})},Kt=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Nt(t))!Lt.call(e,a)&&a!==n&&Te(e,a,{get:()=>t[a],enumerable:!(s=Ht(t,a))||s.enumerable});return e};var Wt=e=>Kt(Te({},"__esModule",{value:!0}),e);var vn={};Ut(vn,{ChatWidget:()=>Se,default:()=>yn});var pe,O,Je,Bt,ee,We,Ve,qe,Ge,Ie,Me,xe,jt,se={},Xe=[],zt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,he=Array.isArray;function Z(e,t){for(var n in t)e[n]=t[n];return e}function Ae(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function fe(e,t,n){var s,a,o,i={};for(o in t)o=="key"?s=t[o]:o=="ref"?a=t[o]:i[o]=t[o];if(arguments.length>2&&(i.children=arguments.length>3?pe.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(o in e.defaultProps)i[o]===void 0&&(i[o]=e.defaultProps[o]);return de(e,i,s,a,null)}function de(e,t,n,s,a){var o={type:e,props:t,key:n,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:a??++Je,__i:-1,__u:0};return a==null&&O.vnode!=null&&O.vnode(o),o}function me(e){return e.children}function ne(e,t){this.props=e,this.context=t}function te(e,t){if(t==null)return e.__?te(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?te(e):null}function Qe(e){var t,n;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null){e.__e=e.__c.base=n.__e;break}return Qe(e)}}function Be(e){(!e.__d&&(e.__d=!0)&&ee.push(e)&&!_e.__r++||We!=O.debounceRendering)&&((We=O.debounceRendering)||Ve)(_e)}function _e(){for(var e,t,n,s,a,o,i,c=1;ee.length;)ee.length>c&&ee.sort(qe),e=ee.shift(),c=ee.length,e.__d&&(n=void 0,s=void 0,a=(s=(t=e).__v).__e,o=[],i=[],t.__P&&((n=Z({},s)).__v=s.__v+1,O.vnode&&O.vnode(n),De(t.__P,n,s,t.__n,t.__P.namespaceURI,32&s.__u?[a]:null,o,a??te(s),!!(32&s.__u),i),n.__v=s.__v,n.__.__k[n.__i]=n,et(o,n,i),s.__e=s.__=null,n.__e!=a&&Qe(n)));_e.__r=0}function Ze(e,t,n,s,a,o,i,c,d,l,u){var r,_,p,v,w,y,g,k=s&&s.__k||Xe,I=t.length;for(d=Jt(n,t,k,d,I),r=0;r<I;r++)(p=n.__k[r])!=null&&(_=p.__i==-1?se:k[p.__i]||se,p.__i=r,y=De(e,p,_,a,o,i,c,d,l,u),v=p.__e,p.ref&&_.ref!=p.ref&&(_.ref&&Re(_.ref,null,p),u.push(p.ref,p.__c||v,p)),w==null&&v!=null&&(w=v),(g=!!(4&p.__u))||_.__k===p.__k?d=Ye(p,d,e,g):typeof p.type=="function"&&y!==void 0?d=y:v&&(d=v.nextSibling),p.__u&=-7);return n.__e=w,d}function Jt(e,t,n,s,a){var o,i,c,d,l,u=n.length,r=u,_=0;for(e.__k=new Array(a),o=0;o<a;o++)(i=t[o])!=null&&typeof i!="boolean"&&typeof i!="function"?(typeof i=="string"||typeof i=="number"||typeof i=="bigint"||i.constructor==String?i=e.__k[o]=de(null,i,null,null,null):he(i)?i=e.__k[o]=de(me,{children:i},null,null,null):i.constructor===void 0&&i.__b>0?i=e.__k[o]=de(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):e.__k[o]=i,d=o+_,i.__=e,i.__b=e.__b+1,c=null,(l=i.__i=Vt(i,n,d,r))!=-1&&(r--,(c=n[l])&&(c.__u|=2)),c==null||c.__v==null?(l==-1&&(a>u?_--:a<u&&_++),typeof i.type!="function"&&(i.__u|=4)):l!=d&&(l==d-1?_--:l==d+1?_++:(l>d?_--:_++,i.__u|=4))):e.__k[o]=null;if(r)for(o=0;o<u;o++)(c=n[o])!=null&&!(2&c.__u)&&(c.__e==s&&(s=te(c)),nt(c,c));return s}function Ye(e,t,n,s){var a,o;if(typeof e.type=="function"){for(a=e.__k,o=0;a&&o<a.length;o++)a[o]&&(a[o].__=e,t=Ye(a[o],t,n,s));return t}e.__e!=t&&(s&&(t&&e.type&&!t.parentNode&&(t=te(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function Vt(e,t,n,s){var a,o,i,c=e.key,d=e.type,l=t[n],u=l!=null&&(2&l.__u)==0;if(l===null&&c==null||u&&c==l.key&&d==l.type)return n;if(s>(u?1:0)){for(a=n-1,o=n+1;a>=0||o<t.length;)if((l=t[i=a>=0?a--:o++])!=null&&!(2&l.__u)&&c==l.key&&d==l.type)return i}return-1}function je(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||zt.test(t)?n:n+"px"}function ue(e,t,n,s,a){var o,i;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof s=="string"&&(e.style.cssText=s=""),s)for(t in s)n&&t in n||je(e.style,t,"");if(n)for(t in n)s&&n[t]==s[t]||je(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")o=t!=(t=t.replace(Ge,"$1")),i=t.toLowerCase(),t=i in e||t=="onFocusOut"||t=="onFocusIn"?i.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+o]=n,n?s?n.u=s.u:(n.u=Ie,e.addEventListener(t,o?xe:Me,o)):e.removeEventListener(t,o?xe:Me,o);else{if(a=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function ze(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t.t==null)t.t=Ie++;else if(t.t<n.u)return;return n(O.event?O.event(t):t)}}}function De(e,t,n,s,a,o,i,c,d,l){var u,r,_,p,v,w,y,g,k,I,N,J,z,V,W,B,q,H=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(d=!!(32&n.__u),o=[c=t.__e=n.__e]),(u=O.__b)&&u(t);e:if(typeof H=="function")try{if(g=t.props,k="prototype"in H&&H.prototype.render,I=(u=H.contextType)&&s[u.__c],N=u?I?I.props.value:u.__:s,n.__c?y=(r=t.__c=n.__c).__=r.__E:(k?t.__c=r=new H(g,N):(t.__c=r=new ne(g,N),r.constructor=H,r.render=Gt),I&&I.sub(r),r.state||(r.state={}),r.__n=s,_=r.__d=!0,r.__h=[],r._sb=[]),k&&r.__s==null&&(r.__s=r.state),k&&H.getDerivedStateFromProps!=null&&(r.__s==r.state&&(r.__s=Z({},r.__s)),Z(r.__s,H.getDerivedStateFromProps(g,r.__s))),p=r.props,v=r.state,r.__v=t,_)k&&H.getDerivedStateFromProps==null&&r.componentWillMount!=null&&r.componentWillMount(),k&&r.componentDidMount!=null&&r.__h.push(r.componentDidMount);else{if(k&&H.getDerivedStateFromProps==null&&g!==p&&r.componentWillReceiveProps!=null&&r.componentWillReceiveProps(g,N),t.__v==n.__v||!r.__e&&r.shouldComponentUpdate!=null&&r.shouldComponentUpdate(g,r.__s,N)===!1){for(t.__v!=n.__v&&(r.props=g,r.state=r.__s,r.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(h){h&&(h.__=t)}),J=0;J<r._sb.length;J++)r.__h.push(r._sb[J]);r._sb=[],r.__h.length&&i.push(r);break e}r.componentWillUpdate!=null&&r.componentWillUpdate(g,r.__s,N),k&&r.componentDidUpdate!=null&&r.__h.push(function(){r.componentDidUpdate(p,v,w)})}if(r.context=N,r.props=g,r.__P=e,r.__e=!1,z=O.__r,V=0,k){for(r.state=r.__s,r.__d=!1,z&&z(t),u=r.render(r.props,r.state,r.context),W=0;W<r._sb.length;W++)r.__h.push(r._sb[W]);r._sb=[]}else do r.__d=!1,z&&z(t),u=r.render(r.props,r.state,r.context),r.state=r.__s;while(r.__d&&++V<25);r.state=r.__s,r.getChildContext!=null&&(s=Z(Z({},s),r.getChildContext())),k&&!_&&r.getSnapshotBeforeUpdate!=null&&(w=r.getSnapshotBeforeUpdate(p,v)),B=u,u!=null&&u.type===me&&u.key==null&&(B=tt(u.props.children)),c=Ze(e,he(B)?B:[B],t,n,s,a,o,i,c,d,l),r.base=t.__e,t.__u&=-161,r.__h.length&&i.push(r),y&&(r.__E=r.__=null)}catch(h){if(t.__v=null,d||o!=null)if(h.then){for(t.__u|=d?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;o[o.indexOf(c)]=null,t.__e=c}else{for(q=o.length;q--;)Ae(o[q]);Ee(t)}else t.__e=n.__e,t.__k=n.__k,h.then||Ee(t);O.__e(h,t,n)}else o==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):c=t.__e=qt(n.__e,t,n,s,a,o,i,d,l);return(u=O.diffed)&&u(t),128&t.__u?void 0:c}function Ee(e){e&&e.__c&&(e.__c.__e=!0),e&&e.__k&&e.__k.forEach(Ee)}function et(e,t,n){for(var s=0;s<n.length;s++)Re(n[s],n[++s],n[++s]);O.__c&&O.__c(t,e),e.some(function(a){try{e=a.__h,a.__h=[],e.some(function(o){o.call(a)})}catch(o){O.__e(o,a.__v)}})}function tt(e){return typeof e!="object"||e==null||e.__b&&e.__b>0?e:he(e)?e.map(tt):Z({},e)}function qt(e,t,n,s,a,o,i,c,d){var l,u,r,_,p,v,w,y=n.props||se,g=t.props,k=t.type;if(k=="svg"?a="http://www.w3.org/2000/svg":k=="math"?a="http://www.w3.org/1998/Math/MathML":a||(a="http://www.w3.org/1999/xhtml"),o!=null){for(l=0;l<o.length;l++)if((p=o[l])&&"setAttribute"in p==!!k&&(k?p.localName==k:p.nodeType==3)){e=p,o[l]=null;break}}if(e==null){if(k==null)return document.createTextNode(g);e=document.createElementNS(a,k,g.is&&g),c&&(O.__m&&O.__m(t,o),c=!1),o=null}if(k==null)y===g||c&&e.data==g||(e.data=g);else{if(o=o&&pe.call(e.childNodes),!c&&o!=null)for(y={},l=0;l<e.attributes.length;l++)y[(p=e.attributes[l]).name]=p.value;for(l in y)if(p=y[l],l!="children"){if(l=="dangerouslySetInnerHTML")r=p;else if(!(l in g)){if(l=="value"&&"defaultValue"in g||l=="checked"&&"defaultChecked"in g)continue;ue(e,l,null,p,a)}}for(l in g)p=g[l],l=="children"?_=p:l=="dangerouslySetInnerHTML"?u=p:l=="value"?v=p:l=="checked"?w=p:c&&typeof p!="function"||y[l]===p||ue(e,l,p,y[l],a);if(u)c||r&&(u.__html==r.__html||u.__html==e.innerHTML)||(e.innerHTML=u.__html),t.__k=[];else if(r&&(e.innerHTML=""),Ze(t.type=="template"?e.content:e,he(_)?_:[_],t,n,s,k=="foreignObject"?"http://www.w3.org/1999/xhtml":a,o,i,o?o[0]:n.__k&&te(n,0),c,d),o!=null)for(l=o.length;l--;)Ae(o[l]);c||(l="value",k=="progress"&&v==null?e.removeAttribute("value"):v!=null&&(v!==e[l]||k=="progress"&&!v||k=="option"&&v!=y[l])&&ue(e,l,v,y[l],a),l="checked",w!=null&&w!=e[l]&&ue(e,l,w,y[l],a))}return e}function Re(e,t,n){try{if(typeof e=="function"){var s=typeof e.__u=="function";s&&e.__u(),s&&t==null||(e.__u=e(t))}else e.current=t}catch(a){O.__e(a,n)}}function nt(e,t,n){var s,a;if(O.unmount&&O.unmount(e),(s=e.ref)&&(s.current&&s.current!=e.__e||Re(s,null,t)),(s=e.__c)!=null){if(s.componentWillUnmount)try{s.componentWillUnmount()}catch(o){O.__e(o,t)}s.base=s.__P=null}if(s=e.__k)for(a=0;a<s.length;a++)s[a]&&nt(s[a],t,n||typeof e.type!="function");n||Ae(e.__e),e.__c=e.__=e.__e=void 0}function Gt(e,t,n){return this.constructor(e,n)}function ge(e,t,n){var s,a,o,i;t==document&&(t=document.documentElement),O.__&&O.__(e,t),a=(s=typeof n=="function")?null:n&&n.__k||t.__k,o=[],i=[],De(t,e=(!s&&n||t).__k=fe(me,null,[e]),a||se,se,t.namespaceURI,!s&&n?[n]:a?null:t.firstChild?pe.call(t.childNodes):null,o,!s&&n?n:a?a.__e:t.firstChild,s,i),et(o,e,i)}pe=Xe.slice,O={__e:function(e,t,n,s){for(var a,o,i;t=t.__;)if((a=t.__c)&&!a.__)try{if((o=a.constructor)&&o.getDerivedStateFromError!=null&&(a.setState(o.getDerivedStateFromError(e)),i=a.__d),a.componentDidCatch!=null&&(a.componentDidCatch(e,s||{}),i=a.__d),i)return a.__E=a}catch(c){e=c}throw e}},Je=0,Bt=function(e){return e!=null&&e.constructor===void 0},ne.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=Z({},this.state),typeof e=="function"&&(e=e(Z({},n),this.props)),e&&Z(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),Be(this))},ne.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Be(this))},ne.prototype.render=me,ee=[],Ve=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,qe=function(e,t){return e.__v.__b-t.__v.__b},_e.__r=0,Ge=/(PointerCapture)$|Capture$/i,Ie=0,Me=ze(!1),xe=ze(!0),jt=0;var ot=function(e,t,n,s){var a;t[0]=0;for(var o=1;o<t.length;o++){var i=t[o++],c=t[o]?(t[0]|=i?1:2,n[t[o++]]):t[++o];i===3?s[0]=c:i===4?s[1]=Object.assign(s[1]||{},c):i===5?(s[1]=s[1]||{})[t[++o]]=c:i===6?s[1][t[++o]]+=c+"":i?(a=e.apply(c,ot(e,c,n,["",null])),s.push(a),c[0]?t[0]|=2:(t[o-2]=0,t[o]=a)):s.push(c)}return s},st=new Map;function at(e){var t=st.get(this);return t||(t=new Map,st.set(this,t)),(t=ot(this,t.get(e)||(t.set(e,t=function(n){for(var s,a,o=1,i="",c="",d=[0],l=function(_){o===1&&(_||(i=i.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?d.push(0,_,i):o===3&&(_||i)?(d.push(3,_,i),o=2):o===2&&i==="..."&&_?d.push(4,_,0):o===2&&i&&!_?d.push(5,0,!0,i):o>=5&&((i||!_&&o===5)&&(d.push(o,0,i,a),o=6),_&&(d.push(o,_,0,a),o=6)),i=""},u=0;u<n.length;u++){u&&(o===1&&l(),l(u));for(var r=0;r<n[u].length;r++)s=n[u][r],o===1?s==="<"?(l(),d=[d],o=3):i+=s:o===4?i==="--"&&s===">"?(o=1,i=""):i=s+i[0]:c?s===c?c="":i+=s:s==='"'||s==="'"?c=s:s===">"?(l(),o=1):o&&(s==="="?(o=5,a=i,i=""):s==="/"&&(o<5||n[u][r+1]===">")?(l(),o===3&&(d=d[0]),o=d,(d=d[0]).push(2,0,o),o=0):s===" "||s===" "||s===`
2
+ `||s==="\r"?(l(),o=2):i+=s),o===3&&i==="!--"&&(o=4,d=d[0])}return l(),d}(e)),t),arguments,[])).length>1?t:t[0]}var f=at.bind(fe);var oe,L,Pe,rt,ae=0,ht=[],U=O,it=U.__b,lt=U.__r,ct=U.diffed,ut=U.__c,dt=U.unmount,_t=U.__;function Oe(e,t){U.__h&&U.__h(L,e,ae||t),ae=0;var n=L.__H||(L.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function C(e){return ae=1,Xt(mt,e)}function Xt(e,t,n){var s=Oe(oe++,2);if(s.t=e,!s.__c&&(s.__=[n?n(t):mt(void 0,t),function(c){var d=s.__N?s.__N[0]:s.__[0],l=s.t(d,c);d!==l&&(s.__N=[l,s.__[1]],s.__c.setState({}))}],s.__c=L,!L.__f)){var a=function(c,d,l){if(!s.__c.__H)return!0;var u=s.__c.__H.__.filter(function(_){return!!_.__c});if(u.every(function(_){return!_.__N}))return!o||o.call(this,c,d,l);var r=s.__c.props!==c;return u.forEach(function(_){if(_.__N){var p=_.__[0];_.__=_.__N,_.__N=void 0,p!==_.__[0]&&(r=!0)}}),o&&o.call(this,c,d,l)||r};L.__f=!0;var o=L.shouldComponentUpdate,i=L.componentWillUpdate;L.componentWillUpdate=function(c,d,l){if(this.__e){var u=o;o=void 0,a(c,d,l),o=u}i&&i.call(this,c,d,l)},L.shouldComponentUpdate=a}return s.__N||s.__}function K(e,t){var n=Oe(oe++,3);!U.__s&&ft(n.__H,t)&&(n.__=e,n.u=t,L.__H.__h.push(n))}function X(e){return ae=5,re(function(){return{current:e}},[])}function re(e,t){var n=Oe(oe++,7);return ft(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function A(e,t){return ae=8,re(function(){return e},t)}function Qt(){for(var e;e=ht.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(ye),e.__H.__h.forEach(Fe),e.__H.__h=[]}catch(t){e.__H.__h=[],U.__e(t,e.__v)}}U.__b=function(e){L=null,it&&it(e)},U.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),_t&&_t(e,t)},U.__r=function(e){lt&&lt(e),oe=0;var t=(L=e.__c).__H;t&&(Pe===L?(t.__h=[],L.__h=[],t.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.forEach(ye),t.__h.forEach(Fe),t.__h=[],oe=0)),Pe=L},U.diffed=function(e){ct&&ct(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(ht.push(t)!==1&&rt===U.requestAnimationFrame||((rt=U.requestAnimationFrame)||Zt)(Qt)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),Pe=L=null},U.__c=function(e,t){t.some(function(n){try{n.__h.forEach(ye),n.__h=n.__h.filter(function(s){return!s.__||Fe(s)})}catch(s){t.some(function(a){a.__h&&(a.__h=[])}),t=[],U.__e(s,n.__v)}}),ut&&ut(e,t)},U.unmount=function(e){dt&&dt(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach(function(s){try{ye(s)}catch(a){t=a}}),n.__H=void 0,t&&U.__e(t,n.__v))};var pt=typeof requestAnimationFrame=="function";function Zt(e){var t,n=function(){clearTimeout(s),pt&&cancelAnimationFrame(t),setTimeout(e)},s=setTimeout(n,35);pt&&(t=requestAnimationFrame(n))}function ye(e){var t=L,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),L=t}function Fe(e){var t=L;e.__c=e.__(),L=t}function ft(e,t){return!e||e.length!==t.length||t.some(function(n,s){return n!==e[s]})}function mt(e,t){return typeof t=="function"?t(e):t}function Yt(e){return e.replace(/_([a-z])/g,(t,n)=>n.toUpperCase())}function He(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function ve(e){return Array.isArray(e)?e.map(ve):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[Yt(t),ve(n)])):e}function we(e){return Array.isArray(e)?e.map(we):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[He(t),we(n)])):e}function $e(){return"msg-"+Date.now()+"-"+Math.random().toString(36).substr(2,9)}function j(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function gt(e){if(!e)return"";try{let t=new Date(e),s=new Date-t,a=Math.floor(s/6e4),o=Math.floor(s/36e5),i=Math.floor(s/864e5);return a<1?"Just now":a<60?`${a}m ago`:o<24?`${o}h ago`:i<7?`${i}d ago`:t.toLocaleDateString()}catch{return""}}function yt(e,t=null){if(t)return t(e);let n=j(e);return n=n.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>"),n=n.replace(/__(.+?)__/g,"<strong>$1</strong>"),n=n.replace(/\*(.+?)\*/g,"<em>$1</em>"),n=n.replace(/_(.+?)_/g,"<em>$1</em>"),n=n.replace(/`(.+?)`/g,"<code>$1</code>"),n=n.replace(/\[(.+?)\]\((.+?)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>'),n=n.replace(/\n/g,"<br>"),n}function vt(e=""){let t=n=>e?`${n}_${e}`:n;return{get(n){try{return localStorage.getItem(t(n))}catch{return null}},set(n,s){try{let a=t(n);s===null?localStorage.removeItem(a):localStorage.setItem(a,s)}catch{}}}}function wt(e="csrftoken"){let t=document.cookie.split(";");for(let s of t){let[a,o]=s.trim().split("=");if(a===e)return decodeURIComponent(o)}let n=document.querySelector('meta[name="csrf-token"]');return n?n.getAttribute("content"):null}function ke(e){if(e===0)return"0 B";let t=1024,n=["B","KB","MB","GB"],s=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,s)).toFixed(1))+" "+n[s]}function be(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 $t({config:e,debugMode:t,isExpanded:n,isSpeaking:s,messagesCount:a,isLoading:o,currentAgent:i,onClose:c,onToggleExpand:d,onToggleDebug:l,onToggleTTS:u,onClear:r,onToggleSidebar:_}){let{title:p,primaryColor:v,embedded:w,showConversationSidebar:y,showClearButton:g,showDebugButton:k,enableDebugMode:I,showTTSButton:N,showExpandButton:J,enableTTS:z,elevenLabsApiKey:V,ttsProxyUrl:W}=e,B=V||W;return f`
3
+ <div class="cw-header" style=${{backgroundColor:v}}>
4
+ ${y&&f`
5
5
  <button
6
6
  class="cw-header-btn cw-hamburger"
7
7
  onClick=${_}
@@ -17,16 +17,16 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
17
17
 
18
18
  <div class="cw-title-container">
19
19
  <span class="cw-title">${j(p)}</span>
20
- ${l&&h`
20
+ ${i&&f`
21
21
  <span class="cw-current-agent" title="Currently active agent">
22
22
  <span class="cw-agent-indicator">🤖</span>
23
- <span class="cw-agent-name">${j(l.name||l.key)}</span>
23
+ <span class="cw-agent-name">${j(i.name||i.key)}</span>
24
24
  </span>
25
25
  `}
26
26
  </div>
27
27
 
28
28
  <div class="cw-header-actions">
29
- ${g&&h`
29
+ ${g&&f`
30
30
  <button
31
31
  class="cw-header-btn"
32
32
  onClick=${r}
@@ -35,31 +35,31 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
35
35
  >🗑️</button>
36
36
  `}
37
37
 
38
- ${$&&I&&h`
38
+ ${k&&I&&f`
39
39
  <button
40
40
  class="cw-header-btn ${t?"cw-btn-active":""}"
41
- onClick=${i}
41
+ onClick=${l}
42
42
  title="Debug"
43
43
  >🐛</button>
44
44
  `}
45
45
 
46
- ${N&&B&&h`
46
+ ${N&&B&&f`
47
47
  <button
48
48
  class="cw-header-btn ${z?"cw-btn-active":""}"
49
- onClick=${d}
49
+ onClick=${u}
50
50
  title="TTS"
51
51
  >${z?"\u{1F50A}":"\u{1F507}"}</button>
52
52
  `}
53
53
 
54
- ${J&&!w&&h`
54
+ ${J&&!w&&f`
55
55
  <button
56
56
  class="cw-header-btn"
57
- onClick=${u}
57
+ onClick=${d}
58
58
  title=${n?"Minimize":"Expand"}
59
59
  >${n?"\u2296":"\u2295"}</button>
60
60
  `}
61
61
 
62
- ${!w&&h`
62
+ ${!w&&f`
63
63
  <button
64
64
  class="cw-header-btn"
65
65
  onClick=${c}
@@ -68,20 +68,20 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
68
68
  `}
69
69
  </div>
70
70
  </div>
71
- `}function Oe({msg:e,show:t,onToggle:n}){return t?h`
71
+ `}function Ne({msg:e,show:t,onToggle:n}){return t?f`
72
72
  <div class="cw-debug-payload">
73
73
  <button class="cw-debug-payload-close" onClick=${n}>×</button>
74
74
  <pre class="cw-debug-payload-content">${JSON.stringify(e,null,2)}</pre>
75
75
  </div>
76
- `:h`
76
+ `:f`
77
77
  <button
78
78
  class="cw-debug-payload-btn"
79
79
  onClick=${n}
80
80
  title="Show message payload"
81
81
  >{ }</button>
82
- `}function $t({onEdit:e,onRetry:t,isLoading:n,position:s,showEdit:a=!0}){return n?null:h`
82
+ `}function kt({onEdit:e,onRetry:t,isLoading:n,position:s,showEdit:a=!0}){return n?null:f`
83
83
  <div class="cw-message-actions cw-message-actions-${s||"left"}">
84
- ${a&&h`
84
+ ${a&&f`
85
85
  <button
86
86
  class="cw-message-action-btn"
87
87
  onClick=${e}
@@ -105,14 +105,14 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
105
105
  </svg>
106
106
  </button>
107
107
  </div>
108
- `}function Yt({initialContent:e,onSave:t,onCancel:n}){let[s,a]=C(e),o=G(null);return W(()=>{o.current&&(o.current.focus(),o.current.setSelectionRange(s.length,s.length),o.current.style.height="auto",o.current.style.height=o.current.scrollHeight+"px")},[]),h`
108
+ `}function en({initialContent:e,onSave:t,onCancel:n}){let[s,a]=C(e),o=X(null);return K(()=>{o.current&&(o.current.focus(),o.current.setSelectionRange(s.length,s.length),o.current.style.height="auto",o.current.style.height=o.current.scrollHeight+"px")},[]),f`
109
109
  <div class="cw-inline-edit">
110
110
  <textarea
111
111
  ref=${o}
112
112
  class="cw-inline-edit-input"
113
113
  value=${s}
114
- onInput=${u=>{a(u.target.value),u.target.style.height="auto",u.target.style.height=u.target.scrollHeight+"px"}}
115
- onKeyDown=${u=>{u.key==="Enter"&&!u.shiftKey?(u.preventDefault(),s.trim()&&t(s.trim())):u.key==="Escape"&&n()}}
114
+ onInput=${d=>{a(d.target.value),d.target.style.height="auto",d.target.style.height=d.target.scrollHeight+"px"}}
115
+ onKeyDown=${d=>{d.key==="Enter"&&!d.shiftKey?(d.preventDefault(),s.trim()&&t(s.trim())):d.key==="Escape"&&n()}}
116
116
  rows="1"
117
117
  />
118
118
  <div class="cw-inline-edit-actions">
@@ -129,59 +129,59 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
129
129
  >Save & Send</button>
130
130
  </div>
131
131
  </div>
132
- `}function kt({msg:e,debugMode:t,markdownParser:n,onEdit:s,onRetry:a,isLoading:o,messageIndex:l}){let[c,u]=C(!1),[i,d]=C(!1),[r,_]=C(!1),p=e.role==="user",k=e.role==="system",w=e.type==="tool_call",y=e.type==="tool_result",g=e.type==="error",$=e.type==="sub_agent_start",I=e.type==="sub_agent_end",N=e.type==="agent_context";if(k&&!t)return null;if($||I||N)return h`
133
- <div class="cw-agent-context ${$?"cw-agent-delegating":""} ${I?"cw-agent-returned":""}" style="position: relative;">
134
- <span class="cw-agent-context-icon">${$?"\u{1F517}":I?"\u2713":"\u{1F916}"}</span>
132
+ `}function bt({msg:e,debugMode:t,markdownParser:n,onEdit:s,onRetry:a,isLoading:o,messageIndex:i}){let[c,d]=C(!1),[l,u]=C(!1),[r,_]=C(!1),p=e.role==="user",v=e.role==="system",w=e.type==="tool_call",y=e.type==="tool_result",g=e.type==="error",k=e.type==="sub_agent_start",I=e.type==="sub_agent_end",N=e.type==="agent_context";if(v&&!t)return null;if(k||I||N)return f`
133
+ <div class="cw-agent-context ${k?"cw-agent-delegating":""} ${I?"cw-agent-returned":""}" style="position: relative;">
134
+ <span class="cw-agent-context-icon">${k?"\u{1F517}":I?"\u2713":"\u{1F916}"}</span>
135
135
  <span class="cw-agent-context-text">${e.content}</span>
136
- ${e.metadata?.agentName&&h`
136
+ ${e.metadata?.agentName&&f`
137
137
  <span class="cw-agent-context-name">${e.metadata.agentName}</span>
138
138
  `}
139
- ${t&&h`<${Oe} msg=${e} show=${i} onToggle=${()=>d(!i)} />`}
139
+ ${t&&f`<${Ne} msg=${e} show=${l} onToggle=${()=>u(!l)} />`}
140
140
  </div>
141
- `;if(w||y){let S=e.metadata?.arguments||e.metadata?.result,E=v=>{if(typeof v=="string")try{return JSON.stringify(JSON.parse(v),null,2)}catch{return v}return JSON.stringify(v,null,2)};return h`
141
+ `;if(w||y){let S=e.metadata?.arguments||e.metadata?.result,E=$=>{if(typeof $=="string")try{return JSON.stringify(JSON.parse($),null,2)}catch{return $}return JSON.stringify($,null,2)};return f`
142
142
  <div class="cw-tool-message ${y?"cw-tool-result":"cw-tool-call"}" style="position: relative;">
143
- <span class="cw-tool-label" onClick=${()=>S&&u(!c)}>
143
+ <span class="cw-tool-label" onClick=${()=>S&&d(!c)}>
144
144
  ${e.content}
145
- ${S&&h`<span class="cw-tool-expand">${c?"\u25BC":"\u25B6"}</span>`}
145
+ ${S&&f`<span class="cw-tool-expand">${c?"\u25BC":"\u25B6"}</span>`}
146
146
  </span>
147
- ${c&&S&&h`
147
+ ${c&&S&&f`
148
148
  <pre class="cw-tool-details">${j(E(w?e.metadata.arguments:e.metadata.result))}</pre>
149
149
  `}
150
- ${t&&h`<${Oe} msg=${e} show=${i} onToggle=${()=>d(!i)} />`}
150
+ ${t&&f`<${Ne} msg=${e} show=${l} onToggle=${()=>u(!l)} />`}
151
151
  </div>
152
- `}let J=["cw-message",p&&"cw-message-user",g&&"cw-message-error"].filter(Boolean).join(" "),z=`cw-message-row ${p?"cw-message-row-user":""}`,V=e.role==="assistant"?gt(e.content,n):j(e.content),K=e.files&&e.files.length>0,B=()=>K?h`
152
+ `}let J=["cw-message",p&&"cw-message-user",g&&"cw-message-error"].filter(Boolean).join(" "),z=`cw-message-row ${p?"cw-message-row-user":""}`,V=e.role==="assistant"?yt(e.content,n):j(e.content),W=e.files&&e.files.length>0,B=()=>W?f`
153
153
  <div class="cw-message-attachments">
154
- ${e.files.map(S=>S.type&&S.type.startsWith("image/")?h`
154
+ ${e.files.map(S=>S.type&&S.type.startsWith("image/")?f`
155
155
  <a class="cw-attachment-thumbnail" href=${S.url} target="_blank" title=${S.name}>
156
156
  <img src=${S.url} alt=${S.name} />
157
157
  </a>
158
- `:h`
158
+ `:f`
159
159
  <a class="cw-attachment-file" href=${S.url} target="_blank" title=${S.name}>
160
- <span class="cw-attachment-icon">${ke(S.type)}</span>
160
+ <span class="cw-attachment-icon">${be(S.type)}</span>
161
161
  <span class="cw-attachment-info">
162
162
  <span class="cw-attachment-name">${S.name}</span>
163
- <span class="cw-attachment-size">${$e(S.size)}</span>
163
+ <span class="cw-attachment-size">${ke(S.size)}</span>
164
164
  </span>
165
165
  </a>
166
166
  `)}
167
167
  </div>
168
- `:null,q=S=>{_(!1),s&&s(l,S)},O=()=>{a&&a(l)};if(p&&r)return h`
168
+ `:null,q=S=>{_(!1),s&&s(i,S)},H=()=>{a&&a(i)};if(p&&r)return f`
169
169
  <div class=${z} style="position: relative;">
170
170
  ${B()}
171
- <${Yt}
171
+ <${en}
172
172
  initialContent=${e.content}
173
173
  onSave=${q}
174
174
  onCancel=${()=>_(!1)}
175
175
  />
176
176
  </div>
177
- `;let f=p&&s&&a,T=e.role==="assistant"&&a&&!o;return h`
178
- <div class="${z} ${f||T?"cw-message-row-with-actions":""}">
177
+ `;let h=p&&s&&a,T=e.role==="assistant"&&a&&!o;return f`
178
+ <div class="${z} ${h||T?"cw-message-row-with-actions":""}">
179
179
  ${B()}
180
- ${f&&h`
180
+ ${h&&f`
181
181
  <div class="cw-user-actions-wrapper">
182
- <${$t}
182
+ <${kt}
183
183
  onEdit=${()=>_(!0)}
184
- onRetry=${O}
184
+ onRetry=${H}
185
185
  isLoading=${o}
186
186
  position="left"
187
187
  showEdit=${!0}
@@ -189,51 +189,51 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
189
189
  <div class=${J} dangerouslySetInnerHTML=${{__html:V}} />
190
190
  </div>
191
191
  `}
192
- ${!f&&h`
192
+ ${!h&&f`
193
193
  <div class=${J} dangerouslySetInnerHTML=${{__html:V}} />
194
194
  `}
195
- ${T&&h`
196
- <${$t}
197
- onRetry=${O}
195
+ ${T&&f`
196
+ <${kt}
197
+ onRetry=${H}
198
198
  isLoading=${o}
199
199
  position="right"
200
200
  showEdit=${!1}
201
201
  />
202
202
  `}
203
- ${t&&h`<${Oe} msg=${e} show=${i} onToggle=${()=>d(!i)} />`}
203
+ ${t&&f`<${Ne} msg=${e} show=${l} onToggle=${()=>u(!l)} />`}
204
204
  </div>
205
- `}function bt({messages:e,isLoading:t,hasMoreMessages:n,loadingMoreMessages:s,onLoadMore:a,onEditMessage:o,onRetryMessage:l,debugMode:c,markdownParser:u,emptyStateTitle:i,emptyStateMessage:d}){let r=G(null),_=G(!0),p=w=>{let y=w.target,g=y.scrollHeight-y.scrollTop-y.clientHeight<100;if(_.current=g,y.scrollTop<50&&n&&!s){let $=y.scrollHeight;a().then(()=>{let I=y.scrollHeight;y.scrollTop=I-$+y.scrollTop})}};W(()=>{let w=r.current;w&&_.current&&requestAnimationFrame(()=>{w.scrollTop=w.scrollHeight})},[e,t]),W(()=>{let w=r.current;w&&e.length<=2&&(_.current=!0,requestAnimationFrame(()=>{w.scrollTop=w.scrollHeight}))},[e.length]);let k=e.length===0;return h`
205
+ `}function Ct({messages:e,isLoading:t,hasMoreMessages:n,loadingMoreMessages:s,onLoadMore:a,onEditMessage:o,onRetryMessage:i,debugMode:c,markdownParser:d,emptyStateTitle:l,emptyStateMessage:u}){let r=X(null),_=X(!0),p=w=>{let y=w.target,g=y.scrollHeight-y.scrollTop-y.clientHeight<100;if(_.current=g,y.scrollTop<50&&n&&!s){let k=y.scrollHeight;a().then(()=>{let I=y.scrollHeight;y.scrollTop=I-k+y.scrollTop})}};K(()=>{let w=r.current;w&&_.current&&requestAnimationFrame(()=>{w.scrollTop=w.scrollHeight})},[e,t]),K(()=>{let w=r.current;w&&e.length<=2&&(_.current=!0,requestAnimationFrame(()=>{w.scrollTop=w.scrollHeight}))},[e.length]);let v=e.length===0;return f`
206
206
  <div class="cw-messages" ref=${r} onScroll=${p}>
207
- ${k&&h`
207
+ ${v&&f`
208
208
  <div class="cw-empty-state">
209
209
  <svg class="cw-empty-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
210
210
  <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>
211
211
  </svg>
212
- <h3>${j(i)}</h3>
213
- <p>${j(d)}</p>
212
+ <h3>${j(l)}</h3>
213
+ <p>${j(u)}</p>
214
214
  </div>
215
215
  `}
216
216
 
217
- ${!k&&n&&h`
217
+ ${!v&&n&&f`
218
218
  <div class="cw-load-more" onClick=${a}>
219
- ${s?h`<span class="cw-spinner"></span><span>Loading...</span>`:h`<span>↑ Scroll up or click to load older messages</span>`}
219
+ ${s?f`<span class="cw-spinner"></span><span>Loading...</span>`:f`<span>↑ Scroll up or click to load older messages</span>`}
220
220
  </div>
221
221
  `}
222
222
 
223
- ${e.map((w,y)=>h`
224
- <${kt}
223
+ ${e.map((w,y)=>f`
224
+ <${bt}
225
225
  key=${w.id}
226
226
  msg=${w}
227
227
  messageIndex=${y}
228
228
  debugMode=${c}
229
- markdownParser=${u}
229
+ markdownParser=${d}
230
230
  onEdit=${o}
231
- onRetry=${l}
231
+ onRetry=${i}
232
232
  isLoading=${t}
233
233
  />
234
234
  `)}
235
235
 
236
- ${t&&h`
236
+ ${t&&f`
237
237
  <div class="cw-message-row">
238
238
  <div class="cw-typing">
239
239
  <span class="cw-spinner"></span>
@@ -242,22 +242,22 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
242
242
  </div>
243
243
  `}
244
244
  </div>
245
- `}var Ne=typeof window<"u"?window.SpeechRecognition||window.webkitSpeechRecognition:null;function Ct({onSend:e,onCancel:t,isLoading:n,placeholder:s,primaryColor:a,enableVoice:o=!0,enableFiles:l=!0}){let[c,u]=C(""),[i,d]=C([]),[r,_]=C(!1),[p,k]=C(!1),[w]=C(()=>!!Ne),y=G(null),g=G(null),$=G(null),I=G(!1);W(()=>{!n&&y.current&&y.current.focus()},[n]),W(()=>{y.current&&(y.current.style.height="auto",y.current.style.height=Math.min(y.current.scrollHeight,150)+"px")},[c]),W(()=>()=>{I.current=!1,$.current&&$.current.abort()},[]);let N=v=>{v.preventDefault(),(c.trim()||i.length>0)&&!n&&(e(c,i),u(""),d([]),y.current&&(y.current.style.height="auto"),g.current&&(g.current.value=""))},J=v=>{let D=Array.from(v.target.files||[]);D.length>0&&d(F=>[...F,...D])},z=v=>{d(D=>D.filter((F,m)=>m!==v))},V=v=>{v.preventDefault(),g.current&&!n&&g.current.click()},K=v=>{v.key==="Enter"&&!v.shiftKey&&(v.preventDefault(),N(v))},B=v=>{n&&t&&(v.preventDefault(),t())},q=()=>{if(!Ne||n)return;I.current=!0;let v=new Ne;v.continuous=!0,v.interimResults=!0,v.lang=navigator.language||"en-US";let D=c,F="";v.onstart=()=>{k(!0)},v.onresult=m=>{F="";for(let b=m.resultIndex;b<m.results.length;b++){let R=m.results[b][0].transcript;m.results[b].isFinal?D+=(D?" ":"")+R:F+=R}u(D+(F?" "+F:""))},v.onerror=m=>{if(m.error==="no-speech"||m.error==="aborted"){console.log("[ChatWidget] Speech recognition:",m.error,"- continuing...");return}console.warn("[ChatWidget] Speech recognition error:",m.error),I.current=!1,k(!1),u(D||c)},v.onend=()=>{if(I.current){console.log("[ChatWidget] Recognition paused, restarting...");try{v.start();return}catch(m){console.warn("[ChatWidget] Could not restart recognition:",m)}}k(!1),D&&u(D),$.current=null},$.current=v,v.start()},O=()=>{I.current=!1,$.current&&$.current.stop()},f=v=>{v.preventDefault(),p?O():q()},M=h`
245
+ `}var Le=typeof window<"u"?window.SpeechRecognition||window.webkitSpeechRecognition:null;function St({onSend:e,onCancel:t,isLoading:n,placeholder:s,primaryColor:a,enableVoice:o=!0,enableFiles:i=!0}){let[c,d]=C(""),[l,u]=C([]),[r,_]=C(!1),[p,v]=C(!1),[w]=C(()=>!!Le),y=X(null),g=X(null),k=X(null),I=X(!1);K(()=>{!n&&y.current&&y.current.focus()},[n]),K(()=>{y.current&&(y.current.style.height="auto",y.current.style.height=Math.min(y.current.scrollHeight,150)+"px")},[c]),K(()=>()=>{I.current=!1,k.current&&k.current.abort()},[]);let N=$=>{$.preventDefault(),(c.trim()||l.length>0)&&!n&&(e(c,l),d(""),u([]),y.current&&(y.current.style.height="auto"),g.current&&(g.current.value=""))},J=$=>{let D=Array.from($.target.files||[]);D.length>0&&u(F=>[...F,...D])},z=$=>{u(D=>D.filter((F,m)=>m!==$))},V=$=>{$.preventDefault(),g.current&&!n&&g.current.click()},W=$=>{$.key==="Enter"&&!$.shiftKey&&($.preventDefault(),N($))},B=$=>{n&&t&&($.preventDefault(),t())},q=()=>{if(!Le||n)return;I.current=!0;let $=new Le;$.continuous=!0,$.interimResults=!0,$.lang=navigator.language||"en-US";let D=c,F="";$.onstart=()=>{v(!0)},$.onresult=m=>{F="";for(let b=m.resultIndex;b<m.results.length;b++){let R=m.results[b][0].transcript;m.results[b].isFinal?D+=(D?" ":"")+R:F+=R}d(D+(F?" "+F:""))},$.onerror=m=>{if(m.error==="no-speech"||m.error==="aborted"){console.log("[ChatWidget] Speech recognition:",m.error,"- continuing...");return}console.warn("[ChatWidget] Speech recognition error:",m.error),I.current=!1,v(!1),d(D||c)},$.onend=()=>{if(I.current){console.log("[ChatWidget] Recognition paused, restarting...");try{$.start();return}catch(m){console.warn("[ChatWidget] Could not restart recognition:",m)}}v(!1),D&&d(D),k.current=null},k.current=$,$.start()},H=()=>{I.current=!1,k.current&&k.current.stop()},h=$=>{$.preventDefault(),p?H():q()},x=f`
246
246
  <svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor">
247
247
  <rect x="2" y="2" width="10" height="10" rx="1" />
248
248
  </svg>
249
- `,T=h`
249
+ `,T=f`
250
250
  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
251
251
  <path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"></path>
252
252
  <path d="M19 10v2a7 7 0 0 1-14 0v-2"></path>
253
253
  <line x1="12" y1="19" x2="12" y2="23"></line>
254
254
  <line x1="8" y1="23" x2="16" y2="23"></line>
255
255
  </svg>
256
- `,x=h`
256
+ `,M=f`
257
257
  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
258
258
  <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>
259
259
  </svg>
260
- `,S=o&&w,E=l;return h`
260
+ `,S=o&&w,E=i;return f`
261
261
  <form class="cw-input-form" onSubmit=${N}>
262
262
  <input
263
263
  type="file"
@@ -266,13 +266,13 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
266
266
  multiple
267
267
  onChange=${J}
268
268
  />
269
- ${i.length>0&&h`
269
+ ${l.length>0&&f`
270
270
  <div class="cw-file-chips">
271
- ${i.map((v,D)=>h`
271
+ ${l.map(($,D)=>f`
272
272
  <div class="cw-file-chip" key=${D}>
273
- <span class="cw-file-chip-icon">${ke(v.type)}</span>
274
- <span class="cw-file-chip-name" title=${v.name}>${v.name.length>20?v.name.substring(0,17)+"...":v.name}</span>
275
- <span class="cw-file-chip-size">(${$e(v.size)})</span>
273
+ <span class="cw-file-chip-icon">${be($.type)}</span>
274
+ <span class="cw-file-chip-name" title=${$.name}>${$.name.length>20?$.name.substring(0,17)+"...":$.name}</span>
275
+ <span class="cw-file-chip-size">(${ke($.size)})</span>
276
276
  <button
277
277
  type="button"
278
278
  class="cw-file-chip-remove"
@@ -288,12 +288,12 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
288
288
  class="cw-input"
289
289
  placeholder=${j(s)}
290
290
  value=${c}
291
- onInput=${v=>u(v.target.value)}
292
- onKeyDown=${K}
291
+ onInput=${$=>d($.target.value)}
292
+ onKeyDown=${W}
293
293
  disabled=${n}
294
294
  rows="1"
295
295
  />
296
- ${E&&h`
296
+ ${E&&f`
297
297
  <button
298
298
  type="button"
299
299
  class="cw-attach-btn"
@@ -301,14 +301,14 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
301
301
  disabled=${n}
302
302
  title="Attach files"
303
303
  >
304
- ${x}
304
+ ${M}
305
305
  </button>
306
306
  `}
307
- ${S&&h`
307
+ ${S&&f`
308
308
  <button
309
309
  type="button"
310
310
  class=${`cw-voice-btn ${p?"cw-voice-btn-recording":""}`}
311
- onClick=${f}
311
+ onClick=${h}
312
312
  disabled=${n}
313
313
  title=${p?"Stop recording":"Voice input"}
314
314
  >
@@ -324,10 +324,10 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
324
324
  onMouseLeave=${()=>_(!1)}
325
325
  title=${n?"Stop":"Send"}
326
326
  >
327
- ${n?r?M:h`<span class="cw-spinner"></span>`:"\u27A4"}
327
+ ${n?r?x:f`<span class="cw-spinner"></span>`:"\u27A4"}
328
328
  </button>
329
329
  </form>
330
- `}function St({isOpen:e,conversations:t,conversationsLoading:n,currentConversationId:s,onClose:a,onNewConversation:o,onSwitchConversation:l}){return h`
330
+ `}function Tt({isOpen:e,conversations:t,conversationsLoading:n,currentConversationId:s,onClose:a,onNewConversation:o,onSwitchConversation:i}){return f`
331
331
  <div class="cw-sidebar ${e?"cw-sidebar-open":""}">
332
332
  <div class="cw-sidebar-header">
333
333
  <span>Conversations</span>
@@ -339,24 +339,24 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
339
339
  </button>
340
340
 
341
341
  <div class="cw-conversation-list">
342
- ${n&&h`
342
+ ${n&&f`
343
343
  <div class="cw-sidebar-loading">
344
344
  <span class="cw-spinner"></span>
345
345
  </div>
346
346
  `}
347
347
 
348
- ${!n&&t.length===0&&h`
348
+ ${!n&&t.length===0&&f`
349
349
  <div class="cw-sidebar-empty">No conversations yet</div>
350
350
  `}
351
351
 
352
- ${t.map(c=>h`
352
+ ${t.map(c=>f`
353
353
  <div
354
354
  key=${c.id}
355
355
  class="cw-conversation-item ${c.id===s?"cw-conversation-active":""}"
356
- onClick=${()=>l(c.id)}
356
+ onClick=${()=>i(c.id)}
357
357
  >
358
358
  <div class="cw-conversation-title">${j(c.title||"Untitled")}</div>
359
- <div class="cw-conversation-date">${mt(c.updatedAt||c.createdAt)}</div>
359
+ <div class="cw-conversation-date">${gt(c.updatedAt||c.createdAt)}</div>
360
360
  </div>
361
361
  `)}
362
362
  </div>
@@ -366,11 +366,11 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
366
366
  class="cw-sidebar-overlay ${e?"cw-sidebar-overlay-visible":""}"
367
367
  onClick=${a}
368
368
  />
369
- `}function Tt({availableModels:e,selectedModel:t,onSelectModel:n,disabled:s}){let[a,o]=C(!1);if(!e||e.length===0)return null;let c=e.find(d=>d.id===t)?.name||"Select Model",u=()=>{s||o(!a)},i=d=>{n(d),o(!1)};return h`
369
+ `}function Mt({availableModels:e,selectedModel:t,onSelectModel:n,disabled:s}){let[a,o]=C(!1);if(!e||e.length===0)return null;let c=e.find(u=>u.id===t)?.name||"Select Model",d=()=>{s||o(!a)},l=u=>{n(u),o(!1)};return f`
370
370
  <div class="cw-model-selector">
371
371
  <button
372
372
  class="cw-model-btn"
373
- onClick=${u}
373
+ onClick=${d}
374
374
  disabled=${s}
375
375
  title="Select Model"
376
376
  >
@@ -379,45 +379,45 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
379
379
  <span class="cw-model-chevron">${a?"\u25B2":"\u25BC"}</span>
380
380
  </button>
381
381
 
382
- ${a&&h`
382
+ ${a&&f`
383
383
  <div class="cw-model-dropdown">
384
- ${e.map(d=>h`
384
+ ${e.map(u=>f`
385
385
  <button
386
- key=${d.id}
387
- class="cw-model-option ${d.id===t?"cw-model-option-selected":""}"
388
- onClick=${()=>i(d.id)}
386
+ key=${u.id}
387
+ class="cw-model-option ${u.id===t?"cw-model-option-selected":""}"
388
+ onClick=${()=>l(u.id)}
389
389
  >
390
- <span class="cw-model-option-name">${j(d.name)}</span>
391
- <span class="cw-model-option-provider">${j(d.provider)}</span>
392
- ${d.description&&h`
393
- <span class="cw-model-option-desc">${j(d.description)}</span>
390
+ <span class="cw-model-option-name">${j(u.name)}</span>
391
+ <span class="cw-model-option-provider">${j(u.provider)}</span>
392
+ ${u.description&&f`
393
+ <span class="cw-model-option-desc">${j(u.description)}</span>
394
394
  `}
395
395
  </button>
396
396
  `)}
397
397
  </div>
398
398
  `}
399
399
  </div>
400
- `}var en={not_started:"\u25CB",in_progress:"\u25D0",complete:"\u25CF",cancelled:"\u2298"},tn={not_started:"Not Started",in_progress:"In Progress",complete:"Complete",cancelled:"Cancelled"};function nn({task:e,onUpdate:t,onRemove:n,depth:s=0}){let[a,o]=C(!1),[l,c]=C(e.name),u=A(()=>{let _={not_started:"in_progress",in_progress:"complete",complete:"not_started",cancelled:"not_started"};t(e.id,{state:_[e.state]||"not_started"})},[e,t]),i=A(()=>{l.trim()&&l!==e.name&&t(e.id,{name:l.trim()}),o(!1)},[e,l,t]),d=A(_=>{_.key==="Enter"&&i(),_.key==="Escape"&&(c(e.name),o(!1))},[i,e.name]),r=`cw-task-state-${e.state.replace("_","-")}`;return h`
400
+ `}var tn={not_started:"\u25CB",in_progress:"\u25D0",complete:"\u25CF",cancelled:"\u2298"},nn={not_started:"Not Started",in_progress:"In Progress",complete:"Complete",cancelled:"Cancelled"};function sn({task:e,onUpdate:t,onRemove:n,depth:s=0}){let[a,o]=C(!1),[i,c]=C(e.name),d=A(()=>{let _={not_started:"in_progress",in_progress:"complete",complete:"not_started",cancelled:"not_started"};t(e.id,{state:_[e.state]||"not_started"})},[e,t]),l=A(()=>{i.trim()&&i!==e.name&&t(e.id,{name:i.trim()}),o(!1)},[e,i,t]),u=A(_=>{_.key==="Enter"&&l(),_.key==="Escape"&&(c(e.name),o(!1))},[l,e.name]),r=`cw-task-state-${e.state.replace("_","-")}`;return f`
401
401
  <div class="cw-task-item ${r}" style=${{paddingLeft:`${s*16+8}px`}}>
402
402
  <button
403
403
  class="cw-task-state-btn"
404
- onClick=${u}
405
- title=${tn[e.state]}
404
+ onClick=${d}
405
+ title=${nn[e.state]}
406
406
  >
407
- ${en[e.state]}
407
+ ${tn[e.state]}
408
408
  </button>
409
409
 
410
- ${a?h`
410
+ ${a?f`
411
411
  <input
412
412
  type="text"
413
413
  class="cw-task-edit-input"
414
- value=${l}
414
+ value=${i}
415
415
  onInput=${_=>c(_.target.value)}
416
- onBlur=${i}
417
- onKeyDown=${d}
416
+ onBlur=${l}
417
+ onKeyDown=${u}
418
418
  autoFocus
419
419
  />
420
- `:h`
420
+ `:f`
421
421
  <span
422
422
  class="cw-task-name"
423
423
  onClick=${()=>o(!0)}
@@ -435,16 +435,16 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
435
435
  ×
436
436
  </button>
437
437
  </div>
438
- `}function Mt({tasks:e,progress:t,isLoading:n,error:s,onUpdate:a,onRemove:o,onClear:l,onRefresh:c}){let u=A(r=>{let _=new Map,p=[];return r.forEach(k=>{_.set(k.id,{...k,children:[]})}),r.forEach(k=>{let w=_.get(k.id);k.parent_id&&_.has(k.parent_id)?_.get(k.parent_id).children.push(w):p.push(w)}),p},[]),i=A((r,_=0)=>h`
439
- <${nn}
438
+ `}function xt({tasks:e,progress:t,isLoading:n,error:s,onUpdate:a,onRemove:o,onClear:i,onRefresh:c}){let d=A(r=>{let _=new Map,p=[];return r.forEach(v=>{_.set(v.id,{...v,children:[]})}),r.forEach(v=>{let w=_.get(v.id);v.parent_id&&_.has(v.parent_id)?_.get(v.parent_id).children.push(w):p.push(w)}),p},[]),l=A((r,_=0)=>f`
439
+ <${sn}
440
440
  key=${r.id}
441
441
  task=${r}
442
442
  depth=${_}
443
443
  onUpdate=${a}
444
444
  onRemove=${o}
445
445
  />
446
- ${r.children?.map(p=>i(p,_+1))}
447
- `,[a,o]),d=u(e);return n&&e.length===0?h`<div class="cw-tasks-loading">Loading tasks...</div>`:h`
446
+ ${r.children?.map(p=>l(p,_+1))}
447
+ `,[a,o]),u=d(e);return n&&e.length===0?f`<div class="cw-tasks-loading">Loading tasks...</div>`:f`
448
448
  <div class="cw-tasks-container">
449
449
  <div class="cw-tasks-header">
450
450
  <div class="cw-tasks-progress">
@@ -460,24 +460,24 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
460
460
  </div>
461
461
  <div class="cw-tasks-actions">
462
462
  <button class="cw-tasks-action-btn" onClick=${c} title="Refresh">↻</button>
463
- ${e.length>0&&h`
464
- <button class="cw-tasks-action-btn" onClick=${l} title="Clear all">🗑</button>
463
+ ${e.length>0&&f`
464
+ <button class="cw-tasks-action-btn" onClick=${i} title="Clear all">🗑</button>
465
465
  `}
466
466
  </div>
467
467
  </div>
468
468
 
469
- ${s&&h`<div class="cw-tasks-error">${s}</div>`}
469
+ ${s&&f`<div class="cw-tasks-error">${s}</div>`}
470
470
 
471
471
  <div class="cw-tasks-list">
472
- ${d.length===0?h`
472
+ ${u.length===0?f`
473
473
  <div class="cw-tasks-empty">
474
474
  <p>No tasks yet</p>
475
475
  <p class="cw-tasks-empty-hint">Tasks will appear here when the agent creates them</p>
476
476
  </div>
477
- `:d.map(r=>i(r))}
477
+ `:u.map(r=>l(r))}
478
478
  </div>
479
479
  </div>
480
- `}function xt(e,t,n){let[s,a]=C([]),[o,l]=C(!1),[c,u]=C(null),[i,d]=C(()=>n?.get(e.conversationIdKey)||null),[r,_]=C(!1),[p,k]=C(!1),[w,y]=C(0),g=G(null),$=G(null);W(()=>{i&&n?.set(e.conversationIdKey,i)},[i,e.conversationIdKey,n]);let I=A(async(f,M,T)=>{g.current&&g.current.close();let x=e.apiPaths.runEvents.replace("{runId}",f),S=`${e.backendUrl}${x}`;M&&(S+=`?anonymous_token=${encodeURIComponent(M)}`);let E=new EventSource(S);g.current=E;let v="";E.addEventListener("assistant.message",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("assistant.message",m.payload);let b=m.payload.content;b&&(v+=b,a(R=>{let X=R[R.length-1];return X?.role==="assistant"&&X.id.startsWith("assistant-stream-")?[...R.slice(0,-1),{...X,content:v}]:[...R,{id:"assistant-stream-"+Date.now(),role:"assistant",content:v,timestamp:new Date,type:"message"}]}))}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("tool.call",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("tool.call",m.payload),a(b=>[...b,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${m.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:m.payload.name,arguments:m.payload.arguments,toolCallId:m.payload.id}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("tool.result",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("tool.result",m.payload);let b=m.payload.result,R=b?.error;a(X=>[...X,{id:"tool-result-"+Date.now(),role:"system",content:R?`\u274C ${b.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:m.payload.name,result:b,toolCallId:m.payload.tool_call_id}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("custom",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("custom",m.payload),m.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(m.payload),m.payload?.type==="agent_context"&&a(b=>[...b,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${m.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:m.payload.agent_key,agentName:m.payload.agent_name,action:m.payload.action}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("sub_agent.start",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("sub_agent.start",m.payload),a(b=>[...b,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${m.payload.agent_name||m.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:m.payload.sub_agent_key,agentName:m.payload.agent_name,invocationMode:m.payload.invocation_mode}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("sub_agent.end",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("sub_agent.end",m.payload),a(b=>[...b,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${m.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:m.payload.sub_agent_key,agentName:m.payload.agent_name}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}});let D=F=>{try{let m=JSON.parse(F.data);if(e.onEvent&&e.onEvent(m.type,m.payload),m.type==="run.failed"){let b=m.payload.error||"Agent run failed";u(b),a(R=>[...R,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${b}`,timestamp:new Date,type:"error"}])}}catch(m){console.error("[ChatWidget] Parse error:",m)}l(!1),E.close(),g.current=null,v&&T&&T(v)};E.addEventListener("run.succeeded",D),E.addEventListener("run.failed",D),E.addEventListener("run.cancelled",D),E.addEventListener("run.timed_out",D),E.onerror=()=>{l(!1),E.close(),g.current=null}},[e]),N=A(async(f,M={},T={})=>{if(!f.trim()||o)return;let x=[],S={};typeof M=="function"?S={onAssistantMessage:M}:Array.isArray(M)?(x=M,S=T):S=M||{};let{model:E,onAssistantMessage:v,supersedeFromMessageIndex:D}=S;l(!0),u(null);let F={id:we(),role:"user",content:f.trim(),timestamp:new Date,type:"message",files:x.length>0?x.map(m=>({name:m.name,size:m.size,type:m.type})):void 0};a(m=>[...m,F]);try{let m=await t.getOrCreateSession(),b;if(x.length>0){let te=e.apiCaseStyle!=="camel",Ue=le=>te?He(le):le,Y=new FormData;Y.append(Ue("agentKey"),e.agentKey),i&&Y.append(Ue("conversationId"),i),Y.append("messages",JSON.stringify([{role:"user",content:f.trim()}])),Y.append("metadata",JSON.stringify(te?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),E&&Y.append("model",E),x.forEach(le=>{Y.append("files",le)}),b=t.getFetchOptions({method:"POST",body:Y},m)}else{let te=t.transformRequest({agentKey:e.agentKey,conversationId:i,messages:[{role:"user",content:f.trim()}],metadata:{...e.metadata,journeyType:e.defaultJourneyType},...E&&{model:E},...D!==void 0&&{supersedeFromMessageIndex:D}});b=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(te)},m)}let R=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,b);if(!R.ok){let te=await R.json().catch(()=>({}));throw new Error(te.error||`HTTP ${R.status}`)}let X=await R.json(),Z=t.transformResponse(X);$.current=Z.id,!i&&Z.conversationId&&d(Z.conversationId),await I(Z.id,m,v)}catch(m){u(m.message||"Failed to send message"),l(!1)}finally{$.current=null}},[e,t,i,o,I]),J=A(async()=>{let f=$.current;if(!(!f||!o))try{let M=e.apiPaths.cancelRun?e.apiPaths.cancelRun.replace("{runId}",f):`${e.apiPaths.runs}${f}/cancel/`;(await fetch(`${e.backendUrl}${M}`,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"}}))).ok&&(g.current&&(g.current.close(),g.current=null),l(!1),$.current=null,a(x=>[...x,{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,o]),z=A(()=>{a([]),d(null),u(null),_(!1),y(0),n?.set(e.conversationIdKey,null)},[e.conversationIdKey,n]),V=f=>{let M={id:we(),role:f.role,timestamp:f.timestamp?new Date(f.timestamp):new Date};if(f.role==="tool")return{...M,role:"system",content:"\u2713 Done",type:"tool_result",metadata:{result:f.content,toolCallId:f.toolCallId}};if(f.role==="assistant"&&f.toolCalls&&f.toolCalls.length>0)return f.toolCalls.map(x=>({id:we(),role:"assistant",content:`\u{1F527} ${x.function?.name||x.name||"tool"}`,timestamp:M.timestamp,type:"tool_call",metadata:{toolName:x.function?.name||x.name,arguments:x.function?.arguments||x.arguments,toolCallId:x.id}}));let T=typeof f.content=="string"?f.content:JSON.stringify(f.content);return f.role==="assistant"&&!T?.trim()?null:{...M,content:T,type:"message"}},K=A(async f=>{l(!0),a([]),d(f);try{let M=await t.getOrCreateSession(),x=`${e.backendUrl}${e.apiPaths.conversations}${f}/?limit=10&offset=0`,S=await fetch(x,t.getFetchOptions({method:"GET"},M));if(S.ok){let E=await S.json(),v=t.transformResponse(E);v.messages&&a(v.messages.flatMap(V).filter(Boolean)),_(v.hasMore||!1),y(v.messages?.length||0)}else S.status===404&&(d(null),n?.set(e.conversationIdKey,null))}catch(M){console.error("[ChatWidget] Failed to load conversation:",M)}finally{l(!1)}},[e,t,n]),B=A(async()=>{if(!(!i||p||!r)){k(!0);try{let f=await t.getOrCreateSession(),T=`${e.backendUrl}${e.apiPaths.conversations}${i}/?limit=10&offset=${w}`,x=await fetch(T,t.getFetchOptions({method:"GET"},f));if(x.ok){let S=await x.json(),E=t.transformResponse(S);if(E.messages?.length>0){let v=E.messages.flatMap(V).filter(Boolean);a(D=>[...v,...D]),y(D=>D+E.messages.length),_(E.hasMore||!1)}else _(!1)}}catch(f){console.error("[ChatWidget] Failed to load more messages:",f)}finally{k(!1)}}},[e,t,i,w,p,r]),q=A(async(f,M,T={})=>{if(o)return;let x=s[f];if(!x||x.role!=="user")return;let S=s.slice(0,f);a(S),await N(M,{...T,supersedeFromMessageIndex:f})},[s,o,N]),O=A(async(f,M={})=>{if(o)return;let T=s[f];if(!T)return;let x=f,S=T;if(T.role==="assistant"){for(let v=f-1;v>=0;v--)if(s[v].role==="user"){x=v,S=s[v];break}if(S.role!=="user")return}else if(T.role!=="user")return;let E=s.slice(0,x);a(E),await N(S.content,{...M,supersedeFromMessageIndex:x})},[s,o,N]);return W(()=>()=>{g.current&&g.current.close()},[]),{messages:s,isLoading:o,error:c,conversationId:i,hasMoreMessages:r,loadingMoreMessages:p,sendMessage:N,cancelRun:J,clearMessages:z,loadConversation:K,loadMoreMessages:B,setConversationId:d,editMessage:q,retryMessage:O}}function Et(e,t,n){let[s,a]=C([]),[o,l]=C(null),[c,u]=C(null),[i,d]=C(!1);W(()=>{(async()=>{if(e.showModelSelector){d(!0);try{let k=await fetch(`${e.backendUrl}${e.apiPaths.models}`,t.getFetchOptions({method:"GET"}));if(k.ok){let w=await k.json(),y=w.models||[];a(y),u(w.default);let g=n?.get(e.modelKey);g&&y.some($=>$.id===g)?l(g):l(w.default)}}catch(k){console.warn("[ChatWidget] Failed to load models:",k)}finally{d(!1)}}})()},[e.backendUrl,e.apiPaths.models,e.showModelSelector,e.modelKey,t,n]);let r=A(p=>{l(p),n?.set(e.modelKey,p)},[e.modelKey,n]),_=A(()=>s.find(p=>p.id===o)||null,[s,o]);return{availableModels:s,selectedModel:o,defaultModel:c,isLoading:i,selectModel:r,getSelectedModelInfo:_}}function It(e,t){let[n,s]=C(null),[a,o]=C(!1),[l,c]=C(null),u=e.apiPaths?.tasks||"/api/agent/tasks/",i=A(async()=>{o(!0),c(null);try{let w=`${e.backendUrl}${u}`,y=await fetch(w,t.getFetchOptions({method:"GET"}));if(y.ok){let g=await y.json();s(g)}else{let g=await y.json().catch(()=>({}));c(g.error||"Failed to load tasks")}}catch(w){console.error("[useTasks] Failed to load task list:",w),c("Failed to load tasks")}finally{o(!1)}},[e.backendUrl,u,t]),d=A(async w=>{if(!n)return null;try{let y=`${e.backendUrl}${u}${n.id}/add_task/`,g=await fetch(y,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(w)}));if(g.ok){let $=await g.json();return await i(),$}else{let $=await g.json().catch(()=>({}));return c($.error||"Failed to add task"),null}}catch(y){return console.error("[useTasks] Failed to add task:",y),c("Failed to add task"),null}},[e.backendUrl,u,n,t,i]),r=A(async(w,y)=>{if(!n)return null;try{let g=`${e.backendUrl}${u}${n.id}/update_task/${w}/`,$=await fetch(g,t.getFetchOptions({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(y)}));if($.ok){let I=await $.json();return await i(),I}else{let I=await $.json().catch(()=>({}));return c(I.error||"Failed to update task"),null}}catch(g){return console.error("[useTasks] Failed to update task:",g),c("Failed to update task"),null}},[e.backendUrl,u,n,t,i]),_=A(async w=>{if(!n)return!1;try{let y=`${e.backendUrl}${u}${n.id}/remove_task/${w}/`,g=await fetch(y,t.getFetchOptions({method:"DELETE"}));if(g.ok)return await i(),!0;{let $=await g.json().catch(()=>({}));return c($.error||"Failed to remove task"),!1}}catch(y){return console.error("[useTasks] Failed to remove task:",y),c("Failed to remove task"),!1}},[e.backendUrl,u,n,t,i]),p=A(async()=>{if(!n)return!1;try{let w=`${e.backendUrl}${u}${n.id}/clear/`,y=await fetch(w,t.getFetchOptions({method:"POST"}));if(y.ok)return await i(),!0;{let g=await y.json().catch(()=>({}));return c(g.error||"Failed to clear tasks"),!1}}catch(w){return console.error("[useTasks] Failed to clear tasks:",w),c("Failed to clear tasks"),!1}},[e.backendUrl,u,n,t,i]),k=A(()=>c(null),[]);return{taskList:n,tasks:n?.tasks||[],progress:n?.progress||{total:0,completed:0,percent_complete:0},isLoading:a,error:l,loadTaskList:i,addTask:d,updateTask:r,removeTask:_,clearTasks:p,clearError:k}}function At(e,t,n){let s=i=>!i||typeof i!="object"||e.apiCaseStyle==="camel"?i:ve(i),a=i=>!i||typeof i!="object"||e.apiCaseStyle==="snake"?i:ye(i),o=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",l=(i=null)=>{let d=o(),r={},_=i||e.authToken||t().authToken;if(d==="token"&&_){let p=e.authHeader||"Authorization",k=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";r[p]=k?`${k} ${_}`:_}else if(d==="jwt"&&_){let p=e.authHeader||"Authorization",k=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";r[p]=k?`${k} ${_}`:_}else if(d==="anonymous"&&_){let p=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";r[p]=_}if(d==="session"){let p=vt(e.csrfCookieName);p&&(r["X-CSRFToken"]=p)}return r};return{getAuthStrategy:o,getAuthHeaders:l,getFetchOptions:(i={},d=null)=>{let r=o(),_={...i};return _.headers={..._.headers,...l(d)},r==="session"&&(_.credentials="include"),_},getOrCreateSession:async()=>{let i=o(),d=t();if(i!=="anonymous")return e.authToken||d.authToken;if(d.authToken)return d.authToken;let r=e.anonymousTokenKey||e.sessionTokenKey,_=d.storage?.get(r);if(_)return n(p=>({...p,authToken:_})),_;try{let p=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,k=await fetch(`${e.backendUrl}${p}`,{method:"POST",headers:{"Content-Type":"application/json"}});if(k.ok){let w=await k.json();return n(y=>({...y,authToken:w.token})),d.storage?.set(r,w.token),w.token}}catch(p){console.warn("[ChatWidget] Failed to create session:",p)}return null},transformRequest:s,transformResponse:a}}function Dt({config:e,onStateChange:t,markdownParser:n,apiRef:s}){let[a,o]=C(e.embedded||e.forceOpen===!0),[l,c]=C(!1),[u,i]=C(!1),[d,r]=C(!1),[_,p]=C([]),[k,w]=C("chat"),[y,g]=C(!1),[$,I]=C(e.enableTTS),[N,J]=C(!1),[z,V]=C(null);W(()=>{e.forceOpen!==void 0&&o(e.forceOpen)},[e.forceOpen]);let K=ie(()=>yt(e.containerId),[e.containerId]),[B,q]=C(e.authToken||null),O=ie(()=>At(e,()=>({authToken:B,storage:K}),X=>{let Z=X({authToken:B,storage:K});Z.authToken!==B&&q(Z.authToken)}),[e,B,K]),f=xt(e,O,K),M=Et(e,O,K),T=It(e,O);W(()=>{for(let b=f.messages.length-1;b>=0;b--){let R=f.messages[b];if(R.type==="sub_agent_start"){V({key:R.metadata?.subAgentKey,name:R.metadata?.agentName});return}if(R.type==="sub_agent_end"){V(null);return}}},[f.messages]),W(()=>{let b=K.get(e.conversationIdKey);b&&f.loadConversation(b)},[]),W(()=>{t&&t({isOpen:a,isExpanded:l,debugMode:u,messages:f.messages,conversationId:f.conversationId,isLoading:f.isLoading,error:f.error})},[a,l,u,f.messages,f.conversationId,f.isLoading,f.error]);let x=A(async()=>{if(e.showConversationSidebar){g(!0);try{let b=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(e.agentKey)}`,R=await fetch(b,O.getFetchOptions({method:"GET"}));if(R.ok){let X=await R.json();p(X.results||X)}}catch(b){console.error("[ChatWidget] Failed to load conversations:",b),p([])}finally{g(!1)}}},[e,O]),S=A(()=>{let b=!d;r(b),b&&x()},[d,x]),E=A(b=>{b!==f.conversationId&&f.loadConversation(b),r(!1)},[f]),v=A(()=>{f.clearMessages(),r(!1)},[f]),D=A(b=>{f.sendMessage(b,{model:M.selectedModel,onAssistantMessage:R=>{}})},[f,$,M.selectedModel]),F=A(b=>{w(b),b==="tasks"&&T.loadTaskList()},[T]);if(W(()=>{s&&(s.current={open:()=>o(!0),close:()=>o(!1),send:b=>D(b),clearMessages:()=>f.clearMessages(),toggleTTS:()=>I(b=>!b),stopSpeech:()=>J(!1),setAuth:b=>{b.token!==void 0&&q(b.token)},clearAuth:()=>q(null)})},[f,s,D]),!e.embedded&&!a)return h`
480
+ `}function Et(e,t,n){let[s,a]=C([]),[o,i]=C(!1),[c,d]=C(null),[l,u]=C(()=>n?.get(e.conversationIdKey)||null),[r,_]=C(!1),[p,v]=C(!1),[w,y]=C(0),g=X(null),k=X(null);K(()=>{l&&n?.set(e.conversationIdKey,l)},[l,e.conversationIdKey,n]);let I=A(async(h,x,T)=>{g.current&&g.current.close();let M=e.apiPaths.runEvents.replace("{runId}",h),S=`${e.backendUrl}${M}`;x&&(S+=`?anonymous_token=${encodeURIComponent(x)}`);let E=new EventSource(S);g.current=E;let $="";E.addEventListener("assistant.message",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("assistant.message",m.payload);let b=m.payload.content;b&&($+=b,a(R=>{let G=R[R.length-1];return G?.role==="assistant"&&G.id.startsWith("assistant-stream-")?[...R.slice(0,-1),{...G,content:$}]:[...R,{id:"assistant-stream-"+Date.now(),role:"assistant",content:$,timestamp:new Date,type:"message"}]}))}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("tool.call",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("tool.call",m.payload),a(b=>[...b,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${m.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:m.payload.name,arguments:m.payload.arguments,toolCallId:m.payload.id}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("tool.result",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("tool.result",m.payload);let b=m.payload.result,R=b?.error;a(G=>[...G,{id:"tool-result-"+Date.now(),role:"system",content:R?`\u274C ${b.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:m.payload.name,result:b,toolCallId:m.payload.tool_call_id}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("custom",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("custom",m.payload),m.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(m.payload),m.payload?.type==="agent_context"&&a(b=>[...b,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${m.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:m.payload.agent_key,agentName:m.payload.agent_name,action:m.payload.action}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("sub_agent.start",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("sub_agent.start",m.payload),a(b=>[...b,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${m.payload.agent_name||m.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:m.payload.sub_agent_key,agentName:m.payload.agent_name,invocationMode:m.payload.invocation_mode}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}}),E.addEventListener("sub_agent.end",F=>{try{let m=JSON.parse(F.data);e.onEvent&&e.onEvent("sub_agent.end",m.payload),a(b=>[...b,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${m.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:m.payload.sub_agent_key,agentName:m.payload.agent_name}}])}catch(m){console.error("[ChatWidget] Parse error:",m)}});let D=F=>{try{let m=JSON.parse(F.data);if(e.onEvent&&e.onEvent(m.type,m.payload),m.type==="run.failed"){let b=m.payload.error||"Agent run failed";d(b),a(R=>[...R,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${b}`,timestamp:new Date,type:"error"}])}}catch(m){console.error("[ChatWidget] Parse error:",m)}i(!1),E.close(),g.current=null,$&&T&&T($)};E.addEventListener("run.succeeded",D),E.addEventListener("run.failed",D),E.addEventListener("run.cancelled",D),E.addEventListener("run.timed_out",D),E.onerror=()=>{i(!1),E.close(),g.current=null}},[e]),N=A(async(h,x={},T={})=>{if(!h.trim()||o)return;let M=[],S={};typeof x=="function"?S={onAssistantMessage:x}:Array.isArray(x)?(M=x,S=T):S=x||{};let{model:E,onAssistantMessage:$,supersedeFromMessageIndex:D}=S;i(!0),d(null);let F={id:$e(),role:"user",content:h.trim(),timestamp:new Date,type:"message",files:M.length>0?M.map(m=>({name:m.name,size:m.size,type:m.type})):void 0};a(m=>[...m,F]);try{let m=await t.getOrCreateSession(),b;if(M.length>0){let Q=e.apiCaseStyle!=="camel",Ke=ce=>Q?He(ce):ce,Y=new FormData;Y.append(Ke("agentKey"),e.agentKey),l&&Y.append(Ke("conversationId"),l),Y.append("messages",JSON.stringify([{role:"user",content:h.trim()}])),Y.append("metadata",JSON.stringify(Q?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),E&&Y.append("model",E),M.forEach(ce=>{Y.append("files",ce)}),b=t.getFetchOptions({method:"POST",body:Y},m)}else{let Q=t.transformRequest({agentKey:e.agentKey,conversationId:l,messages:[{role:"user",content:h.trim()}],metadata:{...e.metadata,journeyType:e.defaultJourneyType},...E&&{model:E},...D!==void 0&&{supersedeFromMessageIndex:D}});b=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Q)},m)}let R=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,b),G=m;if(R.status===401){t.clearSession();let Q=await t.getOrCreateSession(!0);Q&&(G=Q,M.length>0?b=t.getFetchOptions({method:"POST",body:b.body},Q):b=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:b.body},Q),R=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,b))}if(!R.ok){let Q=await R.json().catch(()=>({}));throw new Error(Q.error||Q.detail||`HTTP ${R.status}`)}let ie=await R.json(),le=t.transformResponse(ie);k.current=le.id,!l&&le.conversationId&&u(le.conversationId),await I(le.id,G,$)}catch(m){d(m.message||"Failed to send message"),i(!1)}finally{k.current=null}},[e,t,l,o,I]),J=A(async()=>{let h=k.current;if(!(!h||!o))try{let x=e.apiPaths.cancelRun?e.apiPaths.cancelRun.replace("{runId}",h):`${e.apiPaths.runs}${h}/cancel/`;(await fetch(`${e.backendUrl}${x}`,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"}}))).ok&&(g.current&&(g.current.close(),g.current=null),i(!1),k.current=null,a(M=>[...M,{id:"cancelled-"+Date.now(),role:"system",content:"\u23F9 Run cancelled",timestamp:new Date,type:"cancelled"}]))}catch(x){console.error("[ChatWidget] Failed to cancel run:",x)}},[e,t,o]),z=A(()=>{a([]),u(null),d(null),_(!1),y(0),n?.set(e.conversationIdKey,null)},[e.conversationIdKey,n]),V=h=>{let x={id:$e(),role:h.role,timestamp:h.timestamp?new Date(h.timestamp):new Date};if(h.role==="tool")return{...x,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(M=>({id:$e(),role:"assistant",content:`\u{1F527} ${M.function?.name||M.name||"tool"}`,timestamp:x.timestamp,type:"tool_call",metadata:{toolName:M.function?.name||M.name,arguments:M.function?.arguments||M.arguments,toolCallId:M.id}}));let T=typeof h.content=="string"?h.content:JSON.stringify(h.content);return h.role==="assistant"&&!T?.trim()?null:{...x,content:T,type:"message"}},W=A(async h=>{i(!0),a([]),u(h);try{let x=await t.getOrCreateSession(),M=`${e.backendUrl}${e.apiPaths.conversations}${h}/?limit=10&offset=0`,S=await fetch(M,t.getFetchOptions({method:"GET"},x));if(S.ok){let E=await S.json(),$=t.transformResponse(E);$.messages&&a($.messages.flatMap(V).filter(Boolean)),_($.hasMore||!1),y($.messages?.length||0)}else S.status===404&&(u(null),n?.set(e.conversationIdKey,null))}catch(x){console.error("[ChatWidget] Failed to load conversation:",x)}finally{i(!1)}},[e,t,n]),B=A(async()=>{if(!(!l||p||!r)){v(!0);try{let h=await t.getOrCreateSession(),T=`${e.backendUrl}${e.apiPaths.conversations}${l}/?limit=10&offset=${w}`,M=await fetch(T,t.getFetchOptions({method:"GET"},h));if(M.ok){let S=await M.json(),E=t.transformResponse(S);if(E.messages?.length>0){let $=E.messages.flatMap(V).filter(Boolean);a(D=>[...$,...D]),y(D=>D+E.messages.length),_(E.hasMore||!1)}else _(!1)}}catch(h){console.error("[ChatWidget] Failed to load more messages:",h)}finally{v(!1)}}},[e,t,l,w,p,r]),q=A(async(h,x,T={})=>{if(o)return;let M=s[h];if(!M||M.role!=="user")return;let S=s.slice(0,h);a(S),await N(x,{...T,supersedeFromMessageIndex:h})},[s,o,N]),H=A(async(h,x={})=>{if(o)return;let T=s[h];if(!T)return;let M=h,S=T;if(T.role==="assistant"){for(let $=h-1;$>=0;$--)if(s[$].role==="user"){M=$,S=s[$];break}if(S.role!=="user")return}else if(T.role!=="user")return;let E=s.slice(0,M);a(E),await N(S.content,{...x,supersedeFromMessageIndex:M})},[s,o,N]);return K(()=>()=>{g.current&&g.current.close()},[]),{messages:s,isLoading:o,error:c,conversationId:l,hasMoreMessages:r,loadingMoreMessages:p,sendMessage:N,cancelRun:J,clearMessages:z,loadConversation:W,loadMoreMessages:B,setConversationId:u,editMessage:q,retryMessage:H}}function It(e,t,n){let[s,a]=C([]),[o,i]=C(null),[c,d]=C(null),[l,u]=C(!1);K(()=>{(async()=>{if(e.showModelSelector){u(!0);try{let v=await fetch(`${e.backendUrl}${e.apiPaths.models}`,t.getFetchOptions({method:"GET"}));if(v.ok){let w=await v.json(),y=w.models||[];a(y),d(w.default);let g=n?.get(e.modelKey);g&&y.some(k=>k.id===g)?i(g):i(w.default)}}catch(v){console.warn("[ChatWidget] Failed to load models:",v)}finally{u(!1)}}})()},[e.backendUrl,e.apiPaths.models,e.showModelSelector,e.modelKey,t,n]);let r=A(p=>{i(p),n?.set(e.modelKey,p)},[e.modelKey,n]),_=A(()=>s.find(p=>p.id===o)||null,[s,o]);return{availableModels:s,selectedModel:o,defaultModel:c,isLoading:l,selectModel:r,getSelectedModelInfo:_}}function At(e,t){let[n,s]=C(null),[a,o]=C(!1),[i,c]=C(null),d=e.apiPaths?.tasks||"/api/agent/tasks/",l=A(async()=>{o(!0),c(null);try{let w=`${e.backendUrl}${d}`,y=await fetch(w,t.getFetchOptions({method:"GET"}));if(y.ok){let g=await y.json();s(g)}else{let g=await y.json().catch(()=>({}));c(g.error||"Failed to load tasks")}}catch(w){console.error("[useTasks] Failed to load task list:",w),c("Failed to load tasks")}finally{o(!1)}},[e.backendUrl,d,t]),u=A(async w=>{if(!n)return null;try{let y=`${e.backendUrl}${d}${n.id}/add_task/`,g=await fetch(y,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(w)}));if(g.ok){let k=await g.json();return await l(),k}else{let k=await g.json().catch(()=>({}));return c(k.error||"Failed to add task"),null}}catch(y){return console.error("[useTasks] Failed to add task:",y),c("Failed to add task"),null}},[e.backendUrl,d,n,t,l]),r=A(async(w,y)=>{if(!n)return null;try{let g=`${e.backendUrl}${d}${n.id}/update_task/${w}/`,k=await fetch(g,t.getFetchOptions({method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(y)}));if(k.ok){let I=await k.json();return await l(),I}else{let I=await k.json().catch(()=>({}));return c(I.error||"Failed to update task"),null}}catch(g){return console.error("[useTasks] Failed to update task:",g),c("Failed to update task"),null}},[e.backendUrl,d,n,t,l]),_=A(async w=>{if(!n)return!1;try{let y=`${e.backendUrl}${d}${n.id}/remove_task/${w}/`,g=await fetch(y,t.getFetchOptions({method:"DELETE"}));if(g.ok)return await l(),!0;{let k=await g.json().catch(()=>({}));return c(k.error||"Failed to remove task"),!1}}catch(y){return console.error("[useTasks] Failed to remove task:",y),c("Failed to remove task"),!1}},[e.backendUrl,d,n,t,l]),p=A(async()=>{if(!n)return!1;try{let w=`${e.backendUrl}${d}${n.id}/clear/`,y=await fetch(w,t.getFetchOptions({method:"POST"}));if(y.ok)return await l(),!0;{let g=await y.json().catch(()=>({}));return c(g.error||"Failed to clear tasks"),!1}}catch(w){return console.error("[useTasks] Failed to clear tasks:",w),c("Failed to clear tasks"),!1}},[e.backendUrl,d,n,t,l]),v=A(()=>c(null),[]);return{taskList:n,tasks:n?.tasks||[],progress:n?.progress||{total:0,completed:0,percent_complete:0},isLoading:a,error:i,loadTaskList:l,addTask:u,updateTask:r,removeTask:_,clearTasks:p,clearError:v}}function Dt(e,t,n){let s=u=>!u||typeof u!="object"||e.apiCaseStyle==="camel"?u:we(u),a=u=>!u||typeof u!="object"||e.apiCaseStyle==="snake"?u:ve(u),o=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",i=(u=null)=>{let r=o(),_={},p=u||e.authToken||t().authToken;if(r==="token"&&p){let v=e.authHeader||"Authorization",w=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";_[v]=w?`${w} ${p}`:p}else if(r==="jwt"&&p){let v=e.authHeader||"Authorization",w=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";_[v]=w?`${w} ${p}`:p}else if(r==="anonymous"&&p){let v=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";_[v]=p}if(r==="session"){let v=wt(e.csrfCookieName);v&&(_["X-CSRFToken"]=v)}return _};return{getAuthStrategy:o,getAuthHeaders:i,getFetchOptions:(u={},r=null)=>{let _=o(),p={...u},v=i(r);return console.log("[ChatWidget] getFetchOptions - strategy:",_,"overrideToken:",r,"authHeaders:",v),p.headers={...p.headers,...v},_==="session"&&(p.credentials="include"),p},getOrCreateSession:async(u=!1)=>{let r=o(),_=t(),p=e.anonymousTokenKey||e.sessionTokenKey;if(r!=="anonymous")return e.authToken||_.authToken;if(!u){if(_.authToken)return _.authToken;let v=_.storage?.get(p);if(v)return n(w=>({...w,authToken:v})),v}try{let v=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,w=await fetch(`${e.backendUrl}${v}`,{method:"POST",headers:{"Content-Type":"application/json"}});if(w.ok){let y=await w.json();return n(g=>({...g,authToken:y.token})),_.storage?.set(p,y.token),y.token}}catch(v){console.warn("[ChatWidget] Failed to create session:",v)}return null},clearSession:()=>{let u=e.anonymousTokenKey||e.sessionTokenKey,r=t();n(_=>({..._,authToken:null})),r.storage?.set(u,null)},transformRequest:s,transformResponse:a}}function Rt({config:e,onStateChange:t,markdownParser:n,apiRef:s}){let[a,o]=C(e.embedded||e.forceOpen===!0),[i,c]=C(!1),[d,l]=C(!1),[u,r]=C(!1),[_,p]=C([]),[v,w]=C("chat"),[y,g]=C(!1),[k,I]=C(e.enableTTS),[N,J]=C(!1),[z,V]=C(null);K(()=>{e.forceOpen!==void 0&&o(e.forceOpen)},[e.forceOpen]);let W=re(()=>vt(e.containerId),[e.containerId]),[B,q]=C(e.authToken||null),H=re(()=>Dt(e,()=>({authToken:B,storage:W}),G=>{let ie=G({authToken:B,storage:W});ie.authToken!==B&&q(ie.authToken)}),[e,B,W]),h=Et(e,H,W),x=It(e,H,W),T=At(e,H);K(()=>{for(let b=h.messages.length-1;b>=0;b--){let R=h.messages[b];if(R.type==="sub_agent_start"){V({key:R.metadata?.subAgentKey,name:R.metadata?.agentName});return}if(R.type==="sub_agent_end"){V(null);return}}},[h.messages]),K(()=>{let b=W.get(e.conversationIdKey);b&&h.loadConversation(b)},[]),K(()=>{t&&t({isOpen:a,isExpanded:i,debugMode:d,messages:h.messages,conversationId:h.conversationId,isLoading:h.isLoading,error:h.error})},[a,i,d,h.messages,h.conversationId,h.isLoading,h.error]);let M=A(async()=>{if(e.showConversationSidebar){g(!0);try{let b=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(e.agentKey)}`,R=await fetch(b,H.getFetchOptions({method:"GET"}));if(R.ok){let G=await R.json();p(G.results||G)}}catch(b){console.error("[ChatWidget] Failed to load conversations:",b),p([])}finally{g(!1)}}},[e,H]),S=A(()=>{let b=!u;r(b),b&&M()},[u,M]),E=A(b=>{b!==h.conversationId&&h.loadConversation(b),r(!1)},[h]),$=A(()=>{h.clearMessages(),r(!1)},[h]),D=A(b=>{h.sendMessage(b,{model:x.selectedModel,onAssistantMessage:R=>{}})},[h,k,x.selectedModel]),F=A(b=>{w(b),b==="tasks"&&T.loadTaskList()},[T]);if(K(()=>{s&&(s.current={open:()=>o(!0),close:()=>o(!1),send:b=>D(b),clearMessages:()=>h.clearMessages(),toggleTTS:()=>I(b=>!b),stopSpeech:()=>J(!1),setAuth:b=>{b.token!==void 0&&q(b.token)},clearAuth:()=>q(null)})},[h,s,D]),!e.embedded&&!a)return f`
481
481
  <button
482
482
  class="cw-fab"
483
483
  style=${{backgroundColor:e.primaryColor}}
@@ -487,91 +487,91 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
487
487
  <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>
488
488
  </svg>
489
489
  </button>
490
- `;let m=["cw-widget",l&&"cw-widget-expanded",e.embedded&&"cw-widget-embedded"].filter(Boolean).join(" ");return h`
490
+ `;let m=["cw-widget",i&&"cw-widget-expanded",e.embedded&&"cw-widget-embedded"].filter(Boolean).join(" ");return f`
491
491
  <div class=${m} style=${{"--cw-primary":e.primaryColor}}>
492
- ${e.showConversationSidebar&&h`
493
- <${St}
494
- isOpen=${d}
492
+ ${e.showConversationSidebar&&f`
493
+ <${Tt}
494
+ isOpen=${u}
495
495
  conversations=${_}
496
496
  conversationsLoading=${y}
497
- currentConversationId=${f.conversationId}
497
+ currentConversationId=${h.conversationId}
498
498
  onClose=${()=>r(!1)}
499
- onNewConversation=${v}
499
+ onNewConversation=${$}
500
500
  onSwitchConversation=${E}
501
501
  />
502
502
  `}
503
503
 
504
- <${wt}
504
+ <${$t}
505
505
  config=${e}
506
- debugMode=${u}
507
- isExpanded=${l}
506
+ debugMode=${d}
507
+ isExpanded=${i}
508
508
  isSpeaking=${N}
509
- messagesCount=${f.messages.length}
510
- isLoading=${f.isLoading}
509
+ messagesCount=${h.messages.length}
510
+ isLoading=${h.isLoading}
511
511
  currentAgent=${z}
512
512
  onClose=${()=>o(!1)}
513
- onToggleExpand=${()=>c(!l)}
514
- onToggleDebug=${()=>i(!u)}
515
- onToggleTTS=${()=>I(!$)}
516
- onClear=${f.clearMessages}
513
+ onToggleExpand=${()=>c(!i)}
514
+ onToggleDebug=${()=>l(!d)}
515
+ onToggleTTS=${()=>I(!k)}
516
+ onClear=${h.clearMessages}
517
517
  onToggleSidebar=${S}
518
518
  />
519
519
 
520
- ${e.showTasksTab!==!1&&h`
520
+ ${e.showTasksTab!==!1&&f`
521
521
  <div class="cw-tabs">
522
522
  <button
523
- class=${`cw-tab ${k==="chat"?"cw-tab-active":""}`}
523
+ class=${`cw-tab ${v==="chat"?"cw-tab-active":""}`}
524
524
  onClick=${()=>F("chat")}
525
525
  >
526
526
  Chat
527
527
  </button>
528
528
  <button
529
- class=${`cw-tab ${k==="tasks"?"cw-tab-active":""}`}
529
+ class=${`cw-tab ${v==="tasks"?"cw-tab-active":""}`}
530
530
  onClick=${()=>F("tasks")}
531
531
  >
532
- Tasks ${T.progress.total>0?h`<span class="cw-tab-badge">${T.progress.completed}/${T.progress.total}</span>`:""}
532
+ Tasks ${T.progress.total>0?f`<span class="cw-tab-badge">${T.progress.completed}/${T.progress.total}</span>`:""}
533
533
  </button>
534
534
  </div>
535
535
  `}
536
536
 
537
- ${u&&h`<div class="cw-status-bar"><span>🐛 Debug</span></div>`}
537
+ ${d&&f`<div class="cw-status-bar"><span>🐛 Debug</span></div>`}
538
538
 
539
- ${k==="chat"?h`
540
- <${bt}
541
- messages=${f.messages}
542
- isLoading=${f.isLoading}
543
- hasMoreMessages=${f.hasMoreMessages}
544
- loadingMoreMessages=${f.loadingMoreMessages}
545
- onLoadMore=${f.loadMoreMessages}
546
- onEditMessage=${f.editMessage}
547
- onRetryMessage=${f.retryMessage}
548
- debugMode=${u}
539
+ ${v==="chat"?f`
540
+ <${Ct}
541
+ messages=${h.messages}
542
+ isLoading=${h.isLoading}
543
+ hasMoreMessages=${h.hasMoreMessages}
544
+ loadingMoreMessages=${h.loadingMoreMessages}
545
+ onLoadMore=${h.loadMoreMessages}
546
+ onEditMessage=${h.editMessage}
547
+ onRetryMessage=${h.retryMessage}
548
+ debugMode=${d}
549
549
  markdownParser=${n}
550
550
  emptyStateTitle=${e.emptyStateTitle}
551
551
  emptyStateMessage=${e.emptyStateMessage}
552
552
  />
553
553
 
554
- ${f.error&&h`<div class="cw-error-bar">${f.error}</div>`}
554
+ ${h.error&&f`<div class="cw-error-bar">${h.error}</div>`}
555
555
 
556
- ${e.showModelSelector&&M.availableModels.length>0&&h`
557
- <${Tt}
558
- availableModels=${M.availableModels}
559
- selectedModel=${M.selectedModel}
560
- onSelectModel=${M.selectModel}
561
- disabled=${f.isLoading}
556
+ ${e.showModelSelector&&x.availableModels.length>0&&f`
557
+ <${Mt}
558
+ availableModels=${x.availableModels}
559
+ selectedModel=${x.selectedModel}
560
+ onSelectModel=${x.selectModel}
561
+ disabled=${h.isLoading}
562
562
  />
563
563
  `}
564
564
 
565
- <${Ct}
565
+ <${St}
566
566
  onSend=${D}
567
- onCancel=${f.cancelRun}
568
- isLoading=${f.isLoading}
567
+ onCancel=${h.cancelRun}
568
+ isLoading=${h.isLoading}
569
569
  placeholder=${e.placeholder}
570
570
  primaryColor=${e.primaryColor}
571
571
  enableVoice=${e.enableVoice}
572
572
  />
573
- `:h`
574
- <${Mt}
573
+ `:f`
574
+ <${xt}
575
575
  tasks=${T.tasks}
576
576
  progress=${T.progress}
577
577
  isLoading=${T.isLoading}
@@ -583,9 +583,9 @@ var ChatWidgetModule=(()=>{var Se=Object.defineProperty;var Ht=Object.getOwnProp
583
583
  />
584
584
  `}
585
585
  </div>
586
- `}var Rt={backendUrl:"http://localhost:8000",agentKey:"default-agent",title:"Chat Assistant",subtitle:"How can we help you today?",primaryColor:"#0066cc",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/"},apiCaseStyle:"auto",showConversationSidebar:!0,showClearButton:!0,showDebugButton:!0,showTTSButton:!0,showVoiceSettings:!0,showExpandButton:!0,showModelSelector:!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={...Rt.apiPaths,...e.apiPaths||{}};return{...Rt,...e,apiPaths:t}}var be=new Map,sn=0,P=null,Le=class{constructor(t={}){this.instanceId=`cw-${++sn}`,this.config=Pt(t),this.container=null,this._state={},this._apiRef={current:null},be.set(this.instanceId,this)}_handleStateChange=t=>{this._state=t};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._render(),console.log(`[ChatWidget] Instance ${this.instanceId} initialized`),this}_render(t={}){this.container&&me(h`<${Dt}
586
+ `}var Pt={backendUrl:"http://localhost:8000",agentKey:"default-agent",title:"Chat Assistant",subtitle:"How can we help you today?",primaryColor:"#0066cc",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/"},apiCaseStyle:"auto",showConversationSidebar:!0,showClearButton:!0,showDebugButton:!0,showTTSButton:!0,showVoiceSettings:!0,showExpandButton:!0,showModelSelector:!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 Ft(e){let t={...Pt.apiPaths,...e.apiPaths||{}};return{...Pt,...e,apiPaths:t}}var Ce=new Map,on=0,P=null,Ue=class{constructor(t={}){this.instanceId=`cw-${++on}`,this.config=Ft(t),this.container=null,this._state={},this._apiRef={current:null},Ce.set(this.instanceId,this)}_handleStateChange=t=>{this._state=t};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._render(),console.log(`[ChatWidget] Instance ${this.instanceId} initialized`),this}_render(t={}){this.container&&ge(f`<${Rt}
587
587
  config=${{...this.config,...t}}
588
588
  onStateChange=${this._handleStateChange}
589
- markdownParser=${Ce._enhancedMarkdownParser}
589
+ markdownParser=${Se._enhancedMarkdownParser}
590
590
  apiRef=${this._apiRef}
591
- />`,this.container)}destroy(){this.container&&(me(null,this.container),this.config.containerId?this.container.classList.remove("cw-container-embedded"):this.container.remove(),this.container=null),be.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},this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} config updated`)}};function Ft(e={}){return new Le(e).init()}function on(e={}){return P&&P.destroy(),P=Ft(e),P}function an(){P&&(P.destroy(),P=null)}function rn(){P&&P.open()}function ln(){P&&P.close()}function cn(e){P&&P.send(e)}function un(){P&&P.clearMessages()}function dn(){P&&P.toggleTTS()}function _n(){P&&P.stopSpeech()}function pn(e){P&&P.setAuth(e)}function fn(){P&&P.clearAuth()}function hn(){return P?P.getState():null}function mn(){return P?P.getConfig():null}var Ce={createInstance:Ft,getInstance:e=>be.get(e),getAllInstances:()=>Array.from(be.values()),init:on,destroy:an,open:rn,close:ln,send:cn,clearMessages:un,toggleTTS:dn,stopSpeech:_n,setAuth:pn,clearAuth:fn,getState:hn,getConfig:mn,_enhancedMarkdownParser:null};var gn=Ce;typeof window<"u"&&(window.ChatWidget=Ce);return Wt(yn);})();
591
+ />`,this.container)}destroy(){this.container&&(ge(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},this._render(),console.log(`[ChatWidget] Instance ${this.instanceId} config updated`)}};function Ot(e={}){return new Ue(e).init()}function an(e={}){return P&&P.destroy(),P=Ot(e),P}function rn(){P&&(P.destroy(),P=null)}function ln(){P&&P.open()}function cn(){P&&P.close()}function un(e){P&&P.send(e)}function dn(){P&&P.clearMessages()}function _n(){P&&P.toggleTTS()}function pn(){P&&P.stopSpeech()}function hn(e){P&&P.setAuth(e)}function fn(){P&&P.clearAuth()}function mn(){return P?P.getState():null}function gn(){return P?P.getConfig():null}var Se={createInstance:Ot,getInstance:e=>Ce.get(e),getAllInstances:()=>Array.from(Ce.values()),init:an,destroy:rn,open:ln,close:cn,send:un,clearMessages:dn,toggleTTS:_n,stopSpeech:pn,setAuth:hn,clearAuth:fn,getState:mn,getConfig:gn,_enhancedMarkdownParser:null};var yn=Se;typeof window<"u"&&(window.ChatWidget=Se);return Wt(vn);})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makemore/agent-frontend",
3
- "version": "2.7.0",
3
+ "version": "2.7.1",
4
4
  "description": "A lightweight chat widget for AI agents built with Preact. Embed conversational AI into any website with a single script tag.",
5
5
  "type": "module",
6
6
  "main": "dist/chat-widget.js",
@@ -56,4 +56,3 @@
56
56
  "esbuild": "^0.20.0"
57
57
  }
58
58
  }
59
-
@@ -300,11 +300,32 @@ export function useChat(config, api, storage) {
300
300
  }, token);
301
301
  }
302
302
 
303
- const response = await fetch(`${config.backendUrl}${config.apiPaths.runs}`, fetchOptions);
303
+ let response = await fetch(`${config.backendUrl}${config.apiPaths.runs}`, fetchOptions);
304
+ let activeToken = token;
305
+
306
+ // Handle 401 by refreshing token and retrying once
307
+ if (response.status === 401) {
308
+ api.clearSession();
309
+ const newToken = await api.getOrCreateSession(true);
310
+ if (newToken) {
311
+ activeToken = newToken;
312
+ // Rebuild fetch options with new token
313
+ if (files.length > 0) {
314
+ fetchOptions = api.getFetchOptions({ method: 'POST', body: fetchOptions.body }, newToken);
315
+ } else {
316
+ fetchOptions = api.getFetchOptions({
317
+ method: 'POST',
318
+ headers: { 'Content-Type': 'application/json' },
319
+ body: fetchOptions.body,
320
+ }, newToken);
321
+ }
322
+ response = await fetch(`${config.backendUrl}${config.apiPaths.runs}`, fetchOptions);
323
+ }
324
+ }
304
325
 
305
326
  if (!response.ok) {
306
327
  const errorData = await response.json().catch(() => ({}));
307
- throw new Error(errorData.error || `HTTP ${response.status}`);
328
+ throw new Error(errorData.error || errorData.detail || `HTTP ${response.status}`);
308
329
  }
309
330
 
310
331
  const rawRun = await response.json();
@@ -314,7 +335,7 @@ export function useChat(config, api, storage) {
314
335
  setConversationId(run.conversationId);
315
336
  }
316
337
 
317
- await subscribeToEvents(run.id, token, onAssistantMessage);
338
+ await subscribeToEvents(run.id, activeToken, onAssistantMessage);
318
339
  } catch (err) {
319
340
  setError(err.message || 'Failed to send message');
320
341
  setIsLoading(false);
package/src/utils/api.js CHANGED
@@ -66,25 +66,31 @@ export function createApiClient(config, getState, setState) {
66
66
  const getFetchOptions = (options = {}, overrideToken = null) => {
67
67
  const strategy = getAuthStrategy();
68
68
  const fetchOptions = { ...options };
69
- fetchOptions.headers = { ...fetchOptions.headers, ...getAuthHeaders(overrideToken) };
69
+ const authHeaders = getAuthHeaders(overrideToken);
70
+ console.log('[ChatWidget] getFetchOptions - strategy:', strategy, 'overrideToken:', overrideToken, 'authHeaders:', authHeaders);
71
+ fetchOptions.headers = { ...fetchOptions.headers, ...authHeaders };
70
72
  if (strategy === 'session') fetchOptions.credentials = 'include';
71
73
  return fetchOptions;
72
74
  };
73
75
 
74
- const getOrCreateSession = async () => {
76
+ const getOrCreateSession = async (forceRefresh = false) => {
75
77
  const strategy = getAuthStrategy();
76
78
  const state = getState();
77
-
79
+ const storageKey = config.anonymousTokenKey || config.sessionTokenKey;
80
+
78
81
  if (strategy !== 'anonymous') return config.authToken || state.authToken;
79
- if (state.authToken) return state.authToken;
80
82
 
81
- const storageKey = config.anonymousTokenKey || config.sessionTokenKey;
82
- const stored = state.storage?.get(storageKey);
83
- if (stored) {
84
- setState(s => ({ ...s, authToken: stored }));
85
- return stored;
83
+ // If not forcing refresh, try existing tokens
84
+ if (!forceRefresh) {
85
+ if (state.authToken) return state.authToken;
86
+ const stored = state.storage?.get(storageKey);
87
+ if (stored) {
88
+ setState(s => ({ ...s, authToken: stored }));
89
+ return stored;
90
+ }
86
91
  }
87
92
 
93
+ // Fetch new token (either first time or forced refresh)
88
94
  try {
89
95
  const endpoint = config.anonymousSessionEndpoint || config.apiPaths.anonymousSession;
90
96
  const response = await fetch(`${config.backendUrl}${endpoint}`, {
@@ -103,11 +109,20 @@ export function createApiClient(config, getState, setState) {
103
109
  return null;
104
110
  };
105
111
 
112
+ // Clear stored token (call on 401 to force refresh)
113
+ const clearSession = () => {
114
+ const storageKey = config.anonymousTokenKey || config.sessionTokenKey;
115
+ const state = getState();
116
+ setState(s => ({ ...s, authToken: null }));
117
+ state.storage?.set(storageKey, null);
118
+ };
119
+
106
120
  return {
107
121
  getAuthStrategy,
108
122
  getAuthHeaders,
109
123
  getFetchOptions,
110
124
  getOrCreateSession,
125
+ clearSession,
111
126
  transformRequest,
112
127
  transformResponse,
113
128
  };