django-agent-studio 0.2.3__py3-none-any.whl → 0.2.4__py3-none-any.whl

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.
@@ -1693,6 +1693,13 @@
1693
1693
  Edit/Retry Message Actions
1694
1694
  ========================================== */
1695
1695
 
1696
+ /* Wrapper for message bubble + action buttons */
1697
+ .cw-message-wrapper {
1698
+ position: relative;
1699
+ display: inline-block;
1700
+ max-width: 100%;
1701
+ }
1702
+
1696
1703
  /* Container for action buttons - appears on hover */
1697
1704
  .cw-message-actions {
1698
1705
  display: flex;
@@ -1702,6 +1709,7 @@
1702
1709
  position: absolute;
1703
1710
  top: 50%;
1704
1711
  transform: translateY(-50%);
1712
+ z-index: 1;
1705
1713
  }
1706
1714
 
1707
1715
  /* Position on left side (for user messages - they're on the right) */
@@ -1,10 +1,10 @@
1
- var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var Ht=Object.prototype.hasOwnProperty;var Nt=(e,t)=>{for(var n in t)Ce(e,n,{get:t[n],enumerable:!0})},Ot=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Pt(t))!Ht.call(e,r)&&r!==n&&Ce(e,r,{get:()=>t[r],enumerable:!(o=Dt(t,r))||o.enumerable});return e};var Ft=e=>Ot(Ce({},"__esModule",{value:!0}),e);var _n={};Nt(_n,{ChatWidget:()=>ke,default:()=>dn});var de,P,ze,Ut,Y,We,je,Je,Ve,xe,Se,Me,Wt,oe={},qe=[],Lt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,_e=Array.isArray;function Q(e,t){for(var n in t)e[n]=t[n];return e}function Ee(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function pe(e,t,n){var o,r,s,i={};for(s in t)s=="key"?o=t[s]:s=="ref"?r=t[s]:i[s]=t[s];if(arguments.length>2&&(i.children=arguments.length>3?de.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(s in e.defaultProps)i[s]===void 0&&(i[s]=e.defaultProps[s]);return ce(e,i,o,r,null)}function ce(e,t,n,o,r){var s={type:e,props:t,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:r??++ze,__i:-1,__u:0};return r==null&&P.vnode!=null&&P.vnode(s),s}function fe(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 Ge(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 Ge(e)}}function Le(e){(!e.__d&&(e.__d=!0)&&Y.push(e)&&!ue.__r++||We!=P.debounceRendering)&&((We=P.debounceRendering)||je)(ue)}function ue(){for(var e,t,n,o,r,s,i,c=1;Y.length;)Y.length>c&&Y.sort(Je),e=Y.shift(),c=Y.length,e.__d&&(n=void 0,o=void 0,r=(o=(t=e).__v).__e,s=[],i=[],t.__P&&((n=Q({},o)).__v=o.__v+1,P.vnode&&P.vnode(n),Ie(t.__P,n,o,t.__n,t.__P.namespaceURI,32&o.__u?[r]:null,s,r??te(o),!!(32&o.__u),i),n.__v=o.__v,n.__.__k[n.__i]=n,Ze(s,n,i),o.__e=o.__=null,n.__e!=r&&Ge(n)));ue.__r=0}function Xe(e,t,n,o,r,s,i,c,d,l,u){var a,_,p,b,C,g,y,w=o&&o.__k||qe,A=t.length;for(d=Kt(n,t,w,d,A),a=0;a<A;a++)(p=n.__k[a])!=null&&(_=p.__i==-1?oe:w[p.__i]||oe,p.__i=a,g=Ie(e,p,_,r,s,i,c,d,l,u),b=p.__e,p.ref&&_.ref!=p.ref&&(_.ref&&Ae(_.ref,null,p),u.push(p.ref,p.__c||b,p)),C==null&&b!=null&&(C=b),(y=!!(4&p.__u))||_.__k===p.__k?d=Qe(p,d,e,y):typeof p.type=="function"&&g!==void 0?d=g:b&&(d=b.nextSibling),p.__u&=-7);return n.__e=C,d}function Kt(e,t,n,o,r){var s,i,c,d,l,u=n.length,a=u,_=0;for(e.__k=new Array(r),s=0;s<r;s++)(i=t[s])!=null&&typeof i!="boolean"&&typeof i!="function"?(typeof i=="string"||typeof i=="number"||typeof i=="bigint"||i.constructor==String?i=e.__k[s]=ce(null,i,null,null,null):_e(i)?i=e.__k[s]=ce(fe,{children:i},null,null,null):i.constructor===void 0&&i.__b>0?i=e.__k[s]=ce(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):e.__k[s]=i,d=s+_,i.__=e,i.__b=e.__b+1,c=null,(l=i.__i=Bt(i,n,d,a))!=-1&&(a--,(c=n[l])&&(c.__u|=2)),c==null||c.__v==null?(l==-1&&(r>u?_--:r<u&&_++),typeof i.type!="function"&&(i.__u|=4)):l!=d&&(l==d-1?_--:l==d+1?_++:(l>d?_--:_++,i.__u|=4))):e.__k[s]=null;if(a)for(s=0;s<u;s++)(c=n[s])!=null&&!(2&c.__u)&&(c.__e==o&&(o=te(c)),et(c,c));return o}function Qe(e,t,n,o){var r,s;if(typeof e.type=="function"){for(r=e.__k,s=0;r&&s<r.length;s++)r[s]&&(r[s].__=e,t=Qe(r[s],t,n,o));return t}e.__e!=t&&(o&&(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 Bt(e,t,n,o){var r,s,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(o>(u?1:0)){for(r=n-1,s=n+1;r>=0||s<t.length;)if((l=t[i=r>=0?r--:s++])!=null&&!(2&l.__u)&&c==l.key&&d==l.type)return i}return-1}function Ke(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||Lt.test(t)?n:n+"px"}function le(e,t,n,o,r){var s,i;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof o=="string"&&(e.style.cssText=o=""),o)for(t in o)n&&t in n||Ke(e.style,t,"");if(n)for(t in n)o&&n[t]==o[t]||Ke(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")s=t!=(t=t.replace(Ve,"$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+s]=n,n?o?n.u=o.u:(n.u=xe,e.addEventListener(t,s?Me:Se,s)):e.removeEventListener(t,s?Me:Se,s);else{if(r=="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 Be(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t.t==null)t.t=xe++;else if(t.t<n.u)return;return n(P.event?P.event(t):t)}}}function Ie(e,t,n,o,r,s,i,c,d,l){var u,a,_,p,b,C,g,y,w,A,O,V,F,j,J,K,k,N=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(d=!!(32&n.__u),s=[c=t.__e=n.__e]),(u=P.__b)&&u(t);e:if(typeof N=="function")try{if(y=t.props,w="prototype"in N&&N.prototype.render,A=(u=N.contextType)&&o[u.__c],O=u?A?A.props.value:u.__:o,n.__c?g=(a=t.__c=n.__c).__=a.__E:(w?t.__c=a=new N(y,O):(t.__c=a=new ne(y,O),a.constructor=N,a.render=jt),A&&A.sub(a),a.state||(a.state={}),a.__n=o,_=a.__d=!0,a.__h=[],a._sb=[]),w&&a.__s==null&&(a.__s=a.state),w&&N.getDerivedStateFromProps!=null&&(a.__s==a.state&&(a.__s=Q({},a.__s)),Q(a.__s,N.getDerivedStateFromProps(y,a.__s))),p=a.props,b=a.state,a.__v=t,_)w&&N.getDerivedStateFromProps==null&&a.componentWillMount!=null&&a.componentWillMount(),w&&a.componentDidMount!=null&&a.__h.push(a.componentDidMount);else{if(w&&N.getDerivedStateFromProps==null&&y!==p&&a.componentWillReceiveProps!=null&&a.componentWillReceiveProps(y,O),t.__v==n.__v||!a.__e&&a.shouldComponentUpdate!=null&&a.shouldComponentUpdate(y,a.__s,O)===!1){for(t.__v!=n.__v&&(a.props=y,a.state=a.__s,a.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(v){v&&(v.__=t)}),V=0;V<a._sb.length;V++)a.__h.push(a._sb[V]);a._sb=[],a.__h.length&&i.push(a);break e}a.componentWillUpdate!=null&&a.componentWillUpdate(y,a.__s,O),w&&a.componentDidUpdate!=null&&a.__h.push(function(){a.componentDidUpdate(p,b,C)})}if(a.context=O,a.props=y,a.__P=e,a.__e=!1,F=P.__r,j=0,w){for(a.state=a.__s,a.__d=!1,F&&F(t),u=a.render(a.props,a.state,a.context),J=0;J<a._sb.length;J++)a.__h.push(a._sb[J]);a._sb=[]}else do a.__d=!1,F&&F(t),u=a.render(a.props,a.state,a.context),a.state=a.__s;while(a.__d&&++j<25);a.state=a.__s,a.getChildContext!=null&&(o=Q(Q({},o),a.getChildContext())),w&&!_&&a.getSnapshotBeforeUpdate!=null&&(C=a.getSnapshotBeforeUpdate(p,b)),K=u,u!=null&&u.type===fe&&u.key==null&&(K=Ye(u.props.children)),c=Xe(e,_e(K)?K:[K],t,n,o,r,s,i,c,d,l),a.base=t.__e,t.__u&=-161,a.__h.length&&i.push(a),g&&(a.__E=a.__=null)}catch(v){if(t.__v=null,d||s!=null)if(v.then){for(t.__u|=d?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;s[s.indexOf(c)]=null,t.__e=c}else{for(k=s.length;k--;)Ee(s[k]);Te(t)}else t.__e=n.__e,t.__k=n.__k,v.then||Te(t);P.__e(v,t,n)}else s==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):c=t.__e=zt(n.__e,t,n,o,r,s,i,d,l);return(u=P.diffed)&&u(t),128&t.__u?void 0:c}function Te(e){e&&e.__c&&(e.__c.__e=!0),e&&e.__k&&e.__k.forEach(Te)}function Ze(e,t,n){for(var o=0;o<n.length;o++)Ae(n[o],n[++o],n[++o]);P.__c&&P.__c(t,e),e.some(function(r){try{e=r.__h,r.__h=[],e.some(function(s){s.call(r)})}catch(s){P.__e(s,r.__v)}})}function Ye(e){return typeof e!="object"||e==null||e.__b&&e.__b>0?e:_e(e)?e.map(Ye):Q({},e)}function zt(e,t,n,o,r,s,i,c,d){var l,u,a,_,p,b,C,g=n.props||oe,y=t.props,w=t.type;if(w=="svg"?r="http://www.w3.org/2000/svg":w=="math"?r="http://www.w3.org/1998/Math/MathML":r||(r="http://www.w3.org/1999/xhtml"),s!=null){for(l=0;l<s.length;l++)if((p=s[l])&&"setAttribute"in p==!!w&&(w?p.localName==w:p.nodeType==3)){e=p,s[l]=null;break}}if(e==null){if(w==null)return document.createTextNode(y);e=document.createElementNS(r,w,y.is&&y),c&&(P.__m&&P.__m(t,s),c=!1),s=null}if(w==null)g===y||c&&e.data==y||(e.data=y);else{if(s=s&&de.call(e.childNodes),!c&&s!=null)for(g={},l=0;l<e.attributes.length;l++)g[(p=e.attributes[l]).name]=p.value;for(l in g)if(p=g[l],l!="children"){if(l=="dangerouslySetInnerHTML")a=p;else if(!(l in y)){if(l=="value"&&"defaultValue"in y||l=="checked"&&"defaultChecked"in y)continue;le(e,l,null,p,r)}}for(l in y)p=y[l],l=="children"?_=p:l=="dangerouslySetInnerHTML"?u=p:l=="value"?b=p:l=="checked"?C=p:c&&typeof p!="function"||g[l]===p||le(e,l,p,g[l],r);if(u)c||a&&(u.__html==a.__html||u.__html==e.innerHTML)||(e.innerHTML=u.__html),t.__k=[];else if(a&&(e.innerHTML=""),Xe(t.type=="template"?e.content:e,_e(_)?_:[_],t,n,o,w=="foreignObject"?"http://www.w3.org/1999/xhtml":r,s,i,s?s[0]:n.__k&&te(n,0),c,d),s!=null)for(l=s.length;l--;)Ee(s[l]);c||(l="value",w=="progress"&&b==null?e.removeAttribute("value"):b!=null&&(b!==e[l]||w=="progress"&&!b||w=="option"&&b!=g[l])&&le(e,l,b,g[l],r),l="checked",C!=null&&C!=e[l]&&le(e,l,C,g[l],r))}return e}function Ae(e,t,n){try{if(typeof e=="function"){var o=typeof e.__u=="function";o&&e.__u(),o&&t==null||(e.__u=e(t))}else e.current=t}catch(r){P.__e(r,n)}}function et(e,t,n){var o,r;if(P.unmount&&P.unmount(e),(o=e.ref)&&(o.current&&o.current!=e.__e||Ae(o,null,t)),(o=e.__c)!=null){if(o.componentWillUnmount)try{o.componentWillUnmount()}catch(s){P.__e(s,t)}o.base=o.__P=null}if(o=e.__k)for(r=0;r<o.length;r++)o[r]&&et(o[r],t,n||typeof e.type!="function");n||Ee(e.__e),e.__c=e.__=e.__e=void 0}function jt(e,t,n){return this.constructor(e,n)}function he(e,t,n){var o,r,s,i;t==document&&(t=document.documentElement),P.__&&P.__(e,t),r=(o=typeof n=="function")?null:n&&n.__k||t.__k,s=[],i=[],Ie(t,e=(!o&&n||t).__k=pe(fe,null,[e]),r||oe,oe,t.namespaceURI,!o&&n?[n]:r?null:t.firstChild?de.call(t.childNodes):null,s,!o&&n?n:r?r.__e:t.firstChild,o,i),Ze(s,e,i)}de=qe.slice,P={__e:function(e,t,n,o){for(var r,s,i;t=t.__;)if((r=t.__c)&&!r.__)try{if((s=r.constructor)&&s.getDerivedStateFromError!=null&&(r.setState(s.getDerivedStateFromError(e)),i=r.__d),r.componentDidCatch!=null&&(r.componentDidCatch(e,o||{}),i=r.__d),i)return r.__E=r}catch(c){e=c}throw e}},ze=0,Ut=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=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),Le(this))},ne.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Le(this))},ne.prototype.render=fe,Y=[],je=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Je=function(e,t){return e.__v.__b-t.__v.__b},ue.__r=0,Ve=/(PointerCapture)$|Capture$/i,xe=0,Se=Be(!1),Me=Be(!0),Wt=0;var nt=function(e,t,n,o){var r;t[0]=0;for(var s=1;s<t.length;s++){var i=t[s++],c=t[s]?(t[0]|=i?1:2,n[t[s++]]):t[++s];i===3?o[0]=c:i===4?o[1]=Object.assign(o[1]||{},c):i===5?(o[1]=o[1]||{})[t[++s]]=c:i===6?o[1][t[++s]]+=c+"":i?(r=e.apply(c,nt(e,c,n,["",null])),o.push(r),c[0]?t[0]|=2:(t[s-2]=0,t[s]=r)):o.push(c)}return o},tt=new Map;function ot(e){var t=tt.get(this);return t||(t=new Map,tt.set(this,t)),(t=nt(this,t.get(e)||(t.set(e,t=function(n){for(var o,r,s=1,i="",c="",d=[0],l=function(_){s===1&&(_||(i=i.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?d.push(0,_,i):s===3&&(_||i)?(d.push(3,_,i),s=2):s===2&&i==="..."&&_?d.push(4,_,0):s===2&&i&&!_?d.push(5,0,!0,i):s>=5&&((i||!_&&s===5)&&(d.push(s,0,i,r),s=6),_&&(d.push(s,_,0,r),s=6)),i=""},u=0;u<n.length;u++){u&&(s===1&&l(),l(u));for(var a=0;a<n[u].length;a++)o=n[u][a],s===1?o==="<"?(l(),d=[d],s=3):i+=o:s===4?i==="--"&&o===">"?(s=1,i=""):i=o+i[0]:c?o===c?c="":i+=o:o==='"'||o==="'"?c=o:o===">"?(l(),s=1):s&&(o==="="?(s=5,r=i,i=""):o==="/"&&(s<5||n[u][a+1]===">")?(l(),s===3&&(d=d[0]),s=d,(d=d[0]).push(2,0,s),s=0):o===" "||o===" "||o===`
2
- `||o==="\r"?(l(),s=2):i+=o),s===3&&i==="!--"&&(s=4,d=d[0])}return l(),d}(e)),t),arguments,[])).length>1?t:t[0]}var m=ot.bind(pe);var se,U,Re,st,re=0,_t=[],W=P,rt=W.__b,at=W.__r,it=W.diffed,lt=W.__c,ct=W.unmount,ut=W.__;function Pe(e,t){W.__h&&W.__h(U,e,re||t),re=0;var n=U.__H||(U.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function T(e){return re=1,Jt(ft,e)}function Jt(e,t,n){var o=Pe(se++,2);if(o.t=e,!o.__c&&(o.__=[n?n(t):ft(void 0,t),function(c){var d=o.__N?o.__N[0]:o.__[0],l=o.t(d,c);d!==l&&(o.__N=[l,o.__[1]],o.__c.setState({}))}],o.__c=U,!U.__f)){var r=function(c,d,l){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(_){return!!_.__c});if(u.every(function(_){return!_.__N}))return!s||s.call(this,c,d,l);var a=o.__c.props!==c;return u.forEach(function(_){if(_.__N){var p=_.__[0];_.__=_.__N,_.__N=void 0,p!==_.__[0]&&(a=!0)}}),s&&s.call(this,c,d,l)||a};U.__f=!0;var s=U.shouldComponentUpdate,i=U.componentWillUpdate;U.componentWillUpdate=function(c,d,l){if(this.__e){var u=s;s=void 0,r(c,d,l),s=u}i&&i.call(this,c,d,l)},U.shouldComponentUpdate=r}return o.__N||o.__}function L(e,t){var n=Pe(se++,3);!W.__s&&pt(n.__H,t)&&(n.__=e,n.u=t,U.__H.__h.push(n))}function G(e){return re=5,ae(function(){return{current:e}},[])}function ae(e,t){var n=Pe(se++,7);return pt(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function z(e,t){return re=8,ae(function(){return e},t)}function Vt(){for(var e;e=_t.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(me),e.__H.__h.forEach(De),e.__H.__h=[]}catch(t){e.__H.__h=[],W.__e(t,e.__v)}}W.__b=function(e){U=null,rt&&rt(e)},W.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),ut&&ut(e,t)},W.__r=function(e){at&&at(e),se=0;var t=(U=e.__c).__H;t&&(Re===U?(t.__h=[],U.__h=[],t.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.forEach(me),t.__h.forEach(De),t.__h=[],se=0)),Re=U},W.diffed=function(e){it&&it(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(_t.push(t)!==1&&st===W.requestAnimationFrame||((st=W.requestAnimationFrame)||qt)(Vt)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),Re=U=null},W.__c=function(e,t){t.some(function(n){try{n.__h.forEach(me),n.__h=n.__h.filter(function(o){return!o.__||De(o)})}catch(o){t.some(function(r){r.__h&&(r.__h=[])}),t=[],W.__e(o,n.__v)}}),lt&&lt(e,t)},W.unmount=function(e){ct&&ct(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach(function(o){try{me(o)}catch(r){t=r}}),n.__H=void 0,t&&W.__e(t,n.__v))};var dt=typeof requestAnimationFrame=="function";function qt(e){var t,n=function(){clearTimeout(o),dt&&cancelAnimationFrame(t),setTimeout(e)},o=setTimeout(n,35);dt&&(t=requestAnimationFrame(n))}function me(e){var t=U,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),U=t}function De(e){var t=U;e.__c=e.__(),U=t}function pt(e,t){return!e||e.length!==t.length||t.some(function(n,o){return n!==e[o]})}function ft(e,t){return typeof t=="function"?t(e):t}function Gt(e){return e.replace(/_([a-z])/g,(t,n)=>n.toUpperCase())}function He(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function ge(e){return Array.isArray(e)?e.map(ge):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[Gt(t),ge(n)])):e}function ye(e){return Array.isArray(e)?e.map(ye):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[He(t),ye(n)])):e}function ve(){return"msg-"+Date.now()+"-"+Math.random().toString(36).substr(2,9)}function B(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function ht(e){if(!e)return"";try{let t=new Date(e),o=new Date-t,r=Math.floor(o/6e4),s=Math.floor(o/36e5),i=Math.floor(o/864e5);return r<1?"Just now":r<60?`${r}m ago`:s<24?`${s}h ago`:i<7?`${i}d ago`:t.toLocaleDateString()}catch{return""}}function mt(e,t=null){if(t)return t(e);let n=B(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 gt(e=""){let t=n=>e?`${n}_${e}`:n;return{get(n){try{return localStorage.getItem(t(n))}catch{return null}},set(n,o){try{let r=t(n);o===null?localStorage.removeItem(r):localStorage.setItem(r,o)}catch{}}}}function yt(e="csrftoken"){let t=document.cookie.split(";");for(let o of t){let[r,s]=o.trim().split("=");if(r===e)return decodeURIComponent(s)}let n=document.querySelector('meta[name="csrf-token"]');return n?n.getAttribute("content"):null}function we(e){if(e===0)return"0 B";let t=1024,n=["B","KB","MB","GB"],o=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,o)).toFixed(1))+" "+n[o]}function $e(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 vt({config:e,debugMode:t,isExpanded:n,isSpeaking:o,messagesCount:r,isLoading:s,currentAgent:i,onClose:c,onToggleExpand:d,onToggleDebug:l,onToggleTTS:u,onClear:a,onToggleSidebar:_}){let{title:p,primaryColor:b,embedded:C,showConversationSidebar:g,showClearButton:y,showDebugButton:w,enableDebugMode:A,showTTSButton:O,showExpandButton:V,enableTTS:F,elevenLabsApiKey:j,ttsProxyUrl:J}=e,K=j||J;return m`
3
- <div class="cw-header" style=${{backgroundColor:b}}>
1
+ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var Ht=Object.prototype.hasOwnProperty;var Nt=(e,t)=>{for(var n in t)Ce(e,n,{get:t[n],enumerable:!0})},Ot=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Pt(t))!Ht.call(e,r)&&r!==n&&Ce(e,r,{get:()=>t[r],enumerable:!(o=Dt(t,r))||o.enumerable});return e};var Ft=e=>Ot(Ce({},"__esModule",{value:!0}),e);var _n={};Nt(_n,{ChatWidget:()=>ke,default:()=>dn});var de,P,ze,Ut,Y,We,je,Je,Ve,xe,Se,Me,Wt,oe={},qe=[],Lt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,_e=Array.isArray;function Q(e,t){for(var n in t)e[n]=t[n];return e}function Ee(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function pe(e,t,n){var o,r,s,i={};for(s in t)s=="key"?o=t[s]:s=="ref"?r=t[s]:i[s]=t[s];if(arguments.length>2&&(i.children=arguments.length>3?de.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(s in e.defaultProps)i[s]===void 0&&(i[s]=e.defaultProps[s]);return ce(e,i,o,r,null)}function ce(e,t,n,o,r){var s={type:e,props:t,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:r??++ze,__i:-1,__u:0};return r==null&&P.vnode!=null&&P.vnode(s),s}function fe(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 Ge(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 Ge(e)}}function Le(e){(!e.__d&&(e.__d=!0)&&Y.push(e)&&!ue.__r++||We!=P.debounceRendering)&&((We=P.debounceRendering)||je)(ue)}function ue(){for(var e,t,n,o,r,s,i,c=1;Y.length;)Y.length>c&&Y.sort(Je),e=Y.shift(),c=Y.length,e.__d&&(n=void 0,o=void 0,r=(o=(t=e).__v).__e,s=[],i=[],t.__P&&((n=Q({},o)).__v=o.__v+1,P.vnode&&P.vnode(n),Ie(t.__P,n,o,t.__n,t.__P.namespaceURI,32&o.__u?[r]:null,s,r??te(o),!!(32&o.__u),i),n.__v=o.__v,n.__.__k[n.__i]=n,Ze(s,n,i),o.__e=o.__=null,n.__e!=r&&Ge(n)));ue.__r=0}function Xe(e,t,n,o,r,s,i,c,d,l,u){var a,p,f,$,k,g,y,w=o&&o.__k||qe,A=t.length;for(d=Kt(n,t,w,d,A),a=0;a<A;a++)(f=n.__k[a])!=null&&(p=f.__i==-1?oe:w[f.__i]||oe,f.__i=a,g=Ie(e,f,p,r,s,i,c,d,l,u),$=f.__e,f.ref&&p.ref!=f.ref&&(p.ref&&Ae(p.ref,null,f),u.push(f.ref,f.__c||$,f)),k==null&&$!=null&&(k=$),(y=!!(4&f.__u))||p.__k===f.__k?d=Qe(f,d,e,y):typeof f.type=="function"&&g!==void 0?d=g:$&&(d=$.nextSibling),f.__u&=-7);return n.__e=k,d}function Kt(e,t,n,o,r){var s,i,c,d,l,u=n.length,a=u,p=0;for(e.__k=new Array(r),s=0;s<r;s++)(i=t[s])!=null&&typeof i!="boolean"&&typeof i!="function"?(typeof i=="string"||typeof i=="number"||typeof i=="bigint"||i.constructor==String?i=e.__k[s]=ce(null,i,null,null,null):_e(i)?i=e.__k[s]=ce(fe,{children:i},null,null,null):i.constructor===void 0&&i.__b>0?i=e.__k[s]=ce(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):e.__k[s]=i,d=s+p,i.__=e,i.__b=e.__b+1,c=null,(l=i.__i=Bt(i,n,d,a))!=-1&&(a--,(c=n[l])&&(c.__u|=2)),c==null||c.__v==null?(l==-1&&(r>u?p--:r<u&&p++),typeof i.type!="function"&&(i.__u|=4)):l!=d&&(l==d-1?p--:l==d+1?p++:(l>d?p--:p++,i.__u|=4))):e.__k[s]=null;if(a)for(s=0;s<u;s++)(c=n[s])!=null&&!(2&c.__u)&&(c.__e==o&&(o=te(c)),et(c,c));return o}function Qe(e,t,n,o){var r,s;if(typeof e.type=="function"){for(r=e.__k,s=0;r&&s<r.length;s++)r[s]&&(r[s].__=e,t=Qe(r[s],t,n,o));return t}e.__e!=t&&(o&&(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 Bt(e,t,n,o){var r,s,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(o>(u?1:0)){for(r=n-1,s=n+1;r>=0||s<t.length;)if((l=t[i=r>=0?r--:s++])!=null&&!(2&l.__u)&&c==l.key&&d==l.type)return i}return-1}function Ke(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||Lt.test(t)?n:n+"px"}function le(e,t,n,o,r){var s,i;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof o=="string"&&(e.style.cssText=o=""),o)for(t in o)n&&t in n||Ke(e.style,t,"");if(n)for(t in n)o&&n[t]==o[t]||Ke(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")s=t!=(t=t.replace(Ve,"$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+s]=n,n?o?n.u=o.u:(n.u=xe,e.addEventListener(t,s?Me:Se,s)):e.removeEventListener(t,s?Me:Se,s);else{if(r=="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 Be(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t.t==null)t.t=xe++;else if(t.t<n.u)return;return n(P.event?P.event(t):t)}}}function Ie(e,t,n,o,r,s,i,c,d,l){var u,a,p,f,$,k,g,y,w,A,O,V,F,j,J,K,b,N=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(d=!!(32&n.__u),s=[c=t.__e=n.__e]),(u=P.__b)&&u(t);e:if(typeof N=="function")try{if(y=t.props,w="prototype"in N&&N.prototype.render,A=(u=N.contextType)&&o[u.__c],O=u?A?A.props.value:u.__:o,n.__c?g=(a=t.__c=n.__c).__=a.__E:(w?t.__c=a=new N(y,O):(t.__c=a=new ne(y,O),a.constructor=N,a.render=jt),A&&A.sub(a),a.state||(a.state={}),a.__n=o,p=a.__d=!0,a.__h=[],a._sb=[]),w&&a.__s==null&&(a.__s=a.state),w&&N.getDerivedStateFromProps!=null&&(a.__s==a.state&&(a.__s=Q({},a.__s)),Q(a.__s,N.getDerivedStateFromProps(y,a.__s))),f=a.props,$=a.state,a.__v=t,p)w&&N.getDerivedStateFromProps==null&&a.componentWillMount!=null&&a.componentWillMount(),w&&a.componentDidMount!=null&&a.__h.push(a.componentDidMount);else{if(w&&N.getDerivedStateFromProps==null&&y!==f&&a.componentWillReceiveProps!=null&&a.componentWillReceiveProps(y,O),t.__v==n.__v||!a.__e&&a.shouldComponentUpdate!=null&&a.shouldComponentUpdate(y,a.__s,O)===!1){for(t.__v!=n.__v&&(a.props=y,a.state=a.__s,a.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(v){v&&(v.__=t)}),V=0;V<a._sb.length;V++)a.__h.push(a._sb[V]);a._sb=[],a.__h.length&&i.push(a);break e}a.componentWillUpdate!=null&&a.componentWillUpdate(y,a.__s,O),w&&a.componentDidUpdate!=null&&a.__h.push(function(){a.componentDidUpdate(f,$,k)})}if(a.context=O,a.props=y,a.__P=e,a.__e=!1,F=P.__r,j=0,w){for(a.state=a.__s,a.__d=!1,F&&F(t),u=a.render(a.props,a.state,a.context),J=0;J<a._sb.length;J++)a.__h.push(a._sb[J]);a._sb=[]}else do a.__d=!1,F&&F(t),u=a.render(a.props,a.state,a.context),a.state=a.__s;while(a.__d&&++j<25);a.state=a.__s,a.getChildContext!=null&&(o=Q(Q({},o),a.getChildContext())),w&&!p&&a.getSnapshotBeforeUpdate!=null&&(k=a.getSnapshotBeforeUpdate(f,$)),K=u,u!=null&&u.type===fe&&u.key==null&&(K=Ye(u.props.children)),c=Xe(e,_e(K)?K:[K],t,n,o,r,s,i,c,d,l),a.base=t.__e,t.__u&=-161,a.__h.length&&i.push(a),g&&(a.__E=a.__=null)}catch(v){if(t.__v=null,d||s!=null)if(v.then){for(t.__u|=d?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;s[s.indexOf(c)]=null,t.__e=c}else{for(b=s.length;b--;)Ee(s[b]);Te(t)}else t.__e=n.__e,t.__k=n.__k,v.then||Te(t);P.__e(v,t,n)}else s==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):c=t.__e=zt(n.__e,t,n,o,r,s,i,d,l);return(u=P.diffed)&&u(t),128&t.__u?void 0:c}function Te(e){e&&e.__c&&(e.__c.__e=!0),e&&e.__k&&e.__k.forEach(Te)}function Ze(e,t,n){for(var o=0;o<n.length;o++)Ae(n[o],n[++o],n[++o]);P.__c&&P.__c(t,e),e.some(function(r){try{e=r.__h,r.__h=[],e.some(function(s){s.call(r)})}catch(s){P.__e(s,r.__v)}})}function Ye(e){return typeof e!="object"||e==null||e.__b&&e.__b>0?e:_e(e)?e.map(Ye):Q({},e)}function zt(e,t,n,o,r,s,i,c,d){var l,u,a,p,f,$,k,g=n.props||oe,y=t.props,w=t.type;if(w=="svg"?r="http://www.w3.org/2000/svg":w=="math"?r="http://www.w3.org/1998/Math/MathML":r||(r="http://www.w3.org/1999/xhtml"),s!=null){for(l=0;l<s.length;l++)if((f=s[l])&&"setAttribute"in f==!!w&&(w?f.localName==w:f.nodeType==3)){e=f,s[l]=null;break}}if(e==null){if(w==null)return document.createTextNode(y);e=document.createElementNS(r,w,y.is&&y),c&&(P.__m&&P.__m(t,s),c=!1),s=null}if(w==null)g===y||c&&e.data==y||(e.data=y);else{if(s=s&&de.call(e.childNodes),!c&&s!=null)for(g={},l=0;l<e.attributes.length;l++)g[(f=e.attributes[l]).name]=f.value;for(l in g)if(f=g[l],l!="children"){if(l=="dangerouslySetInnerHTML")a=f;else if(!(l in y)){if(l=="value"&&"defaultValue"in y||l=="checked"&&"defaultChecked"in y)continue;le(e,l,null,f,r)}}for(l in y)f=y[l],l=="children"?p=f:l=="dangerouslySetInnerHTML"?u=f:l=="value"?$=f:l=="checked"?k=f:c&&typeof f!="function"||g[l]===f||le(e,l,f,g[l],r);if(u)c||a&&(u.__html==a.__html||u.__html==e.innerHTML)||(e.innerHTML=u.__html),t.__k=[];else if(a&&(e.innerHTML=""),Xe(t.type=="template"?e.content:e,_e(p)?p:[p],t,n,o,w=="foreignObject"?"http://www.w3.org/1999/xhtml":r,s,i,s?s[0]:n.__k&&te(n,0),c,d),s!=null)for(l=s.length;l--;)Ee(s[l]);c||(l="value",w=="progress"&&$==null?e.removeAttribute("value"):$!=null&&($!==e[l]||w=="progress"&&!$||w=="option"&&$!=g[l])&&le(e,l,$,g[l],r),l="checked",k!=null&&k!=e[l]&&le(e,l,k,g[l],r))}return e}function Ae(e,t,n){try{if(typeof e=="function"){var o=typeof e.__u=="function";o&&e.__u(),o&&t==null||(e.__u=e(t))}else e.current=t}catch(r){P.__e(r,n)}}function et(e,t,n){var o,r;if(P.unmount&&P.unmount(e),(o=e.ref)&&(o.current&&o.current!=e.__e||Ae(o,null,t)),(o=e.__c)!=null){if(o.componentWillUnmount)try{o.componentWillUnmount()}catch(s){P.__e(s,t)}o.base=o.__P=null}if(o=e.__k)for(r=0;r<o.length;r++)o[r]&&et(o[r],t,n||typeof e.type!="function");n||Ee(e.__e),e.__c=e.__=e.__e=void 0}function jt(e,t,n){return this.constructor(e,n)}function he(e,t,n){var o,r,s,i;t==document&&(t=document.documentElement),P.__&&P.__(e,t),r=(o=typeof n=="function")?null:n&&n.__k||t.__k,s=[],i=[],Ie(t,e=(!o&&n||t).__k=pe(fe,null,[e]),r||oe,oe,t.namespaceURI,!o&&n?[n]:r?null:t.firstChild?de.call(t.childNodes):null,s,!o&&n?n:r?r.__e:t.firstChild,o,i),Ze(s,e,i)}de=qe.slice,P={__e:function(e,t,n,o){for(var r,s,i;t=t.__;)if((r=t.__c)&&!r.__)try{if((s=r.constructor)&&s.getDerivedStateFromError!=null&&(r.setState(s.getDerivedStateFromError(e)),i=r.__d),r.componentDidCatch!=null&&(r.componentDidCatch(e,o||{}),i=r.__d),i)return r.__E=r}catch(c){e=c}throw e}},ze=0,Ut=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=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),Le(this))},ne.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Le(this))},ne.prototype.render=fe,Y=[],je=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Je=function(e,t){return e.__v.__b-t.__v.__b},ue.__r=0,Ve=/(PointerCapture)$|Capture$/i,xe=0,Se=Be(!1),Me=Be(!0),Wt=0;var nt=function(e,t,n,o){var r;t[0]=0;for(var s=1;s<t.length;s++){var i=t[s++],c=t[s]?(t[0]|=i?1:2,n[t[s++]]):t[++s];i===3?o[0]=c:i===4?o[1]=Object.assign(o[1]||{},c):i===5?(o[1]=o[1]||{})[t[++s]]=c:i===6?o[1][t[++s]]+=c+"":i?(r=e.apply(c,nt(e,c,n,["",null])),o.push(r),c[0]?t[0]|=2:(t[s-2]=0,t[s]=r)):o.push(c)}return o},tt=new Map;function ot(e){var t=tt.get(this);return t||(t=new Map,tt.set(this,t)),(t=nt(this,t.get(e)||(t.set(e,t=function(n){for(var o,r,s=1,i="",c="",d=[0],l=function(p){s===1&&(p||(i=i.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?d.push(0,p,i):s===3&&(p||i)?(d.push(3,p,i),s=2):s===2&&i==="..."&&p?d.push(4,p,0):s===2&&i&&!p?d.push(5,0,!0,i):s>=5&&((i||!p&&s===5)&&(d.push(s,0,i,r),s=6),p&&(d.push(s,p,0,r),s=6)),i=""},u=0;u<n.length;u++){u&&(s===1&&l(),l(u));for(var a=0;a<n[u].length;a++)o=n[u][a],s===1?o==="<"?(l(),d=[d],s=3):i+=o:s===4?i==="--"&&o===">"?(s=1,i=""):i=o+i[0]:c?o===c?c="":i+=o:o==='"'||o==="'"?c=o:o===">"?(l(),s=1):s&&(o==="="?(s=5,r=i,i=""):o==="/"&&(s<5||n[u][a+1]===">")?(l(),s===3&&(d=d[0]),s=d,(d=d[0]).push(2,0,s),s=0):o===" "||o===" "||o===`
2
+ `||o==="\r"?(l(),s=2):i+=o),s===3&&i==="!--"&&(s=4,d=d[0])}return l(),d}(e)),t),arguments,[])).length>1?t:t[0]}var m=ot.bind(pe);var se,U,Re,st,re=0,_t=[],W=P,rt=W.__b,at=W.__r,it=W.diffed,lt=W.__c,ct=W.unmount,ut=W.__;function Pe(e,t){W.__h&&W.__h(U,e,re||t),re=0;var n=U.__H||(U.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function M(e){return re=1,Jt(ft,e)}function Jt(e,t,n){var o=Pe(se++,2);if(o.t=e,!o.__c&&(o.__=[n?n(t):ft(void 0,t),function(c){var d=o.__N?o.__N[0]:o.__[0],l=o.t(d,c);d!==l&&(o.__N=[l,o.__[1]],o.__c.setState({}))}],o.__c=U,!U.__f)){var r=function(c,d,l){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(p){return!!p.__c});if(u.every(function(p){return!p.__N}))return!s||s.call(this,c,d,l);var a=o.__c.props!==c;return u.forEach(function(p){if(p.__N){var f=p.__[0];p.__=p.__N,p.__N=void 0,f!==p.__[0]&&(a=!0)}}),s&&s.call(this,c,d,l)||a};U.__f=!0;var s=U.shouldComponentUpdate,i=U.componentWillUpdate;U.componentWillUpdate=function(c,d,l){if(this.__e){var u=s;s=void 0,r(c,d,l),s=u}i&&i.call(this,c,d,l)},U.shouldComponentUpdate=r}return o.__N||o.__}function L(e,t){var n=Pe(se++,3);!W.__s&&pt(n.__H,t)&&(n.__=e,n.u=t,U.__H.__h.push(n))}function G(e){return re=5,ae(function(){return{current:e}},[])}function ae(e,t){var n=Pe(se++,7);return pt(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function z(e,t){return re=8,ae(function(){return e},t)}function Vt(){for(var e;e=_t.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(me),e.__H.__h.forEach(De),e.__H.__h=[]}catch(t){e.__H.__h=[],W.__e(t,e.__v)}}W.__b=function(e){U=null,rt&&rt(e)},W.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),ut&&ut(e,t)},W.__r=function(e){at&&at(e),se=0;var t=(U=e.__c).__H;t&&(Re===U?(t.__h=[],U.__h=[],t.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.forEach(me),t.__h.forEach(De),t.__h=[],se=0)),Re=U},W.diffed=function(e){it&&it(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(_t.push(t)!==1&&st===W.requestAnimationFrame||((st=W.requestAnimationFrame)||qt)(Vt)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),Re=U=null},W.__c=function(e,t){t.some(function(n){try{n.__h.forEach(me),n.__h=n.__h.filter(function(o){return!o.__||De(o)})}catch(o){t.some(function(r){r.__h&&(r.__h=[])}),t=[],W.__e(o,n.__v)}}),lt&&lt(e,t)},W.unmount=function(e){ct&&ct(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach(function(o){try{me(o)}catch(r){t=r}}),n.__H=void 0,t&&W.__e(t,n.__v))};var dt=typeof requestAnimationFrame=="function";function qt(e){var t,n=function(){clearTimeout(o),dt&&cancelAnimationFrame(t),setTimeout(e)},o=setTimeout(n,35);dt&&(t=requestAnimationFrame(n))}function me(e){var t=U,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),U=t}function De(e){var t=U;e.__c=e.__(),U=t}function pt(e,t){return!e||e.length!==t.length||t.some(function(n,o){return n!==e[o]})}function ft(e,t){return typeof t=="function"?t(e):t}function Gt(e){return e.replace(/_([a-z])/g,(t,n)=>n.toUpperCase())}function He(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function ge(e){return Array.isArray(e)?e.map(ge):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[Gt(t),ge(n)])):e}function ye(e){return Array.isArray(e)?e.map(ye):e!==null&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[He(t),ye(n)])):e}function ve(){return"msg-"+Date.now()+"-"+Math.random().toString(36).substr(2,9)}function B(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function ht(e){if(!e)return"";try{let t=new Date(e),o=new Date-t,r=Math.floor(o/6e4),s=Math.floor(o/36e5),i=Math.floor(o/864e5);return r<1?"Just now":r<60?`${r}m ago`:s<24?`${s}h ago`:i<7?`${i}d ago`:t.toLocaleDateString()}catch{return""}}function mt(e,t=null){if(t)return t(e);let n=B(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 gt(e=""){let t=n=>e?`${n}_${e}`:n;return{get(n){try{return localStorage.getItem(t(n))}catch{return null}},set(n,o){try{let r=t(n);o===null?localStorage.removeItem(r):localStorage.setItem(r,o)}catch{}}}}function yt(e="csrftoken"){let t=document.cookie.split(";");for(let o of t){let[r,s]=o.trim().split("=");if(r===e)return decodeURIComponent(s)}let n=document.querySelector('meta[name="csrf-token"]');return n?n.getAttribute("content"):null}function we(e){if(e===0)return"0 B";let t=1024,n=["B","KB","MB","GB"],o=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,o)).toFixed(1))+" "+n[o]}function $e(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 vt({config:e,debugMode:t,isExpanded:n,isSpeaking:o,messagesCount:r,isLoading:s,currentAgent:i,onClose:c,onToggleExpand:d,onToggleDebug:l,onToggleTTS:u,onClear:a,onToggleSidebar:p}){let{title:f,primaryColor:$,embedded:k,showConversationSidebar:g,showClearButton:y,showDebugButton:w,enableDebugMode:A,showTTSButton:O,showExpandButton:V,enableTTS:F,elevenLabsApiKey:j,ttsProxyUrl:J}=e,K=j||J;return m`
3
+ <div class="cw-header" style=${{backgroundColor:$}}>
4
4
  ${g&&m`
5
5
  <button
6
6
  class="cw-header-btn cw-hamburger"
7
- onClick=${_}
7
+ onClick=${p}
8
8
  title="Conversations"
9
9
  >
10
10
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="16" height="16">
@@ -16,7 +16,7 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
16
16
  `}
17
17
 
18
18
  <div class="cw-title-container">
19
- <span class="cw-title">${B(p)}</span>
19
+ <span class="cw-title">${B(f)}</span>
20
20
  ${i&&m`
21
21
  <span class="cw-current-agent" title="Currently active agent">
22
22
  <span class="cw-agent-indicator">🤖</span>
@@ -51,7 +51,7 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
51
51
  >${F?"\u{1F50A}":"\u{1F507}"}</button>
52
52
  `}
53
53
 
54
- ${V&&!C&&m`
54
+ ${V&&!k&&m`
55
55
  <button
56
56
  class="cw-header-btn"
57
57
  onClick=${d}
@@ -59,7 +59,7 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
59
59
  >${n?"\u2296":"\u2295"}</button>
60
60
  `}
61
61
 
62
- ${!C&&m`
62
+ ${!k&&m`
63
63
  <button
64
64
  class="cw-header-btn"
65
65
  onClick=${c}
@@ -105,7 +105,7 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
105
105
  </svg>
106
106
  </button>
107
107
  </div>
108
- `}function Xt({initialContent:e,onSave:t,onCancel:n}){let[o,r]=T(e),s=G(null);return L(()=>{s.current&&(s.current.focus(),s.current.setSelectionRange(o.length,o.length),s.current.style.height="auto",s.current.style.height=s.current.scrollHeight+"px")},[]),m`
108
+ `}function Xt({initialContent:e,onSave:t,onCancel:n}){let[o,r]=M(e),s=G(null);return L(()=>{s.current&&(s.current.focus(),s.current.setSelectionRange(o.length,o.length),s.current.style.height="auto",s.current.style.height=s.current.scrollHeight+"px")},[]),m`
109
109
  <div class="cw-inline-edit">
110
110
  <textarea
111
111
  ref=${s}
@@ -129,7 +129,7 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
129
129
  >Save & Send</button>
130
130
  </div>
131
131
  </div>
132
- `}function $t({msg:e,debugMode:t,markdownParser:n,onEdit:o,onRetry:r,isLoading:s,messageIndex:i}){let[c,d]=T(!1),[l,u]=T(!1),[a,_]=T(!1),p=e.role==="user",b=e.role==="system",C=e.type==="tool_call",g=e.type==="tool_result",y=e.type==="error",w=e.type==="sub_agent_start",A=e.type==="sub_agent_end",O=e.type==="agent_context";if(b&&!t)return null;if(w||A||O)return m`
132
+ `}function $t({msg:e,debugMode:t,markdownParser:n,onEdit:o,onRetry:r,isLoading:s,messageIndex:i}){let[c,d]=M(!1),[l,u]=M(!1),[a,p]=M(!1),f=e.role==="user",$=e.role==="system",k=e.type==="tool_call",g=e.type==="tool_result",y=e.type==="error",w=e.type==="sub_agent_start",A=e.type==="sub_agent_end",O=e.type==="agent_context";if($&&!t)return null;if(w||A||O)return m`
133
133
  <div class="cw-agent-context ${w?"cw-agent-delegating":""} ${A?"cw-agent-returned":""}" style="position: relative;">
134
134
  <span class="cw-agent-context-icon">${w?"\u{1F517}":A?"\u2713":"\u{1F916}"}</span>
135
135
  <span class="cw-agent-context-text">${e.content}</span>
@@ -138,68 +138,70 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
138
138
  `}
139
139
  ${t&&m`<${Ne} msg=${e} show=${l} onToggle=${()=>u(!l)} />`}
140
140
  </div>
141
- `;if(C||g){let $=e.metadata?.arguments||e.metadata?.result,I=M=>{if(typeof M=="string")try{return JSON.stringify(JSON.parse(M),null,2)}catch{return M}return JSON.stringify(M,null,2)};return m`
141
+ `;if(k||g){let C=e.metadata?.arguments||e.metadata?.result,x=_=>{if(typeof _=="string")try{return JSON.stringify(JSON.parse(_),null,2)}catch{return _}return JSON.stringify(_,null,2)};return m`
142
142
  <div class="cw-tool-message ${g?"cw-tool-result":"cw-tool-call"}" style="position: relative;">
143
- <span class="cw-tool-label" onClick=${()=>$&&d(!c)}>
143
+ <span class="cw-tool-label" onClick=${()=>C&&d(!c)}>
144
144
  ${e.content}
145
- ${$&&m`<span class="cw-tool-expand">${c?"\u25BC":"\u25B6"}</span>`}
145
+ ${C&&m`<span class="cw-tool-expand">${c?"\u25BC":"\u25B6"}</span>`}
146
146
  </span>
147
- ${c&&$&&m`
148
- <pre class="cw-tool-details">${B(I(C?e.metadata.arguments:e.metadata.result))}</pre>
147
+ ${c&&C&&m`
148
+ <pre class="cw-tool-details">${B(x(k?e.metadata.arguments:e.metadata.result))}</pre>
149
149
  `}
150
150
  ${t&&m`<${Ne} msg=${e} show=${l} onToggle=${()=>u(!l)} />`}
151
151
  </div>
152
- `}let V=["cw-message",p&&"cw-message-user",y&&"cw-message-error"].filter(Boolean).join(" "),F=`cw-message-row ${p?"cw-message-row-user":""}`,j=e.role==="assistant"?mt(e.content,n):B(e.content),J=e.files&&e.files.length>0,K=()=>J?m`
152
+ `}let V=["cw-message",f&&"cw-message-user",y&&"cw-message-error"].filter(Boolean).join(" "),F=`cw-message-row ${f?"cw-message-row-user":""}`,j=e.role==="assistant"?mt(e.content,n):B(e.content),J=e.files&&e.files.length>0,K=()=>J?m`
153
153
  <div class="cw-message-attachments">
154
- ${e.files.map($=>$.type&&$.type.startsWith("image/")?m`
155
- <a class="cw-attachment-thumbnail" href=${$.url} target="_blank" title=${$.name}>
156
- <img src=${$.url} alt=${$.name} />
154
+ ${e.files.map(C=>C.type&&C.type.startsWith("image/")?m`
155
+ <a class="cw-attachment-thumbnail" href=${C.url} target="_blank" title=${C.name}>
156
+ <img src=${C.url} alt=${C.name} />
157
157
  </a>
158
158
  `:m`
159
- <a class="cw-attachment-file" href=${$.url} target="_blank" title=${$.name}>
160
- <span class="cw-attachment-icon">${$e($.type)}</span>
159
+ <a class="cw-attachment-file" href=${C.url} target="_blank" title=${C.name}>
160
+ <span class="cw-attachment-icon">${$e(C.type)}</span>
161
161
  <span class="cw-attachment-info">
162
- <span class="cw-attachment-name">${$.name}</span>
163
- <span class="cw-attachment-size">${we($.size)}</span>
162
+ <span class="cw-attachment-name">${C.name}</span>
163
+ <span class="cw-attachment-size">${we(C.size)}</span>
164
164
  </span>
165
165
  </a>
166
166
  `)}
167
167
  </div>
168
- `:null,k=$=>{_(!1),o&&o(i,$)},N=()=>{r&&r(i)};if(p&&a)return m`
168
+ `:null,b=C=>{p(!1),o&&o(i,C)},N=()=>{r&&r(i)};if(f&&a)return m`
169
169
  <div class=${F} style="position: relative;">
170
170
  ${K()}
171
171
  <${Xt}
172
172
  initialContent=${e.content}
173
- onSave=${k}
174
- onCancel=${()=>_(!1)}
173
+ onSave=${b}
174
+ onCancel=${()=>p(!1)}
175
175
  />
176
176
  </div>
177
- `;let v=p&&o&&r,H=e.role==="assistant"&&r&&!s;return m`
178
- <div class="${F} ${v||H?"cw-message-row-with-actions":""}" style="position: relative;">
177
+ `;let v=f&&o&&r,H=e.role==="assistant"&&r&&!s;return m`
178
+ <div class="${F} ${v||H?"cw-message-row-with-actions":""}">
179
179
  ${K()}
180
- <div class=${V} dangerouslySetInnerHTML=${{__html:j}} />
181
- ${v&&m`
182
- <${wt}
183
- onEdit=${()=>_(!0)}
184
- onRetry=${N}
185
- isLoading=${s}
186
- position="left"
187
- showEdit=${!0}
188
- />
189
- `}
190
- ${H&&m`
191
- <${wt}
192
- onRetry=${N}
193
- isLoading=${s}
194
- position="right"
195
- showEdit=${!1}
196
- />
197
- `}
180
+ <div class="cw-message-wrapper" style="position: relative; display: inline-block;">
181
+ <div class=${V} dangerouslySetInnerHTML=${{__html:j}} />
182
+ ${v&&m`
183
+ <${wt}
184
+ onEdit=${()=>p(!0)}
185
+ onRetry=${N}
186
+ isLoading=${s}
187
+ position="left"
188
+ showEdit=${!0}
189
+ />
190
+ `}
191
+ ${H&&m`
192
+ <${wt}
193
+ onRetry=${N}
194
+ isLoading=${s}
195
+ position="right"
196
+ showEdit=${!1}
197
+ />
198
+ `}
199
+ </div>
198
200
  ${t&&m`<${Ne} msg=${e} show=${l} onToggle=${()=>u(!l)} />`}
199
201
  </div>
200
- `}function bt({messages:e,isLoading:t,hasMoreMessages:n,loadingMoreMessages:o,onLoadMore:r,onEditMessage:s,onRetryMessage:i,debugMode:c,markdownParser:d,emptyStateTitle:l,emptyStateMessage:u}){let a=G(null),_=G(!0),p=C=>{let g=C.target,y=g.scrollHeight-g.scrollTop-g.clientHeight<100;if(_.current=y,g.scrollTop<50&&n&&!o){let w=g.scrollHeight;r().then(()=>{let A=g.scrollHeight;g.scrollTop=A-w+g.scrollTop})}};L(()=>{let C=a.current;C&&_.current&&requestAnimationFrame(()=>{C.scrollTop=C.scrollHeight})},[e,t]),L(()=>{let C=a.current;C&&e.length<=2&&(_.current=!0,requestAnimationFrame(()=>{C.scrollTop=C.scrollHeight}))},[e.length]);let b=e.length===0;return m`
201
- <div class="cw-messages" ref=${a} onScroll=${p}>
202
- ${b&&m`
202
+ `}function bt({messages:e,isLoading:t,hasMoreMessages:n,loadingMoreMessages:o,onLoadMore:r,onEditMessage:s,onRetryMessage:i,debugMode:c,markdownParser:d,emptyStateTitle:l,emptyStateMessage:u}){let a=G(null),p=G(!0),f=k=>{let g=k.target,y=g.scrollHeight-g.scrollTop-g.clientHeight<100;if(p.current=y,g.scrollTop<50&&n&&!o){let w=g.scrollHeight;r().then(()=>{let A=g.scrollHeight;g.scrollTop=A-w+g.scrollTop})}};L(()=>{let k=a.current;k&&p.current&&requestAnimationFrame(()=>{k.scrollTop=k.scrollHeight})},[e,t]),L(()=>{let k=a.current;k&&e.length<=2&&(p.current=!0,requestAnimationFrame(()=>{k.scrollTop=k.scrollHeight}))},[e.length]);let $=e.length===0;return m`
203
+ <div class="cw-messages" ref=${a} onScroll=${f}>
204
+ ${$&&m`
203
205
  <div class="cw-empty-state">
204
206
  <svg class="cw-empty-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
205
207
  <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>
@@ -209,16 +211,16 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
209
211
  </div>
210
212
  `}
211
213
 
212
- ${!b&&n&&m`
214
+ ${!$&&n&&m`
213
215
  <div class="cw-load-more" onClick=${r}>
214
216
  ${o?m`<span class="cw-spinner"></span><span>Loading...</span>`:m`<span>↑ Scroll up or click to load older messages</span>`}
215
217
  </div>
216
218
  `}
217
219
 
218
- ${e.map((C,g)=>m`
220
+ ${e.map((k,g)=>m`
219
221
  <${$t}
220
- key=${C.id}
221
- msg=${C}
222
+ key=${k.id}
223
+ msg=${k}
222
224
  messageIndex=${g}
223
225
  debugMode=${c}
224
226
  markdownParser=${d}
@@ -237,7 +239,7 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
237
239
  </div>
238
240
  `}
239
241
  </div>
240
- `}var Oe=typeof window<"u"?window.SpeechRecognition||window.webkitSpeechRecognition:null;function kt({onSend:e,onCancel:t,isLoading:n,placeholder:o,primaryColor:r,enableVoice:s=!0,enableFiles:i=!0}){let[c,d]=T(""),[l,u]=T([]),[a,_]=T(!1),[p,b]=T(!1),[C]=T(()=>!!Oe),g=G(null),y=G(null),w=G(null),A=G(!1);L(()=>{!n&&g.current&&g.current.focus()},[n]),L(()=>{g.current&&(g.current.style.height="auto",g.current.style.height=Math.min(g.current.scrollHeight,150)+"px")},[c]),L(()=>()=>{A.current=!1,w.current&&w.current.abort()},[]);let O=f=>{f.preventDefault(),(c.trim()||l.length>0)&&!n&&(e(c,l),d(""),u([]),g.current&&(g.current.style.height="auto"),y.current&&(y.current.value=""))},V=f=>{let x=Array.from(f.target.files||[]);x.length>0&&u(S=>[...S,...x])},F=f=>{u(x=>x.filter((S,h)=>h!==f))},j=f=>{f.preventDefault(),y.current&&!n&&y.current.click()},J=f=>{f.key==="Enter"&&!f.shiftKey&&(f.preventDefault(),O(f))},K=f=>{n&&t&&(f.preventDefault(),t())},k=()=>{if(!Oe||n)return;A.current=!0;let f=new Oe;f.continuous=!0,f.interimResults=!0,f.lang=navigator.language||"en-US";let x=c,S="";f.onstart=()=>{b(!0)},f.onresult=h=>{S="";for(let R=h.resultIndex;R<h.results.length;R++){let q=h.results[R][0].transcript;h.results[R].isFinal?x+=(x?" ":"")+q:S+=q}d(x+(S?" "+S:""))},f.onerror=h=>{if(h.error==="no-speech"||h.error==="aborted"){console.log("[ChatWidget] Speech recognition:",h.error,"- continuing...");return}console.warn("[ChatWidget] Speech recognition error:",h.error),A.current=!1,b(!1),d(x||c)},f.onend=()=>{if(A.current){console.log("[ChatWidget] Recognition paused, restarting...");try{f.start();return}catch(h){console.warn("[ChatWidget] Could not restart recognition:",h)}}b(!1),x&&d(x),w.current=null},w.current=f,f.start()},N=()=>{A.current=!1,w.current&&w.current.stop()},v=f=>{f.preventDefault(),p?N():k()},E=m`
242
+ `}var Oe=typeof window<"u"?window.SpeechRecognition||window.webkitSpeechRecognition:null;function kt({onSend:e,onCancel:t,isLoading:n,placeholder:o,primaryColor:r,enableVoice:s=!0,enableFiles:i=!0}){let[c,d]=M(""),[l,u]=M([]),[a,p]=M(!1),[f,$]=M(!1),[k]=M(()=>!!Oe),g=G(null),y=G(null),w=G(null),A=G(!1);L(()=>{!n&&g.current&&g.current.focus()},[n]),L(()=>{g.current&&(g.current.style.height="auto",g.current.style.height=Math.min(g.current.scrollHeight,150)+"px")},[c]),L(()=>()=>{A.current=!1,w.current&&w.current.abort()},[]);let O=_=>{_.preventDefault(),(c.trim()||l.length>0)&&!n&&(e(c,l),d(""),u([]),g.current&&(g.current.style.height="auto"),y.current&&(y.current.value=""))},V=_=>{let T=Array.from(_.target.files||[]);T.length>0&&u(S=>[...S,...T])},F=_=>{u(T=>T.filter((S,h)=>h!==_))},j=_=>{_.preventDefault(),y.current&&!n&&y.current.click()},J=_=>{_.key==="Enter"&&!_.shiftKey&&(_.preventDefault(),O(_))},K=_=>{n&&t&&(_.preventDefault(),t())},b=()=>{if(!Oe||n)return;A.current=!0;let _=new Oe;_.continuous=!0,_.interimResults=!0,_.lang=navigator.language||"en-US";let T=c,S="";_.onstart=()=>{$(!0)},_.onresult=h=>{S="";for(let R=h.resultIndex;R<h.results.length;R++){let q=h.results[R][0].transcript;h.results[R].isFinal?T+=(T?" ":"")+q:S+=q}d(T+(S?" "+S:""))},_.onerror=h=>{if(h.error==="no-speech"||h.error==="aborted"){console.log("[ChatWidget] Speech recognition:",h.error,"- continuing...");return}console.warn("[ChatWidget] Speech recognition error:",h.error),A.current=!1,$(!1),d(T||c)},_.onend=()=>{if(A.current){console.log("[ChatWidget] Recognition paused, restarting...");try{_.start();return}catch(h){console.warn("[ChatWidget] Could not restart recognition:",h)}}$(!1),T&&d(T),w.current=null},w.current=_,_.start()},N=()=>{A.current=!1,w.current&&w.current.stop()},v=_=>{_.preventDefault(),f?N():b()},I=m`
241
243
  <svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor">
242
244
  <rect x="2" y="2" width="10" height="10" rx="1" />
243
245
  </svg>
@@ -248,11 +250,11 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
248
250
  <line x1="12" y1="19" x2="12" y2="23"></line>
249
251
  <line x1="8" y1="23" x2="16" y2="23"></line>
250
252
  </svg>
251
- `,$=m`
253
+ `,E=m`
252
254
  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
253
255
  <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>
254
256
  </svg>
255
- `,I=s&&C,M=i;return m`
257
+ `,C=s&&k,x=i;return m`
256
258
  <form class="cw-input-form" onSubmit=${O}>
257
259
  <input
258
260
  type="file"
@@ -263,15 +265,15 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
263
265
  />
264
266
  ${l.length>0&&m`
265
267
  <div class="cw-file-chips">
266
- ${l.map((f,x)=>m`
267
- <div class="cw-file-chip" key=${x}>
268
- <span class="cw-file-chip-icon">${$e(f.type)}</span>
269
- <span class="cw-file-chip-name" title=${f.name}>${f.name.length>20?f.name.substring(0,17)+"...":f.name}</span>
270
- <span class="cw-file-chip-size">(${we(f.size)})</span>
268
+ ${l.map((_,T)=>m`
269
+ <div class="cw-file-chip" key=${T}>
270
+ <span class="cw-file-chip-icon">${$e(_.type)}</span>
271
+ <span class="cw-file-chip-name" title=${_.name}>${_.name.length>20?_.name.substring(0,17)+"...":_.name}</span>
272
+ <span class="cw-file-chip-size">(${we(_.size)})</span>
271
273
  <button
272
274
  type="button"
273
275
  class="cw-file-chip-remove"
274
- onClick=${()=>F(x)}
276
+ onClick=${()=>F(T)}
275
277
  title="Remove file"
276
278
  >×</button>
277
279
  </div>
@@ -283,12 +285,12 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
283
285
  class="cw-input"
284
286
  placeholder=${B(o)}
285
287
  value=${c}
286
- onInput=${f=>d(f.target.value)}
288
+ onInput=${_=>d(_.target.value)}
287
289
  onKeyDown=${J}
288
290
  disabled=${n}
289
291
  rows="1"
290
292
  />
291
- ${M&&m`
293
+ ${x&&m`
292
294
  <button
293
295
  type="button"
294
296
  class="cw-attach-btn"
@@ -296,16 +298,16 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
296
298
  disabled=${n}
297
299
  title="Attach files"
298
300
  >
299
- ${$}
301
+ ${E}
300
302
  </button>
301
303
  `}
302
- ${I&&m`
304
+ ${C&&m`
303
305
  <button
304
306
  type="button"
305
- class=${`cw-voice-btn ${p?"cw-voice-btn-recording":""}`}
307
+ class=${`cw-voice-btn ${f?"cw-voice-btn-recording":""}`}
306
308
  onClick=${v}
307
309
  disabled=${n}
308
- title=${p?"Stop recording":"Voice input"}
310
+ title=${f?"Stop recording":"Voice input"}
309
311
  >
310
312
  ${H}
311
313
  </button>
@@ -315,11 +317,11 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
315
317
  class=${`cw-send-btn ${n?"cw-send-btn-loading":""} ${n&&a?"cw-send-btn-stop":""}`}
316
318
  style=${{backgroundColor:n&&a?"#dc2626":r}}
317
319
  onClick=${K}
318
- onMouseEnter=${()=>_(!0)}
319
- onMouseLeave=${()=>_(!1)}
320
+ onMouseEnter=${()=>p(!0)}
321
+ onMouseLeave=${()=>p(!1)}
320
322
  title=${n?"Stop":"Send"}
321
323
  >
322
- ${n?a?E:m`<span class="cw-spinner"></span>`:"\u27A4"}
324
+ ${n?a?I:m`<span class="cw-spinner"></span>`:"\u27A4"}
323
325
  </button>
324
326
  </form>
325
327
  `}function Ct({isOpen:e,conversations:t,conversationsLoading:n,currentConversationId:o,onClose:r,onNewConversation:s,onSwitchConversation:i}){return m`
@@ -361,7 +363,7 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
361
363
  class="cw-sidebar-overlay ${e?"cw-sidebar-overlay-visible":""}"
362
364
  onClick=${r}
363
365
  />
364
- `}function St({availableModels:e,selectedModel:t,onSelectModel:n,disabled:o}){let[r,s]=T(!1);if(!e||e.length===0)return null;let c=e.find(u=>u.id===t)?.name||"Select Model",d=()=>{o||s(!r)},l=u=>{n(u),s(!1)};return m`
366
+ `}function St({availableModels:e,selectedModel:t,onSelectModel:n,disabled:o}){let[r,s]=M(!1);if(!e||e.length===0)return null;let c=e.find(u=>u.id===t)?.name||"Select Model",d=()=>{o||s(!r)},l=u=>{n(u),s(!1)};return m`
365
367
  <div class="cw-model-selector">
366
368
  <button
367
369
  class="cw-model-btn"
@@ -392,7 +394,7 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
392
394
  </div>
393
395
  `}
394
396
  </div>
395
- `}function Mt(e,t,n){let[o,r]=T([]),[s,i]=T(!1),[c,d]=T(null),[l,u]=T(()=>n?.get(e.conversationIdKey)||null),[a,_]=T(!1),[p,b]=T(!1),[C,g]=T(0),y=G(null),w=G(null);L(()=>{l&&n?.set(e.conversationIdKey,l)},[l,e.conversationIdKey,n]);let A=z(async(v,E,H)=>{y.current&&y.current.close();let $=e.apiPaths.runEvents.replace("{runId}",v),I=`${e.backendUrl}${$}`;E&&(I+=`?anonymous_token=${encodeURIComponent(E)}`);let M=new EventSource(I);y.current=M;let f="";M.addEventListener("assistant.message",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("assistant.message",h.payload);let R=h.payload.content;R&&(f+=R,r(q=>{let X=q[q.length-1];return X?.role==="assistant"&&X.id.startsWith("assistant-stream-")?[...q.slice(0,-1),{...X,content:f}]:[...q,{id:"assistant-stream-"+Date.now(),role:"assistant",content:f,timestamp:new Date,type:"message"}]}))}catch(h){console.error("[ChatWidget] Parse error:",h)}}),M.addEventListener("tool.call",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("tool.call",h.payload),r(R=>[...R,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${h.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:h.payload.name,arguments:h.payload.arguments,toolCallId:h.payload.id}}])}catch(h){console.error("[ChatWidget] Parse error:",h)}}),M.addEventListener("tool.result",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("tool.result",h.payload);let R=h.payload.result,q=R?.error;r(X=>[...X,{id:"tool-result-"+Date.now(),role:"system",content:q?`\u274C ${R.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:h.payload.name,result:R,toolCallId:h.payload.tool_call_id}}])}catch(h){console.error("[ChatWidget] Parse error:",h)}}),M.addEventListener("custom",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("custom",h.payload),h.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(h.payload),h.payload?.type==="agent_context"&&r(R=>[...R,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${h.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:h.payload.agent_key,agentName:h.payload.agent_name,action:h.payload.action}}])}catch(h){console.error("[ChatWidget] Parse error:",h)}}),M.addEventListener("sub_agent.start",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("sub_agent.start",h.payload),r(R=>[...R,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${h.payload.agent_name||h.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:h.payload.sub_agent_key,agentName:h.payload.agent_name,invocationMode:h.payload.invocation_mode}}])}catch(h){console.error("[ChatWidget] Parse error:",h)}}),M.addEventListener("sub_agent.end",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("sub_agent.end",h.payload),r(R=>[...R,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${h.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:h.payload.sub_agent_key,agentName:h.payload.agent_name}}])}catch(h){console.error("[ChatWidget] Parse error:",h)}});let x=S=>{try{let h=JSON.parse(S.data);if(e.onEvent&&e.onEvent(h.type,h.payload),h.type==="run.failed"){let R=h.payload.error||"Agent run failed";d(R),r(q=>[...q,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${R}`,timestamp:new Date,type:"error"}])}}catch(h){console.error("[ChatWidget] Parse error:",h)}i(!1),M.close(),y.current=null,f&&H&&H(f)};M.addEventListener("run.succeeded",x),M.addEventListener("run.failed",x),M.addEventListener("run.cancelled",x),M.addEventListener("run.timed_out",x),M.onerror=()=>{i(!1),M.close(),y.current=null}},[e]),O=z(async(v,E={},H={})=>{if(!v.trim()||s)return;let $=[],I={};typeof E=="function"?I={onAssistantMessage:E}:Array.isArray(E)?($=E,I=H):I=E||{};let{model:M,onAssistantMessage:f}=I;i(!0),d(null);let x={id:ve(),role:"user",content:v.trim(),timestamp:new Date,type:"message",files:$.length>0?$.map(S=>({name:S.name,size:S.size,type:S.type})):void 0};r(S=>[...S,x]);try{let S=await t.getOrCreateSession(),h;if($.length>0){let ee=e.apiCaseStyle!=="camel",Ue=ie=>ee?He(ie):ie,Z=new FormData;Z.append(Ue("agentKey"),e.agentKey),l&&Z.append(Ue("conversationId"),l),Z.append("messages",JSON.stringify([{role:"user",content:v.trim()}])),Z.append("metadata",JSON.stringify(ee?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),M&&Z.append("model",M),$.forEach(ie=>{Z.append("files",ie)}),h=t.getFetchOptions({method:"POST",body:Z},S)}else{let ee=t.transformRequest({agentKey:e.agentKey,conversationId:l,messages:[{role:"user",content:v.trim()}],metadata:{...e.metadata,journeyType:e.defaultJourneyType},...M&&{model:M}});h=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(ee)},S)}let R=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,h);if(!R.ok){let ee=await R.json().catch(()=>({}));throw new Error(ee.error||`HTTP ${R.status}`)}let q=await R.json(),X=t.transformResponse(q);w.current=X.id,!l&&X.conversationId&&u(X.conversationId),await A(X.id,S,f)}catch(S){d(S.message||"Failed to send message"),i(!1)}finally{w.current=null}},[e,t,l,s,A]),V=z(async()=>{let v=w.current;if(!(!v||!s))try{let E=e.apiPaths.cancelRun?e.apiPaths.cancelRun.replace("{runId}",v):`${e.apiPaths.runs}${v}/cancel/`;(await fetch(`${e.backendUrl}${E}`,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"}}))).ok&&(y.current&&(y.current.close(),y.current=null),i(!1),w.current=null,r($=>[...$,{id:"cancelled-"+Date.now(),role:"system",content:"\u23F9 Run cancelled",timestamp:new Date,type:"cancelled"}]))}catch(E){console.error("[ChatWidget] Failed to cancel run:",E)}},[e,t,s]),F=z(()=>{r([]),u(null),d(null),_(!1),g(0),n?.set(e.conversationIdKey,null)},[e.conversationIdKey,n]),j=v=>{let E={id:ve(),role:v.role,timestamp:v.timestamp?new Date(v.timestamp):new Date};if(v.role==="tool")return{...E,role:"system",content:"\u2713 Done",type:"tool_result",metadata:{result:v.content,toolCallId:v.toolCallId}};if(v.role==="assistant"&&v.toolCalls&&v.toolCalls.length>0)return v.toolCalls.map($=>({id:ve(),role:"assistant",content:`\u{1F527} ${$.function?.name||$.name||"tool"}`,timestamp:E.timestamp,type:"tool_call",metadata:{toolName:$.function?.name||$.name,arguments:$.function?.arguments||$.arguments,toolCallId:$.id}}));let H=typeof v.content=="string"?v.content:JSON.stringify(v.content);return v.role==="assistant"&&!H?.trim()?null:{...E,content:H,type:"message"}},J=z(async v=>{i(!0),r([]),u(v);try{let E=await t.getOrCreateSession(),$=`${e.backendUrl}${e.apiPaths.conversations}${v}/?limit=10&offset=0`,I=await fetch($,t.getFetchOptions({method:"GET"},E));if(I.ok){let M=await I.json(),f=t.transformResponse(M);f.messages&&r(f.messages.flatMap(j).filter(Boolean)),_(f.hasMore||!1),g(f.messages?.length||0)}else I.status===404&&(u(null),n?.set(e.conversationIdKey,null))}catch(E){console.error("[ChatWidget] Failed to load conversation:",E)}finally{i(!1)}},[e,t,n]),K=z(async()=>{if(!(!l||p||!a)){b(!0);try{let v=await t.getOrCreateSession(),H=`${e.backendUrl}${e.apiPaths.conversations}${l}/?limit=10&offset=${C}`,$=await fetch(H,t.getFetchOptions({method:"GET"},v));if($.ok){let I=await $.json(),M=t.transformResponse(I);if(M.messages?.length>0){let f=M.messages.flatMap(j).filter(Boolean);r(x=>[...f,...x]),g(x=>x+M.messages.length),_(M.hasMore||!1)}else _(!1)}}catch(v){console.error("[ChatWidget] Failed to load more messages:",v)}finally{b(!1)}}},[e,t,l,C,p,a]),k=z(async(v,E,H={})=>{if(s)return;let $=o[v];if(!$||$.role!=="user")return;let I=o.slice(0,v);r(I),await O(E,H)},[o,s,O]),N=z(async(v,E={})=>{if(s)return;let H=o[v];if(!H)return;let $=v,I=H;if(H.role==="assistant"){for(let f=v-1;f>=0;f--)if(o[f].role==="user"){$=f,I=o[f];break}if(I.role!=="user")return}else if(H.role!=="user")return;let M=o.slice(0,$);r(M),await O(I.content,E)},[o,s,O]);return L(()=>()=>{y.current&&y.current.close()},[]),{messages:o,isLoading:s,error:c,conversationId:l,hasMoreMessages:a,loadingMoreMessages:p,sendMessage:O,cancelRun:V,clearMessages:F,loadConversation:J,loadMoreMessages:K,setConversationId:u,editMessage:k,retryMessage:N}}function Tt(e,t,n){let[o,r]=T([]),[s,i]=T(null),[c,d]=T(null),[l,u]=T(!1);L(()=>{(async()=>{if(e.showModelSelector){u(!0);try{let b=await fetch(`${e.backendUrl}${e.apiPaths.models}`,t.getFetchOptions({method:"GET"}));if(b.ok){let C=await b.json(),g=C.models||[];r(g),d(C.default);let y=n?.get(e.modelKey);y&&g.some(w=>w.id===y)?i(y):i(C.default)}}catch(b){console.warn("[ChatWidget] Failed to load models:",b)}finally{u(!1)}}})()},[e.backendUrl,e.apiPaths.models,e.showModelSelector,e.modelKey,t,n]);let a=z(p=>{i(p),n?.set(e.modelKey,p)},[e.modelKey,n]),_=z(()=>o.find(p=>p.id===s)||null,[o,s]);return{availableModels:o,selectedModel:s,defaultModel:c,isLoading:l,selectModel:a,getSelectedModelInfo:_}}function xt(e,t,n){let o=l=>!l||typeof l!="object"||e.apiCaseStyle==="camel"?l:ye(l),r=l=>!l||typeof l!="object"||e.apiCaseStyle==="snake"?l:ge(l),s=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",i=(l=null)=>{let u=s(),a={},_=l||e.authToken||t().authToken;if(u==="token"&&_){let p=e.authHeader||"Authorization",b=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";a[p]=b?`${b} ${_}`:_}else if(u==="jwt"&&_){let p=e.authHeader||"Authorization",b=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";a[p]=b?`${b} ${_}`:_}else if(u==="anonymous"&&_){let p=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";a[p]=_}if(u==="session"){let p=yt(e.csrfCookieName);p&&(a["X-CSRFToken"]=p)}return a};return{getAuthStrategy:s,getAuthHeaders:i,getFetchOptions:(l={},u=null)=>{let a=s(),_={...l};return _.headers={..._.headers,...i(u)},a==="session"&&(_.credentials="include"),_},getOrCreateSession:async()=>{let l=s(),u=t();if(l!=="anonymous")return e.authToken||u.authToken;if(u.authToken)return u.authToken;let a=e.anonymousTokenKey||e.sessionTokenKey,_=u.storage?.get(a);if(_)return n(p=>({...p,authToken:_})),_;try{let p=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,b=await fetch(`${e.backendUrl}${p}`,{method:"POST",headers:{"Content-Type":"application/json"}});if(b.ok){let C=await b.json();return n(g=>({...g,authToken:C.token})),u.storage?.set(a,C.token),C.token}}catch(p){console.warn("[ChatWidget] Failed to create session:",p)}return null},transformRequest:o,transformResponse:r}}function Et({config:e,onStateChange:t,markdownParser:n,apiRef:o}){let[r,s]=T(e.embedded||e.forceOpen===!0),[i,c]=T(!1),[d,l]=T(!1),[u,a]=T(!1),[_,p]=T([]),[b,C]=T(!1),[g,y]=T(e.enableTTS),[w,A]=T(!1),[O,V]=T(null);L(()=>{e.forceOpen!==void 0&&s(e.forceOpen)},[e.forceOpen]);let F=ae(()=>gt(e.containerId),[e.containerId]),[j,J]=T(e.authToken||null),K=ae(()=>xt(e,()=>({authToken:j,storage:F}),S=>{let h=S({authToken:j,storage:F});h.authToken!==j&&J(h.authToken)}),[e,j,F]),k=Mt(e,K,F),N=Tt(e,K,F);L(()=>{for(let f=k.messages.length-1;f>=0;f--){let x=k.messages[f];if(x.type==="sub_agent_start"){V({key:x.metadata?.subAgentKey,name:x.metadata?.agentName});return}if(x.type==="sub_agent_end"){V(null);return}}},[k.messages]),L(()=>{let f=F.get(e.conversationIdKey);f&&k.loadConversation(f)},[]),L(()=>{t&&t({isOpen:r,isExpanded:i,debugMode:d,messages:k.messages,conversationId:k.conversationId,isLoading:k.isLoading,error:k.error})},[r,i,d,k.messages,k.conversationId,k.isLoading,k.error]);let v=z(async()=>{if(e.showConversationSidebar){C(!0);try{let f=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(e.agentKey)}`,x=await fetch(f,K.getFetchOptions({method:"GET"}));if(x.ok){let S=await x.json();p(S.results||S)}}catch(f){console.error("[ChatWidget] Failed to load conversations:",f),p([])}finally{C(!1)}}},[e,K]),E=z(()=>{let f=!u;a(f),f&&v()},[u,v]),H=z(f=>{f!==k.conversationId&&k.loadConversation(f),a(!1)},[k]),$=z(()=>{k.clearMessages(),a(!1)},[k]),I=z(f=>{k.sendMessage(f,{model:N.selectedModel,onAssistantMessage:x=>{}})},[k,g,N.selectedModel]);if(L(()=>{o&&(o.current={open:()=>s(!0),close:()=>s(!1),send:f=>I(f),clearMessages:()=>k.clearMessages(),toggleTTS:()=>y(f=>!f),stopSpeech:()=>A(!1),setAuth:f=>{f.token!==void 0&&J(f.token)},clearAuth:()=>J(null)})},[k,o,I]),!e.embedded&&!r)return m`
397
+ `}function Mt(e,t,n){let[o,r]=M([]),[s,i]=M(!1),[c,d]=M(null),[l,u]=M(()=>n?.get(e.conversationIdKey)||null),[a,p]=M(!1),[f,$]=M(!1),[k,g]=M(0),y=G(null),w=G(null);L(()=>{l&&n?.set(e.conversationIdKey,l)},[l,e.conversationIdKey,n]);let A=z(async(v,I,H)=>{y.current&&y.current.close();let E=e.apiPaths.runEvents.replace("{runId}",v),C=`${e.backendUrl}${E}`;I&&(C+=`?anonymous_token=${encodeURIComponent(I)}`);let x=new EventSource(C);y.current=x;let _="";x.addEventListener("assistant.message",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("assistant.message",h.payload);let R=h.payload.content;R&&(_+=R,r(q=>{let X=q[q.length-1];return X?.role==="assistant"&&X.id.startsWith("assistant-stream-")?[...q.slice(0,-1),{...X,content:_}]:[...q,{id:"assistant-stream-"+Date.now(),role:"assistant",content:_,timestamp:new Date,type:"message"}]}))}catch(h){console.error("[ChatWidget] Parse error:",h)}}),x.addEventListener("tool.call",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("tool.call",h.payload),r(R=>[...R,{id:"tool-call-"+Date.now(),role:"assistant",content:`\u{1F527} ${h.payload.name}`,timestamp:new Date,type:"tool_call",metadata:{toolName:h.payload.name,arguments:h.payload.arguments,toolCallId:h.payload.id}}])}catch(h){console.error("[ChatWidget] Parse error:",h)}}),x.addEventListener("tool.result",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("tool.result",h.payload);let R=h.payload.result,q=R?.error;r(X=>[...X,{id:"tool-result-"+Date.now(),role:"system",content:q?`\u274C ${R.error}`:"\u2713 Done",timestamp:new Date,type:"tool_result",metadata:{toolName:h.payload.name,result:R,toolCallId:h.payload.tool_call_id}}])}catch(h){console.error("[ChatWidget] Parse error:",h)}}),x.addEventListener("custom",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("custom",h.payload),h.payload?.type==="ui_control"&&e.onUIControl&&e.onUIControl(h.payload),h.payload?.type==="agent_context"&&r(R=>[...R,{id:"agent-context-"+Date.now(),role:"system",content:`\u{1F517} ${h.payload.agent_name||"Sub-agent"} is now handling this request`,timestamp:new Date,type:"agent_context",metadata:{agentKey:h.payload.agent_key,agentName:h.payload.agent_name,action:h.payload.action}}])}catch(h){console.error("[ChatWidget] Parse error:",h)}}),x.addEventListener("sub_agent.start",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("sub_agent.start",h.payload),r(R=>[...R,{id:"sub-agent-start-"+Date.now(),role:"system",content:`\u{1F517} Delegating to ${h.payload.agent_name||h.payload.sub_agent_key||"sub-agent"}...`,timestamp:new Date,type:"sub_agent_start",metadata:{subAgentKey:h.payload.sub_agent_key,agentName:h.payload.agent_name,invocationMode:h.payload.invocation_mode}}])}catch(h){console.error("[ChatWidget] Parse error:",h)}}),x.addEventListener("sub_agent.end",S=>{try{let h=JSON.parse(S.data);e.onEvent&&e.onEvent("sub_agent.end",h.payload),r(R=>[...R,{id:"sub-agent-end-"+Date.now(),role:"system",content:`\u2713 ${h.payload.agent_name||"Sub-agent"} completed`,timestamp:new Date,type:"sub_agent_end",metadata:{subAgentKey:h.payload.sub_agent_key,agentName:h.payload.agent_name}}])}catch(h){console.error("[ChatWidget] Parse error:",h)}});let T=S=>{try{let h=JSON.parse(S.data);if(e.onEvent&&e.onEvent(h.type,h.payload),h.type==="run.failed"){let R=h.payload.error||"Agent run failed";d(R),r(q=>[...q,{id:"error-"+Date.now(),role:"system",content:`\u274C Error: ${R}`,timestamp:new Date,type:"error"}])}}catch(h){console.error("[ChatWidget] Parse error:",h)}i(!1),x.close(),y.current=null,_&&H&&H(_)};x.addEventListener("run.succeeded",T),x.addEventListener("run.failed",T),x.addEventListener("run.cancelled",T),x.addEventListener("run.timed_out",T),x.onerror=()=>{i(!1),x.close(),y.current=null}},[e]),O=z(async(v,I={},H={})=>{if(!v.trim()||s)return;let E=[],C={};typeof I=="function"?C={onAssistantMessage:I}:Array.isArray(I)?(E=I,C=H):C=I||{};let{model:x,onAssistantMessage:_}=C;i(!0),d(null);let T={id:ve(),role:"user",content:v.trim(),timestamp:new Date,type:"message",files:E.length>0?E.map(S=>({name:S.name,size:S.size,type:S.type})):void 0};r(S=>[...S,T]);try{let S=await t.getOrCreateSession(),h;if(E.length>0){let ee=e.apiCaseStyle!=="camel",Ue=ie=>ee?He(ie):ie,Z=new FormData;Z.append(Ue("agentKey"),e.agentKey),l&&Z.append(Ue("conversationId"),l),Z.append("messages",JSON.stringify([{role:"user",content:v.trim()}])),Z.append("metadata",JSON.stringify(ee?{...e.metadata,journey_type:e.defaultJourneyType}:{...e.metadata,journeyType:e.defaultJourneyType})),x&&Z.append("model",x),E.forEach(ie=>{Z.append("files",ie)}),h=t.getFetchOptions({method:"POST",body:Z},S)}else{let ee=t.transformRequest({agentKey:e.agentKey,conversationId:l,messages:[{role:"user",content:v.trim()}],metadata:{...e.metadata,journeyType:e.defaultJourneyType},...x&&{model:x}});h=t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(ee)},S)}let R=await fetch(`${e.backendUrl}${e.apiPaths.runs}`,h);if(!R.ok){let ee=await R.json().catch(()=>({}));throw new Error(ee.error||`HTTP ${R.status}`)}let q=await R.json(),X=t.transformResponse(q);w.current=X.id,!l&&X.conversationId&&u(X.conversationId),await A(X.id,S,_)}catch(S){d(S.message||"Failed to send message"),i(!1)}finally{w.current=null}},[e,t,l,s,A]),V=z(async()=>{let v=w.current;if(!(!v||!s))try{let I=e.apiPaths.cancelRun?e.apiPaths.cancelRun.replace("{runId}",v):`${e.apiPaths.runs}${v}/cancel/`;(await fetch(`${e.backendUrl}${I}`,t.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"}}))).ok&&(y.current&&(y.current.close(),y.current=null),i(!1),w.current=null,r(E=>[...E,{id:"cancelled-"+Date.now(),role:"system",content:"\u23F9 Run cancelled",timestamp:new Date,type:"cancelled"}]))}catch(I){console.error("[ChatWidget] Failed to cancel run:",I)}},[e,t,s]),F=z(()=>{r([]),u(null),d(null),p(!1),g(0),n?.set(e.conversationIdKey,null)},[e.conversationIdKey,n]),j=v=>{let I={id:ve(),role:v.role,timestamp:v.timestamp?new Date(v.timestamp):new Date};if(v.role==="tool")return{...I,role:"system",content:"\u2713 Done",type:"tool_result",metadata:{result:v.content,toolCallId:v.toolCallId}};if(v.role==="assistant"&&v.toolCalls&&v.toolCalls.length>0)return v.toolCalls.map(E=>({id:ve(),role:"assistant",content:`\u{1F527} ${E.function?.name||E.name||"tool"}`,timestamp:I.timestamp,type:"tool_call",metadata:{toolName:E.function?.name||E.name,arguments:E.function?.arguments||E.arguments,toolCallId:E.id}}));let H=typeof v.content=="string"?v.content:JSON.stringify(v.content);return v.role==="assistant"&&!H?.trim()?null:{...I,content:H,type:"message"}},J=z(async v=>{i(!0),r([]),u(v);try{let I=await t.getOrCreateSession(),E=`${e.backendUrl}${e.apiPaths.conversations}${v}/?limit=10&offset=0`,C=await fetch(E,t.getFetchOptions({method:"GET"},I));if(C.ok){let x=await C.json(),_=t.transformResponse(x);_.messages&&r(_.messages.flatMap(j).filter(Boolean)),p(_.hasMore||!1),g(_.messages?.length||0)}else C.status===404&&(u(null),n?.set(e.conversationIdKey,null))}catch(I){console.error("[ChatWidget] Failed to load conversation:",I)}finally{i(!1)}},[e,t,n]),K=z(async()=>{if(!(!l||f||!a)){$(!0);try{let v=await t.getOrCreateSession(),H=`${e.backendUrl}${e.apiPaths.conversations}${l}/?limit=10&offset=${k}`,E=await fetch(H,t.getFetchOptions({method:"GET"},v));if(E.ok){let C=await E.json(),x=t.transformResponse(C);if(x.messages?.length>0){let _=x.messages.flatMap(j).filter(Boolean);r(T=>[..._,...T]),g(T=>T+x.messages.length),p(x.hasMore||!1)}else p(!1)}}catch(v){console.error("[ChatWidget] Failed to load more messages:",v)}finally{$(!1)}}},[e,t,l,k,f,a]),b=z(async(v,I,H={})=>{if(s)return;let E=o[v];if(!E||E.role!=="user")return;let C=o.slice(0,v);r(C),await O(I,H)},[o,s,O]),N=z(async(v,I={})=>{if(s)return;let H=o[v];if(!H)return;let E=v,C=H;if(H.role==="assistant"){for(let _=v-1;_>=0;_--)if(o[_].role==="user"){E=_,C=o[_];break}if(C.role!=="user")return}else if(H.role!=="user")return;let x=o.slice(0,E);r(x),await O(C.content,I)},[o,s,O]);return L(()=>()=>{y.current&&y.current.close()},[]),{messages:o,isLoading:s,error:c,conversationId:l,hasMoreMessages:a,loadingMoreMessages:f,sendMessage:O,cancelRun:V,clearMessages:F,loadConversation:J,loadMoreMessages:K,setConversationId:u,editMessage:b,retryMessage:N}}function Tt(e,t,n){let[o,r]=M([]),[s,i]=M(null),[c,d]=M(null),[l,u]=M(!1);L(()=>{(async()=>{if(e.showModelSelector){u(!0);try{let $=await fetch(`${e.backendUrl}${e.apiPaths.models}`,t.getFetchOptions({method:"GET"}));if($.ok){let k=await $.json(),g=k.models||[];r(g),d(k.default);let y=n?.get(e.modelKey);y&&g.some(w=>w.id===y)?i(y):i(k.default)}}catch($){console.warn("[ChatWidget] Failed to load models:",$)}finally{u(!1)}}})()},[e.backendUrl,e.apiPaths.models,e.showModelSelector,e.modelKey,t,n]);let a=z(f=>{i(f),n?.set(e.modelKey,f)},[e.modelKey,n]),p=z(()=>o.find(f=>f.id===s)||null,[o,s]);return{availableModels:o,selectedModel:s,defaultModel:c,isLoading:l,selectModel:a,getSelectedModelInfo:p}}function xt(e,t,n){let o=l=>!l||typeof l!="object"||e.apiCaseStyle==="camel"?l:ye(l),r=l=>!l||typeof l!="object"||e.apiCaseStyle==="snake"?l:ge(l),s=()=>e.authStrategy?e.authStrategy:e.authToken?"token":e.apiPaths.anonymousSession||e.anonymousSessionEndpoint?"anonymous":"none",i=(l=null)=>{let u=s(),a={},p=l||e.authToken||t().authToken;if(u==="token"&&p){let f=e.authHeader||"Authorization",$=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Token";a[f]=$?`${$} ${p}`:p}else if(u==="jwt"&&p){let f=e.authHeader||"Authorization",$=e.authTokenPrefix!==void 0?e.authTokenPrefix:"Bearer";a[f]=$?`${$} ${p}`:p}else if(u==="anonymous"&&p){let f=e.authHeader||e.anonymousTokenHeader||"X-Anonymous-Token";a[f]=p}if(u==="session"){let f=yt(e.csrfCookieName);f&&(a["X-CSRFToken"]=f)}return a};return{getAuthStrategy:s,getAuthHeaders:i,getFetchOptions:(l={},u=null)=>{let a=s(),p={...l};return p.headers={...p.headers,...i(u)},a==="session"&&(p.credentials="include"),p},getOrCreateSession:async()=>{let l=s(),u=t();if(l!=="anonymous")return e.authToken||u.authToken;if(u.authToken)return u.authToken;let a=e.anonymousTokenKey||e.sessionTokenKey,p=u.storage?.get(a);if(p)return n(f=>({...f,authToken:p})),p;try{let f=e.anonymousSessionEndpoint||e.apiPaths.anonymousSession,$=await fetch(`${e.backendUrl}${f}`,{method:"POST",headers:{"Content-Type":"application/json"}});if($.ok){let k=await $.json();return n(g=>({...g,authToken:k.token})),u.storage?.set(a,k.token),k.token}}catch(f){console.warn("[ChatWidget] Failed to create session:",f)}return null},transformRequest:o,transformResponse:r}}function Et({config:e,onStateChange:t,markdownParser:n,apiRef:o}){let[r,s]=M(e.embedded||e.forceOpen===!0),[i,c]=M(!1),[d,l]=M(!1),[u,a]=M(!1),[p,f]=M([]),[$,k]=M(!1),[g,y]=M(e.enableTTS),[w,A]=M(!1),[O,V]=M(null);L(()=>{e.forceOpen!==void 0&&s(e.forceOpen)},[e.forceOpen]);let F=ae(()=>gt(e.containerId),[e.containerId]),[j,J]=M(e.authToken||null),K=ae(()=>xt(e,()=>({authToken:j,storage:F}),S=>{let h=S({authToken:j,storage:F});h.authToken!==j&&J(h.authToken)}),[e,j,F]),b=Mt(e,K,F),N=Tt(e,K,F);L(()=>{for(let _=b.messages.length-1;_>=0;_--){let T=b.messages[_];if(T.type==="sub_agent_start"){V({key:T.metadata?.subAgentKey,name:T.metadata?.agentName});return}if(T.type==="sub_agent_end"){V(null);return}}},[b.messages]),L(()=>{let _=F.get(e.conversationIdKey);_&&b.loadConversation(_)},[]),L(()=>{t&&t({isOpen:r,isExpanded:i,debugMode:d,messages:b.messages,conversationId:b.conversationId,isLoading:b.isLoading,error:b.error})},[r,i,d,b.messages,b.conversationId,b.isLoading,b.error]);let v=z(async()=>{if(e.showConversationSidebar){k(!0);try{let _=`${e.backendUrl}${e.apiPaths.conversations}?agent_key=${encodeURIComponent(e.agentKey)}`,T=await fetch(_,K.getFetchOptions({method:"GET"}));if(T.ok){let S=await T.json();f(S.results||S)}}catch(_){console.error("[ChatWidget] Failed to load conversations:",_),f([])}finally{k(!1)}}},[e,K]),I=z(()=>{let _=!u;a(_),_&&v()},[u,v]),H=z(_=>{_!==b.conversationId&&b.loadConversation(_),a(!1)},[b]),E=z(()=>{b.clearMessages(),a(!1)},[b]),C=z(_=>{b.sendMessage(_,{model:N.selectedModel,onAssistantMessage:T=>{}})},[b,g,N.selectedModel]);if(L(()=>{o&&(o.current={open:()=>s(!0),close:()=>s(!1),send:_=>C(_),clearMessages:()=>b.clearMessages(),toggleTTS:()=>y(_=>!_),stopSpeech:()=>A(!1),setAuth:_=>{_.token!==void 0&&J(_.token)},clearAuth:()=>J(null)})},[b,o,C]),!e.embedded&&!r)return m`
396
398
  <button
397
399
  class="cw-fab"
398
400
  style=${{backgroundColor:e.primaryColor}}
@@ -402,16 +404,16 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
402
404
  <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>
403
405
  </svg>
404
406
  </button>
405
- `;let M=["cw-widget",i&&"cw-widget-expanded",e.embedded&&"cw-widget-embedded"].filter(Boolean).join(" ");return m`
406
- <div class=${M} style=${{"--cw-primary":e.primaryColor}}>
407
+ `;let x=["cw-widget",i&&"cw-widget-expanded",e.embedded&&"cw-widget-embedded"].filter(Boolean).join(" ");return m`
408
+ <div class=${x} style=${{"--cw-primary":e.primaryColor}}>
407
409
  ${e.showConversationSidebar&&m`
408
410
  <${Ct}
409
411
  isOpen=${u}
410
- conversations=${_}
411
- conversationsLoading=${b}
412
- currentConversationId=${k.conversationId}
412
+ conversations=${p}
413
+ conversationsLoading=${$}
414
+ currentConversationId=${b.conversationId}
413
415
  onClose=${()=>a(!1)}
414
- onNewConversation=${$}
416
+ onNewConversation=${E}
415
417
  onSwitchConversation=${H}
416
418
  />
417
419
  `}
@@ -421,48 +423,48 @@ var ChatWidgetModule=(()=>{var Ce=Object.defineProperty;var Dt=Object.getOwnProp
421
423
  debugMode=${d}
422
424
  isExpanded=${i}
423
425
  isSpeaking=${w}
424
- messagesCount=${k.messages.length}
425
- isLoading=${k.isLoading}
426
+ messagesCount=${b.messages.length}
427
+ isLoading=${b.isLoading}
426
428
  currentAgent=${O}
427
429
  onClose=${()=>s(!1)}
428
430
  onToggleExpand=${()=>c(!i)}
429
431
  onToggleDebug=${()=>l(!d)}
430
432
  onToggleTTS=${()=>y(!g)}
431
- onClear=${k.clearMessages}
432
- onToggleSidebar=${E}
433
+ onClear=${b.clearMessages}
434
+ onToggleSidebar=${I}
433
435
  />
434
436
 
435
437
  ${d&&m`<div class="cw-status-bar"><span>🐛 Debug</span></div>`}
436
438
 
437
439
  <${bt}
438
- messages=${k.messages}
439
- isLoading=${k.isLoading}
440
- hasMoreMessages=${k.hasMoreMessages}
441
- loadingMoreMessages=${k.loadingMoreMessages}
442
- onLoadMore=${k.loadMoreMessages}
443
- onEditMessage=${k.editMessage}
444
- onRetryMessage=${k.retryMessage}
440
+ messages=${b.messages}
441
+ isLoading=${b.isLoading}
442
+ hasMoreMessages=${b.hasMoreMessages}
443
+ loadingMoreMessages=${b.loadingMoreMessages}
444
+ onLoadMore=${b.loadMoreMessages}
445
+ onEditMessage=${b.editMessage}
446
+ onRetryMessage=${b.retryMessage}
445
447
  debugMode=${d}
446
448
  markdownParser=${n}
447
449
  emptyStateTitle=${e.emptyStateTitle}
448
450
  emptyStateMessage=${e.emptyStateMessage}
449
451
  />
450
452
 
451
- ${k.error&&m`<div class="cw-error-bar">${k.error}</div>`}
453
+ ${b.error&&m`<div class="cw-error-bar">${b.error}</div>`}
452
454
 
453
455
  ${e.showModelSelector&&N.availableModels.length>0&&m`
454
456
  <${St}
455
457
  availableModels=${N.availableModels}
456
458
  selectedModel=${N.selectedModel}
457
459
  onSelectModel=${N.selectModel}
458
- disabled=${k.isLoading}
460
+ disabled=${b.isLoading}
459
461
  />
460
462
  `}
461
463
 
462
464
  <${kt}
463
- onSend=${I}
464
- onCancel=${k.cancelRun}
465
- isLoading=${k.isLoading}
465
+ onSend=${C}
466
+ onCancel=${b.cancelRun}
467
+ isLoading=${b.isLoading}
466
468
  placeholder=${e.placeholder}
467
469
  primaryColor=${e.primaryColor}
468
470
  enableVoice=${e.enableVoice}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-agent-studio
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: Visual agent builder and management studio for Django - build custom GPTs with a two-pane interface
5
5
  Author: Chris Barry
6
6
  License: Business Source License 1.1
@@ -19,8 +19,8 @@ django_agent_studio/models/permissions.py,sha256=NepltvQzeehv5EwcOTqULj8n3N5XGVT
19
19
  django_agent_studio/services/__init__.py,sha256=06cc1eLnAbROTKFxBgvkeCpsYV5cQsyJVGXaE_rcp3M,244
20
20
  django_agent_studio/services/permissions.py,sha256=-cwe0YZCFBFYh_ScXKncsPwEkCfEyIrtOzp8Wt9GSco,7785
21
21
  django_agent_studio/static/agent-frontend/chat-widget-markdown.js,sha256=_TQCux4HPRynCiLKydITO-docIRoi454jLpX0fegAFM,3722
22
- django_agent_studio/static/agent-frontend/chat-widget.css,sha256=cN5mu5wOkTk-WnbCtffzEHbqst-Fya3KVh6Bq9BQtUw,33027
23
- django_agent_studio/static/agent-frontend/chat-widget.js,sha256=0LE0Y3TP24rt9detRQsMsC_dqp2J1bGnDI27kuOolfg,53802
22
+ django_agent_studio/static/agent-frontend/chat-widget.css,sha256=tGdeUUZGkhIY0XEN3A8kvrun45xs54FRKuXLq0cc32Y,33182
23
+ django_agent_studio/static/agent-frontend/chat-widget.js,sha256=QL8EPggrp6TVeSnmAFT417QD2Mvh5NHA9a7tx0KceV0,53913
24
24
  django_agent_studio/static/django_agent_studio/js/builder.js,sha256=eEUw2z-pNdoU3xv3NhLQ-uDZV7tsf8Bawseg7B7dpCo,413948
25
25
  django_agent_studio/static/django_agent_studio/js/builder.js.map,sha256=sVkeGyZsBWEr4MKhqAfd3B4JL5n7D6eKc_4ZYUsbKO8,1633363
26
26
  django_agent_studio/static/django_agent_studio/js/style.css,sha256=rigQJy_oHIhgb1_7DwAQ_8G002gQnT0AXUtwxImWj1o,1626515
@@ -29,8 +29,8 @@ django_agent_studio/templates/django_agent_studio/base.html,sha256=wSgwaqK1DAIIy
29
29
  django_agent_studio/templates/django_agent_studio/builder.html,sha256=05thhHGdHaytyD1c15s5SMMWeNVKE8ERLEUp8qdv7Mc,1524
30
30
  django_agent_studio/templates/django_agent_studio/home.html,sha256=pgwKPjiQe9UxYYLGSsKT-6erEPDUdW9MZ5D-MOjIxK4,4385
31
31
  django_agent_studio/templates/django_agent_studio/test.html,sha256=h9aTtTD1eYcgG-n410qMSryHdpXyKny0hjiKYAoGsic,3779
32
- django_agent_studio-0.2.3.dist-info/licenses/LICENSE,sha256=WIh21lpD7d7xCUtLysKK-kbfW4SG7GNPf_k7_Xm_sZg,3851
33
- django_agent_studio-0.2.3.dist-info/METADATA,sha256=Ncxn3d9LUbKHgs39jHdF5A4ztUR9y92eP-35h-sOapk,16272
34
- django_agent_studio-0.2.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
35
- django_agent_studio-0.2.3.dist-info/top_level.txt,sha256=O1kqZzXPOsJlqnPSAcB2fH5WpJNY8ZNfHEJzX9_SZ0A,20
36
- django_agent_studio-0.2.3.dist-info/RECORD,,
32
+ django_agent_studio-0.2.4.dist-info/licenses/LICENSE,sha256=WIh21lpD7d7xCUtLysKK-kbfW4SG7GNPf_k7_Xm_sZg,3851
33
+ django_agent_studio-0.2.4.dist-info/METADATA,sha256=0M6E0z6pGSAC3bEYtspZyNepIU8XX0xjlUzwxdi0kzs,16272
34
+ django_agent_studio-0.2.4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
35
+ django_agent_studio-0.2.4.dist-info/top_level.txt,sha256=O1kqZzXPOsJlqnPSAcB2fH5WpJNY8ZNfHEJzX9_SZ0A,20
36
+ django_agent_studio-0.2.4.dist-info/RECORD,,