@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 +82 -21
- package/dist/chat-widget.js +156 -156
- package/package.json +1 -2
- package/src/hooks/useChat.js +24 -3
- package/src/utils/api.js +24 -9
package/LICENSE
CHANGED
|
@@ -1,22 +1,83 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
package/dist/chat-widget.js
CHANGED
|
@@ -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"?(
|
|
3
|
-
<div class="cw-header" style=${{backgroundColor:
|
|
4
|
-
${y&&
|
|
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&<(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
|
-
${
|
|
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(
|
|
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&&
|
|
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
|
-
${
|
|
38
|
+
${k&&I&&f`
|
|
39
39
|
<button
|
|
40
40
|
class="cw-header-btn ${t?"cw-btn-active":""}"
|
|
41
|
-
onClick=${
|
|
41
|
+
onClick=${l}
|
|
42
42
|
title="Debug"
|
|
43
43
|
>🐛</button>
|
|
44
44
|
`}
|
|
45
45
|
|
|
46
|
-
${N&&B&&
|
|
46
|
+
${N&&B&&f`
|
|
47
47
|
<button
|
|
48
48
|
class="cw-header-btn ${z?"cw-btn-active":""}"
|
|
49
|
-
onClick=${
|
|
49
|
+
onClick=${u}
|
|
50
50
|
title="TTS"
|
|
51
51
|
>${z?"\u{1F50A}":"\u{1F507}"}</button>
|
|
52
52
|
`}
|
|
53
53
|
|
|
54
|
-
${J&&!w&&
|
|
54
|
+
${J&&!w&&f`
|
|
55
55
|
<button
|
|
56
56
|
class="cw-header-btn"
|
|
57
|
-
onClick=${
|
|
57
|
+
onClick=${d}
|
|
58
58
|
title=${n?"Minimize":"Expand"}
|
|
59
59
|
>${n?"\u2296":"\u2295"}</button>
|
|
60
60
|
`}
|
|
61
61
|
|
|
62
|
-
${!w&&
|
|
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
|
|
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
|
-
`:
|
|
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
|
|
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&&
|
|
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
|
|
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=${
|
|
115
|
-
onKeyDown=${
|
|
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
|
|
133
|
-
<div class="cw-agent-context ${
|
|
134
|
-
<span class="cw-agent-context-icon">${
|
|
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&&
|
|
136
|
+
${e.metadata?.agentName&&f`
|
|
137
137
|
<span class="cw-agent-context-name">${e.metadata.agentName}</span>
|
|
138
138
|
`}
|
|
139
|
-
${t&&
|
|
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
|
|
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&&
|
|
143
|
+
<span class="cw-tool-label" onClick=${()=>S&&d(!c)}>
|
|
144
144
|
${e.content}
|
|
145
|
-
${S&&
|
|
145
|
+
${S&&f`<span class="cw-tool-expand">${c?"\u25BC":"\u25B6"}</span>`}
|
|
146
146
|
</span>
|
|
147
|
-
${c&&S&&
|
|
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&&
|
|
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"?
|
|
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/")?
|
|
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
|
-
`:
|
|
158
|
+
`:f`
|
|
159
159
|
<a class="cw-attachment-file" href=${S.url} target="_blank" title=${S.name}>
|
|
160
|
-
<span class="cw-attachment-icon">${
|
|
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">${
|
|
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(
|
|
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
|
-
<${
|
|
171
|
+
<${en}
|
|
172
172
|
initialContent=${e.content}
|
|
173
173
|
onSave=${q}
|
|
174
174
|
onCancel=${()=>_(!1)}
|
|
175
175
|
/>
|
|
176
176
|
</div>
|
|
177
|
-
`;let
|
|
178
|
-
<div class="${z} ${
|
|
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
|
|
180
|
+
${h&&f`
|
|
181
181
|
<div class="cw-user-actions-wrapper">
|
|
182
|
-
<${
|
|
182
|
+
<${kt}
|
|
183
183
|
onEdit=${()=>_(!0)}
|
|
184
|
-
onRetry=${
|
|
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
|
|
192
|
+
${!h&&f`
|
|
193
193
|
<div class=${J} dangerouslySetInnerHTML=${{__html:V}} />
|
|
194
194
|
`}
|
|
195
|
-
${T&&
|
|
196
|
-
<${
|
|
197
|
-
onRetry=${
|
|
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&&
|
|
203
|
+
${t&&f`<${Ne} msg=${e} show=${l} onToggle=${()=>u(!l)} />`}
|
|
204
204
|
</div>
|
|
205
|
-
`}function
|
|
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
|
-
${
|
|
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(
|
|
213
|
-
<p>${j(
|
|
212
|
+
<h3>${j(l)}</h3>
|
|
213
|
+
<p>${j(u)}</p>
|
|
214
214
|
</div>
|
|
215
215
|
`}
|
|
216
216
|
|
|
217
|
-
${!
|
|
217
|
+
${!v&&n&&f`
|
|
218
218
|
<div class="cw-load-more" onClick=${a}>
|
|
219
|
-
${s?
|
|
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)=>
|
|
224
|
-
<${
|
|
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=${
|
|
229
|
+
markdownParser=${d}
|
|
230
230
|
onEdit=${o}
|
|
231
|
-
onRetry=${
|
|
231
|
+
onRetry=${i}
|
|
232
232
|
isLoading=${t}
|
|
233
233
|
/>
|
|
234
234
|
`)}
|
|
235
235
|
|
|
236
|
-
${t&&
|
|
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
|
|
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=
|
|
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
|
-
`,
|
|
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=
|
|
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
|
-
${
|
|
269
|
+
${l.length>0&&f`
|
|
270
270
|
<div class="cw-file-chips">
|
|
271
|
-
${
|
|
271
|
+
${l.map(($,D)=>f`
|
|
272
272
|
<div class="cw-file-chip" key=${D}>
|
|
273
|
-
<span class="cw-file-chip-icon">${
|
|
274
|
-
<span class="cw-file-chip-name" title=${
|
|
275
|
-
<span class="cw-file-chip-size">(${
|
|
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=${
|
|
292
|
-
onKeyDown=${
|
|
291
|
+
onInput=${$=>d($.target.value)}
|
|
292
|
+
onKeyDown=${W}
|
|
293
293
|
disabled=${n}
|
|
294
294
|
rows="1"
|
|
295
295
|
/>
|
|
296
|
-
${E&&
|
|
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
|
-
${
|
|
304
|
+
${M}
|
|
305
305
|
</button>
|
|
306
306
|
`}
|
|
307
|
-
${S&&
|
|
307
|
+
${S&&f`
|
|
308
308
|
<button
|
|
309
309
|
type="button"
|
|
310
310
|
class=${`cw-voice-btn ${p?"cw-voice-btn-recording":""}`}
|
|
311
|
-
onClick=${
|
|
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?
|
|
327
|
+
${n?r?x:f`<span class="cw-spinner"></span>`:"\u27A4"}
|
|
328
328
|
</button>
|
|
329
329
|
</form>
|
|
330
|
-
`}function
|
|
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&&
|
|
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&&
|
|
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=>
|
|
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=${()=>
|
|
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">${
|
|
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
|
|
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=${
|
|
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&&
|
|
382
|
+
${a&&f`
|
|
383
383
|
<div class="cw-model-dropdown">
|
|
384
|
-
${e.map(
|
|
384
|
+
${e.map(u=>f`
|
|
385
385
|
<button
|
|
386
|
-
key=${
|
|
387
|
-
class="cw-model-option ${
|
|
388
|
-
onClick=${()=>
|
|
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(
|
|
391
|
-
<span class="cw-model-option-provider">${j(
|
|
392
|
-
${
|
|
393
|
-
<span class="cw-model-option-desc">${j(
|
|
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
|
|
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=${
|
|
405
|
-
title=${
|
|
404
|
+
onClick=${d}
|
|
405
|
+
title=${nn[e.state]}
|
|
406
406
|
>
|
|
407
|
-
${
|
|
407
|
+
${tn[e.state]}
|
|
408
408
|
</button>
|
|
409
409
|
|
|
410
|
-
${a?
|
|
410
|
+
${a?f`
|
|
411
411
|
<input
|
|
412
412
|
type="text"
|
|
413
413
|
class="cw-task-edit-input"
|
|
414
|
-
value=${
|
|
414
|
+
value=${i}
|
|
415
415
|
onInput=${_=>c(_.target.value)}
|
|
416
|
-
onBlur=${
|
|
417
|
-
onKeyDown=${
|
|
416
|
+
onBlur=${l}
|
|
417
|
+
onKeyDown=${u}
|
|
418
418
|
autoFocus
|
|
419
419
|
/>
|
|
420
|
-
`:
|
|
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
|
|
439
|
-
<${
|
|
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=>
|
|
447
|
-
`,[a,o]),d
|
|
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&&
|
|
464
|
-
<button class="cw-tasks-action-btn" onClick=${
|
|
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&&
|
|
469
|
+
${s&&f`<div class="cw-tasks-error">${s}</div>`}
|
|
470
470
|
|
|
471
471
|
<div class="cw-tasks-list">
|
|
472
|
-
${
|
|
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
|
-
`:
|
|
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",
|
|
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&&
|
|
493
|
-
<${
|
|
494
|
-
isOpen=${
|
|
492
|
+
${e.showConversationSidebar&&f`
|
|
493
|
+
<${Tt}
|
|
494
|
+
isOpen=${u}
|
|
495
495
|
conversations=${_}
|
|
496
496
|
conversationsLoading=${y}
|
|
497
|
-
currentConversationId=${
|
|
497
|
+
currentConversationId=${h.conversationId}
|
|
498
498
|
onClose=${()=>r(!1)}
|
|
499
|
-
onNewConversation=${
|
|
499
|
+
onNewConversation=${$}
|
|
500
500
|
onSwitchConversation=${E}
|
|
501
501
|
/>
|
|
502
502
|
`}
|
|
503
503
|
|
|
504
|
-
<${
|
|
504
|
+
<${$t}
|
|
505
505
|
config=${e}
|
|
506
|
-
debugMode=${
|
|
507
|
-
isExpanded=${
|
|
506
|
+
debugMode=${d}
|
|
507
|
+
isExpanded=${i}
|
|
508
508
|
isSpeaking=${N}
|
|
509
|
-
messagesCount=${
|
|
510
|
-
isLoading=${
|
|
509
|
+
messagesCount=${h.messages.length}
|
|
510
|
+
isLoading=${h.isLoading}
|
|
511
511
|
currentAgent=${z}
|
|
512
512
|
onClose=${()=>o(!1)}
|
|
513
|
-
onToggleExpand=${()=>c(!
|
|
514
|
-
onToggleDebug=${()=>
|
|
515
|
-
onToggleTTS=${()=>I(
|
|
516
|
-
onClear=${
|
|
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&&
|
|
520
|
+
${e.showTasksTab!==!1&&f`
|
|
521
521
|
<div class="cw-tabs">
|
|
522
522
|
<button
|
|
523
|
-
class=${`cw-tab ${
|
|
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 ${
|
|
529
|
+
class=${`cw-tab ${v==="tasks"?"cw-tab-active":""}`}
|
|
530
530
|
onClick=${()=>F("tasks")}
|
|
531
531
|
>
|
|
532
|
-
Tasks ${T.progress.total>0?
|
|
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
|
-
${
|
|
537
|
+
${d&&f`<div class="cw-status-bar"><span>🐛 Debug</span></div>`}
|
|
538
538
|
|
|
539
|
-
${
|
|
540
|
-
<${
|
|
541
|
-
messages=${
|
|
542
|
-
isLoading=${
|
|
543
|
-
hasMoreMessages=${
|
|
544
|
-
loadingMoreMessages=${
|
|
545
|
-
onLoadMore=${
|
|
546
|
-
onEditMessage=${
|
|
547
|
-
onRetryMessage=${
|
|
548
|
-
debugMode=${
|
|
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
|
-
${
|
|
554
|
+
${h.error&&f`<div class="cw-error-bar">${h.error}</div>`}
|
|
555
555
|
|
|
556
|
-
${e.showModelSelector&&
|
|
557
|
-
<${
|
|
558
|
-
availableModels=${
|
|
559
|
-
selectedModel=${
|
|
560
|
-
onSelectModel=${
|
|
561
|
-
disabled=${
|
|
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
|
-
<${
|
|
565
|
+
<${St}
|
|
566
566
|
onSend=${D}
|
|
567
|
-
onCancel=${
|
|
568
|
-
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
|
-
`:
|
|
574
|
-
<${
|
|
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
|
|
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=${
|
|
589
|
+
markdownParser=${Se._enhancedMarkdownParser}
|
|
590
590
|
apiRef=${this._apiRef}
|
|
591
|
-
/>`,this.container)}destroy(){this.container&&(
|
|
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.
|
|
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
|
-
|
package/src/hooks/useChat.js
CHANGED
|
@@ -300,11 +300,32 @@ export function useChat(config, api, storage) {
|
|
|
300
300
|
}, token);
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
};
|