@auticlabs/bulut 1.2.1 → 1.2.3

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/dist/embed.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"embed.js","sources":["../node_modules/preact/dist/preact.module.js","../node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../node_modules/preact/hooks/dist/hooks.module.js","../src/styles/constants.ts","../src/assets/icons/microphone.svg?raw","../src/assets/icons/restart.svg?raw","../src/assets/icons/close.svg?raw","../src/assets/icons/stop.svg?raw","../src/assets/icons/bulut_logo.svg?raw","../src/assets/sfx/sent.mp3","../src/assets/sfx/thinking.mp3","../src/assets/sfx/tool_call.mp3","../src/assets/sfx/completed.mp3","../src/assets.ts","../src/components/SvgIcon.tsx","../src/components/ChatButton.tsx","../src/agent/context.ts","../src/agent/tools.ts","../src/api/client.ts","../src/components/ChatWindow.tsx","../src/index.tsx"],"sourcesContent":["var n,l,u,t,i,o,r,e,f,c,s,a,h,p={},v=[],y=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,d=Array.isArray;function w(n,l){for(var u in l)n[u]=l[u];return n}function g(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function _(l,u,t){var i,o,r,e={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:e[r]=u[r];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===e[r]&&(e[r]=l.defaultProps[r]);return m(l,e,i,o,null)}function m(n,t,i,o,r){var e={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==r?++u:r,__i:-1,__u:0};return null==r&&null!=l.vnode&&l.vnode(e),e}function b(){return{current:null}}function k(n){return n.children}function x(n,l){this.props=n,this.context=l}function S(n,l){if(null==l)return n.__?S(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?S(n):null}function C(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C(n)}}function M(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!$.__r++||o!=l.debounceRendering)&&((o=l.debounceRendering)||r)($)}function $(){for(var n,u,t,o,r,f,c,s=1;i.length;)i.length>s&&i.sort(e),n=i.shift(),s=i.length,n.__d&&(t=void 0,o=void 0,r=(o=(u=n).__v).__e,f=[],c=[],u.__P&&((t=w({},o)).__v=o.__v+1,l.vnode&&l.vnode(t),O(u.__P,t,o,u.__n,u.__P.namespaceURI,32&o.__u?[r]:null,f,null==r?S(o):r,!!(32&o.__u),c),t.__v=o.__v,t.__.__k[t.__i]=t,N(f,t,c),o.__e=o.__=null,t.__e!=r&&C(t)));$.__r=0}function I(n,l,u,t,i,o,r,e,f,c,s){var a,h,y,d,w,g,_,m=t&&t.__k||v,b=l.length;for(f=P(u,l,m,f,b),a=0;a<b;a++)null!=(y=u.__k[a])&&(h=-1==y.__i?p:m[y.__i]||p,y.__i=a,g=O(n,y,h,i,o,r,e,f,c,s),d=y.__e,y.ref&&h.ref!=y.ref&&(h.ref&&B(h.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),(_=!!(4&y.__u))||h.__k===y.__k?f=A(y,f,n,_):\"function\"==typeof y.type&&void 0!==g?f=g:d&&(f=d.nextSibling),y.__u&=-7);return u.__e=w,f}function P(n,l,u,t,i){var o,r,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),o=0;o<i;o++)null!=(r=l[o])&&\"boolean\"!=typeof r&&\"function\"!=typeof r?(\"string\"==typeof r||\"number\"==typeof r||\"bigint\"==typeof r||r.constructor==String?r=n.__k[o]=m(null,r,null,null,null):d(r)?r=n.__k[o]=m(k,{children:r},null,null,null):void 0===r.constructor&&r.__b>0?r=n.__k[o]=m(r.type,r.props,r.key,r.ref?r.ref:null,r.__v):n.__k[o]=r,f=o+h,r.__=n,r.__b=n.__b+1,e=null,-1!=(c=r.__i=L(r,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof r.type&&(r.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,r.__u|=4))):n.__k[o]=null;if(a)for(o=0;o<s;o++)null!=(e=u[o])&&0==(2&e.__u)&&(e.__e==t&&(t=S(e)),D(e,e));return t}function A(n,l,u,t){var i,o;if(\"function\"==typeof n.type){for(i=n.__k,o=0;i&&o<i.length;o++)i[o]&&(i[o].__=n,l=A(i[o],l,u,t));return l}n.__e!=l&&(t&&(l&&n.type&&!l.parentNode&&(l=S(n)),u.insertBefore(n.__e,l||null)),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function H(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(d(n)?n.some(function(n){H(n,l)}):l.push(n)),l}function L(n,l,u,t){var i,o,r,e=n.key,f=n.type,c=l[u],s=null!=c&&0==(2&c.__u);if(null===c&&null==e||s&&e==c.key&&f==c.type)return u;if(t>(s?1:0))for(i=u-1,o=u+1;i>=0||o<l.length;)if(null!=(c=l[r=i>=0?i--:o++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return r;return-1}function T(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||y.test(l)?u:u+\"px\"}function j(n,l,u,t,i){var o,r;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||T(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||T(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])o=l!=(l=l.replace(f,\"$1\")),r=l.toLowerCase(),l=r in n||\"onFocusOut\"==l||\"onFocusIn\"==l?r.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=c,n.addEventListener(l,o?a:s,o)):n.removeEventListener(l,o?a:s,o);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=c++;else if(u.t<t.u)return;return t(l.event?l.event(u):u)}}}function O(n,u,t,i,o,r,e,f,c,s){var a,h,p,v,y,_,m,b,S,C,M,$,P,A,H,L,T,j=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof j)try{if(b=u.props,S=\"prototype\"in j&&j.prototype.render,C=(a=j.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?m=(h=u.__c=t.__c).__=h.__E:(S?u.__c=h=new j(b,M):(u.__c=h=new x(b,M),h.constructor=j,h.render=E),C&&C.sub(h),h.state||(h.state={}),h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),S&&null==h.__s&&(h.__s=h.state),S&&null!=j.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=w({},h.__s)),w(h.__s,j.getDerivedStateFromProps(b,h.__s))),v=h.props,y=h.state,h.__v=u,p)S&&null==j.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),S&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(S&&null==j.getDerivedStateFromProps&&b!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(b,M),u.__v==t.__v||!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(b,h.__s,M)){for(u.__v!=t.__v&&(h.props=b,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),$=0;$<h._sb.length;$++)h.__h.push(h._sb[$]);h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(b,h.__s,M),S&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,y,_)})}if(h.context=M,h.props=b,h.__P=n,h.__e=!1,P=l.__r,A=0,S){for(h.state=h.__s,h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[]}else do{h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++A<25);h.state=h.__s,null!=h.getChildContext&&(i=w(w({},i),h.getChildContext())),S&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,y)),L=a,null!=a&&a.type===k&&null==a.key&&(L=V(a.props.children)),f=I(n,d(L)?L:[L],u,t,i,o,r,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),m&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=r)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;r[r.indexOf(f)]=null,u.__e=f}else{for(T=r.length;T--;)g(r[T]);z(u)}else u.__e=t.__e,u.__k=t.__k,n.then||z(u);l.__e(n,u,t)}else null==r&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=q(t.__e,u,t,i,o,r,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function z(n){n&&n.__c&&(n.__c.__e=!0),n&&n.__k&&n.__k.forEach(z)}function N(n,u,t){for(var i=0;i<t.length;i++)B(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function V(n){return\"object\"!=typeof n||null==n||n.__b&&n.__b>0?n:d(n)?n.map(V):w({},n)}function q(u,t,i,o,r,e,f,c,s){var a,h,v,y,w,_,m,b=i.props||p,k=t.props,x=t.type;if(\"svg\"==x?r=\"http://www.w3.org/2000/svg\":\"math\"==x?r=\"http://www.w3.org/1998/Math/MathML\":r||(r=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((w=e[a])&&\"setAttribute\"in w==!!x&&(x?w.localName==x:3==w.nodeType)){u=w,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(r,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)b===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),!c&&null!=e)for(b={},a=0;a<u.attributes.length;a++)b[(w=u.attributes[a]).name]=w.value;for(a in b)if(w=b[a],\"children\"==a);else if(\"dangerouslySetInnerHTML\"==a)v=w;else if(!(a in k)){if(\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k)continue;j(u,a,null,w,r)}for(a in k)w=k[a],\"children\"==a?y=w:\"dangerouslySetInnerHTML\"==a?h=w:\"value\"==a?_=w:\"checked\"==a?m=w:c&&\"function\"!=typeof w||b[a]===w||j(u,a,w,b[a],r);if(h)c||v&&(h.__html==v.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(v&&(u.innerHTML=\"\"),I(\"template\"==t.type?u.content:u,d(y)?y:[y],t,i,o,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":r,e,f,e?e[0]:i.__k&&S(i,0),c,s),null!=e)for(a=e.length;a--;)g(e[a]);c||(a=\"value\",\"progress\"==x&&null==_?u.removeAttribute(\"value\"):null!=_&&(_!==u[a]||\"progress\"==x&&!_||\"option\"==x&&_!=b[a])&&j(u,a,_,b[a],r),a=\"checked\",null!=m&&m!=u[a]&&j(u,a,m,b[a],r))}return u}function B(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function D(n,u,t){var i,o;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||B(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&D(i[o],u,t||\"function\"!=typeof n.type);t||g(n.__e),n.__c=n.__=n.__e=void 0}function E(n,l,u){return this.constructor(n,u)}function G(u,t,i){var o,r,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),r=(o=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],O(t,u=(!o&&i||t).__k=_(k,null,[u]),r||p,p,t.namespaceURI,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,e,!o&&i?i:r?r.__e:t.firstChild,o,f),N(e,u,f)}function J(n,l){G(n,l,J)}function K(l,u,t){var i,o,r,e,f=w({},l.props);for(r in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=void 0===u[r]&&null!=e?e[r]:u[r];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),m(l.type,f,i||l.key,o||l.ref,null)}function Q(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,M(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+h++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=v.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},x.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=w({},this.state),\"function\"==typeof n&&(n=n(w({},u),this.props)),n&&w(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M(this))},x.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M(this))},x.prototype.render=k,i=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},$.__r=0,f=/(PointerCapture)$|Capture$/i,c=0,s=F(!1),a=F(!0),h=0;export{x as Component,k as Fragment,K as cloneElement,Q as createContext,_ as createElement,b as createRef,_ as h,J as hydrate,t as isValidElement,l as options,G as render,H as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n<r.length;n++){switch(r.charCodeAt(n)){case 34:f=\"&quot;\";break;case 38:f=\"&amp;\";break;case 60:f=\"&lt;\";break;default:continue}n!==e&&(o+=r.slice(e,n)),o+=f,e=n+1}return n!==e&&(o+=r.slice(e,n)),o}var o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=0,i=Array.isArray;function u(e,t,n,o,i,u){t||(t={});var a,c,p=t;if(\"ref\"in p)for(c in p={},t)\"ref\"==c?a=t[c]:p[c]=t[c];var l={type:e,props:p,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--f,__i:-1,__u:0,__source:i,__self:u};if(\"function\"==typeof e&&(a=e.defaultProps))for(c in a)void 0===p[c]&&(p[c]=a[c]);return r.vnode&&r.vnode(l),l}function a(r){var t=u(e,{tpl:r,exprs:[].slice.call(arguments,1)});return t.key=t.__v,t}var c={},p=/[A-Z]/g;function l(e,t){if(r.attr){var f=r.attr(e,t);if(\"string\"==typeof f)return f}if(t=function(r){return null!==r&&\"object\"==typeof r&&\"function\"==typeof r.valueOf?r.valueOf():r}(t),\"ref\"===e||\"key\"===e)return\"\";if(\"style\"===e&&\"object\"==typeof t){var i=\"\";for(var u in t){var a=t[u];if(null!=a&&\"\"!==a){var l=\"-\"==u[0]?u:c[u]||(c[u]=u.replace(p,\"-$&\").toLowerCase()),s=\";\";\"number\"!=typeof a||l.startsWith(\"--\")||o.test(l)||(s=\"px;\"),i=i+l+\":\"+a+s}}return e+'=\"'+n(i)+'\"'}return null==t||!1===t||\"function\"==typeof t||\"object\"==typeof t?\"\":!0===t?e:e+'=\"'+n(\"\"+t)+'\"'}function s(r){if(null==r||\"boolean\"==typeof r||\"function\"==typeof r)return null;if(\"object\"==typeof r){if(void 0===r.constructor)return r;if(i(r)){for(var e=0;e<r.length;e++)r[e]=s(r[e]);return r}}return n(\"\"+r)}export{u as jsx,l as jsxAttr,u as jsxDEV,s as jsxEscape,a as jsxTemplate,u as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return!!n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=o.__c.props!==n;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=p(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z),n.__H.__h.forEach(B),n.__H.__h=[]}catch(t){n.__H.__h=[],c.__e(t,n.__v)}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.forEach(z),i.__h.forEach(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","// Widget dimensions\r\nexport const BUTTON_SIZE = 60;\r\nexport const WINDOW_WIDTH = 350;\r\nexport const WINDOW_HEIGHT = 500;\r\n\r\n// Positioning\r\nexport const POSITION_BOTTOM = 20;\r\nexport const POSITION_RIGHT = 20;\r\n\r\n// Colors — initial values match the backend ProjectSettings default.\r\n// applyTheme() in index.tsx overrides primary/primaryHover/messageUser\r\n// with the remote config value before the widget renders.\r\nexport const COLORS = {\r\n primary: \"#6C03C1\",\r\n primaryHover: \"#5b02a4\",\r\n background: \"#ffffff\",\r\n text: \"hsla(215, 100%, 5%, 1)\",\r\n textSecondary: \"hsla(215, 100%, 5%, 1)\",\r\n border: \"#e5e7eb\",\r\n messageBot: \"\",\r\n messageUser: \"#6C03C1\",\r\n messageUserText: \"#ffffff\",\r\n};\r\n\r\nconst normalizeHexColor = (hex: string): string => {\r\n const trimmed = hex.trim();\r\n if (!/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(trimmed)) {\r\n return \"hsla(215, 100%, 5%, 1)\";\r\n }\r\n if (trimmed.length === 4) {\r\n const r = trimmed[1];\r\n const g = trimmed[2];\r\n const b = trimmed[3];\r\n return `#${r}${r}${g}${g}${b}${b}`;\r\n }\r\n return trimmed;\r\n};\r\n\r\nexport const getContrastIconFilter = (backgroundHex: string): string => {\r\n const hex = normalizeHexColor(backgroundHex).slice(1);\r\n const r = parseInt(hex.slice(0, 2), 16);\r\n const g = parseInt(hex.slice(2, 4), 16);\r\n const b = parseInt(hex.slice(4, 6), 16);\r\n\r\n // Relative luminance approximation for quick contrast choice.\r\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\r\n return luminance > 0.62 ? \"brightness(0) invert(0)\" : \"brightness(0) invert(1)\";\r\n};\r\n\r\n// Border radius\r\nexport const BORDER_RADIUS = {\r\n button: '50%',\r\n window: '17px',\r\n message: '10px'\r\n};\r\n\r\n// Shadows\r\nexport const SHADOW = \"0 0 15px hsla(215, 100%, 5%, 0.15)\";\r\n\r\n// Transitions\r\nexport const TRANSITIONS = {\r\n fast: '150ms ease-in-out',\r\n medium: '250ms ease-in-out'\r\n};\r\n","export default \"<svg width=\\\"50\\\" height=\\\"50\\\" viewBox=\\\"0 0 50 50\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n<path d=\\\"M17.6667 47H32.3333M39.6666 19.5001V23.1667C39.6666 31.2334 33.0666 37.8334 25 37.8334M25 37.8334C16.9333 37.8334 10.3334 31.2334 10.3334 23.1667V19.5001M25 37.8334V47M25 3.00009C24.0356 2.99523 23.0798 3.1816 22.1879 3.54841C21.296 3.91523 20.4857 4.45521 19.8037 5.13714C19.1218 5.81907 18.5818 6.62942 18.215 7.52133C17.8482 8.41325 17.6618 9.36903 17.6667 10.3334V23.0521C17.6667 27.0855 20.9896 30.5 25 30.5C29.0104 30.5 32.3333 27.1771 32.3333 23.0521V10.3334C32.3333 6.20842 29.125 3.00009 25 3.00009Z\\\" stroke=\\\"hsla(215, 100%, 5%, 1)\\\" stroke-width=\\\"3\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<svg width=\\\"50\\\" height=\\\"50\\\" viewBox=\\\"0 0 50 50\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n<path d=\\\"M31.4571 10.4169C30.714 10.783 30.4083 11.6822 30.7744 12.4254C31.1405 13.1685 32.0397 13.4742 32.7829 13.1081L32.12 11.7625L31.4571 10.4169ZM44.3 28.2275C44.3 27.3991 43.6284 26.7275 42.8 26.7275C41.9716 26.7275 41.3 27.3991 41.3 28.2275H42.8H44.3ZM26.0607 0.911874C25.4749 0.326088 24.5251 0.326088 23.9393 0.911874C23.3536 1.49766 23.3536 2.44741 23.9393 3.03319L25 1.97253L26.0607 0.911874ZM33.9 10.8725L34.9607 11.9332C35.5464 11.3474 35.5464 10.3977 34.9607 9.81187L33.9 10.8725ZM23.9393 18.7119C23.3536 19.2977 23.3536 20.2474 23.9393 20.8332C24.5251 21.419 25.4749 21.419 26.0607 20.8332L25 19.7725L23.9393 18.7119ZM32.12 11.7625C32.7829 13.1081 32.7838 13.1077 32.7848 13.1072C32.7851 13.107 32.7861 13.1065 32.7868 13.1062C32.7882 13.1055 32.7896 13.1048 32.791 13.1041C32.794 13.1026 32.7971 13.101 32.8005 13.0993C32.8071 13.0959 32.8146 13.0921 32.8229 13.0878C32.8393 13.0792 32.859 13.0686 32.8813 13.0561C32.9252 13.0315 32.9828 12.9974 33.0478 12.9543C33.1597 12.8798 33.3709 12.728 33.5596 12.493C33.7406 12.2674 34.0582 11.7606 33.9356 11.0758C33.8134 10.3931 33.3372 10.002 33.0232 9.81189C32.4374 9.45724 31.5535 9.27046 30.4249 9.14527C29.2187 9.01147 27.4833 8.92753 25 8.92753V10.4275V11.9275C27.4317 11.9275 29.0439 12.0105 30.0942 12.127C31.2222 12.2521 31.5039 12.3991 31.4694 12.3782C31.4309 12.3549 31.0768 12.1307 30.9826 11.6044C30.888 11.0761 31.1396 10.7153 31.2201 10.6149C31.3083 10.5051 31.3846 10.4575 31.3868 10.4561C31.3968 10.4494 31.4058 10.444 31.4148 10.439C31.4196 10.4363 31.4253 10.4332 31.4321 10.4296C31.4355 10.4278 31.4393 10.4259 31.4434 10.4238C31.4455 10.4228 31.4477 10.4217 31.4499 10.4205C31.4511 10.4199 31.4523 10.4194 31.4535 10.4188C31.4541 10.4185 31.455 10.418 31.4553 10.4179C31.4562 10.4174 31.4571 10.4169 32.12 11.7625ZM25 10.4275V8.92753C21.1828 8.92753 17.4514 10.0595 14.2775 12.1802L15.1109 13.4274L15.9442 14.6746C18.6247 12.8835 21.7762 11.9275 25 11.9275V10.4275ZM15.1109 13.4274L14.2775 12.1802C11.1036 14.3009 8.6299 17.3151 7.16913 20.8417L8.55495 21.4158L9.94077 21.9898C11.1745 19.0114 13.2637 16.4656 15.9442 14.6746L15.1109 13.4274ZM8.55495 21.4158L7.16913 20.8417C5.70836 24.3684 5.32616 28.2489 6.07085 31.9928L7.54203 31.7001L9.01321 31.4075C8.38427 28.2456 8.70706 24.9682 9.94077 21.9898L8.55495 21.4158ZM7.54203 31.7001L6.07085 31.9928C6.81555 35.7366 8.65369 39.1755 11.3528 41.8747L12.4135 40.814L13.4742 39.7534C11.1946 37.4738 9.64215 34.5694 9.01321 31.4075L7.54203 31.7001ZM12.4135 40.814L11.3528 41.8747C14.052 44.5738 17.4909 46.412 21.2348 47.1567L21.5274 45.6855L21.82 44.2143C18.6581 43.5854 15.7538 42.033 13.4742 39.7534L12.4135 40.814ZM21.5274 45.6855L21.2348 47.1567C24.9786 47.9014 28.8592 47.5192 32.3858 46.0584L31.8118 44.6726L31.2377 43.2868C28.2593 44.5205 24.9819 44.8433 21.82 44.2143L21.5274 45.6855ZM31.8118 44.6726L32.3858 46.0584C35.9124 44.5976 38.9267 42.1239 41.0474 38.95L39.8002 38.1167L38.553 37.2833C36.7619 39.9638 34.2162 42.0531 31.2377 43.2868L31.8118 44.6726ZM39.8002 38.1167L41.0474 38.95C43.1681 35.7762 44.3 32.0447 44.3 28.2275H42.8H41.3C41.3 31.4514 40.344 34.6028 38.553 37.2833L39.8002 38.1167ZM25 1.97253L23.9393 3.03319L32.8393 11.9332L33.9 10.8725L34.9607 9.81187L26.0607 0.911874L25 1.97253ZM33.9 10.8725L32.8393 9.81187L23.9393 18.7119L25 19.7725L26.0607 20.8332L34.9607 11.9332L33.9 10.8725Z\\\" fill=\\\"hsla(215, 100%, 5%, 1)\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<svg width=\\\"50\\\" height=\\\"50\\\" viewBox=\\\"0 0 50 50\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n<path d=\\\"M42.5 42.5L7.5 7.5M42.5 7.5L7.5 42.5\\\" stroke=\\\"hsla(215, 100%, 5%, 1)\\\" stroke-width=\\\"3\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<svg width=\\\"50\\\" height=\\\"50\\\" viewBox=\\\"0 0 50 50\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n<rect x=\\\"12\\\" y=\\\"12\\\" width=\\\"26\\\" height=\\\"26\\\" rx=\\\"4\\\" stroke=\\\"hsla(215, 100%, 5%, 1)\\\" stroke-width=\\\"3\\\" fill=\\\"none\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<svg width=\\\"2420\\\" height=\\\"438\\\" viewBox=\\\"0 0 2420 438\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n<path d=\\\"M251.823 0C313.458 0 366.34 37.767 388.932 91.5918C409.253 75.8883 434.678 66.5567 462.264 66.5566C528.885 66.5567 582.893 120.989 582.893 188.134C582.893 188.786 582.885 189.436 582.875 190.086C648.144 193.552 700 247.572 700 313.704C700 382.074 644.575 437.5 576.204 437.5H123.796C55.4255 437.5 7.42386e-05 382.074 0 313.704C0 250.475 47.4025 198.32 108.608 190.833C104.967 177.844 103.019 164.138 103.019 149.975C103.019 67.1461 169.641 0.000357483 251.823 0ZM234.696 141.93C218.117 134.066 199 146.158 199 164.507C199 174.32 204.744 183.225 213.684 187.271L336.761 242.985C337.971 243.533 338.748 244.738 338.748 246.066C338.748 247.394 337.971 248.6 336.761 249.147L213.684 304.861C204.744 308.908 199 317.812 199 327.625C199 345.974 218.117 358.066 234.696 350.202L364.672 288.554C375.142 283.588 381.815 273.036 381.815 261.448V230.684C381.815 219.096 375.142 208.544 364.672 203.578L234.696 141.93ZM413.877 296.146C402.078 296.146 392.513 305.711 392.513 317.511C392.513 329.31 402.078 338.875 413.877 338.875H526.636C538.435 338.875 548 329.31 548 317.511C548 305.711 538.435 296.146 526.636 296.146H413.877Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n<path d=\\\"M2420 424.954H2343.35C2307.08 424.954 2278.64 416.094 2258.04 398.373C2237.43 380.652 2227.13 352.216 2227.13 313.065V55.2871H2319.86V302.556C2319.86 318.217 2323.15 328.726 2329.75 334.083C2336.75 339.028 2348.29 341.501 2364.36 341.501H2420V424.954ZM2420 191.903H2178.29V115.25H2420V191.903Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n<path d=\\\"M1923.18 431.136C1894.33 431.136 1870.22 425.779 1850.85 415.064C1831.89 403.937 1817.68 389.101 1808.2 370.555C1799.13 352.01 1794.6 331.198 1794.6 308.12V115.25H1887.32V277.211C1887.32 301.938 1893.3 320.071 1905.25 331.61C1917.2 342.738 1937.81 348.301 1967.07 348.301C1997.56 348.301 2018.79 342.325 2030.74 330.374C2043.1 318.011 2049.28 298.641 2049.28 272.266L2061.03 271.648L2067.83 330.374H2050.52C2048.05 347.683 2041.87 363.962 2031.98 379.21C2022.5 394.458 2008.69 407.028 1990.56 416.918C1972.84 426.397 1950.38 431.136 1923.18 431.136ZM2142.01 424.955H2055.47V329.138L2049.28 326.047V115.25H2142.01V424.955Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n<path d=\\\"M1734.32 424.955H1641.59V10.7793H1734.32V424.955Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n<path d=\\\"M1362.98 431.136C1334.13 431.136 1310.03 425.779 1290.66 415.064C1271.7 403.937 1257.48 389.101 1248 370.555C1238.94 352.01 1234.4 331.198 1234.4 308.12V115.25H1327.13V277.211C1327.13 301.938 1333.1 320.071 1345.06 331.61C1357.01 342.738 1377.61 348.301 1406.87 348.301C1437.37 348.301 1458.59 342.325 1470.54 330.374C1482.91 318.011 1489.09 298.641 1489.09 272.266L1500.83 271.648L1507.63 330.374H1490.33C1487.85 347.683 1481.67 363.962 1471.78 379.21C1462.3 394.458 1448.5 407.028 1430.36 416.918C1412.64 426.397 1390.18 431.136 1362.98 431.136ZM1581.82 424.955H1495.27V329.138L1489.09 326.047V115.25H1581.82V424.955Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n<path d=\\\"M1035.12 431.137C999.27 431.137 971.04 423.513 950.434 408.264C930.241 392.604 917.259 369.526 911.49 339.029H894.181L900.981 272.266H912.726C912.726 289.987 916.023 304.411 922.617 315.538C929.623 326.253 939.719 334.084 952.907 339.029C966.507 343.974 983.198 346.447 1002.98 346.447C1023.17 346.447 1039.66 343.974 1052.43 339.029C1065.21 334.084 1074.69 326.047 1080.87 314.92C1087.05 303.793 1090.14 288.957 1090.14 270.412C1090.14 251.042 1087.05 236 1080.87 225.285C1074.69 214.158 1065.21 206.122 1052.43 201.177C1039.66 196.231 1023.38 193.758 1003.6 193.758C973.513 193.758 950.847 199.322 935.598 210.449C920.35 221.576 912.726 240.533 912.726 267.321H900.981V197.467H917.671C923.029 171.504 935.392 150.28 954.762 133.796C974.543 117.311 1002.77 109.069 1039.45 109.069C1070.36 109.069 1096.53 115.663 1117.96 128.85C1139.39 142.038 1155.67 160.789 1166.79 185.104C1178.33 209.007 1184.1 237.443 1184.1 270.412C1184.1 302.969 1178.33 331.405 1166.79 355.72C1155.67 379.622 1138.98 398.168 1116.72 411.355C1094.47 424.543 1067.27 431.137 1035.12 431.137ZM905.926 424.955H820V10.7793H912.726V325.429L905.926 333.465V424.955Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n</svg>\\r\\n\"","export default \"data:audio/mpeg;base64,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ciUlhGEjSloik0pFDiOCQk7CwkpfJTEhxVU13/NeLKirBnlTQsVMNkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgABlZauxJiAl8OtGJtCUOXLbCYWJSp4mI7hkhQQtAm46D7OEuRPTCPY90Qp2BvbF9eSSLUC24sytUy5EiD4uHKLLq6isqsdOqI2D5KKhCNDRcouomkdOB4ugPmURCIhkZKLoG4Tq7rf/dXdbmxRFTiSaiaSaSZw4XQHzJMKREDoyMEaBticLutzYyuquv7q0qurq6ukl2HsoiERDIyUXQThOF3/+rJsNHxRj/XTZKlJ5k4ANeHGTRgGMwAAAaQAAAAgAAA0gAAABMNjKKxUsWXUBw0LCv0AyFRYW1pMgsJDMcYEltcEbDEBSri82XaTiygI8gmpKTiyxUVWKiweNCrP6xRsCios3F2VCwr//9uKijf//8WFakxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=\"","export default \"data:audio/mpeg;base64,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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+rJsOxMAD/AAAGkAAAAIAAANIAAAAQAAAaQAAAAgAAA0gAAABExBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=\"","export default \"data:audio/mpeg;base64,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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=\"","export default \"data:audio/mpeg;base64,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\"","import microphoneIcon from \"./assets/icons/microphone.svg?inline\";\r\nimport microphoneIconRaw from \"./assets/icons/microphone.svg?raw\";\r\nimport restartIcon from \"./assets/icons/restart.svg?inline\";\r\nimport restartIconRaw from \"./assets/icons/restart.svg?raw\";\r\nimport closeIcon from \"./assets/icons/close.svg?inline\";\r\nimport closeIconRaw from \"./assets/icons/close.svg?raw\";\r\nimport stopIcon from \"./assets/icons/stop.svg?inline\";\r\nimport stopIconRaw from \"./assets/icons/stop.svg?raw\";\r\nimport bulutLogo from \"./assets/icons/bulut_logo.svg\";\r\nimport bulutLogoRaw from \"./assets/icons/bulut_logo.svg?raw\";\r\nimport sentSfx from \"./assets/sfx/sent.mp3\";\r\nimport thinkingSfx from \"./assets/sfx/thinking.mp3\";\r\nimport toolCallSfx from \"./assets/sfx/tool_call.mp3\";\r\nimport completedSfx from \"./assets/sfx/completed.mp3\";\r\n\r\nexport const microphoneIconUrl = microphoneIcon;\r\nexport const microphoneIconContent = microphoneIconRaw;\r\nexport const restartIconUrl = restartIcon;\r\nexport const restartIconContent = restartIconRaw;\r\nexport const closeIconUrl = closeIcon;\r\nexport const closeIconContent = closeIconRaw;\r\nexport const stopIconUrl = stopIcon;\r\nexport const stopIconContent = stopIconRaw;\r\nexport const logoUrl = bulutLogo;\r\nexport const logoContent = bulutLogoRaw;\r\nexport const sentSfxUrl = sentSfx;\r\nexport const thinkingSfxUrl = thinkingSfx;\r\nexport const toolCallSfxUrl = toolCallSfx;\r\nexport const completedSfxUrl = completedSfx;\r\n","\r\nimport type { CSSProperties, JSX } from \"preact\";\r\nimport { useMemo } from \"preact/hooks\";\r\n\r\nexport type SvgIconProps = Omit<JSX.IntrinsicElements[\"svg\"], \"style\"> & {\r\n src: string;\r\n title?: string;\r\n /**\r\n * If true, replaces fill and stroke attributes with \"currentColor\" in the inner SVG content.\r\n * Default: true\r\n */\r\n stripColors?: boolean;\r\n style?: CSSProperties;\r\n // Explicitly add common props to ensure destructuring works smoothly\r\n className?: string;\r\n fill?: string;\r\n stroke?: string;\r\n strokeWidth?: string | number;\r\n width?: string | number;\r\n height?: string | number;\r\n};\r\n\r\nexport function SvgIcon({\r\n src,\r\n width,\r\n height,\r\n title,\r\n stripColors = true,\r\n className,\r\n style,\r\n fill,\r\n stroke,\r\n strokeWidth,\r\n ...props\r\n}: SvgIconProps) {\r\n const { viewBox, content } = useMemo(() => {\r\n if (!src) return { viewBox: \"0 0 24 24\", content: \"\" };\r\n\r\n const trimmedSrc = src.trim();\r\n // Extract viewBox\r\n const viewBoxMatch = trimmedSrc.match(/viewBox=\"([^\"]*)\"/);\r\n const viewBox = viewBoxMatch ? viewBoxMatch[1] : \"0 0 24 24\";\r\n\r\n // Extract inner content by removing the outer <svg> wrapper\r\n // We remove the opening <svg ...> tag and the closing </svg> tag only.\r\n let content = trimmedSrc.replace(/^<svg[^>]*>/i, \"\").replace(/<\\/svg>\\s*$/i, \"\");\r\n\r\n return { viewBox, content };\r\n }, [src]);\r\n\r\n const cleanContent = useMemo(() => {\r\n if (!content) return \"\";\r\n let nextContent = content;\r\n\r\n if (stripColors) {\r\n // Force inner nodes to use props instead of hardcoded SVG values.\r\n nextContent = nextContent\r\n .replace(/fill=\"[^\"]*\"/gi, `fill=\"${fill}\"`)\r\n .replace(/stroke=\"[^\"]*\"/gi, `stroke=\"${stroke}\"`);\r\n }\r\n\r\n if (strokeWidth !== undefined) {\r\n const strokeWidthValue = String(strokeWidth);\r\n nextContent = /stroke-width=\"[^\"]*\"/i.test(nextContent)\r\n ? nextContent.replace(/stroke-width=\"[^\"]*\"/gi, `stroke-width=\"${strokeWidthValue}\"`)\r\n : nextContent.replace(\r\n /<(path|circle|ellipse|line|polyline|polygon|rect)\\b/gi,\r\n `<$1 stroke-width=\"${strokeWidthValue}\"`,\r\n );\r\n }\r\n\r\n return nextContent;\r\n }, [content, stripColors, fill, stroke, strokeWidth]);\r\n\r\n return (\r\n <svg\r\n viewBox={viewBox}\r\n width={width}\r\n height={height}\r\n className={className}\r\n style={{\r\n display: \"inline-block\",\r\n verticalAlign: \"middle\",\r\n flexShrink: 0,\r\n ...style,\r\n }}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n dangerouslySetInnerHTML={{ __html: cleanContent }}\r\n >\r\n {title && <title>{title}</title>}\r\n </svg>\r\n );\r\n}\r\n","import {\r\n BUTTON_SIZE,\r\n POSITION_BOTTOM,\r\n POSITION_RIGHT,\r\n COLORS,\r\n SHADOW,\r\n TRANSITIONS,\r\n BORDER_RADIUS,\r\n getContrastIconFilter,\r\n} from \"../styles/constants\";\r\nimport { closeIconContent, microphoneIconContent, stopIconContent } from \"../assets\";\r\nimport { SvgIcon } from \"./SvgIcon\";\r\n\r\ninterface ChatButtonProps {\r\n onMicClick: () => void;\r\n onCancelRecording: () => void;\r\n onStopTask: () => void;\r\n isRecording: boolean;\r\n isBusy: boolean;\r\n showBubble: boolean;\r\n onBubbleClick: () => void;\r\n previewMessage: string | null;\r\n onPreviewClick: () => void;\r\n onPreviewClose: () => void;\r\n}\r\n\r\nexport const ChatButton = ({\r\n onMicClick,\r\n onCancelRecording,\r\n onStopTask,\r\n isRecording,\r\n isBusy,\r\n showBubble,\r\n onBubbleClick,\r\n previewMessage,\r\n onPreviewClick,\r\n onPreviewClose,\r\n}: ChatButtonProps) => {\r\n const bgColor = COLORS.primary;\r\n\r\n const containerStyle: { [key: string]: string } = {\r\n position: \"fixed\",\r\n right: `${POSITION_RIGHT}px`,\r\n bottom: `${POSITION_BOTTOM}px`,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"flex-end\",\r\n gap: \"8px\",\r\n zIndex: \"9999\",\r\n fontFamily: \"\\\"Geist\\\", sans-serif\",\r\n };\r\n\r\n const controlsRowStyle: { [key: string]: string } = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"10px\",\r\n };\r\n\r\n const buttonStyle: { [key: string]: string } = {\r\n width: `${BUTTON_SIZE}px`,\r\n height: `${BUTTON_SIZE}px`,\r\n minWidth: `${BUTTON_SIZE}px`,\r\n minHeight: `${BUTTON_SIZE}px`,\r\n borderRadius: BORDER_RADIUS.button,\r\n backgroundColor: bgColor,\r\n color: \"#ffffff\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n transition: `background-color ${TRANSITIONS.fast}, transform ${TRANSITIONS.fast}`,\r\n position: \"relative\",\r\n flexShrink: \"0\",\r\n };\r\n\r\n const iconStyle: { [key: string]: string } = {\r\n width: \"24px\",\r\n height: \"24px\",\r\n display: \"block\",\r\n filter: getContrastIconFilter(bgColor),\r\n };\r\n\r\n const showStopButton = isBusy && !isRecording;\r\n\r\n const handleClick = () => {\r\n if (showStopButton) {\r\n onStopTask();\r\n } else if (isRecording) {\r\n onCancelRecording();\r\n } else {\r\n onMicClick();\r\n }\r\n };\r\n\r\n // Shared close button style\r\n const closeBtnStyle: { [key: string]: string } = {\r\n position: \"absolute\",\r\n top: \"6px\",\r\n right: \"6px\",\r\n width: \"20px\",\r\n height: \"20px\",\r\n borderRadius: \"50%\",\r\n border: \"none\",\r\n background: \"transparent\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n fontSize: \"12px\",\r\n lineHeight: \"1\",\r\n color: COLORS.text,\r\n padding: \"0\",\r\n };\r\n\r\n const renderPopup = (\r\n content: preact.ComponentChildren,\r\n onClick: () => void,\r\n onClose: (() => void) | null,\r\n extraClass: string,\r\n scrollable: boolean,\r\n ) => (\r\n <div\r\n className={`bulut-popup ${extraClass}`}\r\n style={{ cursor: \"pointer\" }}\r\n onClick={onClick}\r\n >\r\n {/* Close button */}\r\n {onClose && (\r\n <button\r\n type=\"button\"\r\n style={closeBtnStyle}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onClose();\r\n }}\r\n aria-label=\"Kapat\"\r\n >\r\n <SvgIcon\r\n strokeWidth={3}\r\n src={closeIconContent}\r\n stroke={\"currentColor\"}\r\n height={14}\r\n />\r\n </button>\r\n )}\r\n\r\n {/* Text content */}\r\n <div\r\n style={{\r\n paddingRight: onClose ? \"22px\" : \"0\",\r\n wordBreak: \"break-word\",\r\n ...(scrollable ? { maxHeight: \"96px\", overflowY: \"auto\" } : {}),\r\n }}\r\n >\r\n {content}\r\n </div>\r\n </div>\r\n );\r\n\r\n return (\r\n <>\r\n <style>{`\r\n @import url('https://fonts.googleapis.com/css2?family=Geist:wght@100..900&display=swap');\r\n\r\n .bulut-popup {\r\n background: #ffffff;\r\n color: ${COLORS.text};\r\n padding: 10px 14px;\r\n border-radius: 12px;\r\n font-size: 14px;\r\n line-height: 1.4;\r\n position: relative;\r\n overflow: visible;\r\n box-shadow: ${SHADOW};\r\n }\r\n .bulut-popup-bubble {\r\n animation: bulut-bubbleIn 400ms ease-out;\r\n }\r\n .bulut-popup-preview {\r\n animation: bulut-popIn ${TRANSITIONS.medium};\r\n }\r\n\r\n /* Desktop: limit width, lean to right */\r\n .bulut-popup {\r\n max-width: 320px;\r\n }\r\n\r\n /* Mobile: full-width layout with popup filling remaining space */\r\n @media (max-width: 600px) {\r\n .bulut-fab-container:has(.bulut-popup) {\r\n left: 16px !important;\r\n right: 16px !important;\r\n }\r\n .bulut-fab-container:has(.bulut-popup) .bulut-controls-row {\r\n width: 100%;\r\n }\r\n .bulut-popup {\r\n flex: 1;\r\n min-width: 0;\r\n max-width: none;\r\n }\r\n }\r\n\r\n @keyframes bulut-popIn {\r\n from { opacity: 0; transform: translateX(10px); }\r\n to { opacity: 1; transform: translateX(0); }\r\n }\r\n @keyframes bulut-bubbleIn {\r\n 0% { opacity: 0; transform: translateX(10px) scale(0.95); }\r\n 60% { opacity: 1; transform: translateX(-4px) scale(1.02); }\r\n 100% { opacity: 1; transform: translateX(0) scale(1); }\r\n }\r\n @keyframes bulut-badgeIn {\r\n from { opacity: 0; transform: translateY(-4px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `}</style>\r\n\r\n <div className=\"bulut-fab-container\" style={containerStyle}>\r\n <div className=\"bulut-controls-row\" style={controlsRowStyle}>\r\n {/* Welcome bubble */}\r\n {showBubble &&\r\n !isRecording &&\r\n !previewMessage &&\r\n renderPopup(\r\n \"Destek lazımsa hemen konuşmaya başlayabiliriz!\",\r\n onBubbleClick,\r\n null,\r\n \"bulut-popup-bubble\",\r\n false,\r\n )}\r\n\r\n {/* New-message preview */}\r\n {previewMessage &&\r\n renderPopup(\r\n previewMessage,\r\n onPreviewClick,\r\n onPreviewClose,\r\n \"bulut-popup-preview\",\r\n true,\r\n )}\r\n\r\n {/* Main mic / cancel button */}\r\n <button\r\n style={buttonStyle}\r\n onClick={handleClick}\r\n onMouseEnter={(e) => {\r\n Object.assign(e.currentTarget.style, {\r\n backgroundColor: COLORS.primaryHover,\r\n transform: \"scale(1.05)\",\r\n });\r\n }}\r\n onMouseLeave={(e) => {\r\n Object.assign(e.currentTarget.style, {\r\n transform: \"scale(1)\",\r\n });\r\n }}\r\n aria-label={showStopButton ? \"Görevi durdur\" : isRecording ? \"Kaydı iptal et\" : \"Konuşmaya başla\"}\r\n >\r\n <SvgIcon\r\n src={showStopButton ? stopIconContent : isRecording ? closeIconContent : microphoneIconContent}\r\n aria-hidden=\"true\"\r\n fill-opacity={0}\r\n stroke={\"currentColor\"}\r\n style={iconStyle}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n","export interface PageContext {\r\n links: string[];\r\n interactables: string[];\r\n summary: string;\r\n}\r\n\r\nexport interface CachedPageContextEntry {\r\n url: string;\r\n summary: string;\r\n links: string[];\r\n interactables: string[];\r\n capturedAt: number;\r\n version: number;\r\n}\r\n\r\nexport interface PageContextSummaryInput {\r\n url: string;\r\n title: string;\r\n lang: string;\r\n headings: string[];\r\n landmarks: string[];\r\n links: string[];\r\n interactables: string[];\r\n interactionSignals: string[];\r\n pageBlueprint: string[];\r\n textSnippets: string[];\r\n outerHtmlDigest: string;\r\n}\r\n\r\ninterface InteractableCandidate {\r\n line: string;\r\n score: number;\r\n order: number;\r\n}\r\n\r\ninterface PageSignalSnapshot {\r\n links: string[];\r\n interactables: string[];\r\n interactionSignals: string[];\r\n pageBlueprint: string[];\r\n}\r\n\r\nconst MAX_LINKS = 20;\r\nconst MAX_INTERACTABLES = 24;\r\nconst MAX_HEADINGS = 10;\r\nconst MAX_TEXT_SNIPPETS = 4;\r\nconst MAX_OUTER_HTML_DIGEST = 760;\r\nconst MAX_CACHED_PAGES = 20;\r\nconst MAX_PAGE_SCAN_ELEMENTS = 2000;\r\nconst MAX_EVENT_HINTS_PER_ELEMENT = 4;\r\nconst MAX_BRANCH_SAMPLES = 4;\r\nconst MAX_BRANCH_DEPTH = 2;\r\nexport const MAX_CONTEXT_SUMMARY_CHARS = 3400;\r\nconst MAX_CONTEXT_WITH_HISTORY_CHARS = 4200;\r\nexport const PAGE_CONTEXT_CACHE_VERSION = 2;\r\nexport const PAGE_CONTEXT_CACHE_KEY = \"auticbot_page_context_cache_v2\";\r\n\r\nconst NON_CONTENT_TAGS = new Set([\r\n \"script\",\r\n \"style\",\r\n \"noscript\",\r\n \"template\",\r\n \"link\",\r\n \"meta\",\r\n]);\r\n\r\nconst NATIVE_INTERACTIVE_TAGS = new Set([\r\n \"a\",\r\n \"button\",\r\n \"input\",\r\n \"textarea\",\r\n \"select\",\r\n \"summary\",\r\n \"details\",\r\n \"option\",\r\n]);\r\n\r\nconst INTERACTIVE_ROLES = new Set([\r\n \"button\",\r\n \"link\",\r\n \"tab\",\r\n \"menuitem\",\r\n \"option\",\r\n \"checkbox\",\r\n \"radio\",\r\n \"switch\",\r\n \"combobox\",\r\n \"textbox\",\r\n \"searchbox\",\r\n \"slider\",\r\n \"spinbutton\",\r\n \"treeitem\",\r\n]);\r\n\r\nconst TRACKED_DISPLAY_VALUES = new Set([\r\n \"block\",\r\n \"inline\",\r\n \"inline-block\",\r\n \"flex\",\r\n \"inline-flex\",\r\n \"grid\",\r\n \"inline-grid\",\r\n]);\r\n\r\nconst TRACKED_POSITION_VALUES = new Set([\r\n \"relative\",\r\n \"absolute\",\r\n \"fixed\",\r\n \"sticky\",\r\n]);\r\n\r\nconst EVENT_HINT_NAMES = [\r\n \"click\",\r\n \"dblclick\",\r\n \"mousedown\",\r\n \"mouseup\",\r\n \"pointerdown\",\r\n \"pointerup\",\r\n \"touchstart\",\r\n \"touchend\",\r\n \"keydown\",\r\n \"keyup\",\r\n \"keypress\",\r\n \"input\",\r\n \"change\",\r\n \"submit\",\r\n \"focus\",\r\n \"blur\",\r\n];\r\n\r\nconst ARIA_INTERACTION_ATTRS = [\r\n \"aria-controls\",\r\n \"aria-expanded\",\r\n \"aria-haspopup\",\r\n \"aria-pressed\",\r\n \"aria-selected\",\r\n];\r\n\r\nconst DATA_INTERACTION_PATTERN =\r\n /(action|click|press|toggle|target|trigger|nav|open|close|menu|modal|command|submit)/i;\r\n\r\nconst pageContextCache = new Map<string, CachedPageContextEntry>();\r\nlet cacheHydrated = false;\r\n\r\nconst normalizeWhitespace = (value: string): string =>\r\n value.replace(/\\s+/g, \" \").trim();\r\n\r\nconst truncate = (value: string, maxChars: number): string => {\r\n if (value.length <= maxChars) {\r\n return value;\r\n }\r\n\r\n const suffix = \"\\n...[truncated]\";\r\n return `${value.slice(0, Math.max(0, maxChars - suffix.length))}${suffix}`;\r\n};\r\n\r\nconst truncateInline = (value: string, maxChars: number): string => {\r\n if (value.length <= maxChars) {\r\n return value;\r\n }\r\n return `${value.slice(0, Math.max(0, maxChars - 3))}...`;\r\n};\r\n\r\nconst canonicalUrl = (rawUrl: string): string => {\r\n try {\r\n return new URL(rawUrl, rawUrl).href;\r\n } catch {\r\n return rawUrl;\r\n }\r\n};\r\n\r\nconst isCacheEntry = (value: unknown): value is CachedPageContextEntry => {\r\n if (typeof value !== \"object\" || value === null) {\r\n return false;\r\n }\r\n\r\n const obj = value as Record<string, unknown>;\r\n return (\r\n typeof obj.url === \"string\" &&\r\n typeof obj.summary === \"string\" &&\r\n Array.isArray(obj.links) &&\r\n Array.isArray(obj.interactables) &&\r\n typeof obj.capturedAt === \"number\" &&\r\n typeof obj.version === \"number\"\r\n );\r\n};\r\n\r\nconst bumpCount = (map: Map<string, number>, key: string): void => {\r\n if (!key) {\r\n return;\r\n }\r\n map.set(key, (map.get(key) ?? 0) + 1);\r\n};\r\n\r\nconst formatTopCounts = (map: Map<string, number>, maxItems: number): string => {\r\n if (map.size === 0) {\r\n return \"none\";\r\n }\r\n\r\n return Array.from(map.entries())\r\n .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))\r\n .slice(0, maxItems)\r\n .map(([name, count]) => `${name}*${count}`)\r\n .join(\", \");\r\n};\r\n\r\nconst parseTabIndex = (value: string | null): number | null => {\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n const parsed = Number.parseInt(value, 10);\r\n return Number.isNaN(parsed) ? null : parsed;\r\n};\r\n\r\nconst compactToken = (value: string, maxChars: number = 18): string => {\r\n const compact = value.replace(/\\s+/g, \"-\").replace(/[^a-zA-Z0-9_-]/g, \"\");\r\n return compact ? truncateInline(compact, maxChars) : \"\";\r\n};\r\n\r\nconst getElementDepth = (element: Element): number => {\r\n let depth = 0;\r\n let cursor: Element | null = element;\r\n while (cursor?.parentElement) {\r\n depth += 1;\r\n cursor = cursor.parentElement;\r\n if (cursor === document.body) {\r\n break;\r\n }\r\n }\r\n return depth;\r\n};\r\n\r\nconst getPrimaryRole = (element: Element): string => {\r\n const rawRole = normalizeWhitespace(element.getAttribute(\"role\") || \"\")\r\n .toLowerCase()\r\n .split(\" \")[0];\r\n return rawRole || \"\";\r\n};\r\n\r\nconst hydrateCacheFromStorage = (): void => {\r\n if (cacheHydrated || typeof sessionStorage === \"undefined\") {\r\n return;\r\n }\r\n\r\n cacheHydrated = true;\r\n\r\n try {\r\n const raw = sessionStorage.getItem(PAGE_CONTEXT_CACHE_KEY);\r\n if (!raw) {\r\n return;\r\n }\r\n\r\n const parsed = JSON.parse(raw);\r\n if (!Array.isArray(parsed)) {\r\n return;\r\n }\r\n\r\n for (const value of parsed) {\r\n if (!isCacheEntry(value)) {\r\n continue;\r\n }\r\n if (value.version !== PAGE_CONTEXT_CACHE_VERSION) {\r\n continue;\r\n }\r\n pageContextCache.set(value.url, value);\r\n }\r\n if (pageContextCache.size > 0) {\r\n console.info(\r\n `[Autic] context cache restored entries=${pageContextCache.size}`,\r\n );\r\n }\r\n } catch (error) {\r\n console.warn(\"[Autic] context cache restore failed\", error);\r\n }\r\n};\r\n\r\nconst persistCacheToStorage = (): void => {\r\n if (typeof sessionStorage === \"undefined\") {\r\n return;\r\n }\r\n\r\n try {\r\n const serialized = JSON.stringify(\r\n Array.from(pageContextCache.values()).sort(\r\n (a, b) => a.capturedAt - b.capturedAt,\r\n ),\r\n );\r\n sessionStorage.setItem(PAGE_CONTEXT_CACHE_KEY, serialized);\r\n } catch (error) {\r\n console.warn(\"[Autic] context cache persist failed\", error);\r\n }\r\n};\r\n\r\nconst pruneOldestCacheEntries = (): void => {\r\n if (pageContextCache.size <= MAX_CACHED_PAGES) {\r\n return;\r\n }\r\n\r\n const sorted = Array.from(pageContextCache.values()).sort(\r\n (a, b) => a.capturedAt - b.capturedAt,\r\n );\r\n const overflow = sorted.length - MAX_CACHED_PAGES;\r\n for (let i = 0; i < overflow; i += 1) {\r\n pageContextCache.delete(sorted[i].url);\r\n }\r\n};\r\n\r\nconst buildSummaryWithHistory = (\r\n current: CachedPageContextEntry,\r\n): string => {\r\n const recentPages = Array.from(pageContextCache.values())\r\n .filter((entry) => entry.url !== current.url)\r\n .sort((a, b) => b.capturedAt - a.capturedAt)\r\n .slice(0, 3);\r\n\r\n if (recentPages.length === 0) {\r\n return current.summary;\r\n }\r\n\r\n const historySection = [\r\n \"Recent Page Memory:\",\r\n ...recentPages.map((entry) => {\r\n const compactSummary = normalizeWhitespace(entry.summary).slice(0, 180);\r\n return `- ${entry.url} :: ${compactSummary}`;\r\n }),\r\n ].join(\"\\n\");\r\n\r\n return truncate(\r\n `${current.summary}\\n\\n${historySection}`,\r\n MAX_CONTEXT_WITH_HISTORY_CHARS,\r\n );\r\n};\r\n\r\nconst isVisible = (element: Element): boolean => {\r\n if (element.getAttribute(\"aria-hidden\") === \"true\") {\r\n return false;\r\n }\r\n\r\n if (element instanceof HTMLElement && element.hidden) {\r\n return false;\r\n }\r\n\r\n const style = window.getComputedStyle(element);\r\n if (style.display === \"none\" || style.visibility === \"hidden\") {\r\n return false;\r\n }\r\n\r\n const rect = element.getBoundingClientRect();\r\n return rect.width > 0 && rect.height > 0;\r\n};\r\n\r\nconst toAbsoluteUrl = (href: string): string => {\r\n try {\r\n return new URL(href, window.location.href).href;\r\n } catch {\r\n return href;\r\n }\r\n};\r\n\r\nconst escapeCssValue = (value: string): string => {\r\n if (typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\") {\r\n return CSS.escape(value);\r\n }\r\n\r\n return value.replace(/([ #;&,.+*~':\"!^$\\[\\]()=>|\\/@])/g, \"\\\\$1\");\r\n};\r\n\r\nconst buildSelector = (element: Element): string => {\r\n const tag = element.tagName.toLowerCase();\r\n\r\n if (element.id) {\r\n return `#${escapeCssValue(element.id)}`;\r\n }\r\n\r\n const name = element.getAttribute(\"name\");\r\n if (name) {\r\n return `${tag}[name=\"${escapeCssValue(name)}\"]`;\r\n }\r\n\r\n const ariaLabel = element.getAttribute(\"aria-label\");\r\n if (ariaLabel) {\r\n return `${tag}[aria-label=\"${escapeCssValue(ariaLabel)}\"]`;\r\n }\r\n\r\n const classes = Array.from(element.classList)\r\n .filter(Boolean)\r\n .slice(0, 2)\r\n .map((className) => `.${escapeCssValue(className)}`)\r\n .join(\"\");\r\n if (classes) {\r\n return `${tag}${classes}`;\r\n }\r\n\r\n const parent = element.parentElement;\r\n if (!parent) {\r\n return tag;\r\n }\r\n\r\n const siblingsOfTag = Array.from(parent.children).filter(\r\n (sibling) => sibling.tagName === element.tagName,\r\n );\r\n const index = siblingsOfTag.indexOf(element) + 1;\r\n return `${tag}:nth-of-type(${index})`;\r\n};\r\n\r\nconst getElementLabel = (element: Element): string => {\r\n const text = normalizeWhitespace(\r\n (element instanceof HTMLElement ? element.innerText : element.textContent) ||\r\n \"\",\r\n );\r\n const ariaLabel = normalizeWhitespace(element.getAttribute(\"aria-label\") || \"\");\r\n const title = normalizeWhitespace(element.getAttribute(\"title\") || \"\");\r\n const placeholder = normalizeWhitespace(\r\n element.getAttribute(\"placeholder\") || \"\",\r\n );\r\n const name = normalizeWhitespace(element.getAttribute(\"name\") || \"\");\r\n const value =\r\n element instanceof HTMLInputElement ||\r\n element instanceof HTMLTextAreaElement ||\r\n element instanceof HTMLButtonElement\r\n ? normalizeWhitespace(element.value || \"\")\r\n : \"\";\r\n\r\n const classHint = Array.from(element.classList)\r\n .map((item) => compactToken(item, 16))\r\n .find(Boolean);\r\n const fallback =\r\n (element.id && `#${element.id}`) ||\r\n (classHint && `.${classHint}`) ||\r\n buildSelector(element);\r\n\r\n const label =\r\n text || ariaLabel || title || placeholder || value || name || fallback;\r\n\r\n if (element.tagName.toLowerCase() === \"input\") {\r\n const inputType = element.getAttribute(\"type\") || \"text\";\r\n return `${inputType} ${label || \"input\"}`;\r\n }\r\n\r\n return label || \"untitled\";\r\n};\r\n\r\nconst getEventHints = (element: Element): string[] => {\r\n const record = element as unknown as Record<string, unknown>;\r\n const eventHints: string[] = [];\r\n\r\n for (const eventName of EVENT_HINT_NAMES) {\r\n const handlerKey = `on${eventName}`;\r\n const hasInlineHandler = Boolean(element.getAttribute(handlerKey));\r\n const hasPropertyHandler = typeof record[handlerKey] === \"function\";\r\n\r\n if (!hasInlineHandler && !hasPropertyHandler) {\r\n continue;\r\n }\r\n\r\n eventHints.push(eventName);\r\n if (eventHints.length >= MAX_EVENT_HINTS_PER_ELEMENT) {\r\n break;\r\n }\r\n }\r\n\r\n return eventHints;\r\n};\r\n\r\nconst getAriaInteractionHints = (element: Element): string[] =>\r\n ARIA_INTERACTION_ATTRS.filter((attrName) => element.hasAttribute(attrName)).map(\r\n (attrName) => attrName.replace(\"aria-\", \"\"),\r\n );\r\n\r\nconst getDataInteractionHints = (element: Element): string[] =>\r\n element\r\n .getAttributeNames()\r\n .filter(\r\n (attrName) =>\r\n attrName.startsWith(\"data-\") && DATA_INTERACTION_PATTERN.test(attrName),\r\n )\r\n .slice(0, 2)\r\n .map((attrName) => attrName.replace(\"data-\", \"\"));\r\n\r\nconst getStyleHints = (style: CSSStyleDeclaration): string[] => {\r\n const styleHints: string[] = [];\r\n\r\n if (style.cursor === \"pointer\") {\r\n styleHints.push(\"cursor:pointer\");\r\n }\r\n\r\n if (\r\n style.display === \"flex\" ||\r\n style.display === \"grid\" ||\r\n style.display === \"inline-flex\" ||\r\n style.display === \"inline-grid\"\r\n ) {\r\n styleHints.push(`display:${style.display}`);\r\n }\r\n\r\n if (style.position === \"fixed\" || style.position === \"sticky\") {\r\n styleHints.push(`position:${style.position}`);\r\n }\r\n\r\n return styleHints.slice(0, 2);\r\n};\r\n\r\nconst buildBlueprintToken = (element: Element): string => {\r\n const tag = element.tagName.toLowerCase();\r\n const idToken = element.id ? `#${compactToken(element.id)}` : \"\";\r\n const classToken = Array.from(element.classList)\r\n .map((item) => compactToken(item, 16))\r\n .find(Boolean);\r\n\r\n return `${tag}${idToken}${classToken ? `.${classToken}` : \"\"}`;\r\n};\r\n\r\nconst buildBranchDigest = (element: Element, depth: number): string => {\r\n const token = buildBlueprintToken(element);\r\n if (depth <= 0) {\r\n return token;\r\n }\r\n\r\n const children = Array.from(element.children)\r\n .filter((child) => !NON_CONTENT_TAGS.has(child.tagName.toLowerCase()))\r\n .filter((child) => isVisible(child));\r\n if (children.length === 0) {\r\n return token;\r\n }\r\n\r\n const sampled = children\r\n .slice(0, 3)\r\n .map((child) => buildBranchDigest(child, depth - 1));\r\n const overflow =\r\n children.length > sampled.length ? `+${children.length - sampled.length}` : \"\";\r\n\r\n return `${token}>${sampled.join(\"+\")}${overflow}`;\r\n};\r\n\r\nconst collectDomBranchDigest = (): string[] => {\r\n const root = document.body ?? document.documentElement;\r\n const topLevelNodes = Array.from(root.children)\r\n .filter((child) => !NON_CONTENT_TAGS.has(child.tagName.toLowerCase()))\r\n .filter((child) => isVisible(child))\r\n .slice(0, MAX_BRANCH_SAMPLES);\r\n\r\n return topLevelNodes.map((child) =>\r\n truncateInline(buildBranchDigest(child, MAX_BRANCH_DEPTH), 140),\r\n );\r\n};\r\n\r\nconst formatSection = (title: string, lines: string[]): string => {\r\n if (lines.length === 0) {\r\n return `${title}:\\n- none`;\r\n }\r\n\r\n return `${title}:\\n${lines.join(\"\\n\")}`;\r\n};\r\n\r\nconst buildOuterHtmlDigest = (): string => {\r\n const raw = document.body?.outerHTML || document.documentElement.outerHTML;\r\n\r\n const withoutScripts = raw\r\n .replace(/<script[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<style[\\s\\S]*?<\\/style>/gi, \"\")\r\n .replace(/<noscript[\\s\\S]*?<\\/noscript>/gi, \"\")\r\n .replace(/<!--[\\s\\S]*?-->/g, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n\r\n const structural = withoutScripts\r\n .replace(/>[^<]*</g, \"><\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n\r\n return truncate(structural, MAX_OUTER_HTML_DIGEST);\r\n};\r\n\r\nconst collectTextSnippets = (): string[] => {\r\n const root =\r\n document.querySelector(\"main, article, [role='main']\") ?? document.body;\r\n const snippets: string[] = [];\r\n const seen = new Set<string>();\r\n\r\n const candidates = Array.from(root.querySelectorAll(\"p, li, h1, h2, h3\"));\r\n for (const node of candidates) {\r\n if (!isVisible(node)) {\r\n continue;\r\n }\r\n\r\n const text = normalizeWhitespace(node.textContent || \"\");\r\n if (!text || text.length < 20) {\r\n continue;\r\n }\r\n\r\n const compact = truncateInline(text, 180);\r\n if (seen.has(compact)) {\r\n continue;\r\n }\r\n\r\n seen.add(compact);\r\n snippets.push(`- ${compact}`);\r\n if (snippets.length >= MAX_TEXT_SNIPPETS) {\r\n break;\r\n }\r\n }\r\n\r\n return snippets;\r\n};\r\n\r\nconst collectLandmarkSnapshot = (): string[] => {\r\n const probes: Array<{ label: string; selector: string }> = [\r\n { label: \"main\", selector: \"main, [role='main']\" },\r\n { label: \"nav\", selector: \"nav, [role='navigation']\" },\r\n { label: \"section\", selector: \"section\" },\r\n { label: \"article\", selector: \"article\" },\r\n { label: \"form\", selector: \"form\" },\r\n { label: \"a\", selector: \"a\" },\r\n { label: \"button\", selector: \"button\" },\r\n { label: \"input\", selector: \"input\" },\r\n { label: \"role=button/link\", selector: \"[role='button'], [role='link']\" },\r\n { label: \"onclick attrs\", selector: \"[onclick]\" },\r\n {\r\n label: \"other event attrs\",\r\n selector:\r\n \"[onpointerdown], [onpointerup], [onkeydown], [onkeyup], [onchange], [onsubmit]\",\r\n },\r\n { label: \"tabindex\", selector: \"[tabindex]\" },\r\n { label: \"contenteditable\", selector: \"[contenteditable='true']\" },\r\n { label: \"inline cursor styles\", selector: \"[style*='cursor']\" },\r\n ];\r\n\r\n return probes.map(\r\n ({ label, selector }) => `- ${label}: ${document.querySelectorAll(selector).length}`,\r\n );\r\n};\r\n\r\nconst collectPageSignalSnapshot = (): PageSignalSnapshot => {\r\n const allElements = Array.from(document.querySelectorAll(\"*\"));\r\n const sampledElements = allElements.slice(0, MAX_PAGE_SCAN_ELEMENTS);\r\n\r\n const links: string[] = [];\r\n const linkSet = new Set<string>();\r\n const interactableCandidates = new Map<string, InteractableCandidate>();\r\n const tagCounts = new Map<string, number>();\r\n const roleCounts = new Map<string, number>();\r\n const eventCounts = new Map<string, number>();\r\n const displayCounts = new Map<string, number>();\r\n const positionCounts = new Map<string, number>();\r\n\r\n let visibleElements = 0;\r\n let maxDepth = 0;\r\n let semanticInteractables = 0;\r\n let nonSemanticInteractables = 0;\r\n let eventHintElements = 0;\r\n let tabStopElements = 0;\r\n let pointerCursorElements = 0;\r\n let dataHintElements = 0;\r\n let ariaHintElements = 0;\r\n let contentEditableElements = 0;\r\n\r\n for (let order = 0; order < sampledElements.length; order += 1) {\r\n const element = sampledElements[order];\r\n const tag = element.tagName.toLowerCase();\r\n\r\n if (NON_CONTENT_TAGS.has(tag)) {\r\n continue;\r\n }\r\n\r\n if (!isVisible(element)) {\r\n continue;\r\n }\r\n\r\n visibleElements += 1;\r\n bumpCount(tagCounts, tag);\r\n\r\n const role = getPrimaryRole(element);\r\n if (role) {\r\n bumpCount(roleCounts, role);\r\n }\r\n\r\n const depth = getElementDepth(element);\r\n if (depth > maxDepth) {\r\n maxDepth = depth;\r\n }\r\n\r\n const style = window.getComputedStyle(element);\r\n if (TRACKED_DISPLAY_VALUES.has(style.display)) {\r\n bumpCount(displayCounts, style.display);\r\n }\r\n if (TRACKED_POSITION_VALUES.has(style.position)) {\r\n bumpCount(positionCounts, style.position);\r\n }\r\n\r\n const eventHints = getEventHints(element);\r\n if (eventHints.length > 0) {\r\n eventHintElements += 1;\r\n for (const eventName of eventHints) {\r\n bumpCount(eventCounts, eventName);\r\n }\r\n }\r\n\r\n const tabIndex = parseTabIndex(element.getAttribute(\"tabindex\"));\r\n const hasTabStop = tabIndex !== null && tabIndex >= 0;\r\n if (hasTabStop) {\r\n tabStopElements += 1;\r\n }\r\n\r\n const hasPointerCursor = style.cursor === \"pointer\";\r\n if (hasPointerCursor) {\r\n pointerCursorElements += 1;\r\n }\r\n\r\n const dataHints = getDataInteractionHints(element);\r\n if (dataHints.length > 0) {\r\n dataHintElements += 1;\r\n }\r\n\r\n const ariaHints = getAriaInteractionHints(element);\r\n if (ariaHints.length > 0) {\r\n ariaHintElements += 1;\r\n }\r\n\r\n const isContentEditable = element.getAttribute(\"contenteditable\") === \"true\";\r\n if (isContentEditable) {\r\n contentEditableElements += 1;\r\n }\r\n\r\n const href = element.getAttribute(\"href\");\r\n const isNativeInteractive = NATIVE_INTERACTIVE_TAGS.has(tag) && (tag !== \"a\" || Boolean(href));\r\n const isRoleInteractive = INTERACTIVE_ROLES.has(role);\r\n const isDisabled =\r\n element.hasAttribute(\"disabled\") ||\r\n element.getAttribute(\"aria-disabled\") === \"true\";\r\n\r\n if (\r\n tag === \"a\" &&\r\n href &&\r\n !href.startsWith(\"#\") &&\r\n !href.startsWith(\"javascript:\")\r\n ) {\r\n const absoluteHref = toAbsoluteUrl(href);\r\n const label = getElementLabel(element) || absoluteHref;\r\n const line = `- ${truncateInline(label, 90)} -> ${truncateInline(absoluteHref, 140)}`;\r\n\r\n if (!linkSet.has(line)) {\r\n linkSet.add(line);\r\n links.push(line);\r\n if (links.length >= MAX_LINKS) {\r\n // Keep scanning other elements for page blueprint and interactables.\r\n }\r\n }\r\n }\r\n\r\n const hasInteractionSignals =\r\n isNativeInteractive ||\r\n isRoleInteractive ||\r\n isContentEditable ||\r\n eventHints.length > 0 ||\r\n hasTabStop ||\r\n hasPointerCursor ||\r\n dataHints.length > 0 ||\r\n ariaHints.length > 0;\r\n\r\n if (!hasInteractionSignals || isDisabled) {\r\n continue;\r\n }\r\n\r\n if (isNativeInteractive) {\r\n semanticInteractables += 1;\r\n } else {\r\n nonSemanticInteractables += 1;\r\n }\r\n\r\n const selector = buildSelector(element);\r\n const label = truncateInline(getElementLabel(element), 90);\r\n const styleHints = getStyleHints(style);\r\n const signalTokens: string[] = [];\r\n\r\n if (eventHints.length > 0) {\r\n signalTokens.push(`evt:${eventHints.join(\"|\")}`);\r\n }\r\n if (isRoleInteractive) {\r\n signalTokens.push(`role:${role}`);\r\n }\r\n if (hasTabStop) {\r\n signalTokens.push(`tab:${tabIndex}`);\r\n }\r\n if (dataHints.length > 0) {\r\n signalTokens.push(`data:${dataHints.join(\"|\")}`);\r\n }\r\n if (ariaHints.length > 0) {\r\n signalTokens.push(`aria:${ariaHints.join(\"|\")}`);\r\n }\r\n if (styleHints.length > 0) {\r\n signalTokens.push(`css:${styleHints.join(\"|\")}`);\r\n } else if (hasPointerCursor) {\r\n signalTokens.push(\"css:cursor:pointer\");\r\n }\r\n\r\n const signalBlock =\r\n signalTokens.length > 0 ? ` [${signalTokens.join(\"; \")}]` : \"\";\r\n const line = truncateInline(\r\n `- ${tag} ${selector}${signalBlock} (${label})`,\r\n 240,\r\n );\r\n\r\n const score =\r\n eventHints.length * 5 +\r\n (isNativeInteractive ? 5 : 0) +\r\n (isRoleInteractive ? 4 : 0) +\r\n (hasTabStop ? 2 : 0) +\r\n (hasPointerCursor ? 2 : 0) +\r\n (dataHints.length > 0 ? 2 : 0) +\r\n (ariaHints.length > 0 ? 1 : 0) +\r\n (isContentEditable ? 2 : 0);\r\n\r\n const existing = interactableCandidates.get(line);\r\n if (!existing || score > existing.score) {\r\n interactableCandidates.set(line, { line, score, order });\r\n }\r\n }\r\n\r\n const interactables = Array.from(interactableCandidates.values())\r\n .sort((a, b) => b.score - a.score || a.order - b.order)\r\n .slice(0, MAX_INTERACTABLES)\r\n .map((candidate) => candidate.line);\r\n\r\n const interactiveRoleCounts = new Map(\r\n Array.from(roleCounts.entries()).filter(([role]) =>\r\n INTERACTIVE_ROLES.has(role),\r\n ),\r\n );\r\n\r\n const interactionSignals = [\r\n `- coverage: semantic=${semanticInteractables}, non-semantic=${nonSemanticInteractables}, contenteditable=${contentEditableElements}`,\r\n `- listener hints: ${formatTopCounts(eventCounts, 8)}`,\r\n `- interaction cues: tabindex>=0=${tabStopElements}, pointer-cursor=${pointerCursorElements}, data-hints=${dataHintElements}, aria-hints=${ariaHintElements}`,\r\n `- role hints: ${formatTopCounts(interactiveRoleCounts, 8)}`,\r\n \"- listener scope: inline/on* handlers are detected directly; addEventListener handlers are inferred via cues.\",\r\n ].map((line) => truncateInline(line, 250));\r\n\r\n const branchDigest = collectDomBranchDigest();\r\n const pageBlueprint = [\r\n `- nodes: total=${allElements.length}, scanned=${sampledElements.length}, visible=${visibleElements}, max-depth=${maxDepth}${allElements.length > sampledElements.length ? \", sampling=on\" : \"\"}`,\r\n `- tag density: ${formatTopCounts(tagCounts, 10)}`,\r\n `- role density: ${formatTopCounts(roleCounts, 8)}`,\r\n `- layout density: display(${formatTopCounts(displayCounts, 6)}), position(${formatTopCounts(positionCounts, 4)})`,\r\n `- branch digest: ${branchDigest.length > 0 ? branchDigest.join(\" || \") : \"none\"}`,\r\n ].map((line) => truncateInline(line, 260));\r\n\r\n return {\r\n links: links.slice(0, MAX_LINKS),\r\n interactables,\r\n interactionSignals,\r\n pageBlueprint,\r\n };\r\n};\r\n\r\nexport const buildPageContextSummary = (\r\n input: PageContextSummaryInput,\r\n maxChars: number = MAX_CONTEXT_SUMMARY_CHARS,\r\n): string => {\r\n const sections = [\r\n formatSection(\"Meta\", [\r\n `- URL: ${input.url || \"unknown\"}`,\r\n `- Title: ${input.title || \"unknown\"}`,\r\n `- Lang: ${input.lang || \"unknown\"}`,\r\n ]),\r\n formatSection(\"Headings\", input.headings),\r\n formatSection(\"Landmark Snapshot\", input.landmarks),\r\n formatSection(\"Interaction Signals\", input.interactionSignals),\r\n formatSection(\"Compressed Page Blueprint\", input.pageBlueprint),\r\n formatSection(\"Top Links\", input.links),\r\n formatSection(\"Top Interactables\", input.interactables),\r\n formatSection(\"Main Content Snippets\", input.textSnippets),\r\n formatSection(\"OuterHTML Skeleton\", [\r\n `- ${input.outerHtmlDigest || \"unavailable\"}`,\r\n ]),\r\n ];\r\n\r\n return truncate(sections.join(\"\\n\\n\"), maxChars);\r\n};\r\n\r\nexport const clearPageContextCache = (): void => {\r\n pageContextCache.clear();\r\n cacheHydrated = false;\r\n if (typeof sessionStorage !== \"undefined\") {\r\n sessionStorage.removeItem(PAGE_CONTEXT_CACHE_KEY);\r\n }\r\n};\r\n\r\nexport const getCachedPageContexts = (): CachedPageContextEntry[] => {\r\n hydrateCacheFromStorage();\r\n return Array.from(pageContextCache.values()).sort(\r\n (a, b) => b.capturedAt - a.capturedAt,\r\n );\r\n};\r\n\r\nexport const getPageContext = (): PageContext => {\r\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\r\n return {\r\n links: [],\r\n interactables: [],\r\n summary: \"\",\r\n };\r\n }\r\n\r\n hydrateCacheFromStorage();\r\n const url = canonicalUrl(window.location.href);\r\n const cached = pageContextCache.get(url);\r\n if (cached) {\r\n console.info(`[Autic] context cache hit url=${url}`);\r\n return {\r\n links: cached.links,\r\n interactables: cached.interactables,\r\n summary: buildSummaryWithHistory(cached),\r\n };\r\n }\r\n\r\n console.info(`[Autic] context cache miss url=${url}`);\r\n\r\n const snapshot = collectPageSignalSnapshot();\r\n const headings = Array.from(document.querySelectorAll(\"h1, h2, h3\"))\r\n .filter((element) => isVisible(element))\r\n .map((element) =>\r\n `- ${truncateInline(normalizeWhitespace(element.textContent || \"\"), 120)}`,\r\n )\r\n .filter((line) => line !== \"- \")\r\n .slice(0, MAX_HEADINGS);\r\n\r\n const summary = buildPageContextSummary({\r\n url,\r\n title: document.title,\r\n lang: document.documentElement.lang,\r\n headings,\r\n landmarks: collectLandmarkSnapshot(),\r\n links: snapshot.links,\r\n interactables: snapshot.interactables,\r\n interactionSignals: snapshot.interactionSignals,\r\n pageBlueprint: snapshot.pageBlueprint,\r\n textSnippets: collectTextSnippets(),\r\n outerHtmlDigest: buildOuterHtmlDigest(),\r\n });\r\n\r\n const entry: CachedPageContextEntry = {\r\n url,\r\n summary,\r\n links: snapshot.links,\r\n interactables: snapshot.interactables,\r\n capturedAt: Date.now(),\r\n version: PAGE_CONTEXT_CACHE_VERSION,\r\n };\r\n\r\n pageContextCache.set(url, entry);\r\n pruneOldestCacheEntries();\r\n persistCacheToStorage();\r\n console.info(\r\n `[Autic] context cache stored url=${url} size=${pageContextCache.size}`,\r\n );\r\n\r\n return {\r\n links: entry.links,\r\n interactables: entry.interactables,\r\n summary: buildSummaryWithHistory(entry),\r\n };\r\n};\r\n","import { getPageContext } from \"./context\";\r\nimport { COLORS } from \"../styles/constants\";\r\n\r\nconst AGENT_CURSOR_ID = \"auticbot-agent-cursor\";\r\nconst CURSOR_STORAGE_KEY = \"auticbot_agent_cursor_state\";\r\nexport const CURSOR_MOVE_DURATION_MS = 900;\r\nexport const SCROLL_DURATION_MS = 900;\r\nconst CURSOR_EASING = \"cubic-bezier(0.4, 0, 0.2, 1)\";\r\nconst CURSOR_HOVER_RADIUS_PX = 14;\r\n\r\n// ── Pending Agent Resume State (survives page reloads) ──────────────\r\n\r\nconst RESUME_STORAGE_KEY = \"bulut_agent_resume\";\r\nconst RESUME_TTL_MS = 60_000; // 1 minute\r\n\r\nexport interface PendingAgentResume {\r\n sessionId: string;\r\n projectId: string;\r\n model: string;\r\n voice: string;\r\n accessibilityMode: boolean;\r\n pendingToolCalls: Array<{\r\n call_id: string;\r\n tool: string;\r\n args: Record<string, unknown>;\r\n }>;\r\n completedResults: Array<{ call_id: string; result: string }>;\r\n savedAt: number;\r\n}\r\n\r\nexport const savePendingAgentResume = (\r\n state: Omit<PendingAgentResume, \"savedAt\">,\r\n): void => {\r\n if (typeof localStorage === \"undefined\") return;\r\n try {\r\n localStorage.setItem(\r\n RESUME_STORAGE_KEY,\r\n JSON.stringify({ ...state, savedAt: Date.now() }),\r\n );\r\n } catch {\r\n // localStorage may be full or blocked\r\n }\r\n};\r\n\r\nexport const getPendingAgentResume = (): PendingAgentResume | null => {\r\n if (typeof localStorage === \"undefined\") return null;\r\n const raw = localStorage.getItem(RESUME_STORAGE_KEY);\r\n if (!raw) return null;\r\n try {\r\n const parsed = JSON.parse(raw) as PendingAgentResume;\r\n if (Date.now() - parsed.savedAt > RESUME_TTL_MS) {\r\n clearPendingAgentResume();\r\n return null;\r\n }\r\n return parsed;\r\n } catch {\r\n clearPendingAgentResume();\r\n return null;\r\n }\r\n};\r\n\r\nexport const clearPendingAgentResume = (): void => {\r\n if (typeof localStorage === \"undefined\") return;\r\n localStorage.removeItem(RESUME_STORAGE_KEY);\r\n};\r\n\r\ninterface PersistedCursorState {\r\n url: string;\r\n x: number;\r\n y: number;\r\n visible: boolean;\r\n}\r\n\r\ntype InteractAction = \"move\" | \"click\" | \"type\" | \"submit\";\r\n\r\ninterface InteractToolCall {\r\n tool: \"interact\";\r\n action: InteractAction;\r\n selector?: string;\r\n text?: string;\r\n x?: number;\r\n y?: number;\r\n}\r\n\r\ninterface NavigateToolCall {\r\n tool: \"navigate\";\r\n url: string;\r\n}\r\n\r\ninterface GetPageContextToolCall {\r\n tool: \"getPageContext\";\r\n}\r\n\r\ninterface ScrollToolCall {\r\n tool: \"scroll\";\r\n selector: string;\r\n}\r\n\r\nexport type AgentToolCall =\r\n | InteractToolCall\r\n | NavigateToolCall\r\n | GetPageContextToolCall\r\n | ScrollToolCall;\r\n\r\nexport interface ParsedAgentResponse {\r\n reply: string;\r\n toolCalls: AgentToolCall[];\r\n}\r\n\r\ninterface JsonObject {\r\n [key: string]: unknown;\r\n}\r\n\r\ninterface ResolvedTarget {\r\n element?: HTMLElement;\r\n x: number;\r\n y: number;\r\n}\r\n\r\nconst isObject = (value: unknown): value is JsonObject =>\r\n typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n\r\nconst asString = (value: unknown): string | undefined =>\r\n typeof value === \"string\" && value.trim() ? value.trim() : undefined;\r\n\r\nconst asNumber = (value: unknown): number | undefined =>\r\n typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\r\n\r\nconst extractJsonCandidate = (raw: string): string => {\r\n const trimmed = raw.trim();\r\n const fencedMatch = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)\\s*```/i);\r\n if (fencedMatch?.[1]) {\r\n return fencedMatch[1].trim();\r\n }\r\n return trimmed;\r\n};\r\n\r\nconst extractFirstJsonObject = (input: string): string | null => {\r\n const start = input.indexOf(\"{\");\r\n if (start < 0) {\r\n return null;\r\n }\r\n\r\n let depth = 0;\r\n let inString = false;\r\n let isEscaped = false;\r\n\r\n for (let i = start; i < input.length; i += 1) {\r\n const char = input[i];\r\n\r\n if (inString) {\r\n if (isEscaped) {\r\n isEscaped = false;\r\n } else if (char === \"\\\\\") {\r\n isEscaped = true;\r\n } else if (char === '\"') {\r\n inString = false;\r\n }\r\n continue;\r\n }\r\n\r\n if (char === '\"') {\r\n inString = true;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"}\") {\r\n depth -= 1;\r\n if (depth === 0) {\r\n return input.slice(start, i + 1);\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst parseJsonFromRaw = (raw: string): unknown => {\r\n const candidate = extractJsonCandidate(raw);\r\n try {\r\n return JSON.parse(candidate);\r\n } catch {\r\n const objectCandidate = extractFirstJsonObject(candidate);\r\n if (!objectCandidate) {\r\n return null;\r\n }\r\n try {\r\n return JSON.parse(objectCandidate);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n};\r\n\r\nconst sanitizeToolCalls = (value: unknown): AgentToolCall[] => {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n const toolCalls: AgentToolCall[] = [];\r\n\r\n for (const item of value) {\r\n if (!isObject(item)) {\r\n continue;\r\n }\r\n\r\n if (item.tool === \"interact\") {\r\n const action = asString(item.action) as InteractAction | undefined;\r\n if (!action || ![\"move\", \"click\", \"type\", \"submit\"].includes(action)) {\r\n continue;\r\n }\r\n\r\n toolCalls.push({\r\n tool: \"interact\",\r\n action,\r\n selector: asString(item.selector),\r\n text: typeof item.text === \"string\" ? item.text : undefined,\r\n x: asNumber(item.x),\r\n y: asNumber(item.y),\r\n });\r\n continue;\r\n }\r\n\r\n if (item.tool === \"navigate\") {\r\n const url = asString(item.url);\r\n if (!url) {\r\n continue;\r\n }\r\n\r\n toolCalls.push({\r\n tool: \"navigate\",\r\n url,\r\n });\r\n continue;\r\n }\r\n\r\n if (item.tool === \"getPageContext\") {\r\n toolCalls.push({\r\n tool: \"getPageContext\",\r\n });\r\n continue;\r\n }\r\n\r\n if (item.tool === \"scroll\") {\r\n const selector = asString(item.selector);\r\n if (!selector) {\r\n continue;\r\n }\r\n\r\n toolCalls.push({\r\n tool: \"scroll\",\r\n selector,\r\n });\r\n }\r\n }\r\n\r\n return toolCalls;\r\n};\r\n\r\nexport const parseAgentResponse = (raw: string): ParsedAgentResponse => {\r\n const parsed = parseJsonFromRaw(raw);\r\n if (!isObject(parsed)) {\r\n return {\r\n reply: raw.trim(),\r\n toolCalls: [],\r\n };\r\n }\r\n\r\n const reply = asString(parsed.reply) || \"\";\r\n const toolCalls = sanitizeToolCalls(parsed.tool_calls ?? parsed.toolCalls);\r\n\r\n return {\r\n reply,\r\n toolCalls,\r\n };\r\n};\r\n\r\nexport const clamp = (value: number, min: number, max: number): number =>\r\n Math.min(max, Math.max(min, value));\r\n\r\nexport const easeInOutCubic = (progress: number): number => {\r\n if (progress < 0.5) {\r\n return 4 * progress * progress * progress;\r\n }\r\n return 1 - Math.pow(-2 * progress + 2, 3) / 2;\r\n};\r\n\r\nexport const easeInOutSine = (progress: number): number =>\r\n -(Math.cos(Math.PI * progress) - 1) / 2;\r\n\r\nexport const isRectOutsideViewport = (\r\n rect: Pick<DOMRect, \"top\" | \"bottom\">,\r\n viewportHeight: number,\r\n): boolean => rect.top < 0 || rect.bottom > viewportHeight;\r\n\r\nexport const computeCenteredScrollTop = (\r\n currentScrollY: number,\r\n rectTop: number,\r\n rectHeight: number,\r\n viewportHeight: number,\r\n maxScrollTop: number,\r\n): number => {\r\n const desired =\r\n currentScrollY + rectTop - (viewportHeight / 2 - rectHeight / 2);\r\n return clamp(desired, 0, Math.max(0, maxScrollTop));\r\n};\r\n\r\nexport const animateWindowScrollTo = async (\r\n targetY: number,\r\n durationMs: number = SCROLL_DURATION_MS,\r\n): Promise<void> => {\r\n if (typeof window === \"undefined\") {\r\n return;\r\n }\r\n\r\n const startY = window.scrollY;\r\n const delta = targetY - startY;\r\n if (Math.abs(delta) < 1) {\r\n return;\r\n }\r\n\r\n await new Promise<void>((resolve) => {\r\n const raf =\r\n window.requestAnimationFrame ||\r\n ((callback: FrameRequestCallback) => window.setTimeout(() => callback(performance.now()), 16));\r\n\r\n const startTime = performance.now();\r\n\r\n const step = (now: number) => {\r\n const elapsed = now - startTime;\r\n const progress = clamp(elapsed / durationMs, 0, 1);\r\n const eased = easeInOutSine(progress);\r\n window.scrollTo(0, startY + delta * eased);\r\n\r\n if (progress < 1) {\r\n raf(step);\r\n } else {\r\n resolve();\r\n }\r\n };\r\n\r\n raf(step);\r\n });\r\n};\r\n\r\nconst getPersistedCursorState = (): PersistedCursorState | null => {\r\n if (typeof localStorage === \"undefined\") {\r\n return null;\r\n }\r\n\r\n try {\r\n const raw = localStorage.getItem(CURSOR_STORAGE_KEY);\r\n if (!raw) {\r\n return null;\r\n }\r\n\r\n const parsed = JSON.parse(raw) as Partial<PersistedCursorState>;\r\n if (\r\n typeof parsed.url !== \"string\" ||\r\n typeof parsed.x !== \"number\" ||\r\n !Number.isFinite(parsed.x) ||\r\n typeof parsed.y !== \"number\" ||\r\n !Number.isFinite(parsed.y)\r\n ) {\r\n return null;\r\n }\r\n\r\n return {\r\n url: parsed.url,\r\n x: parsed.x,\r\n y: parsed.y,\r\n visible: parsed.visible !== false,\r\n };\r\n } catch {\r\n return null;\r\n }\r\n};\r\n\r\nconst persistCursorState = (x: number, y: number, visible: boolean) => {\r\n if (typeof localStorage === \"undefined\") {\r\n return;\r\n }\r\n\r\n try {\r\n const payload: PersistedCursorState = {\r\n url: window.location.href,\r\n x,\r\n y,\r\n visible,\r\n };\r\n localStorage.setItem(CURSOR_STORAGE_KEY, JSON.stringify(payload));\r\n } catch {\r\n // No-op: localStorage may be unavailable or blocked.\r\n }\r\n};\r\n\r\nconst setCursorPosition = (cursor: HTMLElement, x: number, y: number) => {\r\n cursor.style.left = `${x}px`;\r\n cursor.style.top = `${y}px`;\r\n};\r\n\r\nconst getCursorPosition = (cursor: HTMLElement): { x: number; y: number } => ({\r\n x: Number.parseFloat(cursor.style.left) || 0,\r\n y: Number.parseFloat(cursor.style.top) || 0,\r\n});\r\n\r\nconst setCursorVisibility = (cursor: HTMLElement, visible: boolean) => {\r\n cursor.style.opacity = visible ? \"1\" : \"0\";\r\n};\r\n\r\nlet cursorHoverTrackingInitialized = false;\r\nconst initializeCursorHoverTracking = () => {\r\n if (cursorHoverTrackingInitialized) {\r\n return;\r\n }\r\n cursorHoverTrackingInitialized = true;\r\n\r\n document.addEventListener(\"mousemove\", (event) => {\r\n const cursor = document.getElementById(AGENT_CURSOR_ID);\r\n if (!(cursor instanceof HTMLElement)) {\r\n return;\r\n }\r\n\r\n if (cursor.style.opacity !== \"1\") {\r\n return;\r\n }\r\n\r\n const { x, y } = getCursorPosition(cursor);\r\n const pointerX = event.pageX;\r\n const pointerY = event.pageY;\r\n const distance = Math.hypot(pointerX - x, pointerY - y);\r\n\r\n if (distance <= CURSOR_HOVER_RADIUS_PX) {\r\n setCursorVisibility(cursor, false);\r\n persistCursorState(x, y, false);\r\n }\r\n });\r\n};\r\n\r\nconst applyStoredCursorStateForCurrentUrl = (cursor: HTMLElement) => {\r\n const stored = getPersistedCursorState();\r\n if (!stored || stored.url !== window.location.href) {\r\n return;\r\n }\r\n\r\n setCursorPosition(cursor, stored.x, stored.y);\r\n setCursorVisibility(cursor, stored.visible);\r\n};\r\n\r\nconst ensureCursor = (): HTMLElement => {\r\n const existing = document.getElementById(AGENT_CURSOR_ID);\r\n if (existing) {\r\n // Keep cursor color in sync with the current theme\r\n existing.style.background = COLORS.primary;\r\n initializeCursorHoverTracking();\r\n return existing as HTMLElement;\r\n }\r\n\r\n const cursor = document.createElement(\"div\");\r\n cursor.id = AGENT_CURSOR_ID;\r\n cursor.style.position = \"absolute\";\r\n cursor.style.left = \"0px\";\r\n cursor.style.top = \"0px\";\r\n cursor.style.opacity = \"0\";\r\n const width = 25;\r\n cursor.style.width = `${width}px`;\r\n cursor.style.height = `${width}px`;\r\n cursor.style.borderRadius = \"50%\";\r\n const baseColor = COLORS.primary;\r\n cursor.style.background = baseColor;\r\n const border = 25 * 16 / 100;\r\n cursor.style.border = `${border}px solid #ffffff`;\r\n cursor.style.boxShadow = \"0px 0px 10px rgba(0, 11, 26, 0.5)\";\r\n cursor.style.boxSizing = \"border-box\";\r\n cursor.style.zIndex = \"2147483647\";\r\n cursor.style.pointerEvents = \"none\";\r\n cursor.style.transform = \"translate(-50%, -50%)\";\r\n cursor.style.transition = `left ${CURSOR_MOVE_DURATION_MS}ms ${CURSOR_EASING}, top ${CURSOR_MOVE_DURATION_MS}ms ${CURSOR_EASING}, opacity 150ms ease-out`;\r\n document.body.appendChild(cursor);\r\n initializeCursorHoverTracking();\r\n applyStoredCursorStateForCurrentUrl(cursor);\r\n console.info(`[Autic] cursor created color=${baseColor} duration=${CURSOR_MOVE_DURATION_MS}ms`);\r\n return cursor;\r\n};\r\n\r\nconst moveCursor = async (x: number, y: number) => {\r\n const cursor = ensureCursor();\r\n setCursorPosition(cursor, x, y);\r\n setCursorVisibility(cursor, true);\r\n persistCursorState(x, y, true);\r\n await new Promise((resolve) => setTimeout(resolve, CURSOR_MOVE_DURATION_MS));\r\n};\r\n\r\nconst getElementCenter = (element: HTMLElement): { x: number; y: number } => {\r\n const rect = element.getBoundingClientRect();\r\n return {\r\n x: rect.left + window.scrollX + rect.width / 2,\r\n y: rect.top + window.scrollY + rect.height / 2,\r\n };\r\n};\r\n\r\nconst CONTAINS_SELECTOR_PATTERN = /^(.*?):contains\\((['\"])(.*?)\\2\\)\\s*$/;\r\n\r\nconst findElementBySelector = (selector: string): Element | null => {\r\n try {\r\n return document.querySelector(selector);\r\n } catch (error) {\r\n const containsMatch = selector.match(CONTAINS_SELECTOR_PATTERN);\r\n if (!containsMatch) {\r\n console.warn(`AuticBot selector invalid: ${selector}`, error);\r\n return null;\r\n }\r\n\r\n const baseSelector = containsMatch[1]?.trim() || \"*\";\r\n const expectedText = containsMatch[3]?.trim() || \"\";\r\n if (!expectedText) {\r\n console.warn(`AuticBot selector contains empty text: ${selector}`);\r\n return null;\r\n }\r\n\r\n try {\r\n const candidates = document.querySelectorAll(baseSelector);\r\n for (const candidate of candidates) {\r\n if (candidate.textContent?.includes(expectedText)) {\r\n return candidate;\r\n }\r\n }\r\n return null;\r\n } catch (fallbackError) {\r\n console.warn(`AuticBot selector fallback invalid: ${selector}`, fallbackError);\r\n return null;\r\n }\r\n }\r\n};\r\n\r\nconst resolveTarget = (call: InteractToolCall): ResolvedTarget | null => {\r\n if (call.selector) {\r\n const selected = findElementBySelector(call.selector);\r\n\r\n if (selected instanceof HTMLElement) {\r\n const center = getElementCenter(selected);\r\n return {\r\n element: selected,\r\n x: center.x,\r\n y: center.y,\r\n };\r\n }\r\n console.warn(`AuticBot interact: selector not found: ${call.selector}`);\r\n }\r\n\r\n if (typeof call.x === \"number\" && typeof call.y === \"number\") {\r\n return {\r\n x: call.x,\r\n y: call.y,\r\n };\r\n }\r\n\r\n console.warn(\"AuticBot interact: missing target selector or coordinates.\", call);\r\n return null;\r\n};\r\n\r\nconst dispatchMouseEvent = (\r\n element: HTMLElement,\r\n type: string,\r\n x: number,\r\n y: number,\r\n) => {\r\n element.dispatchEvent(\r\n new MouseEvent(type, {\r\n bubbles: true,\r\n cancelable: true,\r\n view: window,\r\n clientX: x - window.scrollX,\r\n clientY: y - window.scrollY,\r\n }),\r\n );\r\n};\r\n\r\nconst typeIntoElement = (element: HTMLElement, text: string) => {\r\n const tagName = element.tagName.toUpperCase();\r\n if (tagName === \"INPUT\" || tagName === \"TEXTAREA\") {\r\n (element as HTMLInputElement).focus();\r\n (element as HTMLInputElement).value = text;\r\n element.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n return;\r\n }\r\n\r\n if (element.isContentEditable) {\r\n element.focus();\r\n element.textContent = text;\r\n element.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n return;\r\n }\r\n\r\n console.warn(\r\n \"AuticBot interact: type action requires input, textarea, or contenteditable target.\",\r\n );\r\n};\r\n\r\nconst submitElement = (element: HTMLElement) => {\r\n if (element.tagName === \"FORM\") {\r\n (element as HTMLFormElement).requestSubmit();\r\n return;\r\n }\r\n\r\n if (element.tagName === \"BUTTON\" && (element as HTMLButtonElement).form) {\r\n (element as HTMLButtonElement).form?.requestSubmit();\r\n return;\r\n }\r\n\r\n const parentForm = element.closest(\"form\");\r\n if (parentForm) {\r\n parentForm.requestSubmit();\r\n return;\r\n }\r\n\r\n console.warn(\"AuticBot interact: submit action requires a form target.\");\r\n};\r\n\r\nconst slowScrollElementIntoView = async (element: HTMLElement): Promise<void> => {\r\n await slowScrollElementIntoViewWithMode(element, false);\r\n};\r\n\r\nconst slowScrollElementIntoViewWithMode = async (\r\n element: HTMLElement,\r\n forceCenter: boolean,\r\n): Promise<void> => {\r\n const rect = element.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n\r\n if (!forceCenter && !isRectOutsideViewport(rect, viewportHeight)) {\r\n return;\r\n }\r\n\r\n const maxScrollTop = Math.max(\r\n 0,\r\n Math.max(document.body.scrollHeight, document.documentElement.scrollHeight) - viewportHeight,\r\n );\r\n const targetY = computeCenteredScrollTop(\r\n window.scrollY,\r\n rect.top,\r\n rect.height,\r\n viewportHeight,\r\n maxScrollTop,\r\n );\r\n\r\n await animateWindowScrollTo(targetY, SCROLL_DURATION_MS);\r\n};\r\n\r\nconst executeScroll = async (call: ScrollToolCall) => {\r\n const selected = findElementBySelector(call.selector);\r\n if (!(selected instanceof HTMLElement)) {\r\n console.warn(`AuticBot scroll: selector not found: ${call.selector}`);\r\n return;\r\n }\r\n\r\n await slowScrollElementIntoViewWithMode(selected, true);\r\n const center = getElementCenter(selected);\r\n await moveCursor(center.x, center.y);\r\n};\r\n\r\nconst executeInteract = async (call: InteractToolCall) => {\r\n const target = resolveTarget(call);\r\n if (!target) {\r\n return;\r\n }\r\n\r\n if (call.action === \"click\" && target.element) {\r\n await slowScrollElementIntoView(target.element);\r\n const center = getElementCenter(target.element);\r\n target.x = center.x;\r\n target.y = center.y;\r\n }\r\n\r\n await moveCursor(target.x, target.y);\r\n\r\n if (call.action === \"move\") {\r\n return;\r\n }\r\n\r\n if (!target.element) {\r\n console.warn(\"AuticBot interact: target element not available for action.\", call.action);\r\n return;\r\n }\r\n\r\n if (call.action === \"click\") {\r\n dispatchMouseEvent(target.element, \"pointerdown\", target.x, target.y);\r\n dispatchMouseEvent(target.element, \"mousedown\", target.x, target.y);\r\n dispatchMouseEvent(target.element, \"pointerup\", target.x, target.y);\r\n dispatchMouseEvent(target.element, \"mouseup\", target.x, target.y);\r\n target.element.click();\r\n return;\r\n }\r\n\r\n if (call.action === \"type\") {\r\n typeIntoElement(target.element, call.text ?? \"\");\r\n return;\r\n }\r\n\r\n submitElement(target.element);\r\n};\r\n\r\nconst isSamePageNavigation = (targetUrl: string): boolean => {\r\n try {\r\n const current = new URL(window.location.href);\r\n const target = new URL(targetUrl);\r\n return current.origin === target.origin && current.pathname === target.pathname;\r\n } catch {\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * Find the best matching link element for a target URL.\r\n * Supports exact href match, partial path/query/hash match,\r\n * and text-content match for framework <Link> components.\r\n */\r\nconst findMatchingLinkForTarget = (targetUrl: string): HTMLElement | null => {\r\n let parsedTarget: URL | null = null;\r\n try {\r\n parsedTarget = new URL(targetUrl, window.location.href);\r\n } catch {\r\n // will fall through to text-based matching\r\n }\r\n\r\n const allLinks = Array.from(\r\n document.querySelectorAll('a[href], [role=\"link\"][href], [data-href]'),\r\n ) as HTMLElement[];\r\n\r\n // 1. Exact href match\r\n for (const el of allLinks) {\r\n if (el instanceof HTMLAnchorElement && el.href === parsedTarget?.href) {\r\n return el;\r\n }\r\n }\r\n\r\n if (parsedTarget) {\r\n // 2. Match by pathname + search + hash (ignoring origin)\r\n for (const el of allLinks) {\r\n if (!(el instanceof HTMLAnchorElement)) continue;\r\n try {\r\n const elUrl = new URL(el.href, window.location.href);\r\n if (\r\n elUrl.pathname === parsedTarget.pathname &&\r\n elUrl.search === parsedTarget.search &&\r\n elUrl.hash === parsedTarget.hash\r\n ) {\r\n return el;\r\n }\r\n } catch {\r\n continue;\r\n }\r\n }\r\n\r\n // 3. Match by pathname only (query/hash may differ)\r\n for (const el of allLinks) {\r\n if (!(el instanceof HTMLAnchorElement)) continue;\r\n try {\r\n const elUrl = new URL(el.href, window.location.href);\r\n if (elUrl.pathname === parsedTarget.pathname) {\r\n return el;\r\n }\r\n } catch {\r\n continue;\r\n }\r\n }\r\n\r\n // 4. Partial href attribute match (covers relative paths, query strings)\r\n const rawUrl = targetUrl.replace(/^\\//, \"\");\r\n for (const el of allLinks) {\r\n const href = el.getAttribute(\"href\") || el.getAttribute(\"data-href\") || \"\";\r\n if (href && (href === targetUrl || href === rawUrl || href === `/${rawUrl}`)) {\r\n return el;\r\n }\r\n }\r\n }\r\n\r\n // 5. Text-content match (for framework <Link> or <button> navigations)\r\n const urlSegments = targetUrl\r\n .replace(/^https?:\\/\\/[^/]+/, \"\")\r\n .replace(/[?#].*$/, \"\")\r\n .split(\"/\")\r\n .filter(Boolean);\r\n const lastSegment = urlSegments[urlSegments.length - 1] || \"\";\r\n\r\n if (lastSegment) {\r\n // Also search query param values (e.g., ?tab=interact → \"interact\")\r\n let searchTerms = [lastSegment];\r\n if (parsedTarget) {\r\n for (const [, value] of parsedTarget.searchParams.entries()) {\r\n if (value) searchTerms.push(value);\r\n }\r\n if (parsedTarget.hash) {\r\n searchTerms.push(parsedTarget.hash.replace(/^#/, \"\"));\r\n }\r\n }\r\n searchTerms = searchTerms.map((t) => t.toLowerCase());\r\n\r\n // Look across all clickable elements\r\n const clickables = Array.from(\r\n document.querySelectorAll(\r\n 'a, button, [role=\"link\"], [role=\"tab\"], [role=\"button\"], [data-tab], [onclick]',\r\n ),\r\n ) as HTMLElement[];\r\n\r\n for (const el of clickables) {\r\n const text = (el.textContent || \"\").trim().toLowerCase();\r\n const ariaLabel = (el.getAttribute(\"aria-label\") || \"\").toLowerCase();\r\n const dataTab = (el.getAttribute(\"data-tab\") || \"\").toLowerCase();\r\n for (const term of searchTerms) {\r\n if (\r\n text === term ||\r\n ariaLabel === term ||\r\n dataTab === term ||\r\n text.includes(term)\r\n ) {\r\n return el;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst executeNavigate = async (call: NavigateToolCall): Promise<boolean> => {\r\n try {\r\n const targetUrl = call.url;\r\n let resolvedUrl: string;\r\n try {\r\n resolvedUrl = new URL(targetUrl, window.location.href).href;\r\n } catch {\r\n resolvedUrl = targetUrl;\r\n }\r\n\r\n const matchingElement = findMatchingLinkForTarget(targetUrl);\r\n\r\n if (matchingElement) {\r\n console.log(\"AuticBot navigate: clicking element\", resolvedUrl, matchingElement.tagName);\r\n await slowScrollElementIntoView(matchingElement);\r\n\r\n const center = getElementCenter(matchingElement);\r\n await moveCursor(center.x, center.y);\r\n\r\n matchingElement.dispatchEvent(new MouseEvent(\"pointerdown\", { bubbles: true, view: window }));\r\n matchingElement.dispatchEvent(new MouseEvent(\"mousedown\", { bubbles: true, view: window }));\r\n matchingElement.dispatchEvent(new MouseEvent(\"pointerup\", { bubbles: true, view: window }));\r\n matchingElement.dispatchEvent(new MouseEvent(\"mouseup\", { bubbles: true, view: window }));\r\n matchingElement.click();\r\n\r\n return !isSamePageNavigation(resolvedUrl);\r\n }\r\n\r\n // 6. Fallback: direct browser navigation (query param, hash, or full URL)\r\n console.log(\"AuticBot navigate: no matching element found, using direct navigation\", resolvedUrl);\r\n\r\n // Hash-only navigation\r\n try {\r\n const parsed = new URL(resolvedUrl);\r\n if (\r\n parsed.origin === window.location.origin &&\r\n parsed.pathname === window.location.pathname &&\r\n parsed.hash\r\n ) {\r\n window.location.hash = parsed.hash;\r\n return false;\r\n }\r\n } catch { /* continue */ }\r\n\r\n // Query-param or same-origin navigation via History API\r\n try {\r\n const parsed = new URL(resolvedUrl);\r\n if (parsed.origin === window.location.origin) {\r\n // Use pushState + popstate to trigger SPA routers\r\n const newPath = parsed.pathname + parsed.search + parsed.hash;\r\n window.history.pushState({}, \"\", newPath);\r\n window.dispatchEvent(new PopStateEvent(\"popstate\", { state: {} }));\r\n return false;\r\n }\r\n } catch { /* continue */ }\r\n\r\n // Cross-origin: full page navigation\r\n window.location.href = resolvedUrl;\r\n return true;\r\n } catch (error) {\r\n console.warn(\"AuticBot navigate: error\", call.url, error);\r\n return false;\r\n }\r\n};\r\n\r\nconst executeGetPageContext = async () => {\r\n const context = getPageContext();\r\n console.info(\r\n `[Autic] getPageContext tool executed links=${context.links.length} interactables=${context.interactables.length} summary_len=${context.summary.length}`,\r\n );\r\n};\r\n\r\nexport const executeToolCalls = async (toolCalls: AgentToolCall[]) => {\r\n for (const toolCall of toolCalls) {\r\n if (toolCall.tool === \"interact\") {\r\n await executeInteract(toolCall);\r\n continue;\r\n }\r\n\r\n if (toolCall.tool === \"scroll\") {\r\n await executeScroll(toolCall);\r\n continue;\r\n }\r\n\r\n if (toolCall.tool === \"getPageContext\") {\r\n await executeGetPageContext();\r\n continue;\r\n }\r\n\r\n if (toolCall.tool === \"navigate\") {\r\n const terminalNavigation = await executeNavigate(toolCall);\r\n if (terminalNavigation) {\r\n break;\r\n }\r\n }\r\n }\r\n};\r\n\r\n// ── Agent-mode tool execution (returns results) ─────────────────────\r\n\r\nexport type ToolCallWithId = AgentToolCall & {\r\n call_id: string;\r\n};\r\n\r\nexport interface ToolCallResult {\r\n call_id: string;\r\n result: string;\r\n}\r\n\r\n/**\r\n * Execute a single tool call and return a result string.\r\n * Used by the agent loop to feed results back into the LLM.\r\n */\r\nexport const executeSingleToolCall = async (\r\n call: ToolCallWithId,\r\n): Promise<ToolCallResult> => {\r\n const callId = call.call_id;\r\n try {\r\n if (call.tool === \"interact\") {\r\n await executeInteract(call);\r\n return {\r\n call_id: callId,\r\n result: `Etkileşim başarılı: ${call.action}`,\r\n };\r\n }\r\n\r\n if (call.tool === \"scroll\") {\r\n await executeScroll(call);\r\n return {\r\n call_id: callId,\r\n result: \"Öğeye kaydırma başarılı.\",\r\n };\r\n }\r\n\r\n if (call.tool === \"getPageContext\") {\r\n const context = getPageContext();\r\n return {\r\n call_id: callId,\r\n result: context.summary,\r\n };\r\n }\r\n\r\n if (call.tool === \"navigate\") {\r\n await executeNavigate(call);\r\n // Wait for navigation / SPA routing to settle\r\n await new Promise((resolve) => setTimeout(resolve, 1500));\r\n const context = getPageContext();\r\n return {\r\n call_id: callId,\r\n result: `Navigasyon tamamlandı. Şu anki sayfa: ${window.location.href}\\nSayfa bağlamı: ${context.summary}`,\r\n };\r\n }\r\n\r\n return { call_id: callId, result: \"Bilinmeyen araç.\" };\r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n console.warn(`[Autic] Tool execution error: ${call.tool}`, error);\r\n return { call_id: callId, result: `Hata: ${msg}` };\r\n }\r\n};\r\n\r\nconst restoreCursorFromStorageForCurrentUrl = () => {\r\n if (typeof document === \"undefined\" || typeof window === \"undefined\") {\r\n return;\r\n }\r\n\r\n const stored = getPersistedCursorState();\r\n if (!stored || stored.url !== window.location.href) {\r\n return;\r\n }\r\n\r\n ensureCursor();\r\n};\r\n\r\nif (typeof document !== \"undefined\") {\r\n if (document.readyState === \"loading\") {\r\n document.addEventListener(\"DOMContentLoaded\", restoreCursorFromStorageForCurrentUrl, {\r\n once: true,\r\n });\r\n } else {\r\n restoreCursorFromStorageForCurrentUrl();\r\n }\r\n}\r\n","import {\r\n savePendingAgentResume,\r\n clearPendingAgentResume,\r\n type PendingAgentResume,\r\n} from \"../agent/tools\";\r\n\r\nexport type ChatRole = \"system\" | \"user\" | \"assistant\";\r\n\r\nexport interface ChatMessage {\r\n role: ChatRole;\r\n content: string;\r\n}\r\n\r\ninterface ApiErrorBody {\r\n detail?: string;\r\n error?: string;\r\n message?: string;\r\n}\r\n\r\ninterface SseEventPayload {\r\n type?: string;\r\n session_id?: string;\r\n user_text?: string;\r\n assistant_text?: string;\r\n delta?: string;\r\n audio?: string;\r\n format?: string;\r\n mime_type?: string;\r\n sample_rate?: number;\r\n error?: string;\r\n}\r\n\r\ninterface TtsWsEventPayload {\r\n type?: string;\r\n request_id?: string;\r\n seq?: number;\r\n audio?: string;\r\n format?: string;\r\n mime_type?: string;\r\n sample_rate?: number;\r\n error?: string;\r\n retryable?: boolean;\r\n last_seq?: number;\r\n}\r\n\r\nexport type AudioStreamState = \"rendering\" | \"playing\" | \"done\" | \"fallback\";\r\nexport const TTS_WS_RETRY_DELAYS_MS = [250, 750, 1500];\r\n\r\nconst normalizeBaseUrl = (baseUrl: string): string => {\r\n const trimmed = baseUrl.trim().replace(/\\/+$/, \"\");\r\n if (/^https?:\\/\\//i.test(trimmed)) {\r\n return trimmed;\r\n }\r\n // Treat host-only values like \"api.bulut.lu\" as HTTPS absolute URLs.\r\n return `https://${trimmed}`;\r\n};\r\nconst toWebSocketUrl = (baseUrl: string, path: string): string => {\r\n const normalized = normalizeBaseUrl(baseUrl);\r\n const url = new URL(normalized);\r\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\r\n url.pathname = `${url.pathname.replace(/\\/$/, \"\")}${path}`;\r\n url.search = \"\";\r\n url.hash = \"\";\r\n return url.toString();\r\n};\r\n\r\nconst createRequestId = (): string => {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n return `tts-${Date.now()}-${Math.random().toString(16).slice(2)}`;\r\n};\r\n\r\nexport const parseTtsWsEventPayload = (\r\n value: unknown,\r\n): TtsWsEventPayload | null => {\r\n try {\r\n if (typeof value !== \"string\") {\r\n return null;\r\n }\r\n return JSON.parse(value) as TtsWsEventPayload;\r\n } catch {\r\n return null;\r\n }\r\n};\r\n\r\nexport const shouldAcceptAudioSeq = (\r\n incomingSeq: number,\r\n highestSeqSeen: number,\r\n): boolean => incomingSeq > highestSeqSeen;\r\n\r\nexport const shouldFallbackToSse = (error: unknown): boolean => {\r\n if (typeof error === \"object\" && error !== null && \"retryable\" in error) {\r\n return Boolean((error as { retryable?: boolean }).retryable);\r\n }\r\n return true;\r\n};\r\n\r\nconst parseErrorBody = async (response: Response): Promise<string> => {\r\n try {\r\n const data = (await response.json()) as ApiErrorBody;\r\n const detail = data.detail;\r\n if (typeof detail === \"string\") return detail;\r\n if (detail && typeof detail === \"object\") return JSON.stringify(detail);\r\n return data.error || data.message || response.statusText;\r\n } catch {\r\n return response.statusText;\r\n }\r\n};\r\n\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => {\r\n setTimeout(resolve, ms);\r\n });\r\n\r\nexport const base64ToUint8Array = (base64: string): Uint8Array<ArrayBuffer> => {\r\n // Strip potential data URI prefix if present\r\n const cleanBase64 = base64.replace(/^data:audio\\/\\w+;base64,/, \"\");\r\n const binaryString = atob(cleanBase64);\r\n const bytes = new Uint8Array(binaryString.length) as Uint8Array<ArrayBuffer>;\r\n for (let i = 0; i < binaryString.length; i += 1) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes;\r\n};\r\n\r\nconst createWavHeader = (\r\n length: number,\r\n sampleRate: number = 16000,\r\n): Uint8Array<ArrayBuffer> => {\r\n const buffer = new ArrayBuffer(44);\r\n const view = new DataView(buffer);\r\n const channels = 1;\r\n\r\n // RIFF chunk descriptor\r\n view.setUint32(0, 0x52494646, false); // \"RIFF\"\r\n view.setUint32(4, 36 + length, true); // file length - 8\r\n view.setUint32(8, 0x57415645, false); // \"WAVE\"\r\n\r\n // fmt sub-chunk\r\n view.setUint32(12, 0x666d7420, false); // \"fmt \"\r\n view.setUint32(16, 16, true); // Subchunk1Size (16 for PCM)\r\n view.setUint16(20, 1, true); // AudioFormat (1 for PCM)\r\n view.setUint16(22, channels, true); // NumChannels\r\n view.setUint32(24, sampleRate, true); // SampleRate\r\n view.setUint32(28, sampleRate * channels * 2, true); // ByteRate\r\n view.setUint16(32, channels * 2, true); // BlockAlign\r\n view.setUint16(34, 16, true); // BitsPerSample\r\n\r\n // data sub-chunk\r\n view.setUint32(36, 0x64617461, false); // \"data\"\r\n view.setUint32(40, length, true); // Subchunk2Size\r\n\r\n return new Uint8Array(buffer) as Uint8Array<ArrayBuffer>;\r\n};\r\nconst waitForPlaybackEnd = async (\r\n audioElement: HTMLAudioElement,\r\n): Promise<void> => {\r\n if (audioElement.ended) {\r\n return;\r\n }\r\n\r\n await new Promise<void>((resolve, reject) => {\r\n const watchdog = window.setInterval(() => {\r\n if (!audioElement.ended) {\r\n console.info(\"[Bulut] playback watchdog: still playing...\");\r\n }\r\n }, 30000);\r\n\r\n const onEnded = () => {\r\n cleanup();\r\n resolve();\r\n };\r\n\r\n const onError = () => {\r\n cleanup();\r\n reject(new Error(\"Ses oynatma hatası oluştu.\"));\r\n };\r\n\r\n const cleanup = () => {\r\n window.clearInterval(watchdog);\r\n audioElement.removeEventListener(\"ended\", onEnded);\r\n audioElement.removeEventListener(\"error\", onError);\r\n };\r\n\r\n audioElement.addEventListener(\"ended\", onEnded);\r\n audioElement.addEventListener(\"error\", onError);\r\n });\r\n};\r\n\r\n\r\n\r\nconst playBufferedAudio = async (\r\n chunks: Uint8Array<ArrayBuffer>[],\r\n mimeType: string,\r\n sampleRate: number = 16000,\r\n onAudioStateChange?: (state: AudioStreamState) => void,\r\n): Promise<void> => {\r\n if (chunks.length === 0) {\r\n onAudioStateChange?.(\"done\");\r\n return;\r\n }\r\n\r\n // Debug info\r\n const totalBytes = chunks.reduce((acc, c) => acc + c.byteLength, 0);\r\n console.log(`[Bulut] Playing buffered audio: ${chunks.length} chunks, ${totalBytes} bytes, type=${mimeType}`);\r\n\r\n onAudioStateChange?.(\"fallback\");\r\n\r\n const blobParts: ArrayBuffer[] = chunks.map((chunk) => {\r\n const copied = new Uint8Array(chunk.byteLength) as Uint8Array<ArrayBuffer>;\r\n copied.set(chunk);\r\n return copied.buffer;\r\n });\r\n\r\n // Verify magic numbers and detect MIME type\r\n let detectedMime = mimeType;\r\n if (chunks.length > 0 && chunks[0].length >= 4) {\r\n const header = Array.from(chunks[0].slice(0, 4))\r\n .map(b => b.toString(16).padStart(2, '0').toUpperCase())\r\n .join(' ');\r\n console.log(`[Bulut] Audio header (hex): ${header}`);\r\n\r\n // Magic number detection\r\n if (header.startsWith(\"49 44 33\")) { // ID3\r\n detectedMime = \"audio/mpeg\";\r\n } else if (header.startsWith(\"FF F3\") || header.startsWith(\"FF F2\")) { // MP3 Sync\r\n detectedMime = \"audio/mpeg\";\r\n } else if (header.startsWith(\"52 49 46 46\")) { // RIFF (WAV)\r\n detectedMime = \"audio/wav\";\r\n } else if (header.startsWith(\"1A 45 DF A3\")) { // EBML (WebM)\r\n detectedMime = \"audio/webm\";\r\n }\r\n }\r\n\r\n // Ensure valid MIME type\r\n // Ensure valid MIME type or wrap raw PCM\r\n let safeMimeType = detectedMime && detectedMime.includes(\"/\") ? detectedMime : \"audio/mpeg\";\r\n let finalBlobParts: BlobPart[] = blobParts;\r\n\r\n if (mimeType === \"audio/pcm\") {\r\n // Wrap raw PCM in WAV container\r\n const totalLength = chunks.reduce((acc, c) => acc + c.byteLength, 0);\r\n const header = createWavHeader(totalLength, sampleRate);\r\n finalBlobParts = [header.buffer, ...blobParts];\r\n safeMimeType = \"audio/wav\";\r\n console.log(`[Bulut] Wrapped raw PCM in WAV (rate=${sampleRate})`);\r\n }\r\n\r\n console.log(`[Bulut] Creating blob with type: ${safeMimeType} (original: ${mimeType})`);\r\n const blob = new Blob(finalBlobParts, { type: safeMimeType });\r\n\r\n const audioElement = new Audio();\r\n const objectUrl = URL.createObjectURL(blob);\r\n\r\n try {\r\n audioElement.preload = \"auto\";\r\n audioElement.autoplay = true;\r\n // Some browsers need this\r\n audioElement.setAttribute(\"playsinline\", \"true\");\r\n audioElement.src = objectUrl;\r\n\r\n await audioElement.play();\r\n onAudioStateChange?.(\"playing\");\r\n await waitForPlaybackEnd(audioElement);\r\n onAudioStateChange?.(\"done\");\r\n } catch (err) {\r\n console.error(`[Bulut] Playback failed: ${err}`, { mimeType: safeMimeType, size: blob.size });\r\n onAudioStateChange?.(\"done\"); // Signal done to unblock UI even on error\r\n throw err;\r\n } finally {\r\n audioElement.pause();\r\n audioElement.removeAttribute(\"src\");\r\n audioElement.load();\r\n URL.revokeObjectURL(objectUrl);\r\n }\r\n};\r\n\r\nexport interface StreamController {\r\n stop: () => void;\r\n done: Promise<void>;\r\n}\r\n\r\nexport const parseSseEventPayload = (eventBlock: string): SseEventPayload | null => {\r\n const dataLines = eventBlock\r\n .split(/\\r?\\n/)\r\n .map((line) => line.trim())\r\n .filter((line) => line.startsWith(\"data:\"))\r\n .map((line) => line.slice(5).trimStart());\r\n\r\n if (dataLines.length === 0) {\r\n return null;\r\n }\r\n\r\n const dataStr = dataLines.join(\"\\n\");\r\n if (dataStr === \"[DONE]\") {\r\n return { type: \"done\" };\r\n }\r\n\r\n try {\r\n return JSON.parse(dataStr) as SseEventPayload;\r\n } catch (error) {\r\n console.warn(\"Error parsing SSE chunk:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const isAudioSsePayload = (\r\n payload: SseEventPayload,\r\n): payload is SseEventPayload & { audio: string } =>\r\n typeof payload.audio === \"string\" &&\r\n (payload.type === undefined || payload.type === \"audio\");\r\n\r\n// ── Separated Endpoint Helpers ──────────────────────────────────────\r\n\r\nexport async function transcribeAudio(\r\n baseUrl: string,\r\n file: File,\r\n projectId: string,\r\n sessionId: string | null,\r\n language: string,\r\n onRequestSent?: () => void,\r\n): Promise<{ text: string; session_id: string }> {\r\n const url = `${normalizeBaseUrl(baseUrl)}/chat/stt`;\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n formData.append(\"project_id\", projectId);\r\n if (sessionId) formData.append(\"session_id\", sessionId);\r\n formData.append(\"language\", language);\r\n\r\n const responsePromise = fetch(url, { method: \"POST\", body: formData });\r\n onRequestSent?.();\r\n const response = await responsePromise;\r\n if (!response.ok) {\r\n throw new Error(await parseErrorBody(response));\r\n }\r\n return response.json();\r\n}\r\n\r\ninterface TtsCollectResult {\r\n chunks: Uint8Array<ArrayBuffer>[];\r\n mimeType: string;\r\n sampleRate: number;\r\n}\r\n\r\nconst buildError = (message: string, retryable: boolean = true): Error & { retryable: boolean } => {\r\n const error = new Error(message) as Error & { retryable: boolean };\r\n error.retryable = retryable;\r\n return error;\r\n};\r\n\r\nconst collectTtsViaSse = async (\r\n baseUrl: string,\r\n assistantText: string,\r\n voice: string,\r\n accessibilityMode: boolean,\r\n isStopped: () => boolean,\r\n setReader: (reader: ReadableStreamDefaultReader<Uint8Array> | undefined) => void,\r\n): Promise<TtsCollectResult> => {\r\n const ttsFormData = new FormData();\r\n ttsFormData.append(\"text\", assistantText);\r\n ttsFormData.append(\"voice\", voice);\r\n ttsFormData.append(\"accessibility_mode\", String(accessibilityMode));\r\n\r\n const ttsResponse = await fetch(`${normalizeBaseUrl(baseUrl)}/chat/tts`, {\r\n method: \"POST\",\r\n body: ttsFormData,\r\n });\r\n\r\n if (!ttsResponse.ok) {\r\n throw buildError(await parseErrorBody(ttsResponse), false);\r\n }\r\n\r\n const reader = ttsResponse.body?.getReader();\r\n if (!reader) {\r\n throw buildError(\"TTS response body is not readable\", false);\r\n }\r\n\r\n setReader(reader);\r\n\r\n const chunks: Uint8Array<ArrayBuffer>[] = [];\r\n let mimeType = \"audio/mpeg\";\r\n let sampleRate = 16000;\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n\r\n while (true) {\r\n if (isStopped()) {\r\n break;\r\n }\r\n\r\n const { done, value } = await reader.read();\r\n if (done) {\r\n break;\r\n }\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n const blocks = buffer.split(/\\r?\\n\\r?\\n/);\r\n buffer = blocks.pop() || \"\";\r\n\r\n for (const block of blocks) {\r\n const payload = parseSseEventPayload(block);\r\n if (!payload) {\r\n continue;\r\n }\r\n\r\n if (isAudioSsePayload(payload)) {\r\n const format = payload.format || \"mp3\";\r\n mimeType = payload.mime_type || (format === \"webm\" ? \"audio/webm\" : \"audio/mpeg\");\r\n chunks.push(base64ToUint8Array(payload.audio));\r\n if (payload.sample_rate) {\r\n sampleRate = payload.sample_rate;\r\n }\r\n }\r\n }\r\n }\r\n\r\n reader.releaseLock();\r\n setReader(undefined);\r\n\r\n return { chunks, mimeType, sampleRate };\r\n};\r\n\r\nconst collectTtsViaWebSocket = async (\r\n baseUrl: string,\r\n assistantText: string,\r\n voice: string,\r\n accessibilityMode: boolean,\r\n isStopped: () => boolean,\r\n setSocket: (socket: WebSocket | null) => void,\r\n): Promise<TtsCollectResult> => {\r\n const wsUrl = toWebSocketUrl(baseUrl, \"/chat/tts/ws\");\r\n const requestId = createRequestId();\r\n const chunks: Uint8Array<ArrayBuffer>[] = [];\r\n let mimeType = \"audio/mpeg\";\r\n let sampleRate = 16000;\r\n let highestSeqSeen = 0;\r\n\r\n const connectOnce = (): Promise<void> =>\r\n new Promise((resolve, reject) => {\r\n if (isStopped()) {\r\n reject(buildError(\"stream_stopped\", false));\r\n return;\r\n }\r\n\r\n let done = false;\r\n let finalError: (Error & { retryable?: boolean }) | null = null;\r\n const socket = new WebSocket(wsUrl);\r\n setSocket(socket);\r\n\r\n const finalize = (\r\n mode: \"resolve\" | \"reject\",\r\n error?: Error & { retryable?: boolean },\r\n ) => {\r\n socket.onopen = null;\r\n socket.onmessage = null;\r\n socket.onerror = null;\r\n socket.onclose = null;\r\n setSocket(null);\r\n if (mode === \"resolve\") {\r\n resolve();\r\n return;\r\n }\r\n reject(error || buildError(\"tts_ws_closed\", true));\r\n };\r\n\r\n socket.onopen = () => {\r\n console.info(\r\n `[Bulut] TTS WS connected request_id=${requestId} resume_seq=${highestSeqSeen}`,\r\n );\r\n socket.send(\r\n JSON.stringify({\r\n type: \"start\",\r\n request_id: requestId,\r\n text: assistantText,\r\n voice,\r\n accessibility_mode: accessibilityMode,\r\n last_seq: highestSeqSeen,\r\n }),\r\n );\r\n };\r\n\r\n socket.onmessage = (event) => {\r\n const payload = parseTtsWsEventPayload(String(event.data));\r\n if (!payload) {\r\n console.warn(\"[Bulut] TTS WS invalid JSON payload\");\r\n return;\r\n }\r\n\r\n if (payload.type === \"audio\" && typeof payload.audio === \"string\") {\r\n const seq = typeof payload.seq === \"number\" ? payload.seq : 0;\r\n if (shouldAcceptAudioSeq(seq, highestSeqSeen)) {\r\n chunks.push(base64ToUint8Array(payload.audio));\r\n highestSeqSeen = seq;\r\n if (payload.mime_type) {\r\n mimeType = payload.mime_type;\r\n }\r\n if (typeof payload.sample_rate === \"number\") {\r\n sampleRate = payload.sample_rate;\r\n }\r\n } else {\r\n console.info(\r\n `[Bulut] TTS WS duplicate chunk ignored request_id=${requestId} seq=${seq} seen=${highestSeqSeen}`,\r\n );\r\n }\r\n\r\n if (socket.readyState === WebSocket.OPEN) {\r\n socket.send(\r\n JSON.stringify({\r\n type: \"ack\",\r\n request_id: requestId,\r\n last_seq: highestSeqSeen,\r\n }),\r\n );\r\n }\r\n return;\r\n }\r\n\r\n if (payload.type === \"done\") {\r\n const streamLastSeq =\r\n typeof payload.last_seq === \"number\" ? payload.last_seq : highestSeqSeen;\r\n if (streamLastSeq > highestSeqSeen) {\r\n finalError = buildError(\"tts_ws_sequence_gap\", true);\r\n done = false;\r\n socket.close();\r\n return;\r\n }\r\n done = true;\r\n socket.close();\r\n return;\r\n }\r\n\r\n if (payload.type === \"error\") {\r\n finalError = buildError(payload.error || \"tts_ws_error\", payload.retryable !== false);\r\n done = false;\r\n socket.close();\r\n }\r\n };\r\n\r\n socket.onerror = () => {\r\n if (!finalError) {\r\n finalError = buildError(\"tts_ws_transport_error\", true);\r\n }\r\n };\r\n\r\n socket.onclose = () => {\r\n if (isStopped()) {\r\n finalize(\"reject\", buildError(\"stream_stopped\", false));\r\n return;\r\n }\r\n if (done) {\r\n finalize(\"resolve\");\r\n return;\r\n }\r\n finalize(\"reject\", finalError || buildError(\"tts_ws_closed_before_done\", true));\r\n };\r\n });\r\n\r\n for (let attempt = 0; attempt <= TTS_WS_RETRY_DELAYS_MS.length; attempt += 1) {\r\n if (attempt > 0) {\r\n const delay = TTS_WS_RETRY_DELAYS_MS[attempt - 1];\r\n console.warn(\r\n `[Bulut] TTS WS retry attempt=${attempt} delay_ms=${delay} last_seq=${highestSeqSeen}`,\r\n );\r\n await sleep(delay);\r\n }\r\n\r\n try {\r\n await connectOnce();\r\n return { chunks, mimeType, sampleRate };\r\n } catch (error) {\r\n const retryable =\r\n shouldFallbackToSse(error);\r\n const message = error instanceof Error ? error.message : String(error);\r\n console.warn(\r\n `[Bulut] TTS WS attempt failed attempt=${attempt} retryable=${retryable} error=${message}`,\r\n );\r\n if (!retryable || attempt === TTS_WS_RETRY_DELAYS_MS.length) {\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n throw buildError(\"tts_ws_exhausted\", true);\r\n};\r\n\r\n// ── Agent-mode Types ────────────────────────────────────────────────\r\n\r\nexport interface AgentToolCallInfo {\r\n call_id: string;\r\n tool: string;\r\n args: Record<string, unknown>;\r\n}\r\n\r\nexport interface AgentVoiceChatEvents {\r\n onSttRequestSent?: () => void;\r\n onTranscription?: (data: {\r\n session_id: string;\r\n user_text: string;\r\n }) => void;\r\n onAssistantDelta?: (delta: string) => void;\r\n onAssistantDone?: (assistantText: string) => void;\r\n onAudioStateChange?: (state: AudioStreamState) => void;\r\n onError?: (error: string) => void;\r\n /** Called when the agent requests tool execution on the frontend. */\r\n onToolCalls?: (calls: AgentToolCallInfo[]) => void;\r\n /** Called after each tool has been executed with the result. */\r\n onToolResult?: (callId: string, toolName: string, result: string) => void;\r\n /** Called at the start of each agent iteration. */\r\n onIteration?: (iteration: number, maxIterations: number) => void;\r\n /** Called when the backend confirms / creates a session ID. */\r\n onSessionId?: (sessionId: string) => void;\r\n}\r\n\r\n// ── Agent Voice Chat Stream (STT → Agent WS → TTS) ─────────────────\r\n\r\nexport const agentVoiceChatStream = (\r\n baseUrl: string,\r\n audioFile: File,\r\n projectId: string,\r\n sessionId: string | null,\r\n config: {\r\n model: string;\r\n voice: string;\r\n pageContext?: string;\r\n accessibilityMode?: boolean;\r\n },\r\n events: AgentVoiceChatEvents,\r\n executeTool: (call: AgentToolCallInfo) => Promise<{ call_id: string; result: string }>,\r\n): StreamController => {\r\n let isStopped = false;\r\n let activeSocket: WebSocket | null = null;\r\n let activeReader: ReadableStreamDefaultReader<Uint8Array> | undefined;\r\n let errorEmitted = false;\r\n\r\n const donePromise = new Promise<void>(async (resolve, reject) => {\r\n try {\r\n // ── 1. STT ────────────────────────────────────────────────\r\n if (isStopped) return resolve();\r\n const sttResult = await transcribeAudio(\r\n baseUrl,\r\n audioFile,\r\n projectId,\r\n sessionId,\r\n \"tr\",\r\n events.onSttRequestSent,\r\n );\r\n\r\n const currentSessionId = sttResult.session_id;\r\n let effectiveSessionId = currentSessionId;\r\n const userText = sttResult.text;\r\n\r\n events.onTranscription?.({\r\n session_id: currentSessionId,\r\n user_text: userText,\r\n });\r\n\r\n if (isStopped) return resolve();\r\n\r\n // ── 2. Agent loop via WebSocket ───────────────────────────\r\n const assistantText = await new Promise<string>((agentResolve, agentReject) => {\r\n if (isStopped) { agentResolve(\"\"); return; }\r\n\r\n const wsUrl = toWebSocketUrl(baseUrl, \"/chat/agent/ws\");\r\n const socket = new WebSocket(wsUrl);\r\n activeSocket = socket;\r\n\r\n let finalReply = \"\";\r\n let resolved = false;\r\n\r\n const finish = (reply: string) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentResolve(reply);\r\n };\r\n\r\n const fail = (error: Error) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentReject(error);\r\n };\r\n\r\n socket.onopen = () => {\r\n console.info(\"[Bulut] Agent WS connected\");\r\n socket.send(JSON.stringify({\r\n type: \"start\",\r\n project_id: projectId,\r\n session_id: currentSessionId,\r\n user_text: userText,\r\n model: config.model,\r\n page_context: config.pageContext,\r\n accessibility_mode: config.accessibilityMode,\r\n }));\r\n };\r\n\r\n socket.onmessage = async (event) => {\r\n let data: Record<string, unknown>;\r\n try {\r\n data = JSON.parse(String(event.data));\r\n } catch {\r\n console.warn(\"[Bulut] Agent WS invalid JSON\");\r\n return;\r\n }\r\n\r\n const msgType = data.type as string;\r\n\r\n if (msgType === \"session\" && typeof data.session_id === \"string\") {\r\n effectiveSessionId = data.session_id as string;\r\n events.onSessionId?.(effectiveSessionId);\r\n return;\r\n }\r\n\r\n if (msgType === \"iteration\") {\r\n events.onIteration?.(\r\n data.iteration as number,\r\n data.max_iterations as number,\r\n );\r\n return;\r\n }\r\n\r\n if (msgType === \"reply_delta\" && typeof data.delta === \"string\") {\r\n events.onAssistantDelta?.(data.delta);\r\n return;\r\n }\r\n\r\n if (msgType === \"tool_calls\" && Array.isArray(data.calls)) {\r\n const calls = data.calls as AgentToolCallInfo[];\r\n events.onToolCalls?.(calls);\r\n\r\n const results: { call_id: string; result: string }[] = [];\r\n for (const call of calls) {\r\n // Save resume state before navigate in case of full-page reload\r\n const isNavigate = call.tool === \"navigate\";\r\n if (isNavigate) {\r\n savePendingAgentResume({\r\n sessionId: effectiveSessionId,\r\n projectId,\r\n model: config.model,\r\n voice: config.voice,\r\n accessibilityMode: Boolean(config.accessibilityMode),\r\n pendingToolCalls: calls.map((c) => ({\r\n call_id: c.call_id,\r\n tool: c.tool,\r\n args: c.args,\r\n })),\r\n completedResults: [...results],\r\n });\r\n }\r\n\r\n const result = await executeTool(call);\r\n\r\n // If we reach here, no full-page reload happened\r\n if (isNavigate) {\r\n clearPendingAgentResume();\r\n }\r\n\r\n events.onToolResult?.(call.call_id, call.tool, result.result);\r\n results.push(result);\r\n }\r\n\r\n if (socket.readyState === WebSocket.OPEN) {\r\n socket.send(JSON.stringify({\r\n type: \"tool_results\",\r\n results,\r\n }));\r\n }\r\n return;\r\n }\r\n\r\n if (msgType === \"agent_done\") {\r\n finalReply = (data.final_reply as string) || \"\";\r\n events.onAssistantDone?.(finalReply);\r\n if (typeof data.session_id === \"string\") {\r\n events.onSessionId?.(data.session_id as string);\r\n }\r\n finish(finalReply);\r\n return;\r\n }\r\n\r\n if (msgType === \"error\") {\r\n const errMsg = (data.error as string) || \"Agent error\";\r\n errorEmitted = true;\r\n events.onError?.(errMsg);\r\n fail(new Error(errMsg));\r\n return;\r\n }\r\n };\r\n\r\n socket.onerror = () => {\r\n console.error(\"[Bulut] Agent WS error\");\r\n errorEmitted = true;\r\n events.onError?.(\"Agent WebSocket connection error\");\r\n fail(new Error(\"Agent WebSocket connection error\"));\r\n };\r\n\r\n socket.onclose = () => {\r\n console.info(\"[Bulut] Agent WS closed\");\r\n finish(finalReply);\r\n };\r\n });\r\n\r\n activeSocket = null;\r\n\r\n // ── 3. TTS ────────────────────────────────────────────────\r\n if (isStopped || !assistantText) {\r\n return resolve();\r\n }\r\n\r\n console.info(\r\n `[Bulut] TTS start mode=agent voice=${config.voice}`,\r\n );\r\n\r\n events.onAudioStateChange?.(\"rendering\");\r\n let ttsResult: TtsCollectResult;\r\n\r\n try {\r\n ttsResult = await collectTtsViaWebSocket(\r\n baseUrl,\r\n assistantText,\r\n config.voice,\r\n Boolean(config.accessibilityMode),\r\n () => isStopped,\r\n (socket) => { activeSocket = socket; },\r\n );\r\n } catch (wsError) {\r\n if (isStopped) return resolve();\r\n console.warn(\r\n `[Bulut] TTS WS failed, falling back to SSE: ${wsError instanceof Error ? wsError.message : String(wsError)}`,\r\n );\r\n ttsResult = await collectTtsViaSse(\r\n baseUrl,\r\n assistantText,\r\n config.voice,\r\n Boolean(config.accessibilityMode),\r\n () => isStopped,\r\n (reader) => { activeReader = reader; },\r\n );\r\n }\r\n\r\n if (!isStopped && ttsResult.chunks.length > 0) {\r\n await playBufferedAudio(\r\n ttsResult.chunks,\r\n ttsResult.mimeType,\r\n ttsResult.sampleRate,\r\n events.onAudioStateChange,\r\n );\r\n } else {\r\n events.onAudioStateChange?.(\"done\");\r\n }\r\n\r\n resolve();\r\n } catch (err) {\r\n // Only emit onError if it hasn't been emitted already by the WS handler\r\n if (!errorEmitted) {\r\n const msg = err instanceof Error ? err.message : String(err);\r\n events.onError?.(msg);\r\n }\r\n reject(err);\r\n } finally {\r\n activeReader?.cancel().catch(() => { });\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n activeSocket = null;\r\n }\r\n });\r\n\r\n return {\r\n stop: () => {\r\n isStopped = true;\r\n if (activeReader) {\r\n activeReader.cancel().catch(() => { });\r\n }\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n },\r\n done: donePromise,\r\n };\r\n};\r\n\r\n// ── Agent Text Chat Stream (no STT, Agent WS → TTS) ────────────────\r\n\r\nexport const agentTextChatStream = (\r\n baseUrl: string,\r\n userText: string,\r\n projectId: string,\r\n sessionId: string | null,\r\n config: {\r\n model: string;\r\n voice: string;\r\n pageContext?: string;\r\n accessibilityMode?: boolean;\r\n },\r\n events: AgentVoiceChatEvents,\r\n executeTool: (call: AgentToolCallInfo) => Promise<{ call_id: string; result: string }>,\r\n): StreamController => {\r\n let isStopped = false;\r\n let activeSocket: WebSocket | null = null;\r\n let activeReader: ReadableStreamDefaultReader<Uint8Array> | undefined;\r\n let errorEmitted = false;\r\n\r\n const donePromise = new Promise<void>(async (resolve, reject) => {\r\n try {\r\n if (isStopped) return resolve();\r\n\r\n // ── 1. Agent loop via WebSocket ───────────────────────────\r\n const assistantText = await new Promise<string>((agentResolve, agentReject) => {\r\n if (isStopped) { agentResolve(\"\"); return; }\r\n\r\n const wsUrl = toWebSocketUrl(baseUrl, \"/chat/agent/ws\");\r\n const socket = new WebSocket(wsUrl);\r\n activeSocket = socket;\r\n\r\n let finalReply = \"\";\r\n let resolved = false;\r\n let effectiveSessionId = sessionId || \"\";\r\n\r\n const finish = (reply: string) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentResolve(reply);\r\n };\r\n\r\n const fail = (error: Error) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentReject(error);\r\n };\r\n\r\n socket.onopen = () => {\r\n socket.send(JSON.stringify({\r\n type: \"start\",\r\n project_id: projectId,\r\n session_id: sessionId,\r\n user_text: userText,\r\n model: config.model,\r\n page_context: config.pageContext,\r\n accessibility_mode: config.accessibilityMode,\r\n }));\r\n };\r\n\r\n socket.onmessage = async (event) => {\r\n let data: Record<string, unknown>;\r\n try {\r\n data = JSON.parse(String(event.data));\r\n } catch { return; }\r\n\r\n const msgType = data.type as string;\r\n\r\n if (msgType === \"session\" && typeof data.session_id === \"string\") {\r\n effectiveSessionId = data.session_id as string;\r\n events.onSessionId?.(effectiveSessionId);\r\n return;\r\n }\r\n\r\n if (msgType === \"iteration\") {\r\n events.onIteration?.(\r\n data.iteration as number,\r\n data.max_iterations as number,\r\n );\r\n return;\r\n }\r\n\r\n if (msgType === \"reply_delta\" && typeof data.delta === \"string\") {\r\n events.onAssistantDelta?.(data.delta);\r\n return;\r\n }\r\n\r\n if (msgType === \"tool_calls\" && Array.isArray(data.calls)) {\r\n const calls = data.calls as AgentToolCallInfo[];\r\n events.onToolCalls?.(calls);\r\n\r\n const results: { call_id: string; result: string }[] = [];\r\n for (const call of calls) {\r\n const isNavigate = call.tool === \"navigate\";\r\n if (isNavigate) {\r\n savePendingAgentResume({\r\n sessionId: effectiveSessionId,\r\n projectId,\r\n model: config.model,\r\n voice: config.voice,\r\n accessibilityMode: Boolean(config.accessibilityMode),\r\n pendingToolCalls: calls.map((c) => ({\r\n call_id: c.call_id,\r\n tool: c.tool,\r\n args: c.args,\r\n })),\r\n completedResults: [...results],\r\n });\r\n }\r\n\r\n const result = await executeTool(call);\r\n\r\n if (isNavigate) {\r\n clearPendingAgentResume();\r\n }\r\n\r\n events.onToolResult?.(call.call_id, call.tool, result.result);\r\n results.push(result);\r\n }\r\n\r\n if (socket.readyState === WebSocket.OPEN) {\r\n socket.send(JSON.stringify({\r\n type: \"tool_results\",\r\n results,\r\n }));\r\n }\r\n return;\r\n }\r\n\r\n if (msgType === \"agent_done\") {\r\n finalReply = (data.final_reply as string) || \"\";\r\n events.onAssistantDone?.(finalReply);\r\n if (typeof data.session_id === \"string\") {\r\n events.onSessionId?.(data.session_id as string);\r\n }\r\n finish(finalReply);\r\n return;\r\n }\r\n\r\n if (msgType === \"error\") {\r\n const errMsg = (data.error as string) || \"Agent error\";\r\n errorEmitted = true;\r\n events.onError?.(errMsg);\r\n fail(new Error(errMsg));\r\n return;\r\n }\r\n };\r\n\r\n socket.onerror = () => {\r\n errorEmitted = true;\r\n events.onError?.(\"Agent WebSocket error\");\r\n fail(new Error(\"Agent WebSocket error\"));\r\n };\r\n socket.onclose = () => finish(finalReply);\r\n });\r\n\r\n activeSocket = null;\r\n\r\n // ── 2. TTS ────────────────────────────────────────────────\r\n if (isStopped || !assistantText) return resolve();\r\n\r\n events.onAudioStateChange?.(\"rendering\");\r\n let ttsResult: TtsCollectResult;\r\n\r\n try {\r\n ttsResult = await collectTtsViaWebSocket(\r\n baseUrl, assistantText, config.voice, Boolean(config.accessibilityMode),\r\n () => isStopped,\r\n (socket) => { activeSocket = socket; },\r\n );\r\n } catch (wsError) {\r\n if (isStopped) return resolve();\r\n ttsResult = await collectTtsViaSse(\r\n baseUrl, assistantText, config.voice, Boolean(config.accessibilityMode),\r\n () => isStopped,\r\n (reader) => { activeReader = reader; },\r\n );\r\n }\r\n\r\n if (!isStopped && ttsResult.chunks.length > 0) {\r\n await playBufferedAudio(\r\n ttsResult.chunks, ttsResult.mimeType, ttsResult.sampleRate,\r\n events.onAudioStateChange,\r\n );\r\n } else {\r\n events.onAudioStateChange?.(\"done\");\r\n }\r\n\r\n resolve();\r\n } catch (err) {\r\n if (!errorEmitted) {\r\n const msg = err instanceof Error ? err.message : String(err);\r\n events.onError?.(msg);\r\n }\r\n reject(err);\r\n } finally {\r\n activeReader?.cancel().catch(() => { });\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n activeSocket = null;\r\n }\r\n });\r\n\r\n return {\r\n stop: () => {\r\n isStopped = true;\r\n if (activeReader) activeReader.cancel().catch(() => { });\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n },\r\n done: donePromise,\r\n };\r\n};\r\n\r\n// ── Agent Resume Stream (after page navigation reload) ──────────────\r\n//\r\n// When a navigate tool causes a full-page reload, the agent WS is lost.\r\n// This function opens a new WS with {type: \"resume\"}, sends the\r\n// completed tool results (including the navigate result with the new\r\n// page context), and continues the agent loop from where it left off.\r\n\r\nexport const agentResumeStream = (\r\n baseUrl: string,\r\n resumeState: PendingAgentResume,\r\n pageContext: string,\r\n events: AgentVoiceChatEvents,\r\n executeTool: (call: AgentToolCallInfo) => Promise<{ call_id: string; result: string }>,\r\n): StreamController => {\r\n let isStopped = false;\r\n let activeSocket: WebSocket | null = null;\r\n let activeReader: ReadableStreamDefaultReader<Uint8Array> | undefined;\r\n let errorEmitted = false;\r\n\r\n // Build tool results for the calls that were pending when the page reloaded.\r\n // Navigate results include the new page context; other tools that couldn't\r\n // execute get a descriptive skip message.\r\n const allResults = [...resumeState.completedResults];\r\n for (const tc of resumeState.pendingToolCalls) {\r\n if (allResults.some((r) => r.call_id === tc.call_id)) continue;\r\n if (tc.tool === \"navigate\") {\r\n allResults.push({\r\n call_id: tc.call_id,\r\n result: `Navigasyon tamamlandı. Şu anki sayfa: ${typeof window !== \"undefined\" ? window.location.href : \"\"}\\nSayfa bağlamı: ${pageContext}`,\r\n });\r\n } else {\r\n allResults.push({\r\n call_id: tc.call_id,\r\n result: \"Sayfa yeniden yüklendi, bu araç çalıştırılamadı.\",\r\n });\r\n }\r\n }\r\n\r\n const donePromise = new Promise<void>(async (resolve, reject) => {\r\n try {\r\n if (isStopped) return resolve();\r\n\r\n let effectiveSessionId = resumeState.sessionId;\r\n\r\n const assistantText = await new Promise<string>((agentResolve, agentReject) => {\r\n if (isStopped) { agentResolve(\"\"); return; }\r\n\r\n const wsUrl = toWebSocketUrl(baseUrl, \"/chat/agent/ws\");\r\n const socket = new WebSocket(wsUrl);\r\n activeSocket = socket;\r\n\r\n let finalReply = \"\";\r\n let resolved = false;\r\n\r\n const finish = (reply: string) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentResolve(reply);\r\n };\r\n\r\n const fail = (error: Error) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentReject(error);\r\n };\r\n\r\n socket.onopen = () => {\r\n console.info(\"[Bulut] Agent WS resume connected\");\r\n socket.send(JSON.stringify({\r\n type: \"resume\",\r\n project_id: resumeState.projectId,\r\n session_id: resumeState.sessionId,\r\n model: resumeState.model,\r\n page_context: pageContext,\r\n accessibility_mode: resumeState.accessibilityMode,\r\n pending_tool_calls: resumeState.pendingToolCalls,\r\n tool_results: allResults,\r\n }));\r\n };\r\n\r\n socket.onmessage = async (event) => {\r\n let data: Record<string, unknown>;\r\n try {\r\n data = JSON.parse(String(event.data));\r\n } catch { return; }\r\n\r\n const msgType = data.type as string;\r\n\r\n if (msgType === \"session\" && typeof data.session_id === \"string\") {\r\n effectiveSessionId = data.session_id as string;\r\n events.onSessionId?.(effectiveSessionId);\r\n return;\r\n }\r\n\r\n if (msgType === \"iteration\") {\r\n events.onIteration?.(\r\n data.iteration as number,\r\n data.max_iterations as number,\r\n );\r\n return;\r\n }\r\n\r\n if (msgType === \"reply_delta\" && typeof data.delta === \"string\") {\r\n events.onAssistantDelta?.(data.delta);\r\n return;\r\n }\r\n\r\n if (msgType === \"tool_calls\" && Array.isArray(data.calls)) {\r\n const calls = data.calls as AgentToolCallInfo[];\r\n events.onToolCalls?.(calls);\r\n\r\n const results: { call_id: string; result: string }[] = [];\r\n for (const call of calls) {\r\n const isNavigate = call.tool === \"navigate\";\r\n if (isNavigate) {\r\n savePendingAgentResume({\r\n sessionId: effectiveSessionId,\r\n projectId: resumeState.projectId,\r\n model: resumeState.model,\r\n voice: resumeState.voice,\r\n accessibilityMode: resumeState.accessibilityMode,\r\n pendingToolCalls: calls.map((c) => ({\r\n call_id: c.call_id,\r\n tool: c.tool,\r\n args: c.args,\r\n })),\r\n completedResults: [...results],\r\n });\r\n }\r\n\r\n const result = await executeTool(call);\r\n\r\n if (isNavigate) {\r\n clearPendingAgentResume();\r\n }\r\n\r\n events.onToolResult?.(call.call_id, call.tool, result.result);\r\n results.push(result);\r\n }\r\n\r\n if (socket.readyState === WebSocket.OPEN) {\r\n socket.send(JSON.stringify({ type: \"tool_results\", results }));\r\n }\r\n return;\r\n }\r\n\r\n if (msgType === \"agent_done\") {\r\n finalReply = (data.final_reply as string) || \"\";\r\n events.onAssistantDone?.(finalReply);\r\n if (typeof data.session_id === \"string\") {\r\n events.onSessionId?.(data.session_id as string);\r\n }\r\n finish(finalReply);\r\n return;\r\n }\r\n\r\n if (msgType === \"error\") {\r\n const errMsg = (data.error as string) || \"Agent error\";\r\n errorEmitted = true;\r\n events.onError?.(errMsg);\r\n fail(new Error(errMsg));\r\n return;\r\n }\r\n };\r\n\r\n socket.onerror = () => {\r\n errorEmitted = true;\r\n events.onError?.(\"Agent WebSocket error\");\r\n fail(new Error(\"Agent WebSocket error\"));\r\n };\r\n\r\n socket.onclose = () => finish(finalReply);\r\n });\r\n\r\n activeSocket = null;\r\n\r\n // ── TTS ────────────────────────────────────────────────\r\n if (isStopped || !assistantText) return resolve();\r\n\r\n console.info(`[Bulut] TTS start mode=resume voice=${resumeState.voice}`);\r\n events.onAudioStateChange?.(\"rendering\");\r\n let ttsResult: TtsCollectResult;\r\n\r\n try {\r\n ttsResult = await collectTtsViaWebSocket(\r\n baseUrl, assistantText, resumeState.voice, Boolean(resumeState.accessibilityMode),\r\n () => isStopped,\r\n (socket) => { activeSocket = socket; },\r\n );\r\n } catch (wsError) {\r\n if (isStopped) return resolve();\r\n console.warn(\r\n `[Bulut] TTS WS failed, falling back to SSE: ${wsError instanceof Error ? wsError.message : String(wsError)}`,\r\n );\r\n ttsResult = await collectTtsViaSse(\r\n baseUrl, assistantText, resumeState.voice, Boolean(resumeState.accessibilityMode),\r\n () => isStopped,\r\n (reader) => { activeReader = reader; },\r\n );\r\n }\r\n\r\n if (!isStopped && ttsResult.chunks.length > 0) {\r\n await playBufferedAudio(\r\n ttsResult.chunks, ttsResult.mimeType, ttsResult.sampleRate,\r\n events.onAudioStateChange,\r\n );\r\n } else {\r\n events.onAudioStateChange?.(\"done\");\r\n }\r\n\r\n resolve();\r\n } catch (err) {\r\n if (!errorEmitted) {\r\n const msg = err instanceof Error ? err.message : String(err);\r\n events.onError?.(msg);\r\n }\r\n reject(err);\r\n } finally {\r\n activeReader?.cancel().catch(() => { });\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n activeSocket = null;\r\n }\r\n });\r\n\r\n return {\r\n stop: () => {\r\n isStopped = true;\r\n if (activeReader) activeReader.cancel().catch(() => { });\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n },\r\n done: donePromise,\r\n };\r\n};\r\n","import { useEffect, useLayoutEffect, useRef, useState } from \"preact/hooks\";\r\nimport type { JSX } from \"preact\";\r\nimport type { BulutRuntimeConfig } from \"../index\";\r\nimport {\r\n agentVoiceChatStream,\r\n agentResumeStream,\r\n type AudioStreamState,\r\n type StreamController,\r\n type AgentToolCallInfo,\r\n} from \"../api/client\";\r\nimport {\r\n executeSingleToolCall,\r\n parseAgentResponse,\r\n getPendingAgentResume,\r\n clearPendingAgentResume,\r\n type ToolCallWithId,\r\n} from \"../agent/tools\";\r\nimport { getPageContext } from \"../agent/context\";\r\nimport {\r\n WINDOW_WIDTH,\r\n WINDOW_HEIGHT,\r\n POSITION_BOTTOM,\r\n POSITION_RIGHT,\r\n COLORS,\r\n TRANSITIONS,\r\n BORDER_RADIUS,\r\n SHADOW,\r\n} from \"../styles/constants\";\r\nimport {\r\n closeIconContent,\r\n completedSfxUrl,\r\n microphoneIconContent,\r\n stopIconContent,\r\n sentSfxUrl,\r\n thinkingSfxUrl,\r\n restartIconContent,\r\n toolCallSfxUrl,\r\n logoContent,\r\n} from \"../assets\";\r\nimport { StreamingJsonParser } from \"../utils/streamingJson\";\r\n\r\nimport { SvgIcon } from \"./SvgIcon\";\r\n\r\nexport interface ChatWindowHandle {\r\n startRecording: () => void;\r\n cancelRecording: () => void;\r\n stopTask: () => void;\r\n}\r\n\r\ninterface ChatWindowProps {\r\n onClose: () => void;\r\n config: BulutRuntimeConfig;\r\n accessibilityMode?: boolean;\r\n onAccessibilityToggle?: () => void;\r\n hidden?: boolean;\r\n actionsRef?: { current: ChatWindowHandle | null };\r\n onRecordingChange?: (recording: boolean) => void;\r\n onBusyChange?: (busy: boolean) => void;\r\n onPreviewChange?: (text: string | null) => void;\r\n}\r\n\r\ninterface Message {\r\n id: number;\r\n text: string;\r\n isUser: boolean;\r\n /** \"message\" (default) | \"tool\" for tool call indicators */\r\n type?: \"message\" | \"tool\";\r\n}\r\n\r\ntype RecordingMode = \"vad\" | \"press\";\r\n\r\ntype StorageLike = {\r\n removeItem: (key: string) => void;\r\n};\r\n\r\nconst STORAGE_KEY = \"bulut_chat_history\";\r\nconst TIMESTAMP_KEY = \"bulut_chat_timestamp\";\r\nconst SESSION_ID_KEY = \"bulut_session_id\";\r\nconst TTL_MS = 5 * 60 * 1000;\r\nconst VAD_THRESHOLD = 0.06;\r\nconst SILENCE_DURATION_MS = 1000;\r\nexport const HOLD_THRESHOLD_MS = 250;\r\n\r\nconst STATUS_LABELS = {\r\n ready: \"Hazır\",\r\n loading: \"Yükleniyor\",\r\n listening: \"Dinliyor\",\r\n transcribing: \"Metne dönüştürülüyor\",\r\n thinking: \"Düşünüyor\",\r\n playingAudio: \"Ses oynatılıyor\",\r\n runningTools: \"Araç çalıştırılıyor\",\r\n} as const;\r\n\r\ntype SfxName = \"sent\" | \"thinking\" | \"toolCall\" | \"completed\";\r\n\r\nconst SFX_SOURCES: Record<SfxName, string> = {\r\n sent: sentSfxUrl,\r\n thinking: thinkingSfxUrl,\r\n toolCall: toolCallSfxUrl,\r\n completed: completedSfxUrl,\r\n};\r\n\r\nexport const getGreetingText = (agentName: string): string =>\r\n `Merhaba, ben ${agentName}. Bu web sayfasında neler yapalım?`;\r\n\r\nexport interface StatusFlags {\r\n isBusy: boolean;\r\n isRecording: boolean;\r\n isTranscribing: boolean;\r\n isThinking: boolean;\r\n isRenderingAudio: boolean;\r\n isPlayingAudio: boolean;\r\n isRunningTools: boolean;\r\n}\r\n\r\nexport const resolveStatusText = (flags: StatusFlags): string => {\r\n if (flags.isRecording) return STATUS_LABELS.listening;\r\n if (flags.isRunningTools) return STATUS_LABELS.runningTools;\r\n if (flags.isPlayingAudio) return STATUS_LABELS.playingAudio;\r\n if (flags.isThinking) return STATUS_LABELS.thinking;\r\n if (flags.isTranscribing) return STATUS_LABELS.transcribing;\r\n if (flags.isBusy) return STATUS_LABELS.loading;\r\n return STATUS_LABELS.ready;\r\n};\r\n\r\nexport const formatDurationMs = (durationMs: number): string => {\r\n const totalSeconds = Math.max(0, Math.floor(durationMs / 1000));\r\n const minutes = Math.floor(totalSeconds / 60)\r\n .toString()\r\n .padStart(2, \"0\");\r\n const seconds = (totalSeconds % 60).toString().padStart(2, \"0\");\r\n return `${minutes}:${seconds}`;\r\n};\r\n\r\nexport const classifyMicGesture = (\r\n durationMs: number,\r\n thresholdMs: number = HOLD_THRESHOLD_MS,\r\n): \"tap\" | \"hold\" => (durationMs >= thresholdMs ? \"hold\" : \"tap\");\r\n\r\nexport const createInitialMessages = (agentName: string): Message[] => [\r\n {\r\n id: 1,\r\n text: getGreetingText(agentName),\r\n isUser: false,\r\n },\r\n];\r\n\r\nexport const clearPersistedChatState = (storage: StorageLike | null): void => {\r\n if (!storage) {\r\n return;\r\n }\r\n\r\n storage.removeItem(STORAGE_KEY);\r\n storage.removeItem(TIMESTAMP_KEY);\r\n storage.removeItem(SESSION_ID_KEY);\r\n};\r\n\r\nexport const scrollElementToBottom = (\r\n element: { scrollTop: number; scrollHeight: number } | null,\r\n): void => {\r\n if (!element) {\r\n return;\r\n }\r\n\r\n element.scrollTop = element.scrollHeight;\r\n};\r\n\r\nconst normalizeError = (error: unknown) => {\r\n if (error instanceof Error) {\r\n return error.message;\r\n }\r\n return \"Bilinmeyen hata\";\r\n};\r\n\r\nconst getNextMessageId = (messages: Message[]): number => {\r\n const maxId = messages.reduce((acc, message) => Math.max(acc, message.id), 0);\r\n return maxId + 1;\r\n};\r\n\r\nexport interface AssistantPayloadResolution {\r\n displayText: string;\r\n toolCalls: ReturnType<typeof parseAgentResponse>[\"toolCalls\"];\r\n}\r\n\r\nexport const resolveAssistantPayload = (\r\n assistantText: string,\r\n): AssistantPayloadResolution => {\r\n const parsed = parseAgentResponse(assistantText);\r\n return {\r\n displayText: parsed.reply || assistantText,\r\n toolCalls: parsed.toolCalls,\r\n };\r\n};\r\n\r\nexport const shouldAutoListenAfterAudio = (\r\n accessibilityMode: boolean,\r\n isRecording: boolean,\r\n isBusy: boolean,\r\n): boolean => accessibilityMode && !isRecording && !isBusy;\r\n\r\nexport const ChatWindow = ({\r\n onClose,\r\n config,\r\n accessibilityMode = false,\r\n onAccessibilityToggle,\r\n hidden = false,\r\n actionsRef,\r\n onRecordingChange,\r\n onBusyChange,\r\n onPreviewChange,\r\n}: ChatWindowProps) => {\r\n const [messages, setMessages] = useState<Message[]>(() => {\r\n if (typeof localStorage !== \"undefined\") {\r\n const saved = localStorage.getItem(STORAGE_KEY);\r\n const timestamp = localStorage.getItem(TIMESTAMP_KEY);\r\n\r\n if (saved && timestamp) {\r\n const timePassed = Date.now() - parseInt(timestamp, 10);\r\n if (timePassed < TTL_MS) {\r\n try {\r\n return JSON.parse(saved) as Message[];\r\n } catch {\r\n // Ignore parse error and continue with default.\r\n }\r\n } else {\r\n clearPersistedChatState(localStorage);\r\n }\r\n }\r\n }\r\n\r\n return createInitialMessages(config.agentName);\r\n });\r\n\r\n const [isBusy, setIsBusy] = useState(false);\r\n const [isRecording, setIsRecording] = useState(false);\r\n const [isTranscribing, setIsTranscribing] = useState(false);\r\n const [isThinking, setIsThinking] = useState(false);\r\n const [isRenderingAudio, setIsRenderingAudio] = useState(false);\r\n const [isPlayingAudio, setIsPlayingAudio] = useState(false);\r\n const [isRunningTools, setIsRunningTools] = useState(false);\r\n const [recordingDurationMs, setRecordingDurationMs] = useState(0);\r\n const [statusOverride, setStatusOverride] = useState<string | null>(null);\r\n\r\n const resolvedStatusText = resolveStatusText({\r\n isBusy,\r\n isRecording,\r\n isTranscribing,\r\n isThinking,\r\n isRenderingAudio,\r\n isPlayingAudio,\r\n isRunningTools,\r\n });\r\n const statusText = statusOverride ?? resolvedStatusText;\r\n\r\n const isBusyRef = useRef(isBusy);\r\n const isRecordingRef = useRef(isRecording);\r\n\r\n const nextMessageIdRef = useRef(getNextMessageId(messages));\r\n const recorderRef = useRef<MediaRecorder | null>(null);\r\n const streamRef = useRef<MediaStream | null>(null);\r\n const audioChunksRef = useRef<BlobPart[]>([]);\r\n const activeStreamControllerRef = useRef<StreamController | null>(null);\r\n const sessionIdRef = useRef<string | null>(\r\n typeof localStorage !== \"undefined\"\r\n ? (() => {\r\n const ts = localStorage.getItem(TIMESTAMP_KEY);\r\n if (ts && Date.now() - parseInt(ts, 10) < TTL_MS) {\r\n return localStorage.getItem(SESSION_ID_KEY);\r\n }\r\n return null;\r\n })()\r\n : null,\r\n );\r\n\r\n const silenceStartRef = useRef<number | null>(null);\r\n const vadIntervalRef = useRef<number | null>(null);\r\n const audioContextRef = useRef<AudioContext | null>(null);\r\n const sourceRef = useRef<MediaStreamAudioSourceNode | null>(null);\r\n\r\n const discardNextRecordingRef = useRef(false);\r\n\r\n const micPressStartRef = useRef<number | null>(null);\r\n const micHoldTimeoutRef = useRef<number | null>(null);\r\n const micHoldTriggeredRef = useRef(false);\r\n const recordingModeRef = useRef<RecordingMode | null>(null);\r\n const pendingStopAfterStartRef = useRef(false);\r\n const startRecordingPendingRef = useRef(false);\r\n\r\n const assistantMessageIdRef = useRef<number | null>(null);\r\n const assistantTextBufferRef = useRef(\"\");\r\n const transcriptionReceivedRef = useRef(false);\r\n const assistantDoneReceivedRef = useRef(false);\r\n\r\n const recordingStartedAtRef = useRef<number | null>(null);\r\n const recordingTimerIntervalRef = useRef<number | null>(null);\r\n\r\n const messagesContainerRef = useRef<HTMLDivElement | null>(null);\r\n const messagesContentRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const pendingUserTextRef = useRef<string | null>(null);\r\n const pendingAssistantTextRef = useRef<string>(\"\");\r\n const streamingJsonParserRef = useRef<StreamingJsonParser | null>(null);\r\n const awaitingAssistantResponseRef = useRef(false);\r\n const sfxQueueRef = useRef<SfxName[]>([]);\r\n const sfxQueueActiveRef = useRef(false);\r\n const sfxDisposedRef = useRef(false);\r\n const activeSfxAudioRef = useRef<HTMLAudioElement | null>(null);\r\n const activeSfxResolveRef = useRef<(() => void) | null>(null);\r\n const autoListenSuppressedRef = useRef(false);\r\n\r\n useEffect(() => {\r\n isBusyRef.current = isBusy;\r\n }, [isBusy]);\r\n\r\n useEffect(() => {\r\n isRecordingRef.current = isRecording;\r\n }, [isRecording]);\r\n\r\n // Report state changes to parent\r\n useEffect(() => { onRecordingChange?.(isRecording); }, [isRecording]);\r\n useEffect(() => { onBusyChange?.(isBusy); }, [isBusy]);\r\n\r\n // Derive and report preview text to parent\r\n useEffect(() => {\r\n if (!onPreviewChange) return;\r\n if (isRecording) {\r\n onPreviewChange(STATUS_LABELS.listening);\r\n return;\r\n }\r\n // When audio is rendering/playing, show the actual message text\r\n if (isRenderingAudio || isPlayingAudio) {\r\n const lastAssistant = [...messages].reverse().find(m => !m.isUser && m.type !== \"tool\");\r\n onPreviewChange(lastAssistant?.text ?? getGreetingText(config.agentName));\r\n return;\r\n }\r\n if (isBusy || isTranscribing || isThinking || isRunningTools) {\r\n const st = statusOverride ?? resolveStatusText({\r\n isBusy, isRecording, isTranscribing, isThinking,\r\n isRenderingAudio, isPlayingAudio, isRunningTools,\r\n });\r\n onPreviewChange(st);\r\n return;\r\n }\r\n // Show last assistant message (or greeting)\r\n const lastAssistant = [...messages].reverse().find(m => !m.isUser && m.type !== \"tool\");\r\n onPreviewChange(lastAssistant?.text ?? getGreetingText(config.agentName));\r\n }, [isRecording, isBusy, isTranscribing, isThinking, isRunningTools,\r\n isPlayingAudio, isRenderingAudio, statusOverride, messages]);\r\n\r\n const playSfxNow = (name: SfxName): Promise<void> =>\r\n new Promise((resolve) => {\r\n if (typeof window === \"undefined\" || sfxDisposedRef.current) {\r\n resolve();\r\n return;\r\n }\r\n\r\n const audio = new Audio(SFX_SOURCES[name]);\r\n audio.preload = \"auto\";\r\n activeSfxAudioRef.current = audio;\r\n\r\n let settled = false;\r\n const finalize = () => {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n audio.onended = null;\r\n audio.onerror = null;\r\n if (activeSfxAudioRef.current === audio) {\r\n activeSfxAudioRef.current = null;\r\n }\r\n if (activeSfxResolveRef.current === finalize) {\r\n activeSfxResolveRef.current = null;\r\n }\r\n resolve();\r\n };\r\n\r\n activeSfxResolveRef.current = finalize;\r\n audio.onended = finalize;\r\n audio.onerror = finalize;\r\n\r\n void audio.play().catch(() => {\r\n // Browser autoplay policies can block short cues.\r\n finalize();\r\n });\r\n });\r\n\r\n const drainSfxQueue = async () => {\r\n if (sfxQueueActiveRef.current || sfxDisposedRef.current) {\r\n return;\r\n }\r\n\r\n sfxQueueActiveRef.current = true;\r\n try {\r\n while (!sfxDisposedRef.current && sfxQueueRef.current.length > 0) {\r\n const next = sfxQueueRef.current.shift();\r\n if (!next) {\r\n continue;\r\n }\r\n await playSfxNow(next);\r\n }\r\n } finally {\r\n sfxQueueActiveRef.current = false;\r\n }\r\n };\r\n\r\n const playSfx = (name: SfxName) => {\r\n if (typeof window === \"undefined\" || sfxDisposedRef.current) {\r\n return;\r\n }\r\n sfxQueueRef.current.push(name);\r\n if (!sfxQueueActiveRef.current) {\r\n void drainSfxQueue();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(messages));\r\n localStorage.setItem(TIMESTAMP_KEY, Date.now().toString());\r\n }\r\n }, [messages]);\r\n\r\n const scrollMessagesToBottom = () => {\r\n scrollElementToBottom(messagesContainerRef.current);\r\n };\r\n\r\n useLayoutEffect(() => {\r\n scrollMessagesToBottom();\r\n }, [messages, statusText, isBusy, isRecording]);\r\n\r\n useEffect(() => {\r\n const content = messagesContentRef.current;\r\n if (!content || typeof ResizeObserver === \"undefined\") {\r\n return;\r\n }\r\n\r\n const observer = new ResizeObserver(() => {\r\n scrollMessagesToBottom();\r\n });\r\n\r\n observer.observe(content);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n const stopRecordingTimer = () => {\r\n if (recordingTimerIntervalRef.current !== null) {\r\n window.clearInterval(recordingTimerIntervalRef.current);\r\n recordingTimerIntervalRef.current = null;\r\n }\r\n recordingStartedAtRef.current = null;\r\n };\r\n\r\n const startRecordingTimer = () => {\r\n stopRecordingTimer();\r\n recordingStartedAtRef.current = Date.now();\r\n setRecordingDurationMs(0);\r\n\r\n recordingTimerIntervalRef.current = window.setInterval(() => {\r\n const startedAt = recordingStartedAtRef.current;\r\n if (startedAt === null) {\r\n setRecordingDurationMs(0);\r\n return;\r\n }\r\n setRecordingDurationMs(Date.now() - startedAt);\r\n }, 200);\r\n };\r\n\r\n const resetProcessingFlags = () => {\r\n setIsTranscribing(false);\r\n setIsThinking(false);\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n setIsRunningTools(false);\r\n setStatusOverride(null);\r\n assistantMessageIdRef.current = null;\r\n assistantTextBufferRef.current = \"\";\r\n transcriptionReceivedRef.current = false;\r\n assistantDoneReceivedRef.current = false;\r\n awaitingAssistantResponseRef.current = false;\r\n pendingUserTextRef.current = null;\r\n pendingAssistantTextRef.current = \"\";\r\n };\r\n\r\n const clearMicHoldTimeout = () => {\r\n if (micHoldTimeoutRef.current !== null) {\r\n window.clearTimeout(micHoldTimeoutRef.current);\r\n micHoldTimeoutRef.current = null;\r\n }\r\n };\r\n\r\n const cleanupVAD = () => {\r\n if (vadIntervalRef.current !== null) {\r\n clearInterval(vadIntervalRef.current);\r\n vadIntervalRef.current = null;\r\n }\r\n\r\n if (sourceRef.current) {\r\n sourceRef.current.disconnect();\r\n sourceRef.current = null;\r\n }\r\n\r\n if (audioContextRef.current) {\r\n audioContextRef.current.close().catch(() => {});\r\n audioContextRef.current = null;\r\n }\r\n\r\n silenceStartRef.current = null;\r\n };\r\n\r\n const stopStreamTracks = () => {\r\n if (!streamRef.current) {\r\n return;\r\n }\r\n\r\n streamRef.current.getTracks().forEach((track) => track.stop());\r\n streamRef.current = null;\r\n };\r\n\r\n const stopActiveStream = () => {\r\n if (!activeStreamControllerRef.current) {\r\n return;\r\n }\r\n\r\n activeStreamControllerRef.current.stop();\r\n activeStreamControllerRef.current = null;\r\n };\r\n\r\n useEffect(\r\n () => () => {\r\n clearMicHoldTimeout();\r\n pendingStopAfterStartRef.current = false;\r\n\r\n stopActiveStream();\r\n cleanupVAD();\r\n stopStreamTracks();\r\n stopRecordingTimer();\r\n\r\n const recorder = recorderRef.current;\r\n if (recorder) {\r\n recorder.ondataavailable = null;\r\n recorder.onstop = null;\r\n recorder.onerror = null;\r\n if (recorder.state !== \"inactive\") {\r\n recorder.stop();\r\n }\r\n recorderRef.current = null;\r\n }\r\n\r\n sfxDisposedRef.current = true;\r\n sfxQueueRef.current = [];\r\n sfxQueueActiveRef.current = false;\r\n\r\n const activeAudio = activeSfxAudioRef.current;\r\n if (activeAudio) {\r\n activeAudio.pause();\r\n activeAudio.removeAttribute(\"src\");\r\n activeAudio.load();\r\n activeSfxAudioRef.current = null;\r\n }\r\n\r\n const resolveActiveSfx = activeSfxResolveRef.current;\r\n activeSfxResolveRef.current = null;\r\n resolveActiveSfx?.();\r\n },\r\n [],\r\n );\r\n\r\n // ── Resume agent loop after full-page navigation ────────────────\r\n useEffect(() => {\r\n const resumeState = getPendingAgentResume();\r\n if (!resumeState) return;\r\n\r\n clearPendingAgentResume();\r\n console.info(\"[Bulut] Resuming agent after navigation\");\r\n\r\n // Restore session ID from resume state\r\n if (resumeState.sessionId) {\r\n sessionIdRef.current = resumeState.sessionId;\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(SESSION_ID_KEY, resumeState.sessionId);\r\n }\r\n }\r\n\r\n setIsBusy(true);\r\n setIsRunningTools(true);\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n\r\n const freshPageContext = getPageContext().summary;\r\n\r\n const resumeToolExec = async (\r\n call: AgentToolCallInfo,\r\n ): Promise<{ call_id: string; result: string }> => {\r\n const toolCall: ToolCallWithId = {\r\n tool: call.tool as \"navigate\" | \"getPageContext\" | \"interact\" | \"scroll\",\r\n call_id: call.call_id,\r\n ...call.args,\r\n } as ToolCallWithId;\r\n return executeSingleToolCall(toolCall);\r\n };\r\n\r\n const controller = agentResumeStream(\r\n config.backendBaseUrl,\r\n resumeState,\r\n freshPageContext,\r\n {\r\n onSessionId: (sid) => {\r\n if (sid && sid !== sessionIdRef.current) {\r\n sessionIdRef.current = sid;\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(SESSION_ID_KEY, sid);\r\n }\r\n }\r\n },\r\n onAssistantDelta: (delta) => {\r\n setIsRunningTools(false);\r\n setIsThinking(true);\r\n setStatusOverride(null);\r\n\r\n pendingAssistantTextRef.current += delta;\r\n\r\n if (assistantMessageIdRef.current === null) {\r\n assistantMessageIdRef.current = appendMessage(\r\n pendingAssistantTextRef.current,\r\n false,\r\n );\r\n } else {\r\n updateMessageText(\r\n assistantMessageIdRef.current,\r\n pendingAssistantTextRef.current,\r\n );\r\n }\r\n },\r\n onAssistantDone: (assistantText) => {\r\n playSfx(\"completed\");\r\n setStatusOverride(null);\r\n setIsThinking(false);\r\n setIsRenderingAudio(true);\r\n\r\n const finalDisplayText =\r\n assistantText || pendingAssistantTextRef.current;\r\n pendingAssistantTextRef.current = finalDisplayText;\r\n\r\n if (assistantMessageIdRef.current !== null) {\r\n updateMessageText(\r\n assistantMessageIdRef.current,\r\n finalDisplayText,\r\n );\r\n } else {\r\n assistantMessageIdRef.current = appendMessage(\r\n finalDisplayText,\r\n false,\r\n );\r\n }\r\n },\r\n onToolCalls: (calls) => {\r\n if (calls.length > 0) {\r\n playSfx(\"toolCall\");\r\n }\r\n setIsRunningTools(true);\r\n setStatusOverride(STATUS_LABELS.runningTools);\r\n\r\n for (const call of calls) {\r\n const toolLabel =\r\n call.tool === \"navigate\"\r\n ? `Sayfaya gidiliyor: ${call.args.url ?? \"\"}`\r\n : call.tool === \"getPageContext\"\r\n ? \"Sayfa bağlamı alınıyor…\"\r\n : call.tool === \"interact\"\r\n ? `Etkileşim: ${call.args.action ?? \"\"}`\r\n : call.tool === \"scroll\"\r\n ? \"Kaydırılıyor…\"\r\n : call.tool;\r\n\r\n appendMessage(`${toolLabel}`, false);\r\n setMessages((prev) => {\r\n const last = prev[prev.length - 1];\r\n if (last && !last.isUser) {\r\n return [\r\n ...prev.slice(0, -1),\r\n { ...last, type: \"tool\" as const },\r\n ];\r\n }\r\n return prev;\r\n });\r\n }\r\n\r\n assistantMessageIdRef.current = null;\r\n pendingAssistantTextRef.current = \"\";\r\n },\r\n onToolResult: () => {},\r\n onIteration: () => {\r\n playSfx(\"thinking\");\r\n setIsThinking(true);\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n },\r\n onAudioStateChange: handleAudioStateChange,\r\n onError: (err) => {\r\n setStatusOverride(null);\r\n appendMessage(`Hata: ${err}`, false);\r\n },\r\n },\r\n resumeToolExec,\r\n );\r\n\r\n activeStreamControllerRef.current = controller;\r\n\r\n controller.done\r\n .catch(() => {})\r\n .finally(() => {\r\n setIsBusy(false);\r\n setIsRunningTools(false);\r\n setIsThinking(false);\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n setStatusOverride(null);\r\n pendingAssistantTextRef.current = \"\";\r\n assistantMessageIdRef.current = null;\r\n activeStreamControllerRef.current = null;\r\n\r\n if (\r\n !autoListenSuppressedRef.current &&\r\n shouldAutoListenAfterAudio(\r\n accessibilityMode,\r\n isRecordingRef.current,\r\n isBusyRef.current,\r\n )\r\n ) {\r\n void startRecording(\"vad\");\r\n }\r\n });\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const appendMessage = (text: string, isUser: boolean): number => {\r\n const id = nextMessageIdRef.current++;\r\n setMessages((previous) => [\r\n ...previous,\r\n {\r\n id,\r\n text,\r\n isUser,\r\n },\r\n ]);\r\n return id;\r\n };\r\n\r\n const updateMessageText = (id: number, text: string) => {\r\n setMessages((previous) =>\r\n previous.map((message) =>\r\n message.id === id ? { ...message, text } : message,\r\n ),\r\n );\r\n };\r\n\r\n const handleAudioStateChange = (state: AudioStreamState) => {\r\n if (state === \"rendering\") {\r\n setIsRenderingAudio(true);\r\n setIsPlayingAudio(false);\r\n return;\r\n }\r\n\r\n if (state === \"playing\") {\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(true);\r\n return;\r\n }\r\n\r\n if (state === \"fallback\") {\r\n setIsRenderingAudio(true);\r\n setIsPlayingAudio(false);\r\n return;\r\n }\r\n\r\n if (state === \"done\") {\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n return;\r\n }\r\n\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n };\r\n\r\n const handleAudioBlob = async (blob: Blob) => {\r\n if (!config.projectId) {\r\n appendMessage(\"Hata: Project ID yapılandırılmamış.\", false);\r\n return;\r\n }\r\n\r\n setIsBusy(true);\r\n setIsTranscribing(true);\r\n setIsThinking(false);\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n setIsRunningTools(false);\r\n resetProcessingFlags(); // Start fresh\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n awaitingAssistantResponseRef.current = true;\r\n\r\n try {\r\n const fileType = blob.type || \"audio/webm\";\r\n const extension = fileType.includes(\"ogg\")\r\n ? \"ogg\"\r\n : fileType.includes(\"wav\")\r\n ? \"wav\"\r\n : fileType.includes(\"mpeg\") || fileType.includes(\"mp3\")\r\n ? \"mp3\"\r\n : \"webm\";\r\n const file = new File([blob], `voice-input.${extension}`, {\r\n type: fileType,\r\n });\r\n\r\n stopActiveStream();\r\n\r\n const pageContext = getPageContext().summary;\r\n\r\n // Helper: bridge an AgentToolCallInfo to a ToolCallWithId\r\n const handleToolExecution = async (\r\n call: AgentToolCallInfo,\r\n ): Promise<{ call_id: string; result: string }> => {\r\n const toolCall: ToolCallWithId = {\r\n tool: call.tool as\r\n | \"navigate\"\r\n | \"getPageContext\"\r\n | \"interact\"\r\n | \"scroll\",\r\n call_id: call.call_id,\r\n ...call.args,\r\n } as ToolCallWithId;\r\n return executeSingleToolCall(toolCall);\r\n };\r\n\r\n const controller = agentVoiceChatStream(\r\n config.backendBaseUrl,\r\n file,\r\n config.projectId,\r\n sessionIdRef.current,\r\n {\r\n model: config.model,\r\n voice: config.voice,\r\n pageContext,\r\n accessibilityMode,\r\n },\r\n {\r\n onSttRequestSent: () => {\r\n playSfx(\"sent\");\r\n },\r\n onTranscription: (data) => {\r\n if (data.session_id && data.session_id !== sessionIdRef.current) {\r\n sessionIdRef.current = data.session_id;\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(SESSION_ID_KEY, data.session_id);\r\n }\r\n }\r\n\r\n // Guard: only append user text once (STT callback fires once)\r\n if (\r\n data.user_text.trim() &&\r\n pendingUserTextRef.current !== data.user_text\r\n ) {\r\n pendingUserTextRef.current = data.user_text;\r\n appendMessage(data.user_text, true);\r\n }\r\n\r\n setIsTranscribing(false);\r\n setIsThinking(true);\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n },\r\n onSessionId: (sid) => {\r\n if (sid && sid !== sessionIdRef.current) {\r\n sessionIdRef.current = sid;\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(SESSION_ID_KEY, sid);\r\n }\r\n }\r\n },\r\n onAssistantDelta: (delta) => {\r\n setIsTranscribing(false);\r\n setIsThinking(true);\r\n setIsRunningTools(false);\r\n if (awaitingAssistantResponseRef.current) {\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n }\r\n\r\n // Agent returns plain text (not JSON), stream it directly\r\n pendingAssistantTextRef.current += delta;\r\n\r\n if (assistantMessageIdRef.current === null) {\r\n assistantMessageIdRef.current = appendMessage(\r\n pendingAssistantTextRef.current,\r\n false,\r\n );\r\n } else {\r\n updateMessageText(\r\n assistantMessageIdRef.current,\r\n pendingAssistantTextRef.current,\r\n );\r\n }\r\n },\r\n onAssistantDone: (assistantText) => {\r\n playSfx(\"completed\");\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n setIsThinking(false);\r\n setIsRenderingAudio(true);\r\n\r\n const finalDisplayText =\r\n assistantText || pendingAssistantTextRef.current;\r\n\r\n streamingJsonParserRef.current = null;\r\n pendingAssistantTextRef.current = finalDisplayText;\r\n\r\n if (assistantMessageIdRef.current !== null) {\r\n updateMessageText(\r\n assistantMessageIdRef.current,\r\n finalDisplayText,\r\n );\r\n } else {\r\n assistantMessageIdRef.current = appendMessage(\r\n finalDisplayText,\r\n false,\r\n );\r\n }\r\n },\r\n onToolCalls: (calls) => {\r\n if (calls.length > 0) {\r\n playSfx(\"toolCall\");\r\n }\r\n setIsRunningTools(true);\r\n setStatusOverride(STATUS_LABELS.runningTools);\r\n\r\n // Show each tool call as a small indicator message\r\n for (const call of calls) {\r\n const toolLabel =\r\n call.tool === \"navigate\"\r\n ? `Sayfaya gidiliyor: ${call.args.url ?? \"\"}`\r\n : call.tool === \"getPageContext\"\r\n ? \"Sayfa bağlamı alınıyor…\"\r\n : call.tool === \"interact\"\r\n ? `Etkileşim: ${call.args.action ?? \"\"}`\r\n : call.tool === \"scroll\"\r\n ? \"Kaydırılıyor…\"\r\n : call.tool;\r\n\r\n appendMessage(`${toolLabel}`, false);\r\n // Mark the tool message\r\n setMessages((prev) => {\r\n const last = prev[prev.length - 1];\r\n if (last && !last.isUser) {\r\n return [\r\n ...prev.slice(0, -1),\r\n { ...last, type: \"tool\" as const },\r\n ];\r\n }\r\n return prev;\r\n });\r\n }\r\n\r\n // Reset assistant message ref so next reply gets a new bubble\r\n assistantMessageIdRef.current = null;\r\n pendingAssistantTextRef.current = \"\";\r\n },\r\n onToolResult: (_callId, _toolName, _result) => {\r\n // Tool result sent back to agent automatically.\r\n // Could display detailed result here if needed.\r\n },\r\n onIteration: (_iteration, _maxIterations) => {\r\n // Agent started a new reasoning iteration\r\n playSfx(\"thinking\");\r\n setIsThinking(true);\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n },\r\n onAudioStateChange: handleAudioStateChange,\r\n onError: (err) => {\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n appendMessage(`Hata: ${err}`, false);\r\n },\r\n },\r\n handleToolExecution,\r\n );\r\n\r\n activeStreamControllerRef.current = controller;\r\n await controller.done;\r\n\r\n // Safety: Ensure messages are flushed if not already\r\n // (e.g. if audio 'done' event didn't fire for some reason or there was no audio)\r\n /* if (pendingUserTextRef.current || pendingAssistantTextRef.current) {\r\n // flushPendingMessages(); // Removed as we stream now\r\n } */\r\n } catch (error) {\r\n // Error already shown via onError callback — don't duplicate\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n } finally {\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n setIsBusy(false);\r\n setIsTranscribing(false);\r\n setIsThinking(false);\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n setIsRunningTools(false);\r\n // Reset for next message cycle\r\n pendingUserTextRef.current = null;\r\n pendingAssistantTextRef.current = \"\";\r\n assistantMessageIdRef.current = null;\r\n if (activeStreamControllerRef.current) {\r\n activeStreamControllerRef.current = null;\r\n }\r\n if (\r\n !autoListenSuppressedRef.current &&\r\n shouldAutoListenAfterAudio(\r\n accessibilityMode,\r\n isRecordingRef.current,\r\n isBusyRef.current,\r\n )\r\n ) {\r\n console.info(\r\n \"[Bulut] chat-window auto-listen trigger after stream completion\",\r\n );\r\n void startRecording(\"vad\");\r\n }\r\n }\r\n };\r\n\r\n const stopRecording = (options?: { discard?: boolean }) => {\r\n const recorder = recorderRef.current;\r\n if (!recorder || recorder.state === \"inactive\") {\r\n return;\r\n }\r\n\r\n if (options?.discard) {\r\n discardNextRecordingRef.current = true;\r\n }\r\n\r\n cleanupVAD();\r\n recorder.stop();\r\n };\r\n\r\n const setupVAD = (stream: MediaStream, recorder: MediaRecorder) => {\r\n const AudioCtx =\r\n window.AudioContext ||\r\n (window as Window & { webkitAudioContext?: typeof AudioContext })\r\n .webkitAudioContext;\r\n\r\n if (!AudioCtx) {\r\n return;\r\n }\r\n\r\n const context = new AudioCtx();\r\n audioContextRef.current = context;\r\n\r\n const analyser = context.createAnalyser();\r\n analyser.fftSize = 256;\r\n\r\n const source = context.createMediaStreamSource(stream);\r\n sourceRef.current = source;\r\n source.connect(analyser);\r\n\r\n const dataArray = new Uint8Array(analyser.frequencyBinCount);\r\n silenceStartRef.current = null;\r\n let speechDetected = false;\r\n\r\n vadIntervalRef.current = window.setInterval(() => {\r\n if (!isRecordingRef.current || recorder.state === \"inactive\") {\r\n cleanupVAD();\r\n return;\r\n }\r\n\r\n analyser.getByteFrequencyData(dataArray);\r\n\r\n let sum = 0;\r\n for (const value of dataArray) {\r\n sum += value;\r\n }\r\n const average = sum / dataArray.length;\r\n const volume = average / 255;\r\n\r\n if (volume < VAD_THRESHOLD) {\r\n if (silenceStartRef.current === null) {\r\n silenceStartRef.current = Date.now();\r\n return;\r\n }\r\n\r\n const silenceDuration = Date.now() - silenceStartRef.current;\r\n if (speechDetected && silenceDuration > SILENCE_DURATION_MS) {\r\n stopRecording();\r\n }\r\n return;\r\n }\r\n\r\n speechDetected = true;\r\n silenceStartRef.current = null;\r\n }, 50);\r\n };\r\n\r\n const startRecording = async (mode: RecordingMode) => {\r\n if (\r\n isBusyRef.current ||\r\n isRecordingRef.current ||\r\n startRecordingPendingRef.current\r\n ) {\r\n return;\r\n }\r\n\r\n setStatusOverride(STATUS_LABELS.listening);\r\n\r\n if (!navigator.mediaDevices?.getUserMedia) {\r\n setStatusOverride(null);\r\n appendMessage(\"Bu tarayıcıda mikrofon kullanılamıyor.\", false);\r\n return;\r\n }\r\n\r\n if (typeof MediaRecorder === \"undefined\") {\r\n setStatusOverride(null);\r\n appendMessage(\"Bu tarayıcıda MediaRecorder desteklenmiyor.\", false);\r\n return;\r\n }\r\n\r\n startRecordingPendingRef.current = true;\r\n\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n streamRef.current = stream;\r\n\r\n // Use low bitrate for speech — opus handles voice well at 16-24 kbps\r\n // and produces ~4-5x smaller payloads, speeding up the upload to fal.\r\n const recorderOptions: MediaRecorderOptions = {\r\n audioBitsPerSecond: 16_000,\r\n };\r\n\r\n // Prefer opus-in-ogg (smaller container) → opus-in-webm → browser default\r\n const preferredMimeTypes = [\r\n \"audio/ogg;codecs=opus\",\r\n \"audio/webm;codecs=opus\",\r\n \"audio/webm\",\r\n ];\r\n for (const mime of preferredMimeTypes) {\r\n if (MediaRecorder.isTypeSupported(mime)) {\r\n recorderOptions.mimeType = mime;\r\n break;\r\n }\r\n }\r\n\r\n const recorder = new MediaRecorder(stream, recorderOptions);\r\n recorderRef.current = recorder;\r\n audioChunksRef.current = [];\r\n\r\n recorder.ondataavailable = (event) => {\r\n if (event.data.size > 0) {\r\n audioChunksRef.current.push(event.data);\r\n }\r\n };\r\n\r\n recorder.onerror = () => {\r\n appendMessage(\"Mikrofon kaydı sırasında bir hata oluştu.\", false);\r\n };\r\n\r\n recorder.onstop = async () => {\r\n setIsRecording(false);\r\n isRecordingRef.current = false;\r\n recordingModeRef.current = null;\r\n stopRecordingTimer();\r\n\r\n cleanupVAD();\r\n stopStreamTracks();\r\n\r\n const shouldDiscard = discardNextRecordingRef.current;\r\n discardNextRecordingRef.current = false;\r\n\r\n const blob = new Blob(audioChunksRef.current, {\r\n type: recorder.mimeType || \"audio/webm\",\r\n });\r\n audioChunksRef.current = [];\r\n\r\n if (shouldDiscard) {\r\n setStatusOverride(null);\r\n return;\r\n }\r\n\r\n if (blob.size === 0) {\r\n setStatusOverride(null);\r\n appendMessage(\"Ses kaydı alınamadı. Lütfen tekrar deneyin.\", false);\r\n return;\r\n }\r\n\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n await handleAudioBlob(blob);\r\n };\r\n\r\n if (mode === \"vad\") {\r\n setupVAD(stream, recorder);\r\n }\r\n\r\n recorder.start(200);\r\n recordingModeRef.current = mode;\r\n setIsRecording(true);\r\n isRecordingRef.current = true;\r\n startRecordingTimer();\r\n\r\n if (pendingStopAfterStartRef.current) {\r\n pendingStopAfterStartRef.current = false;\r\n stopRecording();\r\n }\r\n } catch (error) {\r\n const errMsg = normalizeError(error);\r\n if (errMsg.toLowerCase().includes(\"permission\") || errMsg.toLowerCase().includes(\"denied\")) {\r\n autoListenSuppressedRef.current = true;\r\n }\r\n setStatusOverride(null);\r\n appendMessage(`Mikrofon hatası: ${errMsg}`, false);\r\n cleanupVAD();\r\n stopStreamTracks();\r\n pendingStopAfterStartRef.current = false;\r\n setIsRecording(false);\r\n isRecordingRef.current = false;\r\n stopRecordingTimer();\r\n } finally {\r\n if (!isRecordingRef.current && !isBusyRef.current) {\r\n setStatusOverride(null);\r\n }\r\n startRecordingPendingRef.current = false;\r\n }\r\n };\r\n\r\n const resetMicGesture = () => {\r\n micPressStartRef.current = null;\r\n micHoldTriggeredRef.current = false;\r\n clearMicHoldTimeout();\r\n };\r\n\r\n const handleMicPointerDown = (\r\n event: JSX.TargetedPointerEvent<HTMLButtonElement>,\r\n ) => {\r\n event.preventDefault();\r\n\r\n if (isBusyRef.current) {\r\n return;\r\n }\r\n\r\n if (isRecordingRef.current) {\r\n // In VAD mode, tapping the button cancels; in press mode, it sends\r\n if (recordingModeRef.current === \"vad\") {\r\n stopRecording({ discard: true });\r\n } else {\r\n stopRecording();\r\n }\r\n return;\r\n }\r\n\r\n micPressStartRef.current = Date.now();\r\n micHoldTriggeredRef.current = false;\r\n clearMicHoldTimeout();\r\n\r\n if (event.currentTarget.setPointerCapture) {\r\n try {\r\n event.currentTarget.setPointerCapture(event.pointerId);\r\n } catch {\r\n // No-op.\r\n }\r\n }\r\n\r\n micHoldTimeoutRef.current = window.setTimeout(() => {\r\n if (\r\n micPressStartRef.current === null ||\r\n isBusyRef.current ||\r\n isRecordingRef.current\r\n ) {\r\n return;\r\n }\r\n\r\n micHoldTriggeredRef.current = true;\r\n void startRecording(\"press\");\r\n }, HOLD_THRESHOLD_MS);\r\n };\r\n\r\n const handleMicPointerUp = (\r\n event: JSX.TargetedPointerEvent<HTMLButtonElement>,\r\n ) => {\r\n event.preventDefault();\r\n\r\n if (event.currentTarget.releasePointerCapture) {\r\n try {\r\n event.currentTarget.releasePointerCapture(event.pointerId);\r\n } catch {\r\n // No-op.\r\n }\r\n }\r\n\r\n const startedAt = micPressStartRef.current;\r\n const wasHold = micHoldTriggeredRef.current;\r\n resetMicGesture();\r\n\r\n if (startedAt === null) {\r\n return;\r\n }\r\n\r\n if (wasHold) {\r\n if (isRecordingRef.current) {\r\n stopRecording();\r\n } else if (startRecordingPendingRef.current) {\r\n pendingStopAfterStartRef.current = true;\r\n }\r\n return;\r\n }\r\n\r\n const duration = Date.now() - startedAt;\r\n if (classifyMicGesture(duration) === \"tap\") {\r\n void startRecording(\"vad\");\r\n }\r\n };\r\n\r\n const handleMicPointerCancel = (\r\n event: JSX.TargetedPointerEvent<HTMLButtonElement>,\r\n ) => {\r\n handleMicPointerUp(event);\r\n };\r\n\r\n const handleRestart = () => {\r\n resetMicGesture();\r\n pendingStopAfterStartRef.current = false;\r\n\r\n stopActiveStream();\r\n\r\n if (recorderRef.current && recorderRef.current.state !== \"inactive\") {\r\n stopRecording({ discard: true });\r\n } else {\r\n discardNextRecordingRef.current = false;\r\n cleanupVAD();\r\n stopStreamTracks();\r\n }\r\n\r\n stopRecordingTimer();\r\n setRecordingDurationMs(0);\r\n\r\n clearPersistedChatState(\r\n typeof localStorage !== \"undefined\" ? localStorage : null,\r\n );\r\n\r\n sessionIdRef.current = null;\r\n const initialMessages = createInitialMessages(config.agentName);\r\n nextMessageIdRef.current = getNextMessageId(initialMessages);\r\n setMessages(initialMessages);\r\n\r\n setIsBusy(false);\r\n isBusyRef.current = false;\r\n setIsRecording(false);\r\n isRecordingRef.current = false;\r\n resetProcessingFlags();\r\n };\r\n\r\n // Auto-listen when accessibility mode is activated (initial trigger)\r\n useEffect(() => {\r\n if (!accessibilityMode || autoListenSuppressedRef.current) return;\r\n const timer = window.setTimeout(() => {\r\n if (!isRecordingRef.current && !isBusyRef.current && !startRecordingPendingRef.current && !autoListenSuppressedRef.current) {\r\n void startRecording(\"vad\");\r\n }\r\n }, 500);\r\n return () => window.clearTimeout(timer);\r\n }, [accessibilityMode]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const stopTask = () => {\r\n stopActiveStream();\r\n stopRecording({ discard: true });\r\n cleanupVAD();\r\n stopStreamTracks();\r\n resetProcessingFlags();\r\n setIsBusy(false);\r\n };\r\n\r\n // Expose recording actions to parent via actionsRef\r\n if (actionsRef) {\r\n actionsRef.current = {\r\n startRecording: () => {\r\n autoListenSuppressedRef.current = false;\r\n void startRecording(\"vad\");\r\n },\r\n cancelRecording: () => {\r\n const recorder = recorderRef.current;\r\n if (recorder && recorder.state !== \"inactive\") {\r\n stopRecording({ discard: true });\r\n } else {\r\n cleanupVAD();\r\n stopStreamTracks();\r\n }\r\n },\r\n stopTask,\r\n };\r\n }\r\n\r\n const windowStyle: { [key: string]: string } = {\r\n position: \"fixed\",\r\n bottom: `${POSITION_BOTTOM}px`,\r\n right: `${POSITION_RIGHT}px`,\r\n width: `${WINDOW_WIDTH}px`,\r\n maxHeight: `${WINDOW_HEIGHT}px`,\r\n backgroundColor: \"hsla(0, 0%, 100%, 1)\",\r\n borderRadius: BORDER_RADIUS.window,\r\n display: hidden ? \"none\" : \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n zIndex: \"10000\",\r\n animation: hidden ? \"none\" : `slideIn ${TRANSITIONS.medium}`,\r\n boxShadow: SHADOW,\r\n fontFamily: \"\\\"Geist\\\", sans-serif\",\r\n };\r\n\r\n const headerStyle: { [key: string]: string } = {\r\n padding: \"14px 16px\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n };\r\n\r\n const headerActionsStyle: { [key: string]: string } = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"6px\",\r\n };\r\n\r\n const headerButtonStyle: { [key: string]: string } = {\r\n background: \"none\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n padding: \"4px\",\r\n borderRadius: \"6px\",\r\n color: COLORS.text,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n transition: `color ${TRANSITIONS.fast}, background-color ${TRANSITIONS.fast}`,\r\n };\r\n\r\n const messagesContainerStyle: { [key: string]: string } = {\r\n padding: \"0px 16px\",\r\n overflowY: \"auto\",\r\n flex: \"1\",\r\n minHeight: \"0\",\r\n };\r\n\r\n const messagesListStyle: { [key: string]: string } = {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"16px\",\r\n };\r\n\r\n const messageStyle = (isUser: boolean): JSX.CSSProperties => ({\r\n maxWidth: \"84%\",\r\n padding: isUser ? \"9px 14px\" : \"0px 0px\",\r\n borderRadius: BORDER_RADIUS.message,\r\n fontSize: \"14px\",\r\n lineHeight: \"140%\",\r\n wordWrap: \"break-word\",\r\n whiteSpace: \"pre-wrap\",\r\n alignSelf: isUser ? \"flex-end\" : \"flex-start\",\r\n backgroundColor: isUser ? COLORS.messageUser : \"\",\r\n color: isUser ? COLORS.messageUserText : \"hsla(215, 100%, 5%, 1)\",\r\n });\r\n\r\n const footerStyle: { [key: string]: string } = {\r\n padding: \"10px 12px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: \"8px\",\r\n };\r\n\r\n const statusPanelStyle: { [key: string]: string } = {\r\n flex: \"1\",\r\n minHeight: \"34px\",\r\n borderRadius: \"10px\",\r\n color: COLORS.text,\r\n fontSize: \"14px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n padding: \"0 10px\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n opacity: \"0.7\",\r\n };\r\n\r\n const footerActionsStyle: { [key: string]: string } = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"8px\",\r\n flexShrink: \"0\",\r\n };\r\n\r\n const recordingTimerStyle: { [key: string]: string } = {\r\n minWidth: \"46px\",\r\n fontSize: \"12px\",\r\n fontWeight: \"700\",\r\n color: COLORS.text,\r\n textAlign: \"right\",\r\n };\r\n\r\n const micFooterButtonStyle: { [key: string]: string } = {\r\n width: \"37px\",\r\n height: \"37px\",\r\n borderRadius: \"999px\",\r\n background: \"transparent\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n cursor: \"pointer\",\r\n color: \"#ffffff\",\r\n border: \"1px solid hsla(215, 100%, 5%, 0.5)\",\r\n transition: `transform ${TRANSITIONS.fast}`,\r\n };\r\n\r\n const isVadRecording = isRecording && recordingModeRef.current === \"vad\";\r\n const showStopButton = isBusy && !isRecording;\r\n const disableMicControl = isBusy;\r\n\r\n return (\r\n <div className=\"bulut-chat-window\" style={windowStyle}>\r\n <style>{`\r\n @keyframes slideIn {\r\n from {\r\n opacity: 0;\r\n transform: translateY(10px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n\r\n .bulut-header-btn:hover:not(:disabled) {\r\n color: ${COLORS.text};\r\n }\r\n\r\n .bulut-footer-btn:hover:not(:disabled) {\r\n transform: scale(1.04);\r\n }\r\n\r\n .bulut-header-btn:disabled,\r\n .bulut-footer-btn:disabled {\r\n cursor: not-allowed;\r\n opacity: 0.5;\r\n transform: none;\r\n }\r\n\r\n @keyframes bulut-dots {\r\n 0% { content: '.'; }\r\n 33% { content: '..'; }\r\n 66% { content: '...'; }\r\n }\r\n\r\n .bulut-status-dots::after {\r\n content: '.';\r\n animation: bulut-dots 1.2s steps(1) infinite;\r\n display: inline-block;\r\n min-width: 12px;\r\n text-align: left;\r\n }\r\n\r\n /* Mobile: full-screen chat window */\r\n @media (max-width: 600px) {\r\n .bulut-chat-window {\r\n top: 0 !important;\r\n left: 0 !important;\r\n right: 0 !important;\r\n bottom: 0 !important;\r\n width: 100% !important;\r\n max-height: 100% !important;\r\n height: 100% !important;\r\n border-radius: 0 !important;\r\n }\r\n .bulut-close-btn {\r\n width: 40px !important;\r\n height: 40px !important;\r\n padding: 8px !important;\r\n }\r\n .bulut-close-btn svg {\r\n width: 26px !important;\r\n height: 26px !important;\r\n }\r\n }\r\n `}</style>\r\n\r\n <div style={headerStyle}>\r\n <SvgIcon\r\n src={logoContent}\r\n title=\"Bulut Logo\"\r\n style={{ maxWidth: \"80px\", height: \"auto\" }}\r\n stripColors={false}\r\n />\r\n <div style={headerActionsStyle}>\r\n <button\r\n type=\"button\"\r\n className=\"bulut-header-btn\"\r\n style={headerButtonStyle}\r\n onClick={handleRestart}\r\n aria-label=\"Sohbeti yeniden başlat\"\r\n title=\"Sohbeti yeniden başlat\"\r\n >\r\n <SvgIcon src={restartIconContent} width={22} />\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"bulut-header-btn bulut-close-btn\"\r\n style={{\r\n ...headerButtonStyle,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n onClick={onClose}\r\n aria-label=\"Sohbeti kapat\"\r\n title=\"Sohbeti kapat\"\r\n >\r\n <SvgIcon\r\n fill-opacity={\"0\"}\r\n stroke={\"currentColor\"}\r\n src={closeIconContent}\r\n width={22}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div style={messagesContainerStyle} ref={messagesContainerRef}>\r\n <div style={messagesListStyle} ref={messagesContentRef}>\r\n {messages.map((message) => (\r\n <div\r\n key={message.id}\r\n style={\r\n message.type === \"tool\"\r\n ? {\r\n padding: \"9px 14px\",\r\n fontSize: \"14px\",\r\n lineHeight: \"1.4\",\r\n color: \"hsla(215, 100%, 5%, 1)\",\r\n fontWeight: 600,\r\n backgroundColor: \"hsla(215, 100%, 5%, 0.05)\",\r\n borderRadius: \"10px\",\r\n alignSelf: \"flex-start\",\r\n maxWidth: \"84%\",\r\n }\r\n : messageStyle(message.isUser)\r\n }\r\n >\r\n {message.text}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div style={footerStyle}>\r\n <div style={{ ...statusPanelStyle, transition: \"opacity 0.2s ease-out\" }}>\r\n {statusText !== STATUS_LABELS.ready ? (\r\n <span className=\"bulut-status-dots\" title={statusText}>\r\n {statusText}\r\n </span>\r\n ) : onAccessibilityToggle ? (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"8px\",\r\n }}\r\n >\r\n <span\r\n style={{\r\n fontSize: \"12px\",\r\n opacity: \"0.6\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n Erişilebilirlik\r\n </span>\r\n <button\r\n type=\"button\"\r\n onClick={onAccessibilityToggle}\r\n aria-label={\r\n accessibilityMode\r\n ? \"Erişilebilirlik modunu kapat\"\r\n : \"Erişilebilirlik modunu aç\"\r\n }\r\n style={{\r\n width: \"36px\",\r\n height: \"20px\",\r\n borderRadius: \"10px\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n padding: \"2px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n backgroundColor: accessibilityMode\r\n ? COLORS.primary\r\n : \"hsla(215, 10%, 75%, 1)\",\r\n transition: `background-color ${TRANSITIONS.fast}`,\r\n flexShrink: \"0\",\r\n }}\r\n >\r\n <span\r\n style={{\r\n width: \"16px\",\r\n height: \"16px\",\r\n borderRadius: \"50%\",\r\n backgroundColor: \"#ffffff\",\r\n display: \"block\",\r\n transition: `transform ${TRANSITIONS.fast}`,\r\n transform: accessibilityMode\r\n ? \"translateX(16px)\"\r\n : \"translateX(0)\",\r\n boxShadow: \"0 1px 3px rgba(0,0,0,0.2)\",\r\n }}\r\n />\r\n </button>\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n <div style={footerActionsStyle}>\r\n {isRecording ? (\r\n <span style={recordingTimerStyle}>\r\n {formatDurationMs(recordingDurationMs)}\r\n </span>\r\n ) : null}\r\n {showStopButton ? (\r\n <button\r\n type=\"button\"\r\n className=\"bulut-footer-btn\"\r\n style={micFooterButtonStyle}\r\n onClick={stopTask}\r\n aria-label=\"Görevi durdur\"\r\n title=\"Görevi durdur\"\r\n >\r\n <SvgIcon\r\n fill-opacity={\"0\"}\r\n stroke={\"hsla(215, 100%, 5%, 1)\"}\r\n src={stopIconContent}\r\n width={22}\r\n />\r\n </button>\r\n ) : (\r\n <button\r\n type=\"button\"\r\n className=\"bulut-footer-btn\"\r\n style={micFooterButtonStyle}\r\n onPointerDown={handleMicPointerDown}\r\n onPointerUp={handleMicPointerUp}\r\n onPointerCancel={handleMicPointerCancel}\r\n disabled={disableMicControl}\r\n aria-label={isVadRecording ? \"Kaydı iptal et\" : isRecording ? \"Kaydı durdur\" : \"Kaydı başlat\"}\r\n title={\r\n isVadRecording\r\n ? \"Kaydı iptal et\"\r\n : isRecording\r\n ? \"Kaydı durdur\"\r\n : \"Dokun: VAD, Basılı tut: bırakınca gönder\"\r\n }\r\n >\r\n <SvgIcon\r\n fill-opacity={\"0\"}\r\n stroke={\"hsla(215, 100%, 5%, 1)\"}\r\n src={isVadRecording ? closeIconContent : microphoneIconContent}\r\n width={22}\r\n />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import { useState, useEffect, useRef, useCallback } from \"preact/hooks\";\r\nimport \"./globals.css\";\r\nimport { render } from \"preact\";\r\nimport { ChatButton } from \"./components/ChatButton\";\r\nimport {\r\n ChatWindow,\r\n type ChatWindowHandle,\r\n} from \"./components/ChatWindow\";\r\nimport { COLORS } from \"./styles/constants\";\r\n\r\nexport type BulutVoice = \"zeynep\" | \"ali\";\r\n\r\nexport interface BulutOptions {\r\n containerId?: string;\r\n backendBaseUrl?: string;\r\n projectId?: string;\r\n}\r\n\r\nexport interface BulutRuntimeConfig {\r\n backendBaseUrl: string;\r\n projectId: string;\r\n model: string;\r\n voice: BulutVoice;\r\n baseColor: string;\r\n agentName: string;\r\n}\r\n\r\n/** Default LLM model — keep in sync with backend config.DEFAULT_LLM_MODEL */\r\nconst DEFAULT_LLM_MODEL = \"x-ai/grok-4.1-fast\";\r\n\r\nconst DEFAULT_AGENT_NAME = \"Bulut\";\r\n\r\nconst DEFAULT_CONFIG: BulutRuntimeConfig = {\r\n backendBaseUrl: \"https://api.bulut.lu\",\r\n projectId: \"\", // Must be provided\r\n model: DEFAULT_LLM_MODEL,\r\n voice: \"zeynep\",\r\n baseColor: COLORS.primary,\r\n agentName: DEFAULT_AGENT_NAME,\r\n};\r\n\r\nconst isValidHexColor = (value: string): boolean =>\r\n /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(value);\r\n\r\nconst normalizeHexColor = (value: string): string => {\r\n const trimmed = value.trim();\r\n if (!isValidHexColor(trimmed)) {\r\n return DEFAULT_CONFIG.baseColor;\r\n }\r\n if (trimmed.length === 4) {\r\n const r = trimmed[1];\r\n const g = trimmed[2];\r\n const b = trimmed[3];\r\n return `#${r}${r}${g}${g}${b}${b}`.toLowerCase();\r\n }\r\n return trimmed.toLowerCase();\r\n};\r\n\r\nconst shadeHexColor = (hexColor: string, amount: number): string => {\r\n const normalized = normalizeHexColor(hexColor);\r\n const raw = normalized.slice(1);\r\n const toChannel = (start: number): number => parseInt(raw.slice(start, start + 2), 16);\r\n const clamp = (value: number): number => Math.max(0, Math.min(255, Math.round(value)));\r\n const adjust = (channel: number): number =>\r\n amount < 0 ? channel * (1 + amount) : channel + (255 - channel) * amount;\r\n const toHex = (channel: number): string => clamp(channel).toString(16).padStart(2, \"0\");\r\n\r\n const r = adjust(toChannel(0));\r\n const g = adjust(toChannel(2));\r\n const b = adjust(toChannel(4));\r\n\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n};\r\n\r\nconst applyTheme = (baseColor: string): void => {\r\n const normalized = normalizeHexColor(baseColor);\r\n COLORS.primary = normalized;\r\n COLORS.primaryHover = shadeHexColor(normalized, -0.15);\r\n COLORS.messageUser = normalized;\r\n};\r\n\r\ninterface RemoteProjectConfig {\r\n base_color: string;\r\n model: string;\r\n agent_name: string;\r\n voice: string;\r\n}\r\n\r\nconst fetchRemoteConfig = async (\r\n baseUrl: string,\r\n projectId: string,\r\n): Promise<RemoteProjectConfig | null> => {\r\n try {\r\n const url = baseUrl.replace(/\\/+$/, \"\");\r\n const res = await fetch(`${url}/projects/${projectId}/config`);\r\n if (!res.ok) return null;\r\n return (await res.json()) as RemoteProjectConfig;\r\n } catch {\r\n return null;\r\n }\r\n};\r\n\r\nconst resolveRuntimeConfig = (\r\n options: BulutOptions,\r\n): BulutRuntimeConfig => ({\r\n backendBaseUrl: options.backendBaseUrl || DEFAULT_CONFIG.backendBaseUrl,\r\n projectId: options.projectId || DEFAULT_CONFIG.projectId,\r\n model: DEFAULT_CONFIG.model,\r\n voice: DEFAULT_CONFIG.voice,\r\n baseColor: DEFAULT_CONFIG.baseColor,\r\n agentName: DEFAULT_CONFIG.agentName,\r\n});\r\n\r\ninterface BulutWidgetProps {\r\n config: BulutRuntimeConfig;\r\n}\r\n\r\nconst ACCESSIBILITY_MODE_KEY = \"bulut_accessibility_mode_enabled\";\r\nconst GEIST_FONT_FAMILY = \"Geist\";\r\nconst GEIST_STYLESHEET_ID = \"bulut-geist-font-stylesheet\";\r\nconst GEIST_STYLESHEET_URL =\r\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&display=swap\";\r\n\r\nconst ensureGeistStylesheet = (): void => {\r\n if (typeof document === \"undefined\") {\r\n return;\r\n }\r\n if (document.getElementById(GEIST_STYLESHEET_ID)) {\r\n return;\r\n }\r\n const link = document.createElement(\"link\");\r\n link.id = GEIST_STYLESHEET_ID;\r\n link.rel = \"stylesheet\";\r\n link.href = GEIST_STYLESHEET_URL;\r\n document.head.appendChild(link);\r\n};\r\n\r\nconst BulutWidget = ({ config }: BulutWidgetProps) => {\r\n // Live config that merges remote settings over initial config\r\n const [liveConfig, setLiveConfig] = useState<BulutRuntimeConfig>(config);\r\n const [configReady, setConfigReady] = useState(false);\r\n\r\n // Fetch remote project config on mount — widget stays hidden until done\r\n useEffect(() => {\r\n if (!config.projectId) {\r\n setConfigReady(true);\r\n return;\r\n }\r\n let cancelled = false;\r\n\r\n fetchRemoteConfig(config.backendBaseUrl, config.projectId).then((remote) => {\r\n if (cancelled) return;\r\n if (remote) {\r\n const merged: BulutRuntimeConfig = {\r\n ...config,\r\n baseColor: normalizeHexColor(remote.base_color || config.baseColor),\r\n model: remote.model || config.model,\r\n agentName: remote.agent_name || config.agentName,\r\n voice: (remote.voice === \"zeynep\" || remote.voice === \"ali\" ? remote.voice : config.voice) as BulutVoice,\r\n };\r\n applyTheme(merged.baseColor);\r\n setLiveConfig(merged);\r\n }\r\n setConfigReady(true);\r\n });\r\n\r\n return () => { cancelled = true; };\r\n }, [config]);\r\n\r\n // Check localStorage for persisted state\r\n const [isOpen, setIsOpen] = useState(() => {\r\n if (typeof localStorage !== \"undefined\") {\r\n return localStorage.getItem(\"bulut_panel_open\") === \"true\";\r\n }\r\n return false;\r\n });\r\n\r\n const [showBubble, setShowBubble] = useState(false);\r\n const [isAccessibilityEnabled, setIsAccessibilityEnabled] = useState(() => {\r\n if (typeof localStorage === \"undefined\") {\r\n return false;\r\n }\r\n return localStorage.getItem(ACCESSIBILITY_MODE_KEY) === \"true\";\r\n });\r\n\r\n // State reported by ChatWindow\r\n const [isRecording, setIsRecording] = useState(false);\r\n const [isBusy, setIsBusy] = useState(false);\r\n const [previewMessage, setPreviewMessage] = useState<string | null>(null);\r\n const [previewDismissed, setPreviewDismissed] = useState(false);\r\n\r\n // Ref for delegating recording to ChatWindow\r\n const chatActionsRef = useRef<ChatWindowHandle | null>(null);\r\n\r\n const handlePreviewChange = useCallback((text: string | null) => {\r\n setPreviewMessage(text);\r\n if (text !== null) setPreviewDismissed(false);\r\n }, []);\r\n\r\n // Show welcome bubble once for 5 seconds\r\n useEffect(() => {\r\n if (isAccessibilityEnabled) {\r\n setShowBubble(false);\r\n return;\r\n }\r\n if (isOpen) return;\r\n if (typeof localStorage !== \"undefined\") {\r\n if (localStorage.getItem(\"bulut_bubble_shown\") === \"true\") return;\r\n }\r\n\r\n setShowBubble(true);\r\n const timer = setTimeout(() => {\r\n setShowBubble(false);\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(\"bulut_bubble_shown\", \"true\");\r\n }\r\n }, 5000);\r\n return () => clearTimeout(timer);\r\n }, [isOpen, isAccessibilityEnabled]);\r\n\r\n const toggleWidget = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n setShowBubble(false);\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(\"bulut_panel_open\", String(newState));\r\n }\r\n };\r\n\r\n const toggleAccessibilityMode = () => {\r\n const next = !isAccessibilityEnabled;\r\n setIsAccessibilityEnabled(next);\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(ACCESSIBILITY_MODE_KEY, String(next));\r\n }\r\n console.info(`[Bulut] accessibility mode toggled enabled=${next}`);\r\n };\r\n\r\n const handleClose = () => {\r\n setIsOpen(false);\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(\"bulut_panel_open\", \"false\");\r\n }\r\n console.info(\"Bulut chat window closed.\");\r\n };\r\n\r\n // Close on escape key\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\" && isOpen) {\r\n setIsOpen(false);\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(\"bulut_panel_open\", \"false\");\r\n }\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", handleEscape);\r\n return () => document.removeEventListener(\"keydown\", handleEscape);\r\n }, [isOpen]);\r\n\r\n if (!configReady) return null;\r\n\r\n return (\r\n <>\r\n {!isOpen && (\r\n <ChatButton\r\n onMicClick={() => chatActionsRef.current?.startRecording()}\r\n onCancelRecording={() => chatActionsRef.current?.cancelRecording()}\r\n onStopTask={() => chatActionsRef.current?.stopTask()}\r\n isRecording={isRecording}\r\n isBusy={isBusy}\r\n showBubble={showBubble}\r\n onBubbleClick={() => {\r\n setShowBubble(false);\r\n toggleWidget();\r\n }}\r\n previewMessage={previewDismissed ? null : previewMessage}\r\n onPreviewClick={() => toggleWidget()}\r\n onPreviewClose={() => setPreviewDismissed(true)}\r\n />\r\n )}\r\n <ChatWindow\r\n onClose={handleClose}\r\n config={liveConfig}\r\n accessibilityMode={isAccessibilityEnabled}\r\n onAccessibilityToggle={toggleAccessibilityMode}\r\n hidden={!isOpen}\r\n actionsRef={chatActionsRef}\r\n onRecordingChange={setIsRecording}\r\n onBusyChange={setIsBusy}\r\n onPreviewChange={handlePreviewChange}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nconst SHADOW_STYLE = `\r\n :host {\r\n all: initial;\r\n contain: layout style paint;\r\n font-family: \"${GEIST_FONT_FAMILY}\", sans-serif;\r\n color: hsla(215, 100%, 5%, 1);\r\n font-size: 16px;\r\n line-height: 1.4;\r\n -webkit-font-smoothing: antialiased;\r\n text-rendering: optimizeLegibility;\r\n }\r\n\r\n #bulut-shadow-mount {\r\n all: initial;\r\n color: inherit;\r\n font-family: \"${GEIST_FONT_FAMILY}\", sans-serif;\r\n font-size: inherit;\r\n line-height: inherit;\r\n }\r\n\r\n #bulut-shadow-mount * {\r\n font-family: \"${GEIST_FONT_FAMILY}\", sans-serif !important;\r\n color: inherit;\r\n }\r\n\r\n #bulut-shadow-mount *, #bulut-shadow-mount *::before, #bulut-shadow-mount *::after {\r\n box-sizing: border-box;\r\n }\r\n`;\r\n\r\n// Container host for the widget\r\nlet widgetContainer: HTMLElement | null = null;\r\nlet widgetMountNode: HTMLElement | null = null;\r\nlet createdContainer = false;\r\nlet isInitialized = false;\r\n\r\n/**\r\n * Initialize the Bulut chat widget\r\n * @param options - Optional configuration options\r\n */\r\nexport const init = (options: BulutOptions = {}) => {\r\n if (isInitialized) {\r\n console.warn(\"Bulut is already initialized\");\r\n return;\r\n }\r\n\r\n ensureGeistStylesheet();\r\n\r\n const runtimeConfig = resolveRuntimeConfig(options);\r\n applyTheme(runtimeConfig.baseColor);\r\n\r\n // Create or find container\r\n if (options.containerId) {\r\n widgetContainer = document.getElementById(options.containerId);\r\n createdContainer = false;\r\n } else {\r\n widgetContainer = document.createElement(\"div\");\r\n widgetContainer.id = \"bulut-container\";\r\n document.body.appendChild(widgetContainer);\r\n createdContainer = true;\r\n }\r\n\r\n if (!widgetContainer) {\r\n console.error(\"Bulut: Container not found\");\r\n return;\r\n }\r\n\r\n const shadowRoot = widgetContainer.shadowRoot || widgetContainer.attachShadow({ mode: \"open\" });\r\n shadowRoot.replaceChildren();\r\n\r\n const style = document.createElement(\"style\");\r\n style.textContent = SHADOW_STYLE;\r\n\r\n const mountNode = document.createElement(\"div\");\r\n mountNode.id = \"bulut-shadow-mount\";\r\n\r\n shadowRoot.append(style, mountNode);\r\n widgetMountNode = mountNode;\r\n\r\n // Render the widget\r\n render(<BulutWidget config={runtimeConfig} />, mountNode);\r\n isInitialized = true;\r\n\r\n console.log(\"Bulut initialized successfully\");\r\n};\r\n\r\n/**\r\n * Destroy the Bulut widget\r\n */\r\nexport const destroy = () => {\r\n if (!isInitialized) {\r\n return;\r\n }\r\n\r\n if (widgetMountNode) {\r\n render(null, widgetMountNode);\r\n widgetMountNode = null;\r\n }\r\n\r\n if (widgetContainer && createdContainer) {\r\n document.body.removeChild(widgetContainer);\r\n }\r\n\r\n widgetContainer = null;\r\n createdContainer = false;\r\n isInitialized = false;\r\n console.log(\"Bulut destroyed\");\r\n};\r\n\r\n/**\r\n * Check if the widget is initialized\r\n */\r\nexport const isReady = () => isInitialized;\r\n\r\nconst Bulut = {\r\n init,\r\n destroy,\r\n isReady,\r\n};\r\n\r\nif (typeof window !== \"undefined\") {\r\n (window as Window & { Bulut?: typeof Bulut }).Bulut = Bulut;\r\n}\r\n\r\n// Export the main widget component for advanced usage\r\nexport { BulutWidget };\r\n\r\n// Export components for custom implementations\r\nexport { ChatButton, ChatWindow };\r\n\r\nexport default Bulut;\r\n"],"names":["l","u","i","o","r","e","f","c","s","a","p","v","y","d","w","n","_","t","m","k","C","h","g","B","A","D","T","j","S","M","$","P","L","z","q","x","normalizeHexColor","useMemo","viewBox","content","jsx","jsxs","Fragment","label","line","_a","_b","_c","_d","useState","useRef","useEffect","lastAssistant","useLayoutEffect","clamp","useCallback","render"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"embed.js","sources":["../node_modules/preact/dist/preact.module.js","../node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../node_modules/preact/hooks/dist/hooks.module.js","../src/styles/constants.ts","../src/assets/icons/microphone.svg?raw","../src/assets/icons/restart.svg?raw","../src/assets/icons/close.svg?raw","../src/assets/icons/stop.svg?raw","../src/assets/icons/bulut_logo.svg?raw","../src/assets/sfx/sent.mp3","../src/assets/sfx/thinking.mp3","../src/assets/sfx/tool_call.mp3","../src/assets/sfx/completed.mp3","../src/assets.ts","../src/components/SvgIcon.tsx","../src/components/ChatButton.tsx","../src/agent/contextConfig.ts","../src/agent/context.ts","../src/agent/tools.ts","../src/api/client.ts","../src/audio/sfxManager.ts","../src/components/ChatWindow.tsx","../src/index.tsx"],"sourcesContent":["var n,l,u,t,i,o,r,e,f,c,s,a,h,p={},v=[],y=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,d=Array.isArray;function w(n,l){for(var u in l)n[u]=l[u];return n}function g(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function _(l,u,t){var i,o,r,e={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:e[r]=u[r];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===e[r]&&(e[r]=l.defaultProps[r]);return m(l,e,i,o,null)}function m(n,t,i,o,r){var e={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==r?++u:r,__i:-1,__u:0};return null==r&&null!=l.vnode&&l.vnode(e),e}function b(){return{current:null}}function k(n){return n.children}function x(n,l){this.props=n,this.context=l}function S(n,l){if(null==l)return n.__?S(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?S(n):null}function C(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C(n)}}function M(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!$.__r++||o!=l.debounceRendering)&&((o=l.debounceRendering)||r)($)}function $(){for(var n,u,t,o,r,f,c,s=1;i.length;)i.length>s&&i.sort(e),n=i.shift(),s=i.length,n.__d&&(t=void 0,o=void 0,r=(o=(u=n).__v).__e,f=[],c=[],u.__P&&((t=w({},o)).__v=o.__v+1,l.vnode&&l.vnode(t),O(u.__P,t,o,u.__n,u.__P.namespaceURI,32&o.__u?[r]:null,f,null==r?S(o):r,!!(32&o.__u),c),t.__v=o.__v,t.__.__k[t.__i]=t,N(f,t,c),o.__e=o.__=null,t.__e!=r&&C(t)));$.__r=0}function I(n,l,u,t,i,o,r,e,f,c,s){var a,h,y,d,w,g,_,m=t&&t.__k||v,b=l.length;for(f=P(u,l,m,f,b),a=0;a<b;a++)null!=(y=u.__k[a])&&(h=-1==y.__i?p:m[y.__i]||p,y.__i=a,g=O(n,y,h,i,o,r,e,f,c,s),d=y.__e,y.ref&&h.ref!=y.ref&&(h.ref&&B(h.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),(_=!!(4&y.__u))||h.__k===y.__k?f=A(y,f,n,_):\"function\"==typeof y.type&&void 0!==g?f=g:d&&(f=d.nextSibling),y.__u&=-7);return u.__e=w,f}function P(n,l,u,t,i){var o,r,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),o=0;o<i;o++)null!=(r=l[o])&&\"boolean\"!=typeof r&&\"function\"!=typeof r?(\"string\"==typeof r||\"number\"==typeof r||\"bigint\"==typeof r||r.constructor==String?r=n.__k[o]=m(null,r,null,null,null):d(r)?r=n.__k[o]=m(k,{children:r},null,null,null):void 0===r.constructor&&r.__b>0?r=n.__k[o]=m(r.type,r.props,r.key,r.ref?r.ref:null,r.__v):n.__k[o]=r,f=o+h,r.__=n,r.__b=n.__b+1,e=null,-1!=(c=r.__i=L(r,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof r.type&&(r.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,r.__u|=4))):n.__k[o]=null;if(a)for(o=0;o<s;o++)null!=(e=u[o])&&0==(2&e.__u)&&(e.__e==t&&(t=S(e)),D(e,e));return t}function A(n,l,u,t){var i,o;if(\"function\"==typeof n.type){for(i=n.__k,o=0;i&&o<i.length;o++)i[o]&&(i[o].__=n,l=A(i[o],l,u,t));return l}n.__e!=l&&(t&&(l&&n.type&&!l.parentNode&&(l=S(n)),u.insertBefore(n.__e,l||null)),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function H(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(d(n)?n.some(function(n){H(n,l)}):l.push(n)),l}function L(n,l,u,t){var i,o,r,e=n.key,f=n.type,c=l[u],s=null!=c&&0==(2&c.__u);if(null===c&&null==e||s&&e==c.key&&f==c.type)return u;if(t>(s?1:0))for(i=u-1,o=u+1;i>=0||o<l.length;)if(null!=(c=l[r=i>=0?i--:o++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return r;return-1}function T(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||y.test(l)?u:u+\"px\"}function j(n,l,u,t,i){var o,r;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||T(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||T(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])o=l!=(l=l.replace(f,\"$1\")),r=l.toLowerCase(),l=r in n||\"onFocusOut\"==l||\"onFocusIn\"==l?r.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=c,n.addEventListener(l,o?a:s,o)):n.removeEventListener(l,o?a:s,o);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=c++;else if(u.t<t.u)return;return t(l.event?l.event(u):u)}}}function O(n,u,t,i,o,r,e,f,c,s){var a,h,p,v,y,_,m,b,S,C,M,$,P,A,H,L,T,j=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof j)try{if(b=u.props,S=\"prototype\"in j&&j.prototype.render,C=(a=j.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?m=(h=u.__c=t.__c).__=h.__E:(S?u.__c=h=new j(b,M):(u.__c=h=new x(b,M),h.constructor=j,h.render=E),C&&C.sub(h),h.state||(h.state={}),h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),S&&null==h.__s&&(h.__s=h.state),S&&null!=j.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=w({},h.__s)),w(h.__s,j.getDerivedStateFromProps(b,h.__s))),v=h.props,y=h.state,h.__v=u,p)S&&null==j.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),S&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(S&&null==j.getDerivedStateFromProps&&b!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(b,M),u.__v==t.__v||!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(b,h.__s,M)){for(u.__v!=t.__v&&(h.props=b,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),$=0;$<h._sb.length;$++)h.__h.push(h._sb[$]);h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(b,h.__s,M),S&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,y,_)})}if(h.context=M,h.props=b,h.__P=n,h.__e=!1,P=l.__r,A=0,S){for(h.state=h.__s,h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[]}else do{h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++A<25);h.state=h.__s,null!=h.getChildContext&&(i=w(w({},i),h.getChildContext())),S&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,y)),L=a,null!=a&&a.type===k&&null==a.key&&(L=V(a.props.children)),f=I(n,d(L)?L:[L],u,t,i,o,r,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),m&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=r)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;r[r.indexOf(f)]=null,u.__e=f}else{for(T=r.length;T--;)g(r[T]);z(u)}else u.__e=t.__e,u.__k=t.__k,n.then||z(u);l.__e(n,u,t)}else null==r&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=q(t.__e,u,t,i,o,r,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function z(n){n&&n.__c&&(n.__c.__e=!0),n&&n.__k&&n.__k.forEach(z)}function N(n,u,t){for(var i=0;i<t.length;i++)B(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function V(n){return\"object\"!=typeof n||null==n||n.__b&&n.__b>0?n:d(n)?n.map(V):w({},n)}function q(u,t,i,o,r,e,f,c,s){var a,h,v,y,w,_,m,b=i.props||p,k=t.props,x=t.type;if(\"svg\"==x?r=\"http://www.w3.org/2000/svg\":\"math\"==x?r=\"http://www.w3.org/1998/Math/MathML\":r||(r=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((w=e[a])&&\"setAttribute\"in w==!!x&&(x?w.localName==x:3==w.nodeType)){u=w,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(r,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)b===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),!c&&null!=e)for(b={},a=0;a<u.attributes.length;a++)b[(w=u.attributes[a]).name]=w.value;for(a in b)if(w=b[a],\"children\"==a);else if(\"dangerouslySetInnerHTML\"==a)v=w;else if(!(a in k)){if(\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k)continue;j(u,a,null,w,r)}for(a in k)w=k[a],\"children\"==a?y=w:\"dangerouslySetInnerHTML\"==a?h=w:\"value\"==a?_=w:\"checked\"==a?m=w:c&&\"function\"!=typeof w||b[a]===w||j(u,a,w,b[a],r);if(h)c||v&&(h.__html==v.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(v&&(u.innerHTML=\"\"),I(\"template\"==t.type?u.content:u,d(y)?y:[y],t,i,o,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":r,e,f,e?e[0]:i.__k&&S(i,0),c,s),null!=e)for(a=e.length;a--;)g(e[a]);c||(a=\"value\",\"progress\"==x&&null==_?u.removeAttribute(\"value\"):null!=_&&(_!==u[a]||\"progress\"==x&&!_||\"option\"==x&&_!=b[a])&&j(u,a,_,b[a],r),a=\"checked\",null!=m&&m!=u[a]&&j(u,a,m,b[a],r))}return u}function B(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function D(n,u,t){var i,o;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||B(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&D(i[o],u,t||\"function\"!=typeof n.type);t||g(n.__e),n.__c=n.__=n.__e=void 0}function E(n,l,u){return this.constructor(n,u)}function G(u,t,i){var o,r,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),r=(o=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],O(t,u=(!o&&i||t).__k=_(k,null,[u]),r||p,p,t.namespaceURI,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,e,!o&&i?i:r?r.__e:t.firstChild,o,f),N(e,u,f)}function J(n,l){G(n,l,J)}function K(l,u,t){var i,o,r,e,f=w({},l.props);for(r in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=void 0===u[r]&&null!=e?e[r]:u[r];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),m(l.type,f,i||l.key,o||l.ref,null)}function Q(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,M(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+h++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=v.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},x.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=w({},this.state),\"function\"==typeof n&&(n=n(w({},u),this.props)),n&&w(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M(this))},x.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M(this))},x.prototype.render=k,i=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},$.__r=0,f=/(PointerCapture)$|Capture$/i,c=0,s=F(!1),a=F(!0),h=0;export{x as Component,k as Fragment,K as cloneElement,Q as createContext,_ as createElement,b as createRef,_ as h,J as hydrate,t as isValidElement,l as options,G as render,H as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n<r.length;n++){switch(r.charCodeAt(n)){case 34:f=\"&quot;\";break;case 38:f=\"&amp;\";break;case 60:f=\"&lt;\";break;default:continue}n!==e&&(o+=r.slice(e,n)),o+=f,e=n+1}return n!==e&&(o+=r.slice(e,n)),o}var o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=0,i=Array.isArray;function u(e,t,n,o,i,u){t||(t={});var a,c,p=t;if(\"ref\"in p)for(c in p={},t)\"ref\"==c?a=t[c]:p[c]=t[c];var l={type:e,props:p,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--f,__i:-1,__u:0,__source:i,__self:u};if(\"function\"==typeof e&&(a=e.defaultProps))for(c in a)void 0===p[c]&&(p[c]=a[c]);return r.vnode&&r.vnode(l),l}function a(r){var t=u(e,{tpl:r,exprs:[].slice.call(arguments,1)});return t.key=t.__v,t}var c={},p=/[A-Z]/g;function l(e,t){if(r.attr){var f=r.attr(e,t);if(\"string\"==typeof f)return f}if(t=function(r){return null!==r&&\"object\"==typeof r&&\"function\"==typeof r.valueOf?r.valueOf():r}(t),\"ref\"===e||\"key\"===e)return\"\";if(\"style\"===e&&\"object\"==typeof t){var i=\"\";for(var u in t){var a=t[u];if(null!=a&&\"\"!==a){var l=\"-\"==u[0]?u:c[u]||(c[u]=u.replace(p,\"-$&\").toLowerCase()),s=\";\";\"number\"!=typeof a||l.startsWith(\"--\")||o.test(l)||(s=\"px;\"),i=i+l+\":\"+a+s}}return e+'=\"'+n(i)+'\"'}return null==t||!1===t||\"function\"==typeof t||\"object\"==typeof t?\"\":!0===t?e:e+'=\"'+n(\"\"+t)+'\"'}function s(r){if(null==r||\"boolean\"==typeof r||\"function\"==typeof r)return null;if(\"object\"==typeof r){if(void 0===r.constructor)return r;if(i(r)){for(var e=0;e<r.length;e++)r[e]=s(r[e]);return r}}return n(\"\"+r)}export{u as jsx,l as jsxAttr,u as jsxDEV,s as jsxEscape,a as jsxTemplate,u as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return!!n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=o.__c.props!==n;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=p(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z),n.__H.__h.forEach(B),n.__H.__h=[]}catch(t){n.__H.__h=[],c.__e(t,n.__v)}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.forEach(z),i.__h.forEach(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","// Widget dimensions\r\nexport const BUTTON_SIZE = 60;\r\nexport const WINDOW_WIDTH = 350;\r\nexport const WINDOW_HEIGHT = 500;\r\n\r\n// Positioning\r\nexport const POSITION_BOTTOM = 20;\r\nexport const POSITION_RIGHT = 20;\r\n\r\n// Colors — initial values match the backend ProjectSettings default.\r\n// applyTheme() in index.tsx overrides primary/primaryHover/messageUser\r\n// with the remote config value before the widget renders.\r\nexport const COLORS = {\r\n primary: \"#6C03C1\",\r\n primaryHover: \"#5b02a4\",\r\n background: \"#ffffff\",\r\n text: \"hsla(215, 100%, 5%, 1)\",\r\n textSecondary: \"hsla(215, 100%, 5%, 1)\",\r\n border: \"#e5e7eb\",\r\n messageBot: \"\",\r\n messageUser: \"#6C03C1\",\r\n messageUserText: \"#ffffff\",\r\n};\r\n\r\nconst normalizeHexColor = (hex: string): string => {\r\n const trimmed = hex.trim();\r\n if (!/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(trimmed)) {\r\n return \"hsla(215, 100%, 5%, 1)\";\r\n }\r\n if (trimmed.length === 4) {\r\n const r = trimmed[1];\r\n const g = trimmed[2];\r\n const b = trimmed[3];\r\n return `#${r}${r}${g}${g}${b}${b}`;\r\n }\r\n return trimmed;\r\n};\r\n\r\nexport const getContrastIconFilter = (backgroundHex: string): string => {\r\n const hex = normalizeHexColor(backgroundHex).slice(1);\r\n const r = parseInt(hex.slice(0, 2), 16);\r\n const g = parseInt(hex.slice(2, 4), 16);\r\n const b = parseInt(hex.slice(4, 6), 16);\r\n\r\n // Relative luminance approximation for quick contrast choice.\r\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\r\n return luminance > 0.62 ? \"brightness(0) invert(0)\" : \"brightness(0) invert(1)\";\r\n};\r\n\r\n// Border radius\r\nexport const BORDER_RADIUS = {\r\n button: '50%',\r\n window: '17px',\r\n message: '10px'\r\n};\r\n\r\n// Shadows\r\nexport const SHADOW = \"0 0 15px hsla(215, 100%, 5%, 0.15)\";\r\n\r\n// Transitions\r\nexport const TRANSITIONS = {\r\n fast: '150ms ease-in-out',\r\n medium: '250ms ease-in-out'\r\n};\r\n","export default \"<svg width=\\\"50\\\" height=\\\"50\\\" viewBox=\\\"0 0 50 50\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n<path d=\\\"M17.6667 47H32.3333M39.6666 19.5001V23.1667C39.6666 31.2334 33.0666 37.8334 25 37.8334M25 37.8334C16.9333 37.8334 10.3334 31.2334 10.3334 23.1667V19.5001M25 37.8334V47M25 3.00009C24.0356 2.99523 23.0798 3.1816 22.1879 3.54841C21.296 3.91523 20.4857 4.45521 19.8037 5.13714C19.1218 5.81907 18.5818 6.62942 18.215 7.52133C17.8482 8.41325 17.6618 9.36903 17.6667 10.3334V23.0521C17.6667 27.0855 20.9896 30.5 25 30.5C29.0104 30.5 32.3333 27.1771 32.3333 23.0521V10.3334C32.3333 6.20842 29.125 3.00009 25 3.00009Z\\\" stroke=\\\"hsla(215, 100%, 5%, 1)\\\" stroke-width=\\\"3\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<svg width=\\\"50\\\" height=\\\"50\\\" viewBox=\\\"0 0 50 50\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n<path d=\\\"M31.4571 10.4169C30.714 10.783 30.4083 11.6822 30.7744 12.4254C31.1405 13.1685 32.0397 13.4742 32.7829 13.1081L32.12 11.7625L31.4571 10.4169ZM44.3 28.2275C44.3 27.3991 43.6284 26.7275 42.8 26.7275C41.9716 26.7275 41.3 27.3991 41.3 28.2275H42.8H44.3ZM26.0607 0.911874C25.4749 0.326088 24.5251 0.326088 23.9393 0.911874C23.3536 1.49766 23.3536 2.44741 23.9393 3.03319L25 1.97253L26.0607 0.911874ZM33.9 10.8725L34.9607 11.9332C35.5464 11.3474 35.5464 10.3977 34.9607 9.81187L33.9 10.8725ZM23.9393 18.7119C23.3536 19.2977 23.3536 20.2474 23.9393 20.8332C24.5251 21.419 25.4749 21.419 26.0607 20.8332L25 19.7725L23.9393 18.7119ZM32.12 11.7625C32.7829 13.1081 32.7838 13.1077 32.7848 13.1072C32.7851 13.107 32.7861 13.1065 32.7868 13.1062C32.7882 13.1055 32.7896 13.1048 32.791 13.1041C32.794 13.1026 32.7971 13.101 32.8005 13.0993C32.8071 13.0959 32.8146 13.0921 32.8229 13.0878C32.8393 13.0792 32.859 13.0686 32.8813 13.0561C32.9252 13.0315 32.9828 12.9974 33.0478 12.9543C33.1597 12.8798 33.3709 12.728 33.5596 12.493C33.7406 12.2674 34.0582 11.7606 33.9356 11.0758C33.8134 10.3931 33.3372 10.002 33.0232 9.81189C32.4374 9.45724 31.5535 9.27046 30.4249 9.14527C29.2187 9.01147 27.4833 8.92753 25 8.92753V10.4275V11.9275C27.4317 11.9275 29.0439 12.0105 30.0942 12.127C31.2222 12.2521 31.5039 12.3991 31.4694 12.3782C31.4309 12.3549 31.0768 12.1307 30.9826 11.6044C30.888 11.0761 31.1396 10.7153 31.2201 10.6149C31.3083 10.5051 31.3846 10.4575 31.3868 10.4561C31.3968 10.4494 31.4058 10.444 31.4148 10.439C31.4196 10.4363 31.4253 10.4332 31.4321 10.4296C31.4355 10.4278 31.4393 10.4259 31.4434 10.4238C31.4455 10.4228 31.4477 10.4217 31.4499 10.4205C31.4511 10.4199 31.4523 10.4194 31.4535 10.4188C31.4541 10.4185 31.455 10.418 31.4553 10.4179C31.4562 10.4174 31.4571 10.4169 32.12 11.7625ZM25 10.4275V8.92753C21.1828 8.92753 17.4514 10.0595 14.2775 12.1802L15.1109 13.4274L15.9442 14.6746C18.6247 12.8835 21.7762 11.9275 25 11.9275V10.4275ZM15.1109 13.4274L14.2775 12.1802C11.1036 14.3009 8.6299 17.3151 7.16913 20.8417L8.55495 21.4158L9.94077 21.9898C11.1745 19.0114 13.2637 16.4656 15.9442 14.6746L15.1109 13.4274ZM8.55495 21.4158L7.16913 20.8417C5.70836 24.3684 5.32616 28.2489 6.07085 31.9928L7.54203 31.7001L9.01321 31.4075C8.38427 28.2456 8.70706 24.9682 9.94077 21.9898L8.55495 21.4158ZM7.54203 31.7001L6.07085 31.9928C6.81555 35.7366 8.65369 39.1755 11.3528 41.8747L12.4135 40.814L13.4742 39.7534C11.1946 37.4738 9.64215 34.5694 9.01321 31.4075L7.54203 31.7001ZM12.4135 40.814L11.3528 41.8747C14.052 44.5738 17.4909 46.412 21.2348 47.1567L21.5274 45.6855L21.82 44.2143C18.6581 43.5854 15.7538 42.033 13.4742 39.7534L12.4135 40.814ZM21.5274 45.6855L21.2348 47.1567C24.9786 47.9014 28.8592 47.5192 32.3858 46.0584L31.8118 44.6726L31.2377 43.2868C28.2593 44.5205 24.9819 44.8433 21.82 44.2143L21.5274 45.6855ZM31.8118 44.6726L32.3858 46.0584C35.9124 44.5976 38.9267 42.1239 41.0474 38.95L39.8002 38.1167L38.553 37.2833C36.7619 39.9638 34.2162 42.0531 31.2377 43.2868L31.8118 44.6726ZM39.8002 38.1167L41.0474 38.95C43.1681 35.7762 44.3 32.0447 44.3 28.2275H42.8H41.3C41.3 31.4514 40.344 34.6028 38.553 37.2833L39.8002 38.1167ZM25 1.97253L23.9393 3.03319L32.8393 11.9332L33.9 10.8725L34.9607 9.81187L26.0607 0.911874L25 1.97253ZM33.9 10.8725L32.8393 9.81187L23.9393 18.7119L25 19.7725L26.0607 20.8332L34.9607 11.9332L33.9 10.8725Z\\\" fill=\\\"hsla(215, 100%, 5%, 1)\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<svg width=\\\"50\\\" height=\\\"50\\\" viewBox=\\\"0 0 50 50\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n<path d=\\\"M42.5 42.5L7.5 7.5M42.5 7.5L7.5 42.5\\\" stroke=\\\"hsla(215, 100%, 5%, 1)\\\" stroke-width=\\\"3\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<svg width=\\\"50\\\" height=\\\"50\\\" viewBox=\\\"0 0 50 50\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n<rect x=\\\"12\\\" y=\\\"12\\\" width=\\\"26\\\" height=\\\"26\\\" rx=\\\"4\\\" stroke=\\\"hsla(215, 100%, 5%, 1)\\\" stroke-width=\\\"3\\\" fill=\\\"none\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<svg width=\\\"2420\\\" height=\\\"438\\\" viewBox=\\\"0 0 2420 438\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n<path d=\\\"M251.823 0C313.458 0 366.34 37.767 388.932 91.5918C409.253 75.8883 434.678 66.5567 462.264 66.5566C528.885 66.5567 582.893 120.989 582.893 188.134C582.893 188.786 582.885 189.436 582.875 190.086C648.144 193.552 700 247.572 700 313.704C700 382.074 644.575 437.5 576.204 437.5H123.796C55.4255 437.5 7.42386e-05 382.074 0 313.704C0 250.475 47.4025 198.32 108.608 190.833C104.967 177.844 103.019 164.138 103.019 149.975C103.019 67.1461 169.641 0.000357483 251.823 0ZM234.696 141.93C218.117 134.066 199 146.158 199 164.507C199 174.32 204.744 183.225 213.684 187.271L336.761 242.985C337.971 243.533 338.748 244.738 338.748 246.066C338.748 247.394 337.971 248.6 336.761 249.147L213.684 304.861C204.744 308.908 199 317.812 199 327.625C199 345.974 218.117 358.066 234.696 350.202L364.672 288.554C375.142 283.588 381.815 273.036 381.815 261.448V230.684C381.815 219.096 375.142 208.544 364.672 203.578L234.696 141.93ZM413.877 296.146C402.078 296.146 392.513 305.711 392.513 317.511C392.513 329.31 402.078 338.875 413.877 338.875H526.636C538.435 338.875 548 329.31 548 317.511C548 305.711 538.435 296.146 526.636 296.146H413.877Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n<path d=\\\"M2420 424.954H2343.35C2307.08 424.954 2278.64 416.094 2258.04 398.373C2237.43 380.652 2227.13 352.216 2227.13 313.065V55.2871H2319.86V302.556C2319.86 318.217 2323.15 328.726 2329.75 334.083C2336.75 339.028 2348.29 341.501 2364.36 341.501H2420V424.954ZM2420 191.903H2178.29V115.25H2420V191.903Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n<path d=\\\"M1923.18 431.136C1894.33 431.136 1870.22 425.779 1850.85 415.064C1831.89 403.937 1817.68 389.101 1808.2 370.555C1799.13 352.01 1794.6 331.198 1794.6 308.12V115.25H1887.32V277.211C1887.32 301.938 1893.3 320.071 1905.25 331.61C1917.2 342.738 1937.81 348.301 1967.07 348.301C1997.56 348.301 2018.79 342.325 2030.74 330.374C2043.1 318.011 2049.28 298.641 2049.28 272.266L2061.03 271.648L2067.83 330.374H2050.52C2048.05 347.683 2041.87 363.962 2031.98 379.21C2022.5 394.458 2008.69 407.028 1990.56 416.918C1972.84 426.397 1950.38 431.136 1923.18 431.136ZM2142.01 424.955H2055.47V329.138L2049.28 326.047V115.25H2142.01V424.955Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n<path d=\\\"M1734.32 424.955H1641.59V10.7793H1734.32V424.955Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n<path d=\\\"M1362.98 431.136C1334.13 431.136 1310.03 425.779 1290.66 415.064C1271.7 403.937 1257.48 389.101 1248 370.555C1238.94 352.01 1234.4 331.198 1234.4 308.12V115.25H1327.13V277.211C1327.13 301.938 1333.1 320.071 1345.06 331.61C1357.01 342.738 1377.61 348.301 1406.87 348.301C1437.37 348.301 1458.59 342.325 1470.54 330.374C1482.91 318.011 1489.09 298.641 1489.09 272.266L1500.83 271.648L1507.63 330.374H1490.33C1487.85 347.683 1481.67 363.962 1471.78 379.21C1462.3 394.458 1448.5 407.028 1430.36 416.918C1412.64 426.397 1390.18 431.136 1362.98 431.136ZM1581.82 424.955H1495.27V329.138L1489.09 326.047V115.25H1581.82V424.955Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n<path d=\\\"M1035.12 431.137C999.27 431.137 971.04 423.513 950.434 408.264C930.241 392.604 917.259 369.526 911.49 339.029H894.181L900.981 272.266H912.726C912.726 289.987 916.023 304.411 922.617 315.538C929.623 326.253 939.719 334.084 952.907 339.029C966.507 343.974 983.198 346.447 1002.98 346.447C1023.17 346.447 1039.66 343.974 1052.43 339.029C1065.21 334.084 1074.69 326.047 1080.87 314.92C1087.05 303.793 1090.14 288.957 1090.14 270.412C1090.14 251.042 1087.05 236 1080.87 225.285C1074.69 214.158 1065.21 206.122 1052.43 201.177C1039.66 196.231 1023.38 193.758 1003.6 193.758C973.513 193.758 950.847 199.322 935.598 210.449C920.35 221.576 912.726 240.533 912.726 267.321H900.981V197.467H917.671C923.029 171.504 935.392 150.28 954.762 133.796C974.543 117.311 1002.77 109.069 1039.45 109.069C1070.36 109.069 1096.53 115.663 1117.96 128.85C1139.39 142.038 1155.67 160.789 1166.79 185.104C1178.33 209.007 1184.1 237.443 1184.1 270.412C1184.1 302.969 1178.33 331.405 1166.79 355.72C1155.67 379.622 1138.98 398.168 1116.72 411.355C1094.47 424.543 1067.27 431.137 1035.12 431.137ZM905.926 424.955H820V10.7793H912.726V325.429L905.926 333.465V424.955Z\\\" fill=\\\"#000B1A\\\"/>\\r\\n</svg>\\r\\n\"","export default \"data:audio/mpeg;base64,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ciUlhGEjSloik0pFDiOCQk7CwkpfJTEhxVU13/NeLKirBnlTQsVMNkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgABlZauxJiAl8OtGJtCUOXLbCYWJSp4mI7hkhQQtAm46D7OEuRPTCPY90Qp2BvbF9eSSLUC24sytUy5EiD4uHKLLq6isqsdOqI2D5KKhCNDRcouomkdOB4ugPmURCIhkZKLoG4Tq7rf/dXdbmxRFTiSaiaSaSZw4XQHzJMKREDoyMEaBticLutzYyuquv7q0qurq6ukl2HsoiERDIyUXQThOF3/+rJsNHxRj/XTZKlJ5k4ANeHGTRgGMwAAAaQAAAAgAAA0gAAABMNjKKxUsWXUBw0LCv0AyFRYW1pMgsJDMcYEltcEbDEBSri82XaTiygI8gmpKTiyxUVWKiweNCrP6xRsCios3F2VCwr//9uKijf//8WFakxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=\"","export default \"data:audio/mpeg;base64,SUQzAwAAAAAAMFRZRVIAAAAFAAAAMjAyNlRFTkMAAAAXAAAATEFNRSBpbiBGTCBTdHVkaW8gMjAyNf/6sGyligAABNdov9UxgAAAAA0goAABKU3rSbnuAADqsxb3GiAAAIAAAgquxf5wYHlTszVr4DAwqOYEwrTADhW0IANCZE2vWLKavOz9/F6+/0WLHNWObe/zSl8YWU1ev+79/xhY5qym3vNKSw503Xr38Xv/lGKU5hYsp116+9KTdevXvsGZnfGFixzViztbXr743eaU6Zm97/jCxzViyk3bX3m95mZv+XveaMLHNWOdt1798vecpMzN7zNKUpqxyt9w2Gw2Gw2Gw2GwdBQABVAcMBoBkGhwGNiiqgiIAuTBxA9MCkAczDwCjH9MIMOIAQZA0MAMDMwTQITTYLGMDEFAkB1MAcAgzKFTDwgMKW4wGdTBAZchXKGCGJtREGMg8Ztfapl1NMAwbMMhMEgABCQzWSguBTHZKMgpNy7EvQ4mHgMm+n2hcmwYROJhgNAANBQfGbWnRzVSeUKLfmDQOj0EAgHAiQmGSYEH0zSBAaQRCFzDgWgNxnOhneWlYFpsnTDfZphe0uCUCUHCItMzMx2NZr6buq7sv5IKebl+ovKJYXYEYRMEAwAAkBAZrCLiryUCxWZndZ1ufjLLtun7z9cw3KV2smpItN4W7snhn+913//H/7n3+65hvuff/C5utnq/Vq0tblbOtX///////////Dfc/5rn833/////////+9Vs3OU1etV5V5WAACAgAAYAAgEAAFAoF/+f8HSOv/9j///+3//3a///////q4gYWT////Z2V2O7P////+QSOIY9ybsJFoAAgAibFUDi2RVAEMCcwKCMwYE44Qk0xmHExODcwfC4wjCAw9BwwEcw1RFw//qybCydFggF+WhNv3aAACQA6R3hjAEdLZ8fT2jzwJUB5jwQiATE8IgEDTbIKjSA8rAAIUJSHo6LhDiBSonoiRNCkgFwABzYNVGBeY4KSIMTx0gIrUCgEAocFwxsoyJoWUTSayiLNAWCgMBRAo7lsRogiRUc4vJJGRebomJdNUdFEuotUoySrRJk0FnEFNdEumrf/6nfUk6y6XTVFHRb9dSSSRkkrak/1P6Jia2qSLDatf/1pdFjxsjSQAC4LNJI1MuFEr6cABlkgU9tennKW+T/+/rYtHR9fq//V/SR8aF+2QoB2YA4BhgAAomBMB0YFAUZguhuHVm94Yo4QZhIASAQBwQgZmFMD0Ynbtxkbh7GBwBaIwJhwC8wIAHjAUBpMVwBooAtYaDgFQaAchmYHYAQe8M0Xbs1lVIwqk3tQEKxpo49+kGQNnPOMOuDhKBwICqMZ3IDEAFxFdfq+IA4cZLnN9hlUXdDcVhFuywKHvyw3HEzpLZyxiSo5Iy7O9TQ22ZuTzbuXJUoqW1i8O34a/eOOo831LzLtLAn75ickaiHSt2IsYRMvFIcyKaaDx0ljip9jTVGtytjXZ2/WKvoS/+pbugRPolAACAyNltP5hqksGTiM+fVqrQnJl6E/b/pNp2/J//0Rv7///+qQAENZNxEgwSQPAQByX4MQgCMKgymEwMufTDaZjVBhhweidJgCgWAYMsxzXNjKsC4MNsCEwTgHiIG4s0IF4wfhEIYJBLLoCVGIlE1wXMlKkY1GIHChGbYMmCBbBbFxdZgRwRCz3swlUvFUgONS6stlmoJUOkfc+SshAQwRR5at3Cia61mK2Pq//qybI6aQ4gG5WfF09tb+D8DyT0FJRkamZ8Z72Vx6UAQZPzxsZSlreu858AKFZ8yYH0AJdZB7wwJqsaDmd3CYYtl6dmgX1DjzAPMQ2cov63q9sjHprOd5a3qINfm9B99b7p19mD/jet/EkEvH1JlX/186jfz2XrEbP9ffUAACAlq5HJZlkyAOjSRLokDE0fB3vQjTZiHZpB8aLjQ4LMCvcnpQw4MXZxfo9We1f/mD02us3t/XXVvdxT8sAgUfa6sohgPKRxAB0CQMzAmA9MIUTY5xRygMNkChMQMAQBAETBCAwMP8eoDM2JhmBAAS0xppaowowZBoANLBt3kgczqwH+fH5tBptNMHEjiTCo6YbErUdJTXwnXNuxARUBKsId+BqaCRo2WSmdmJW6L+q1ODYylM07+E1II8jtDT90UfdBP5Gq1uzXjqnpbb3bwd6Hs9y67ZrXEXKmwfkl125QHYk5qDVai1ylU3Uvf3Xo/XtO/B6ycy9tIV8ufcR7TFG2sb1PzsXrnl//8fXr/PZTNRgAAAABTb9WZJ9/DCyj8OR/iA7OYhM73BCOzjkcgHq8HQtHdvZzmuezk6QlGaOBNXdyWLBwW27N/YwCxQsTCIuGDn9Qc/9PW3/9e2n/6/2VVAAIHDl32qcbC1UwqA8CgxzAHB4MBUSM2wBGjAyBBMIAAgIA5MAkAYwRgXzAdF3MoQFEwMwFjBQA5MBcC0wOACxQBEBBcpg9iMPNBJKBm0k2su/DsSXG15g8PxdsoVg/8QaNStwJaCXXPaM6FRrkC5UsRli8yIrK1WvxLXZprEtl92Zjw4GIYz8PwM3JHKH5+P0W5//qybPw7SYDG4mfGa9g0emKkeHJrDGgbwbsFL2BxyXYSIkidMHAOOd/8XpvTuVXs9Hsr+sJyb/FB6b9Gke7miYZ2anSnGsw2d7lIviJ7tJbXi9dpcrZhcHkJhBWZk62tof1907Nd8j1/z4/lDSkpsdFDXypuhACJTp9W49UQ2kTJQhAAYYQXS+mYMkSHwQN+KCKxuJtLnZRDFR2AR0OEsCritQMRWX+/C3gmPe98/uNnis4CJ1uGDziH+l5AoIm1SPRP4vWh/7NvR57//p//sZqWAAQY9yIPB3AYCgwGQeTBvDEMBUG4wxDRD5rfRMJsSYw0gsUfjACBSMQUCswC2yTUSEhMAAAhCcYGIGABAFQwMC0EOKsJTdkLBwq4sujqW2Xu5xd1WhTCpDliZEBY/BcJk7BhgAPpKWJM7bdm0rv0VVulCKin2bNBbdw1Tw09y/pmirPE881Wzgh0n+rw/jqXSqW3OdrSzHvLf08UjHEGAN2pOLMEmHS65iWnzx9pvPjsWWpDE6YpRJBNI1H84Vi8NPJwYvScUsvyvhsaMTQNSKwFa6cUeQC3424s8VnkMy1VQUI1VSUacJYjxGoZbu8QEIl0igAvyklXFN2T7VI3QNnlD6NGwcpEUFY1D61WhnAklkGa1dFa2zSjx4S0FfOORJ+vbnJJKDScV3WFt86mpHp7P2WWf7dXR9RlagMAggdHSXSxNxujhDABMXCEdBRKXztWCXKb8VgYmQgDmGheY2c5jIQoZGnu9ia4hPH41L3PCA1KwqKxhlT+ULoXk7nIgXPdNDq2H/kNPF3lQlMDcll8Fwuq21aOT9BXTIia0ncp//qybATdMoAFbF3He5lDemLkmU8HDA8cKbT+z2URiZUY5X2GDiyjO6Z/ZeIiyH4oY7QgOByyxBxWsY9ulihKhnFXPU/aWsxFKjv3z17ZBLXztSjLrG3/fUWMXv4i+5/1ixtR8114y+yfZ1jVsKmBNQhReGe22xOa6aH0a4iY1rqE6gC69RxwWQr+00xTqSIYgvihSUvHKkOF4tQlzj4KJlEXJJSOuM0EUdT6LqOVmk9AenkK1+7yJ7p+bc+ZB8HX/xrtP/6v9Ev/1Y7Rc/WIEWXAECEADB0AJBgD46AwYJAApgKhnmJIMEZf8fJjbBpGBIEqYNIGoBBAMOMHsxxBmTEdANBIDCKi+y4pgIBBmAuD4wkvi80aB7KHM2h55k6kkwzN4EnCQJMSDsYQ0yvRKou4+YXAIAEsDHCn1XLTYvLMWmQAvS8tlVF7Ifjjks5jHaSWSph1NO4zF2bg58/o8JVGj6qqRoQpyAG6QeHRYPVsUkoNx11TXcNbTaXyO0p6JlsVlRyJEE1MP1HytY2qx00KbXzzdUiy12W9zUH9ExA+9a+eLh1a6Ok/8C4eBbb+M+0hooKowrPb9q5N+6kNtKLfg1UdV+sDIQxLT4U6afS9mOKywmBJo0CyOxILBcNDAcQ9K5Z/YXlLUf+ORFBGYm1lspkZCQSAWaN44tOYk6HBLXrhWW/FL//61FF//7bnWOf+v+jR/AkTCs+Rq7WOOSm4QAQKFzBjkekzQboFCYyLGDBilJhgMZMODx/XMPCAcDl8RECgIhqu+dbkdZ2JRGLZoH+xk4fwKRVIzp5WsadO8mBOCmdFBo/EKkasHoxhAAlp//qybGdaLYAFAD9Ha280WlSGKW1hY4sTjZsbrSRcaleYoSXHijCYdL1dGYiFZJqmNwgmIT0afKnrbR8eH34WiARBD9/mqbvP/v9s8+KcvX37MrZrpOSqf6v7jAfukpn/eY28z0ukr/Un1dSTC4+2W2fSUa/CUJaOWLJnFay8ydyvxkLuYPNFXkgBgNuqss4fHKwdRAciUpPS+n1n2Og4hdff9McWHTnxUVGcAFiDhhq07Dpf3PlyE6vf//b69H7g0LhG7XJWW41KjsJxDoEwCU9n8ygQw5EMBGEDA40BlyxlfoDlduiraLBU1KzNIAZzADOZMzqAI2FCQ0AWEazViWEBVKbVSA4g7jkWpZjMUX7mLrlKJtDabQ2a1LCI/OzLyEURSLs2IULCNBf8avP459uWCMa6pRkp29rpM7XIUjkXa5FOt3ddrh1Kj/fotz2sxXI91rfbnpsl481LAAAABArvqPaJhhUCmDhoarZ49Hx4iAIYrqMIh4CwMCAAwYEx4BxF6lPrGZWu0rTAkbjtOpDlMaYtAP80hf2YIzQzSqDShfFevJNs1iBrE+T/0S99K3WVben7tdsSNL9xgs/ZtUibVe9uquLw+bFLmuTPJVekCqagDPJXNE4rSQTwyYQBjGxTGlDMePFFVUbmz41Ob0h9BYBlSEVb9/rdu4tFfs5PDFgL0pChVFGhIYIc1NWaKSnHMuq/i3VfG5IL7i55DEsVUtk+Pp2SIjIkjuDNyq+16zWi3xsFQ6HCJYWYx9LRCIMYOxQrnQ/ajfbhwyWtDTzEif6dDtCClhiix5I+hk92D6+ZvaaA0BUKFZrv9ZbsuV+k//qyTMJsQIADojHK+wwUWGsGKU9hIrURyXMbrTBYosQxYjWkj42CbIGTeF6kATrJxlzlmRpxp/Fu0ByWMRaWwZFcqtBLKRn6WMt3eq9DcSZcqkBCrj0Wd/rjQFASEFWLOVLohynimFu46VS/+lWG2oZT8NcB/GpsC1tlLRTZfaqrcvnKAkKi3GXnWW5OagtfKXwVQH0Nv6Y8U4AcABRBO9SsFAUJajt9riYF9QGJPa1hgML4+krrrZdd9d58mH7ppzc1MLTAuBYSC+NNBlAzeFITArIVVjUJMNrHMTA9WEtxK04UnuxjOa2m9XBp9hT+T6/KvdHMVmSDVr798qo1rdLOpV0ers5FU1AqwcebZc6wYQBISEhJejRRbyVGxlAFL4xRk/1AwwYzo0iCGWGGHEGWVjyWAwSUaQnQPAR4CnqzB1M30fpyJfFp+RLxYS4LN68qiLDsm52o2nwje9IkMdFxIYke4bfWcjM+lu/gsBmXsj7IYSj2/EsbAtZMmULcUTU/ZyorOle/IpoWxdIbuYMle2AZEoNSM7O3goGMBOOOamykewT/LtVuRs6R0byIUqZ4J7CWxxZGxiziDGBuwidiaMUYc+inJElIrdpYAVGZONHHni7AgFEgoFDQVAjJzUMM2ICwXDMfBIIGCTXYtyjXTAby4uxXfx8lnvBD0xbtx29qIzkjz6zl1bPM7euZU7zMhT3cl9YzZqU0/hLJEcLjuUqqXdGXkb3fOvsV3E40pYfVXInWHO7uWuTFS2rb/P4am1brROrIeTGWXmdlp58JoIRDhStTUZQ/nPgzRBBBxMLj9db7rLdz4jCAu0MKDUtc//qyTP2mV4AE6mjF02kfGHYGGT1hgosScV8hrLxv6oYzY/WUj41WFDZQBMsuOkxPsUZk9CiqGMWhg8OFRaK6EwXmRP8+emFe5VxTU5BuNAYRLo4HuYmXymWiqfd6fjGRA7iTB5zqRWK7al9uOx/D71sYzSIUoHo3WehzByQiRZjQKvim9lx4+1dyhKNB3bbv7Jd34AWGAiAg/K1GDEoRmIg04ErmOmgOkwkkpNnYiow2SVGMiuLFEXUA/z9NQrjzbYkKtXCM/it+TjOBrYdduw+unUdEDDUlYLefxbEMVDjl4Xla3CjMTXK4Oca5BuLb9WkECv67qf5ZTLPSsfFaz+AvW6kcyflLb8v/pkuUze3BTRL6v4dBb9ZClINt7Vg0Pt1v2sl1/ajiTpAQI2TXyZSc5AKKcsRmCNFazuoInTcEdNMopcr+vCwtlzIVHqS06UuMAqnbI693lWLurm+9T3RZSu5lMelMcnssKWJOiuadak68ZhqWRmBNoXrnrETG8nEJBBiOQ6PczLl/ZeRGJL0BrZeEZZq1IutDuRdnCPbolMpoKRI+i3tJzt3JYcXNwn7iLUodOQrwtRzazGnFVSqIglK0uhwMGKwoDiseEeZrgsmJweYOBaUBi8TjXYOEh0woOgg1KzlrTCARAwMLiMkfxkIQCW7oiIOQ0rhmZbAvUtdZsrlM812s7in5l7l3o/pPtMZNHGtRHCWyTcMsXzb9r8If6AqWevLLlAkKDTnzOs6SLyVQXC8rYbkkA2siY0IVTaTELq5AREzl/cMZ2A1Uj3GDuS4RclDrG3D3NydQhMHQwxvxnEAkkONlwA3UlN5Y//qybHoMWYAGPnc/i4kfEqas+J1p45tUDVkZrTB6aXCQ5DRspHwLc1EuczKGjZ6msZ9VUE9nEDoOCwAGYhG0Xm2Un9axFBEVCjw88A0AQxBkW5CxAwhI2F0CAhIi2BoexgeNQiz6SqT87SKQTkeGca7FSKUPSyPWtxhrV5EcrwqhjD7GYdCoilKpZnK5cR5GSSWZ+zotTmenW3PVt5ZGHDC++9KbGhMzYjgUKZyGKBHdTBL/WpFhzOJ3VnzvcGp2Gdm1MQQZMLNgbwhlIwvbdNtTQiWKMKCgnwp5F7XzsgaBZb94std0sbky2zFFcYfhQ6dXyG7xIUZkAZsGc6KI0Q8zcsBImeuYw4BFWMv8t+bXc1lpkSak9zlCgJTmnvVbMBp94xuQy1r71tWXq7Cx4TTVq81QNnRqLRaaTg5rHaUWL0rjKe5+cxV+CsY9L/IkQyfOekHv4IPsTdUsj+mT0mzRHlYqyBy4KSuiMZMj0h1rpd4FyGk5ZcuRGzYWBnXlJJSrJhbUpW0ko3FBKKAWMNooLgtOf8aJNG5YdzLD7OLEGIp3M8k8OOFXilekaANCI9fhsJsNKoRfAg/Jp31FaLnRWmj2odiCVJGmz3/PULyCWUc4mKf6vZ2//RZ31AECgkYnFGm3O5PC6xeUzE2AqiYMDgQFBASYiLGDBZjk0Y0FIiMRd1JwlgjpAj4O1URjcLmHWymmnG4/UOT/jQ1DVDlDlPFiDp2wMHiQsySvn5zGOdaLtCgTOT3cKMfsslMQYFG6JposVrPZdxIBxztUXVkv30fMZ99n0orlPLe29aLsxyEMsb+9nnFSdEUiDQuOFUEA//qyTNcFSogE4VzD628r8H1mKR1hhrUVOaMJTZh8AigpY/WWCt00PrRPI+rLB6ZHTay3Vx3n5u2kiQbOtkAJHpsj+ocUJsDtnTHswYucmNF5ZKK8OSOPy2pfiq0EIIAnKXTJgnpPpR4KwVwdrsW70LoBw9H933IUEkqsUWsSbVGkwtJLHuG7tr1v2SmBnTJuhGjA6igEFTDVi7CX8fLm77TD6yDTqiY2qYjyBZiSLSluUbZeICo1aXMS3g54AAkDiMaFzHQIYETQBUvSggVsbkIgpKBTy9pNt5oASsk8ucGVF20oV8KwR2GZDGobpe1H5WwpYhG4DgNYgqX7qT01RrEXU3Bx9y+1Arh0pjUHWEFSxgGm+THgxGpkSeFNx1OxRl4SXVT/1/COEjFAWAvlaUxNf/zL1nXC6O3DeOc0qA/rarFrQvhfdEzupUwd4Be7c1FU8gvBseSSeWOSc+UM5R+DpToRVopwcFeQOHCm2Z4Bi0QUbCAWMv9Az+u8w93nGf2CKWoreqx/pPhXOFTSw1MCWOA+A6Qx/ZKTEuHWQFR5BdsshuQNj/nYb24+re381yLT9DggPdrKhNOulr0s1no9tyJepjFR2yLWUjaODMW6CTuh3r9V+7/brtyO32oJASALQTLchGAotjR8bbQmYF5hhCAgJ3xgUMAR1eGJB5QNuuvEdMMETjWWs5wVWxS3F5ZGG8BgU8YHkti7ayo5dKZY+yqilLJ3Lp5fJJXT/csyxyGNu44cTk85Io3A2+c3rPP+673Wu/3Lv//6/nP12pwQIpx0py/8dYc/6pILsPdJ74+r2b7aAZ72hTF4FnSmPRis//qybC+KSgAFFTHBtW8AAqaGqCGuZAAfwXtH+byAAVkP5Pcy0AAK4W/5cjnX7v9/+P/zzuhBK6cqAMMCLnmdCQcciIkNDBAAMCgIsCEvSY+VpgMRjQGUzVkf8u8doKZq7KCAUgJKkC96m7iv0OEr7e6llkXlEov2JBRS1pcgZrIaKiuWv1ZqvrLXdm32pJTJ6KBa+vvzEvpLFTX49q7w5jy7+X/3+fvXe5f+953Opk9BsgqoJw4da42TjlmxRD3gSkU1DpAadirS1qRGlYq5BMgKDi4rHj0rD7cOURqAIAEQoZGiRpxey2Xa5mNzh3yakoaSlpHhBAZuJgabNoZAaSHeCIXBzHiIrADR11mZuZcvsBOKdmDuEGhcqJhwbN2xmKQZ5gEnRtmCARg7D2JyM5xEXU2gwZUcMwucV+/nHVQlm6AmK47YzgOV3GZHBFA86V8GQJFMwyoRLDwaHNw06GTS57ozua6rG+kCShgDJED19KTdWiTeLk03zvPkhfZdEhl9m3hLK9soAKoKtierSoJZb7SM4/Gd71v+xutLKlJyxXty+3TocmQvQ8MVazSsI0+3yR3q1r8u65l+ffl+sNYfhhyxzKknpJDDrSXKvO/flu5ae///9nUwMBQKBgMBiYBG7RaPRMliLiqWDRzzZMQ8mCa6lnEASY/jey1qvQ3B2lahxHQkQxwvqaKnplI3JUYj99QlJox0T1n1ddRi83/q1dBXjv+mrs/5q3xl/RXQAhU0EZfAIEAIA0wKCswvC4wlHQyvTA430MzoLkyaEcwTB4wNAswcI8zArUxTBYhBAYA8tqRAeKgD5VTLDy1qlr+v//qybIorIYAHNGdKV3dAADRBSU3npAAYtZ8br21twOIIZPQXlGBRd8vypKHYKL3GRYB3Nzlwv9ZoEZlrO1FqZlQJRIMINBwKTxFhqONDEsJp/hGEMqEMOEda1qUt0WGUua9D0afaHrP5ayr1Zbj+WVa1//vdWzjys+ymQQWrS61VhlyYrz/rymdxxx5VlVNTZb/WWW8eZRp/neh6VUuPMsu//41aWzllWlUNS3mu/jjz+//8///8f//1lc5///5///////+v//79xgAAcABAS7/+2MQSjP1DlVPpSHaon4sRYqKC258NGH3y1vrd+n/7Xf/RZ2+mxm/2st20X6CAAAwMgBvbmKgKoPAQCEaCxIABgKG2YezSxhEgcmEIAIKAMCEBEwQAATEKNLMksDUwDgFQMXmHCxi4eYOaH5gwYFuIxKSrpBheUHgOmTAgGNKAq3Gfjg6Dp4T/6hvH/u0iWyBq+oG/8HCty393GBKiUpg6/yrutIh9NlQIiciebhWMkUIgkh+PmSLmlA1h9IVknA/AaKT7LP1zPBnLrmC3d1ubPPPP5xJ/7H1Xto5xUvfx3EX7G6nzHv/mCr/+I///3L/1p1QAAAACAPN75xuDaeJlw698D1f3d4UKumdX2nF2etXyruH0mlilv+e9npGetH/R/4UIfWwbYprbXAABPfcsbZMA0AYgAFEQAQCD5MBMHcwmAbjLOd3MNAG4wHgJ0cyYCwwrQTDDWAZM4kCgwbgFh6UAkqUIozOFiEAddzCWYQCYwaGSwELcGkfYlDlEFEF9Z2taMICY8875xJNoxZFS2mkFPawZTRY7s07WWhx+XY08//qybJFAO4gFumdFU9pTcEukOQo8bIMSAJ8ZrXuEITKQpPT2IaTE5AeJx54LJxVzyIMQPEBObiaaqmGD+xmVMKGLlkMbYdpUoTsalipib0Xs9ZjlW9D+k3d0boyL9fOUif5v/1/IcAAGkriKT+M253naMDrhTpMaIdbyFv5MutFuNDQoChOSsZejtHH6kkhiEvcpnfM5mLj9FB058xhxYMi4xZLb4G/s7//ozP//dXrv3iBauJoFEmE3SQwasaYw6cEqZiKFwGDeBRQBAMBoTMkBQwNsD5ouIAaYJEwQA1KnNMcCVoEXjFNGCwEg4vqWO64zgAYAAIgsQeaas1X/kX1Z6Yg2G4vE61uo+fe67KII+1e33eVPf1r45cywy1jPViKhYqdJVCJstep7p7ci6grrcRexRe7aggJlrO5nA353I1gIDKazyxtzfhvIygAERc3a9dCR2EO0TAdfSk6138WSteerGCy6se857HVDmmgYaZyZrb4nD/x1QcIA4aGA3AAXyf1+rop///3f//7aBAgGF8njYKc3t+iIRMqBgLPiZUxgADIwlTVaQGDgDuG8hS6S6cnfZuw0JWrUjlT/ISnAWbGIxZnnHd6vz+Cz5nmpiEyFiYm5Ui8Fa0Ni65+K6U+3n6fRMglTMqpECXW/+z+j/32aO/drcLalAABBiOqVEhD/u4KHrCHIVxhuqyUGkrhFQEKQGmY6sWeBn05ZlDuubCIpRx+PSkEFLnfyGec8bSktSZCIF6mzvh4HQs+nDjDHGmKlUM/0hT////6RAMB1Kr7GW2+eJA8cc1wx8Otsww+AAqDk0mUggBGC0EXCdcvA//qybCcLcgCDYSRIa5tJ+FNkOL1rKT4OmI8hrHGFYToQolmWGeiTpMCJlHydyETzwd0yEWFyAc7rk2iZpF7LJTA/g+ErLTSF/HkM8JBSY/sPmp7YAqBXPRNtvyr6kb2cctqlTsdAjhgRvtemCFjHTl2qbVta+5S7CDzJuDgqhQTH7EW9a43Bm6PxmqncKxBZsJmhyCERUhGeODh1xqG4PLzpAz5Yra8pyWqES+7/zekdSQdPNuDzCChNbA5/r/RT/1///7pMQU1FMy45OS41qqqqqqqqqqqqqqqqqgDzScaaSSZ42JuZggA4hBIwMFc60NUILEBEOYBAAYGhACgRMVSKEioFgMLkqbOhwZBOfe9+pnNTpd+qJnQD2XweSM3lfQ4425aeJ8YJrHHFnmlzbzQW80FChmLb1mV7RiAyMjiBIulUn0/qFegaI3Mvta1pk68eEcOuW9kx9D741fFVdSfUZaA1Fk13kKSHYVcedAMxD49Ivk30QXjDMxMy+LPAijKqM28veYHxxhypDAZP1phgYM+sOAaHgH1BywdtV69NKpBN87IYkE1BoPIII/yGi+P/0/7QACBOdahIJWRsATtXeYRFkebpmYhiYlUKgSLAiYDhEYAlyZVBGkqMgLDCBqVYVBpY0+tjBajAV+SOJsDfkqASr2JwXlyeg6PwXBq/XnpmFQev6np43rWrSQhB4TAOKEUAHB0qf51osukK2VVrQpL/ynU9rbr3mSNinyMxUE23JM/5GmRk0TosY+Wn33hOZkSwsgdO8jG5BvhkK1muthETvLW2YFSMED5EaHosN1tWzjCEiVfUh4NZXNY0205q//qybEr2y4AENjFEU68UUFLEGR0bDB0WdZEHLqR6gV8Q5HQcMDzDKlFhK8SSqNCFpkpk2oHiCjD4Q88xdqERDTBhwhMLTzT8Ml6DvT7/ZA4ZD4YvUZlmchu+mRn6X6LX33Hk5MGVpo/H/93u0rR/fViv+hVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUtDQVyy/WJyniDnZCNJqs8kHlw6iJKsl3BesamR7DZRZ+E+YKdVajRpTHhvSY25Xu3OTktxoNb0e6HuZOR1H5ZmN8OPmyIROKG7TnlyVv7tl3+UGLUtDv2O5C+YTXe8qkBSRADBM4z4rDR0tC6qd9uAFFCA8LAwYFFUhMXgTJBUGjgODn0aioAhMLfO2fBCGdQGTGwqkehx7J3LI3Sv46o8CKMMvxXI97BhteI/gM7mujk+YOH6vZ5oUKRneRrQLXrS/ndn+djghDUZlJV59utHe6Jk79L+mlisttHN2q3vM9n0aV8LTD6eGl5euq0P+vzn83j/CW9XpDo0Ve0ntbblHlE40FYzC8MS9HMvAZBbAw54mZaPGUQX2eFLdK6EQRNxx3XXY1Grb7SRajq0GGOSlCUL6HZ0D5oFwsZLmbtIoIIwkHlta2ocbpN6PrYrUypxu2X0S29QpTg3yKBURrmRoVoEwnMg1o49DzETgUmbRN0uZDEMOTlTJJTXCrQSiVMjaTTalFocWU/gOaBe2bNsYwWgFKChmSBg+Zgh78LNfuwDeFfZjUZXZDDWOKG8ZWsIel3A88wE4nKxUVAcxbAwEOJsoVarqYixm4o//qyTKRB5gADACHJaDhgaJiLuDZt4oxQoMcdrLBW4nCuoamnjfhRZ/l/TrHZxbmVge3hP8t0ka0F7XeCeUfYiKqcqm5Z3kPpf8K6zl1hp2ibH9+/amalllkXZ/v55eZm5KdPTpgx7Yx6CrA+DJnAydLvu2JMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgEEBEr3KAw9EbMvUcNDGDjXgHKSGxgAMXLCBkkTTPwF+DChFAS0AGAq8IBhhGm6W4qS6iEoo3S9WGYArQ00udOKabVItq1nQhXSpRAHY6pBhth5qtjC8YkRHTCvSC5g5jBTuYV6Q5NVqSzyR6hAtOEP2mbM33R9tX894mSkxAuyH0d9bquKFQrEI7jbNT8t4ZlIav25S1MlStDU0UaE/1KBWPqv6759LPrNSvOu2LZF9lyyxCYLHlpMMZc4zEWAiRl7aGO/QJ/rKr2rnMR4nLJGpLqc032WFYICTTmZnuXIj4JGAacvcs3c6TUNhCsYFtvWkOzHr2viKKpHxBalunSxn5IsNYhb2W2KxiVgMSCtqO1kEqEVK0CkIIYQonBEyMhgY+EBqKpiZWYYPGlh1ZS1LBBVnSrl5wtHOKsAdFC0ZAVxvFAF0JOwMLgjH5SKxCEq0kHCWCfj/Nky2thbI9FYnk0EKJCPRKqCRmKYZ6M1Xzk9bo2LQ25nu1lT7JCLmZs1XOCMyWkhe0j9+W0GKoR03WFmVO3CMoFK1JzTiZZZRuir0/emuxCd8N3xYscmE1sMSo6aqxbc97Ik4Uow//qybDD+3wAFAmhDY28cWGwk+Jlp6YQU7Y8PrbxzaWEQ5HQcMHSBGUeYuQiU26uIkh9JN9n55+i6Nx/SdCrWEB2EkFdYedadiduivCsBUoRrkq7q/N+hK5OKTjvL+5eGDAYYKuZVY/XyP1XdH//X00f/qStMQU0KCsVOx3NlOY/yAgShyz3NzS3AEGzlLQlstaIro8TQ4xoe4d01kvjjAVi6CHKNQqmPakN/nxKORpqFO0nuzW8O6hFMQDY1IyrKl2uG0xsUWUEReTFJ4rQWzZH/RS9JtFiF0PKuacrGJpYki5LXqNV1k3vECgACrajJJaivXhZQl6McBKCKaNdE1swiOkBYbLi47jSlZZMT3Wfija6wWB3Lf9wY8o4NThuG6lv7RHkckEtgxQo165RHA+ofJIlYdReWOlJYLUnWioQLhYEF7epoOXm8P7VZRZtEGofCkUUWFhRCAKZcTBgWNyUMCZSiI8NpDaidbVqWzyf3FwAjOJqaKSv5sIkw6FGIHoUjC/6BbGjDQ0SNAoxIGl2S+zBS7AMllISxBcHWdabUjSc+1QYD5UnheFRiYmx01Ko3h5DBSUdWMLKq2pJtdByqJCJWSbpwzF7x47lEexbW3ejzYkSavJljF7CRI6/Xp6+TbIZk+9bMvekaxaZU79zNO87mFMtK7a5JcqmqJKhMd4USSFh85b3vBwi2nNNA/a4stAAJA/qqsvqQ4xAFCQWDDh08enTFBUuwUGrXjBDIaQQMBEUC6SNCjovhOVlcvZ3B61E0mhy3VINTMRnFljxRFszYaGML2chUL+BAWTqCyO9Cs+zkxVp1DY0xWpnZmY/E//qwTGxE/gADoCdHaw8TeIcEOGphj7IURaMJTbxvwq4zIKW8DbhoHMIYC6kEoE7V8knKoWL4kMIMyOLVNuJa3oae5tHK+ZGKB3akbdQy8uZx+KRRBe1d9neTzBAlMyXQnIkjy5FPgzA2Ql61I0IDyEiExUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVA1N1NleLfdVHe/WvsjKqSRKzBAR5GapbsYXA64clo8IJkWj+JheO5steEgkjyEL8z9fatd70IycJE9Zj/293Dcuv1mbwqV6Q5FGlQLD4De19jA3/4/tZ1f3r6drN97F7/oLJARcDjjUSIBWvrVXCIHjutAhDWy1L8mkqY/gceLFQPLHcXWw2JSB5oswJlzjQxDmppgTi3oNwrtJYY1TBeWDyDMnP00fJaZo0S154YLbRPmCJTIxSFRihFXnTJVU1V0Y5qw6n9/XyMyPt1R9LV15WVVmnutqe6Ovv77KiHWynDaTcNQOlUSK663WNJvu5QquPGm0OaMTlABcKjoVBkJhKGwMwt+n7ZmX3BRkabk97rK4YK1iikD5tEERahbWrVqicM1i8dC2MVgRh0VS8oSFPWX0QlrAAQqkgeNQlFZdf9MIOrSrWNWqRIYg/Z4e0FCiJ31FRliXOP7mSZ708qWcOUyi9d/MFbc/lhuD8tJRM23T2txo7y3kf9TlVADDQbjjbRJBw7QtxUoMebOajCEJQjMQGFgZhi5hX49TVEXiUzZov0MpyFzmlRNLZ4WGSaBYZfUFAyIyW7dKvRQlmFcrQ+ASL0DD6KUVosqL/+rJsbITmgAMYKMn7DBt4g2xInWWCtVLhRxessHbqdJth9aYO3LaPx2Py0STMrIW0yXj/GOjrdayx07JaXYeEBi3GPLPgV4OsFy5GKkw1MMEgoRDaRrhUSzzBEAFtQ0InmEXgk4QBJTQ2gekaGxq/v9TOlUxBTUUzLjk5LjVVVVVVVVVVVVVVVQjjdPkAef/UZgEnOEHSAAyIGihYguYAPU1FpIRxWnH8B7R6HTI6losEhtIYh28SE7HJnWF5ARoni1YGuBBtnckl3q7czTjv5csuHQtP4mhCIad/6/852a4Tvu+2Svq1P0RVO5Org2v5Fy3tblMe4fJu+rXoJJveuXtUM9mouDo23W+SNuc+1E1TgawqWRmAJeiNJLI2CzbzPCfJIlCvXCkUCKiKxjlYG5dEerYO46aFHK3LA9MA5eIu+drreBAq0Leim4bh5L8MHyKLigxey+4NDAorX4057d4CO+b65npt70s+GQAnBS5Sd5hIHMWNzv0cxtSMFES4gQiDqAYc6oHhAGECTD3DBpoPAaYY3IIOeTokI+xxFkR4SIpMLNjIDHl8jymsmy6TxcLQfkIOKJQJlIopS2XC6RQQlEFhSQnIlybL5kfImo+gRUqIFRjMqGhdQW27O7XWtbrUVkM7ZTsy0lpspn2spHUuvdkVKWtalqsiynqeg7oretTKW+gtSNaDGjpoLXZrppNemmi9kkDbwoFJr4K43oQzlNYDrnM0kIxqGOOQkgrmpxnCFBVfNnADPGKICmWYkUB04gp0QBiS8OPwytAHDEnsvU6bsTkFQ5FYIRNAxkHX1i92vP2JTRxF8HzahfdWpez/+rJMfwn1AAPmIcRLTHvKZ0SJDWHpaReFlQC1uQAKXJjiNrOABeDr93OIYvMrhxY3LaOfdmGYerf3Wvq/rP+591v//fNf/87z92uPD2fAhG8HQfpPvjVfOrj93+d+7O4Xt5dmJfRT5vDCJRF5TGgNI+HDlQAWkk0U23P0KWvmmlIHTYIEUFgQcG2AKYGDYHHJhxbmeAaAUuZ5NinRs8PtiIriDASYPw8QAH08QyJrgILeQtg0CATNjeebOAFHhr7ptnQ1aI3IkDBy7rKcIrvDDsuWU11TRvpVUIAGxNAlEYQzsUsrp5mWwLKtc5lJKmV6l7jnlTVqanvYWZvuFuft4byxzxv8zqd1bpJjmOOVyrav5WbdPZww7hc1jums71KJveM5S2fuVbXZnGkwu95n2p3uOVa9rOrn2z2n1+u3s9zMv3+qnPsd3zKpqzuvz8L9DV/s9evrPHni7P5weBQEHxR/8OQROEgqSGmpGk4nJIyTGm022mvsMQvCQ1pSFwwL0GaFhL0vmf+2OyBs1fM5eMkFO6pUimElwXXRpLeKBLUmx1xoKpFrbRIs3e3H5xVRPBlMOO8hXIbCbiKj9w03ZbyAWWU0SUPa5frQA/tDQ/rf2Jmir4boauHMd2Mqtq59qvnnvmXd4bt4fuvj2pUw1j+7+eGFJU7hSb7hrXLedek/m7VzPPHlevcy5e3/N8zsXqmPMqTeu9sWqXPV2k53eGfO9z/v/97C1lnh/4Ybt4YZ2sbWfd1afq7DZN/+toQllf17rUgAQBRgGCoHGKg7EADmZb7BYWzAKNjFYFgEWp8olRmRPptEdJicY5iSDphUEBv/+rJsBJj/gAenZ0HmcyAA3MzYbc1gACnt6yS53YABaY8i5zTAAI6+GLgGHeQRGGgIG5opgoQZ9lGpohkDu/hkwUNChhYyZSzp3m3ADMB4AMNWg4LMLCTCw0MDzawQcD1hAuoF/nBbYVJDHQlr0gU2MKFDCTQeKxIAFQo28lVE11EhJeKBgoYYEA4EhCFEBm0F5loUZoChQZMEDwEOExCUAKTMco2BSMte38sjalasY8LUBbqJ0YwAg0SuYvrZuPiFgtMNU7rrHhdh+L3kRmNApiYAzkHASqKpYcZq5VA59aX1bdZwn4j8D143PxuN23/l7LUbVTPG/DcorfYV81clcZqztbLuHMu/n2HL2dJzuGHMMJPGeSWJuLLKWU3vtRmaz7/d48/v//6/+W+8p+8t/+H9//////////wrVp+mlV/K1eq0tX/tAwwQQggAVRQV04exkPdUBOiYMKQDjkHr8SoGtTDwEgjqaMoK54MvBgrdaLJbhP43T0dviL2b8D9LQc/iQpsTObkzqEPxmt7mexR6xzQz/IXWUUs/u9/f92u1CqgEAw5IRXfaCAAYGB4UAJgMQGDRkY9IADkZWCiwAlmF1jCIsMvmA2IMTDwZCBy5CZDKT7JFJrzLoai60UDkQXduNaC5jBEs6qHWqZuUDU0ahphwhQmq1nHH9TdLLe7qvCpau2K8+tD1NuW4ZU12mpsssrfMf/+5Vsu/+ssv/cpcFFGXfj+Uql1rL8cef//vLLL8cccf/88aWUy2lq5B27ywM//z3/oKugAYhTM7mX2w9LVoJLJFDuAgaA7BMcfTbxR5nxVv2dOy//p/0/0df///+rJs6ChoAAU5REtvcwAAKkHpr+OMAQ98xS3uYG3g147ltBWUZP1IQAxBAM91v81jK5U+ocHU9hEGTjw8bQv2W1WsYIBIJJYOgqmQMSpejQ6I+GWdZbVZ0KKKNJFZyKMofBrm5yH/+G8/5XnWtNBhqT818twtf919Wgu1f5v4zUlw6OLZD9R+cxqJTyKNzcBPWqkfolnSZF7liPVYnpd/X/06oAGAg6u5rLNOahsBMVkxHYRPKTNvnbIeUvVRUwhYDO//jRXcew/7rqMcn/o61bOnZ/u//u3V1QgGBSvdu0UkzqAxQAhYIRUEzAIWjl1izAkLjB8GQKBaXgGBcEMSaFA+mSXhNLA6Y6Y2/XNDtSl4I1GcxuK3CEqUWAzTG5HRUlpekno47TQwgRXshOgbGpi06XWsbcTftobIZdu9AEutWCMoK5lLER7q+XrGVaapdVduJKyY16J947WanTNIeImXtV26Lu9zHnkhMCkQAAuQ+nIMBDtEwIELYkgFnwyIFAoXAM2p5+ilSSMxWFCzclkr5oS1jPthP2nB4pQEhOhbyV5V42AodJpRRPFRGGVC70f93///6P9AIAAYkd1aTSKAGGGhcDYwjwFQIBKMhymdAkopwJA7KKEwBxgYArmDwaqYZgM5gBAXGJNgKAqmv848hEd8oap1AEIiZKFQCOTJUUkAbIXVafnXsuO50DOXJX+GBoKXxtO2LyFZO/oXdqx5PVYZlL9RZ+adu0BxJeiggG9MKGY01HRl4/vrQJxz1dRLxkM9ls+kxFvW8qDPjKrtgRXrNvT1M+fV2lKkT7Z5Zgzv+btxqfUmsJVMKiRqr6n/+rJsNNbMgASLLcbruCt4TkQohwNJDheFnQuvaG3BKpCj9BwkfG7TvYAoFGcvsSBFno3iDNuOkA0qld5WNitxx9S2vdz995qOOirWQrnFHXiSOFb+SEoaHDhH2mryE7Uggj5ulUFgIcJmP7Ggfs6////9SkxBTUUzLjk5LjWqqqqqqqqqqqqqqgABCW0WSEAtG4GgamCmBQYCgR5gsCYGTfEiYhgQRhdgZmBeAiBgFDD/ALMO4+MxoQWTAyAxEiYKEJCgRCf5qVjJEyFPR/zBC3QQ0YwtBwl2t4qOne6VX2iT8ZpYrtBKWu40KJUM3Wv3aky99NAS3Lr0zbRFivzTnlgo04aOpByTu++7ZcubG6zlKwqutc8+GiSTrxEz7BfZtiFWk/qjJXaL0slq5IvTkzEE/BZm2hMOdSDe5k6djDXLPsH7c9vZb3q4Lo+Cc5f5fPRgBszKAwxHGdiaacqE1gKC7a7+NoycoM4HxXqJQnqGah6H6W2GIwCMFcxktyKFW5KNhUDZR1X4rvSgvghEBKpK2fXuAwCKA8wTOik3tePHnP7NXdUL3O/2J/+r871/7wmIRFJLGyCUhc2ULASTCYYXBQYxhSZV3MJEOYliMSgwSAKYlAeYfDOUO+zUwvA4vgxOIEADVWAxp3G0bmuR2V/sXbmwwIAVebF/eJSF9QtqSSHnapCiI0ZSfRVVQyTPV+ILe3o9Vv2tfRBuM1cUWnsCWZwcmGsWUrWqMsCPbTaDFXGSX0aVJhTIvAwwsQ2qA9YqGQlUttC0ENREuGBswYSlFCUMBMwpHx8rGCr8zqiAY5CMGGMkkNTXBA0/p+nRXBL/+rJsl0/1AAa5aD/L2jNyUeQ5HQXpHRfdnwuuvHbhP5EktBewdIl/2/kbkuZ6g4x64Rqym4H6nGDEeJQ9hYm6rixsbNPQnr5IUr4V1YI8lusKZEfqb7aC3zbldyYvRP4jq13pbeSV67f//2ckpaSKuv1/qkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoEUFYXZo3/skdqXJGXRFSIYFjWLkSETNwdO0dDAiLAhoHPUrNAbRlFsIaGST2K9PhkJsnEUyEuD4Lktqtm22juYEMQ5cEjFhAYUPmY6xWH3q3OQn5bh5nifkdOLpWnAwCiqExhdBCxp5JtWI5rqdBpOqZLaFCzfMpkl0pNCBnAzo4IzCFCXI9syKvTMz4kpcoyKu2xBemXm2QMGeM2ZEDusyTDEoKgMrxdtYm4uDLoYYcCGjUX1IQYwnDlBWTE4ZEKQabBcJgUo/Vpgbe1uLFK1B5whsISvar5DgfA3md1mch4nSt4uj72/0eM/+r/sfX9IcFxs/1+jbUb2nXI9xAAGRixzs4NHw6ACpMYWPiToYO5DxtF0AyvGipkDLYyyRAEyoDhLkCQHUXJLEX42RTTJRyfuJZSZ5IjZk78uyodEGPRjbuwLdvUs5KmIsgThavBcO1HeTdc8xHaCNYxWbYTb2c1km8xfQ7H8PdmFp0VZKktcn9XKIVbw2dFrZkYh3LlOizmHTus+zS9N2oKkkzMb+8vTs+fEtWWqB0FNqAw1iXpmIXO3K0fKMLgBkFd1uaQKX7u8pnVJKw2X/X/+rJsXEreAAUVZMZ7bxt6TsRJLwnpGRcdoxGt4M3hfRAjdYYKJEI6CWqyJmTSLMddrBQekrKamyQJTN4zYB8HkwQ/NCkqYudkozKZ3Gna2DKdeGRcOvcxyErRfuqD3/sYuPvRdk3sI1ogMs5l97vN6r0eykxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqBQbDjdliQBV288TQklgQOnQN6A0wMfHgsaCAcvGHgSfSFYYAyxtm/Cg4XVfV6IEZWzdaU1VeKfLzp9tsp+YyppXFLcP4Rp83VVy51FH49LqKr8M8gJuLAmnvzbkNPKX40pM5bvEaxe7lZKIjw2SXfjVhyyhJXNW6j5E+ocq1O6ptlm+SRfOG/mHWnXEMTnj0pEik9NUydXAQrTWKaDJ6G1TivBZCV/V+OiKP+SVpIO8Y6scGBcRozLG2jCz0HyOsEhoqi8yJNxcRFcrKN1tMNCelKdCN8DVWPfxtsbkOc9TT3162hKUhxf4zNEbbVkWhrhpuqrRhpXVq/uOf//0peqpKre4/oSFRcNfv95G26PKiWkICxDkN6cQiMaOHAhMCN4ZFFjYKJLVGzBpg6dkrCFjxVly1m6snfK2/IwvW9Rooz7yKdfOs5zlRa2UhWksVxqqqZacH7Wfp+iQj4PQLqOp2MbBslzaWpBJTFJuhDJMYtNPwV3dqp5QQ/ns5muI/ZTaG+N2+uhmXtUYapITrGn8teZynrTrS/NV6byUVAq7un5/NzoPWadrVBiZzIJm0QRJcoLW9PbtK23r+KsH/+rJsxpnfAAVGaMNrZh8YXaQ4qgcPChWFcxOtPNapZJEkNPMizIAmEVTkGMlNBPDJQmv8pCTLktmGn47yRnViHCVZlHvqWlSeIFhqG1vOn0xQsDh7M6OSdWcQu9Nyid+mV6Vadet0jre1q0+Vk/yXu6mtRUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVQiyvslJAApqWvAEkNK7O4ZMGHLcjQcEDB68ZgoJUIPVhfx/GzExBfDuN7D7SWhQmIV4dh0RHw5o1VXs9OPmcvSsaHTLZIuyOwhD/L2TVDoJGLQErPpTnC6RaEl+zi8eLvHh1dbp5pQjQjcupHClTONuIaX4SbmVKKEbjG3hrtZtAfSZGz6zkmyvh5l5GTOMOA1MwShICHkkTzRYw+luW3rdQAABV8AD8sBQIS0QjtqRwIoNA68UlTCRxwIgnVgzpGElwKR43gZU8rPBsdiSfiKPYA48r9b9amUFg2IaY0BsSY32RJpdzUNeVTOFPVYZNLrgiZbCIAUFZgVQtaDdyVY5jSj3ERdqXw7LUaZOlA8+t0OkUuAToEOhCMHqNVPaNfvx710iVAAAQzyCLeRD1ivGZIKnO7xioMnALBqMoUQDRSw0IDMECWbtckyAc59WmvyBpWyiBF6yiYblG0hQhsB17EQlTsTE5ate1psDhwLEqJ/q0s1N1oAgFUig7BI9KbkahuECzQYwpkxPgKG1Ij+NVbuYrtht2OboWRzrpllRflkwbBTaWjAiWES12PKmSOXkZqVQU6FDoDhywY/B+jRfrpiRkLd2V4Z1i2k3PpViPUSORoRsMSCLYkkttJBJlg7/+rJsMEHwgAUNVsLTTx24hIQ4OT9MHhYh4wEt4G3BXxDjNDwwbPpYABmpI12YzAQ6EmA2q4ZZJIgbttuOnJ+ieMjyoTgCHYkObiWKJNApWjltvsxbe+jB6AyEyqxZSqbTuUqr9Per+NO5Ovnuno//7dCfGkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoAXgQ7tLdhqAcEkBvVGY8UhcIFhJQ8MHjIloFfLX3gXY6hfUFCFFL31lTWZZbhchjduWK+qSiBOWJ6V8sIUIGg7MUVEvP1Yiq+RQEFhxiNM+oMkYhTjRWZ7Pcr2OlDs7IioCEdjI2tlK79m0d2Ky7SoJuZ+QOR6Mj/Joo54958l0EpthpxqDJ0VXMLj8IwZfATlQ3R7dw66ivcSmLnttPtG24t6tj8RGMXEbo9gPgJtPMI6nJyfjgnlNqqomhycUSQJrS/WOMyGJEY4J0Xz1H4lkjhZhA3lMMOhE8i7ij0/9G5Dqr2v3FqiC6N2N0/rq5Uom2kiBsKRO2tAA5/VlgzWaggHiHigQW1hQxDkosTUw7OzVpDqKkrojRirRP7oW/svxVlTI9HVh1O903sbWvHaNVCn7HLTb7UK2SQMSgfxp2pdGBKnV8jImQQMSTeVtt5cLx9JgjmQPoy/ZI63jf/9qbP+i3av+sjqdeQVX+V0NMjqCmGfXsv/////TCUZcmmubJK7/2pW/R36TWU1Gn2C2QzFfDB4dtW4cU3cSbkdWkftxIq7zW3ghkeBFHXtVEQdE3/+rJMoHbZgATSREArbC2iWYQ5DQXpDxEMoRGsvHFqECoitYYO1CKPJfJQ6gfOzlI9QvMSo1sdhBBkivMTqdJmjy2KI6al0+k/Xhep0jI8nnpDO+0PLLIysIj+X6cKd5z/Jylp8vPBjajLSZEZDJtuNm3XVUxBTUVVVVUGJ1SS3bNpJvgLIW0KULpe+VuqnoF8ppvJJbW5QwOLVEc5Ll+cbhAENUVbITF3z1SQWUac8+ZZ9q+SnRh42YMdVpM8qWSm9BCNnDxneB7NTcUU5IMFBda4oLtW6pT1ie1CA0YS18VRKXGbXrIIABFpSMokm/qiciKqYDagyQ5T8GBc5wgg6E8VRLi2IM5QAIZCHp1TtpLD/NZKtDtJAiEqddp2FEHg9u4p18JaA6lblbCgPpKKVSoI/UqtRnFkvFO6xY1ahiQVMIXObubshaoizFM7vFtLdn4WNUYT/OufIQ5KiS9LHRM66pNgBadc9eb63qEIDzG7//+O8N79791CyUEna5I02ssY5AzBjGQgSjCCzKUCl7sPSzK0bNJ52pa+IXCTThJhSx6nLla3n7U3jRZxAXi2sP3MZmzl21p+WrzDyyKxOzveWNZKoMQ9TR0XHy4oLOq/r651u7Or7m9IKKU5WV7C810m28/pSaHWl4xtGeHTc57WLwvzIhOFUzpzPbMnFKda460///ptFYW4+cW67TrIE+9+NgBAduNAEntS4/yCYEHBxY4YoECICSwSEEIMZnCiIVBw1bi1OooOhbYn4ex9lhaNk1Z+3KfkcAlhWKrudujkeEbj1+pLIFGgh+5TAEthUXit2xMz0YgdQGV08qrSyRv/+rJML/D8AANoIcboWGDokiQ4OmsPNFNViQutMHpCrqsgabMPgf49kVhS6Kcosi2EWZnko5VN5KxTqRc/qS+cWBIRDYpxe6a0lpjsVWEpoUDleflNKVNEB0iOVEs2ZQ5JAYeIL+Mam9XxxHvHPg3+Ix6k6kxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoFJRKOO2Egg3vjziNdMOPOs5MqDUtU8KhwaHBhJggWKvLFZ1NFeaarhNZyoYxEJLfKUSyJ8EiWVclmEurYheWxREYPUKuWEkGV42vrxpqHOI3M5qW7YwdSeJUuHzY3+/GVmNkb2wzPR8PtZJu45ynTne57tymJs0f4IZaDxZ1NvvX6Vz+2y7Tzq+zjzdUl9eee81rb15W799VTn+XnxWWml/tW7uUtYyABPrLkEwgMOvAGLX0vUz1iGQEBrGuu67+24kwDmTaZaFIbGFrmyg6QWLx7DV1+6E40FDyAk96fvt2jN1DWqOhS4yxwW8s9+v3ZY1jmvFwn7VKG/v0htDkPusM1U1x+lb43/6unryV/7H/j7Wz/bfpny9Rjf06o1rrz/t9CDaSmtk1RJK33dNBYMMBVQak7bcVK1zxNLBvLUQkxhKIXJqNFbM+EEOrDkPW5BZaqy15J7Pt2/fwtZSuSx1tYesao8pZlvd+G3htUtzCmppq3+8sv5vvOfcNEfK2ve0QTZO9y300xy3CZKhzSS0gUodZha97jDI1OZGx4sYWqJwW17tsSSa/lyw3WZC/0l1dqCMeBjTOIfLQvZP7Ug0SJPWb/+rJsPbXigAUzZ0LrTzRYfUQ4IgcsDk/snxW1nAAhvRDiKrDwAGNrbnjyJ4psCxKlOMV4jCzTNt1dBR0KR5u8ff+W9QxHJ7mXcKkJar6G7q70CpBJdar33ZRK0rjOLwuPa8eFblg8mNbuqu9aAm8oK//6KkAY44my5G24UWnG2225KFxPHxUDxMCAICjAUAAPXABQQk2TH5COiAMLBY0ecU8Tz5+CA8ak7XDVmdY3j1y1YlOKGqwpOFQpE0uk6TY4Dm3UeuHZW8r44wy0DCdxT5XBLIxKHLVC/sYgmLzd36lvtrtNawrQdFZfy9bu7oJmkqzdizzHnaXedXWrFmU270emMfsf9qrW1Vy3jPSu3VtXJRN0W7V3HtNhdzkGVPcqW9S3Pt29l3tNjWt26PvOfylks7NTNLPWLlq7hVxz5csXb893Va/YuVO0XyuxNWs5ykyzqY1sfy/X51d9vAh/g2IRdR47/WEwMswbCpAablSTTTkbJKLSbjkS2goJ4afWSkgiMwHIymMzYw5AAVNXD8eFxgsUlABNlIoWNJzRHkxtUDbVG1pil0whYqm1p1JJKwYV+GSPz85RvP1p/qqOtAjtrUiL3rrac6sMVobUdjEnpKdpMgm/72tIbVLhftU+XPxt01nC3jcu/89c3b7Uim72Nmg7WtY/U/6+NS/e7ctU9Wnm//Cxfpa9mvymtcpeazswxWpJbhbvzVS1LeUHbtW5qtl27fiEh72nqZ57sWf3Kp+lt/PUdmfjNipRzMhpO91vffvW6KWfeyvf3+83n+WXNf//////////fDcLlRMHP8OkwWCJgTsAEMBRdK3WuWb/+rJsMwf/gAfJa8HucyAA/I6YPc5gACRxZym5zYAA1QhjpzBgAHJY2QAYPBZhQ7DgLMCuoRA0wamjGgQMcB40U2QYOje4BEZQMGD0yyJzggEDheZtLrcjQCwDEhtNCZ8ckpk4A8ChlAZygjSqYcPmPGQXAnKMDElCjEwsw0TBQ+AuIcHzGBMwosMCDhQBacFxwSHC78DBAYBR03JFGAwIA30OSWwcMM6X+ncCh8BFZjAQxyNhAA2UzcEC6GENIMFQICmHAo8FuQRAsESJ0i/biNzYPIFDAwAQDPSmrEryjRhITJeP9TXLaOqp1jyNY7r/9TB/BEAAomTRTSS/UumWpL9giFfnGbWMMv/R2H/jd+np7cOYQ8vpp9WGn2jO4w/sZ3q1/P/8v////33D////+Zd1VCS3FiX/Ln//hR4iywGAAEGMAEf0AGMBagHUyC7uoj86duIrryV91Wj5Yz472Ir1uFhpNRwuH7KH0/9v+X7EuR+1FQQAAAqcgrFC4EMqNigQAIIKpHOA5IyORDIYmMEAlOEeBJjxiG+yAYvEwODTQmZoCjcjLQq5ZzSwKgwvZGCXRFpNkDGqAurjqXMYWtajTtP8Ih0hW4tNvZdeqHn6s/jOrqYE409+UljL8y2z+W8sv1larZZY7xpYzS4/jjM2ceVYdwWk12W8yppVTWjwlCcsCv6v+66Wup+kICEXtCY1pOf3GRIgJC8IzNjumM0SkOw9C5Tr72V6vtJA4sQ1ss8c3/3f/vZ//7Ef7nf9ARCYonjebKTldylDhKIwACACcQdo0HB4XxtfAcHgCvjLYISpVk+mbsHCqN3otWlxfZH/+rJs+UF+gAS+NcdvcyAAM6MJLeS0AQ2shx+uNTShBJEkdMGlnGFnOFJ6UMAB8NLKzf0xpGUO011p2xGhceNlookTRCZetlZ+1tVuJaNX2L1bvFe5jcWZU+59tamW0orYO4AwEDl+8iQc7s5H5mAgLLauH1eHQ4JLOSFVtiSwdLrLqza+yskdf7r9dtGgDD35DFE6Ct+umSYZ//V/r//+n9nUTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoAMCAAWWQTgwCQwFwFyoAYYHIRht1ohBAyxgjgIA0AgLgVmCEBoYUqGwgByMDsBoIAJul+BAVOguLas+pngaWIwZMMZRTvZHlMgCAjMGyibuyaW8ynZuKudEqPX8nauH1bEfhyMSCpZs8o8siLLpg9jQjN2SLWh0qpHGZnDB/DX1Gr7chcj9ZqzLV94m7lMqrPSPe02psxVO8at96xZ1uX2JP82LyZzmVQwVaX0CZa1ts3IhITpAgEO230iRWf5YUwQxqRjQgQ2b5+lqNzwMEzdTNSXwWJMn4M8+kkHx3E/FxEhyQTN9zB2TS+Kro+kje3R81/0/+z//WEhKJLtdmik3ynVMh4jJxGHCafaToODoYhjAYNEIaCgHMPpIHOBN1kiTTYE3DFwtfy/A9NDJUA6oU7ahjsIePSooCgw7S77O2hEm5o8m2WIyKlixIwwZSYq5sgxHzk7a868E/ArJn3GM4xmxRSasMoY6/vgUbbPDlKVI5qaBSLMVuYaH/m5UWgcdzSJO2mCiinEA9F8zn7IEbdTGosvUZwWQlbgADJqJsrBkVL1kr/ukz/+rJsIhXVAAWoa8Az2htyRCRJDT0oSxRFhRGuPHMpb5BhCB0kcMSgzCHup7FSAFyQmbZNZUtmxYCEuk/gksyijdo2gpAl2KqdKqyIxAklKbnCWMPbf619Dn2U2vrwp+9vsbetyjlTdplUpTxvS8hb3DLFVUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVCQfFt3/0badDTIeq3BYGgknFKTZezLhjgJmThqRCsIbKdTC2tOsOgHSI1uH5mIvN/tPlMGWyAlRxDxTeETEDLkfuM0blQBHUloFg9+5t9IcjcxM5XqBl7AYRQU0PwuHbZhq3I6GQMKdS6QRKqV/3iVN1/MZnYlkKUuNuK3Gxmg2LJtCFlVeEyBDU08l6vcbM+TrpU1a6VUZ0MdmQzVxDiLq5MPf05VO9vmd7hBnpkp2AAgBlSSJIpY/vczAY5A8KeOGjMXIah2TY5zB+pyZ/FKzDzgKDvJtu5VZENUgzu+ulPiGJmt1xcGzxn7LtVzV3ez/t+e////iUKCYXbb/SJOPNHWwiQasIYW/n8KyMqbjjjgQYlLiqCa4AwDA0jiTjGaGavV/s/kBbBpTWY/L4dlpCDsOTcWpKqZZLGq1I3RifFQHOfy0Zq4VSLPFQRIJ7HwcrI1tnUqkfGIVJNEKZMJT0wwgwJggw4mXzz4CSA+jbkUkkaQ0YpJZDk5mJzXKPcQQ0264WSN83SCNh4wyhLHYXYPRigHJxMtE5MDMySjkiJ+4YMKIDGTk9EkHOxtURGgp+yxH1ZWORHK0q/trC6Lv/+rBs8Q/ggAWAZ0RrmTN4SMQ4nWXrOBixmw2tvNahPJDi6ZeZONrWmm//eo0qqYMaGDz5QFYbpeXipzq6r3TNfvFK6wXQeaLVniUfMrzVoSEOZbRn3HvTiJn93RQTRc1vV9gqun/9G3TR/cS5u31pfV0KTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpQIxBDxr8FASFC4btlZMXAMCHIQ2MNgcxo/zLAbLguFTX6NEpqU+sTMEormCSJwknTZgkgSbHKIu3WIK8/3Kvbb/ePxgPK5WjiWH5PmjSj/21I/cngcByJYebmCMLm3GJBLjiiMnODgDgJ0SYRgSkjzkEkJ44M3BuRlNbFNDHQukSsuSZCGM5YHMyulczKZtkCpLlhqXnI4vovotQsfM6UBsKu0JxhgeCEM8kiRSNJQYTbTw4Ad3iTAIYYG+wKBGGjlvWPO1yLRJS+FTefN2nml16UxVWBOWvTyK+WOCzy0UIZZBWU0JCympUyAF4uJkLS4hIwyNOeifkUm7UrkZ1ffbPmPN/HzK/OUQB+dXZpZlLNv1zejHaSiqylu1eYSZ1/Ib+9SKJ1J/ddp1sK7Y+8m/mwoZW5tts0kne3Ul6qgFRALSX6vpIpSDjRDKyeAp72XRBptNalPxabHGJPCJWGQh6dnhSmvZSCqOBdqSFd0mfBUKFwYRHtaRaxrdr2lw/847H/d71snqmJJntPEqCl4wNCIv/6fi2YkZ1LCEnc09PAugN7n9hN8M/cGTYrgoSaa7b1tJJdXYIlo4ZoUHMlgl+SUIVQWZm5Rag8Buh6A1oqHgsjzEdk1P/6skx66+yABTt4PwuMHGKLJphKaSO0T3SNF6y9LSngkKL0HDA9IhAKMWG2G+u6u07P4TIzeZZYyG/+kLStHXXpdSJbAHPULHx5qPLaKCWHR+W1arEZKmZl129FrSd2uyS106kU/idRemfWv/70/3ffv/6qTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqRYbUtt1qRRWeuy5myMpwK57THhgZ4gO1W6Iz0kzoGb1XoSEtaKEDo16oJllz57FyRPWzsJLdBtt2Z3e+Cm9sdZ4WsVDCnEj9Il1UjmxkSIH0XEGFziUKvKkwTH2EiqYUsECVsUVIARg19DouNIw28JHyEo23bbs0SXvHdbMsDG8CzdnLAnikorg7sJXG7bH7SeAwnW0q6AqlGpDTJuonVcZV01VfmHCHmuqxYDtzpH1FY2CkE0ne5m054qbHt8WktKVDaxiNOTaK+hJ/LqRxDBJUUodkJeExRZobnsW0mZ+0LdOHNn0w4qGlI9+6oNnU0FvkXWhVEouNxzW1IkPuVfGQsPPoIeU4KDIJQaYx3ddn0P1cqSJzUEfXna8StdtVGhluoNpO2y+hXXF9h62PrFKykTdZPNSCsRFk0XvIzDig3/uQaSpgzhwsiNRdJQr59fznHLpWJt9RTJTq57SzNDvnZM/TQqX81IjeK+wNZ7FX09VMOHDBHJXeHqQUb9ADDddlmtaRB73HJhiw5owzqLDOK9iegBPB4xp5c25nZARaOdaqasNsgNsrMJ2iHz9wy3uT1uT9Tf/6skwux9uAA4wiRWsMNDiEqtidZeNvURmfEawwdqIYpCI1p4290wmuDiHW7FvM0q5XSidOnCl315wdaWhlcNQmAGpIVQoX+b0M7TQqMllKkZyRs6X7LnbffQipDyKbF0T256PSvbQaK3cWcNMpRe0Nz3KiQTccsu1rZKX71exhk1JSBlkff1lk2huw1qanNdBzOc253Fig6rmcqR0sT6tquXw/Z5FWfis9azVncOuNwsjRYNGTThY5VaG4pKhFvna4qlBvxaVDaXuLzhnlWB5g87VSly/pqTP7+XVEAnLHPNdwwaEYu+uVkFRfhjhB4q5pFzOrT0dijv09ap/K+VExWtP4amVbPkpZY6AAfCTba8/iLUIrEgUXVgqJ+hUxz0egOxWNmZNzGVLu70090uzHSuy36InR5Ga+iU0JWZ8lrxbWrkKnC62VsRhQsh5oABWXGyQSJzB4HaQ7jsBj0Fng5ROV+H7NZxE4CKqqJgQsUCFmHadhZU+qi1lD1q7VCANR+jHLm5uk2jTzKFuUSdCcEkKJqUkGHFW3FafSmWhqZ7S3MF4MDMvTy5mDCdwxVFt5NIaSybOLdTtbHTJ28zxy8eNpCytmDqJudkpM2er/sqCiGSm9Rp0KZJJjco8ZbJU9PDbj3ieWe/3Y9NqXdfN59IzqBDVvtIaNF4aZDHRaa/R6E8JQAJNHIy00QgZAbHavgC2ACACQImsJAZhLiCm0HFaPD92VbCqDR1wGvTLxRZ+4Ho4rBSZDcXypJPXkKiMMCdHNAJRYBB4sQni7bkY2NigVKYmR62kt85E/deVrCmveU5aBVE5QiXyylo8jUJQrFP/6skzJd/+AAx4hxmsPM1h3CliaZSK1Frmo/Uy80wr4vN8JtJrR9lbJ8y+oGTRmEu7UduGzd6ak9pORMIzJe6ldMSd86jMmVqZRXOOnDsw0rETTznQ8rghbItj1DSCF6ZOE82dSXM/W6eteJbdIngSRFriRLr1MQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVhptNyy2ogE3v7TJEI6mFGHKqOsZfhxTHvVE9p6eIy2DckxPnRcLJNQF9zRWI4zTb1GX1sZiTGjwupXkqnf67LBeEKM9MdcbVEubM1W9zvxsx4SWnlcplzuSScVfLyNsliSv5Gho2tk+lyY5wv6lvoxFhz/98uef53ynXYm/IQZuQRSRjdlrTTfObutIWuK5MLf5nkPIyAgSjkslNhjGUq25TvFExOoj3cVvEooS1khRlKaU3mxSTmzedNlJhhcB1BG3enOgRnRm5Frs81vujc79InbiO2VR2hvoez+H3edPhx/6f97F+1G5MeOHzvOd3dT+R6ec31VAttqJyxkgA55chuHkOp10wZWCoCIPQMFwoHA15/ItLLjMWgq7y/KpSQ1KMKOuxkvBm5EifZsbGJkWj0UALIUD/R4yfHqyrbLB9WKcureespud02YyQy7AbfLIH6yoIhprEUaRwQNysMyXNarnXypzqkW5WmEqtFMkpaEhn4KkVeMqySQ1IiYISBy50zMwaSNNuY6ullyBRMbbbrJABxzmXpa+pQbLWX0hlqcvTeNqFNMahDqv4/aZTYIeboW15uU1N4dUrwsGiNa3WFXCfyOJJA+ZAKPGcI5wpQKxqITR56b2PoLhpibv/6smxf7++ABARmQ+ssG3h3BDh9ZeloUr2ZC60wdqJ8s+E1phosofFU8kNU9WbD7ebJVUg/rdbvlns25G633HA2LbvGV61GvFd0LtZew3ya69bW8w027TjKx1UWrc+6bXiX3dzcRe9c9jdKMoHpVx/04t6VTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQbjclluzZKdvL9vqyYzqkEKI0ENeb8zGFCadUqZRNQnr7Dg+Luk2imYUVWGrHcYla7/VE07k2tjRaPGVm8uD9gbRbGhDGWHaZ2f4XmpmwgFDhAmrqiCFHZku02Xz6J0up84Z2uQnPIikLhU9cuE0BYkmIy1qyq5GMgy9iwyGHGYFIa6VyxyMNWe6EnDQZBFRt1yWJEA95nqHy7p0JuU7dVXogNMaASST4b/Kco1fTszMSCFt10S49MIAWRCRpNNlBFJZ4nAUjOUgaXY5yUVgxJvJIcRxWUid5HJiLB0+Vk8E3CnPDltFfU/b7NDOm5Pyfxf55XzyPQl5x8l7W2J8yU0MGLzqsWUMUQqVTvqHW//1WU1HJZbWiCvw5hjXMzVsOpIIduggg8mUvpQYSpZ7/4rjV1cWSxp5YaY1yPZedU2rEfHZnJzSNnaMw+cpjsyOY7PNXQhaFQx650EKhWLPKm50azTUpbdVreqoZlM1Lqe6H0z71aWpshUa+/0t8rq5mrk0Z1zNw0FNdriWRyS7WppFZUu8F4ILn+SYSEBMVjLDCVIWCFhngqP5BqampyNxzsJfy7Xk1VRoWXe+SxnVgMZRoV8AWRx0VHJJcv/6skzkMuYABGxoRGsvG3iDayh9ZSOZTy2TE6wwUWo9sqI1lI7USpKlWrhGZdmPXPJDIxw/iQRwrTo9gM6CqUGQxH8nYthAjJQmCxBk3g5VoyFP3PPu+E6FS6ssKQk82yNyZDh09yPyKFql4obOBgl3d39STEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqYcSjjktrQJXO3OPwJBmiem7TxqMxQ1aBcxBcSpEyYQFZ1m2Ia53ojCit5lqYvC7LJPtyiYlEaeU4lUopDw5etk52+Lu0x//idQPYnuu1uz/s296cvw/6Wngjve7qLQd3n6zk+Cpsa7WHi/Oko/3Wl5Q25HZZdWgSlLQLRAUV4yiFtaWFBLW4Iy0kxfxR3huZyZuZvFFkY+BTHqDUshUeoLmFg9TCLEEbWyDq669484WCSQyAgggi5BVbr9qFLcUW6u/MA6ZsvYLAM2bdYs+MSKtlzyuh9IHAhHQnARVW40SScOzD/w+nuZOBd4WIWJDSCMxWw7FEt/3nqHyFgl4b140trVHfzVWy8HIUqurvzvlmrcqyHLyXiR25wvHnZJVGnVw2OOMblhQY+Zm6Pf4ivrPd3pS9aY+q+tKZvrFPnFt2r7R6Zpr08+cRLUvTG7W/r7/Vs2pTdc2xuurY1nN8RL1976hyb8etYWK/79MZl3a/+621m2b7xJTGq+fGkjuSXh+LNboOPJrFn6kwbcrstuiZBPN7uqpp2DSpK4MIbkys5UGio0y6WT4+AQRc4+Xh0Nz6zCxsBLYyYVzvVoL68v/6skxsXeAAA4MmxOspM0pqZDitBwkdFhGZA1WXgAoIlmI2sPAFN0ywzN7i9u2NkBwYtaq5y1tLFhxK5vmuK/21BvakuNb+rTWSS5axw+JR2txHGS9sTgwjY5m22fsY66ShTk3xbu6FrtcBXRpZ5FH8vr9VIKkjiRbUjjbabbabbTiZAA11izwhCgdMAQAO2JTCEQQQJjrUdM2NZOUP1YjdUsOWwHo5gozWCkTRO4StWp6HOkkovsbsRwuKSOwRSdHrCIJexG4tkLPpQMjCUBqXPpsUjSwx8q1f6kTVm9XtbM8cpnrVhnQlhW4F2R85MsGCrFbR3OwxXzLCgzMFevMalsrmNleue4sJRwpFY2zOMj7qW94iff1hueF2pHbAwMmLNjqZ7V4uXcS6oUMF91y1sTY4McJQPlQ251lk26bpXFadTw5m6kdhgx1xlAtrXDiWxI2Rrf41DiZ8HOf///////rOY9YFp9X3Ct///////+6K0TjAwJOONxKNtuNpqNRqRuP5JXQQVSA4DwlmQFiMCHwCKhGoUrsHKw0GtsWASz/TD5KPVUwDn67N0smZDo1Ows2ovpFmYEttjY0+5XjezduuZo+Kavi08KJLSmdYtp5lxiZzPM7exvR5maHun3eFHtl5E3uJaJrwa2zff9c1jRr43S8Su4u83zGgQs6xikDFM33h9d7XclpYO/b11bWc71G8djli+BEtLPqBa94+M3gVlpAvtq+dYYN/1k6aUf7kCHNAACAAAGCIthxrmBxDmIzGGAQbmMZbmIghGe4VntL8mNLkH+JdGAozmVR2GXwoHeLzmUQYG7rHGJYZnVwJr//6smwUAf+ACBSDQO5t4AK+7NhtzLwAKeXlCrndgADwBmMnHmAApJz0EYuAGQuJccy8HMPFxIjMjeCAVC9UIgNWseJjCgIDF70QyRLxYEzGBUwxZAwgmTXJCUzYgDBCVmDh4YLigiYgJrQIBE0OAL2sJVgQZM0DEHDDwcBA6sYCEGumWiBjBm2gWDVAQIJwcme8jwSfiuy7CRDaSJwJAnA0pZ7XaOTmMBcN8kNmZgwVCERI3KFN2Jy9icbtiQyIwgODktXcXM5UnbyleKLXeYXvhpdjEH4zl/Zfnm7ksfl2xIBpGDNKdmUrRmn+wwnNdy7ln/KSpSYOW/8/GIxYp9cxxzlM7HodyoPyx+ZjNym7/7y3vu////+xiksQ/K7dJz6SpY//////////u/Wp/5h9ewhn8zsQ8DCACBFLllFBHJsde6+C3C1jXb2KpKmc8LIGpLgHArSYhjzjr1HrL96lF16kerI+/r+uxmpVK//X0f+mlRQAEAc4i9uRpuYpnDIhKephCp0KwKHIDk5VASyoAppAuKY4CGCUACqoFYrp1mtQHcTCFgpvRZ9VbUbQd1TGHccs5ZFrNK7K5Qstkz7T3f3KbNLllKmlV5+W81Vf2Uy2lx/W9Zf+sssvx/+9/X/rXf/KVP8/R0RCIOsFyTq/+vq+//1dAWC/Dbexpvt5dz0AoFTMZTxNpgpJoZpXV+gYq19F1sa/qoIzjIaPESorNH+m/3/IM/7/2///pAAApuMkEhw4KhwIBlngNFYzvj0WDVCtTsu4EDUYiMOY0gqlJS1rSZJiYCLEHW1QsUHAPEZQ3zTiODtTrhjWktTEkVXFxP/6smzcO3+ABBMxyP9rAAg3Y7kt4zQBEsS/B068cwDZj2S0F5TUEFRmi+RgxqLCXKKQouqpgR+nl9W+Z/kZKhvnOQnkmYRgu5FU8KGXTJpwhHKFygAVKCBoQhsWKEh5sIAYa6xNr0hs6pQAOtKcXsbIVmE0r1oUGBZab/txE1ORTb+R7wo3BrGqeuyqomQ7kAQwqc3Wk6rav6IUXGkEA1//o7f/rq9l3/+SV/p6VUxBTUUzLjk5LjVVVVVVFotN912raTeW1kBDxhwFeAdjhpeNwZCTDAIXKL7TXHj0DiMAJb1Ap2dMBVcnOlhBCZdbqyac7c4eJI1t32y6ZoOjVQOaULzRibdqYzde8czruY5xkWUpe4fHAPQkNv3Cq588zO4FnJVV+ACIV6KjfYHx8AMhDKKmCb6HCjkH94QO0e8f2JKG33c1zyQNqla4l7ujjzW5TyXbGDq/+5VquzorM6Ebjf2//1/RZ1evWEEEtfKKgazRTcwpBIw/EAx8Ho48/0yQA0OFmuYeAQZVg0YbFkRd+NAK3zkwGKgqYQicgWvsuCeNMI4QtWmISU5Q1Qnx+P3biqC5NEZ44PiCBOqlbc4zgX9l6IQ0dqWLkWUVzUyiR5oGUrFtPJyK4I0+ILK4rtmfUvTMCYmkJltkjhMEROWQkAw5kRH1vyI5ibfW6EUFU9RkSMiiz+kx0Tqkca6z0oLJFHlG3beTaRtswW1wqJhsjEKYoSZbFjKlUzFHEITJCurztCzPZhmBZhCinFx1QNHzPycWCqSBE209TKnHEikXlmGYtF5tLQkvsAANJRolErg2Z20t3LlEnhmLCjEkreM1A//6smw2FtuAA0sfRusaWVhFRDh5BegKHfno9y69MYGaj+FoLBhghdiHByIm4M0RqaEen2/j0BAJuhSChX3iYN0ziEOpEgiAZEEw23qSOEhVAu4Vt6T4OKUWzr7b8ZvUQqNue6qFRJAl7idBQsKHznW6S+3oTEFNRTMuOTkuNVVVVVINjPtt/am5dybi2rDZIbuUtcSGOgDQYCcECwaXRmVc9P8BDZbXWhoOD85JLg+GSM4RM39RI1U1mSoILiAkRaj8aVMBv6jMDyajGqWjmR5H/1TGFdHFjB2jDKYlzg0NCc1CNPKpOGQPepmDIYlBCXbctdFxRAkYh12dz2roPGpglFVSJvREMimWmLVhiQgqLBjo2FeAAEKpAHPy+L6JOBsPlGm4mSwAHqmMpnZGASY3PamQ/6InRs5jyosJSb15MvBOkQDXi6MKCOc7qaPd3/62rVdsq2puUuMRToICpttwP7gn/RVq1AAAM9sqpnNhiYKClY5hUGJyI0YcTAkDKdIkBheowrWIxBBgBAeZOjpOUEtg6UsdSEGGfxNDqH4hYnheo6+3Q10hhyq1LoBPlyYkY4HeolO0RG58ZjyCqBYSeJs5mFfQKCYpAp3zY+YMOZdHslEjDm6dccENT02fuPhKLK8rMVRfRZlCOZGix3y+XaxNN3uubJhVeYdfVGdDBPAkhM1CiM8NVqWU1ho8u3gWePSwfmsUJ/SvWdOTFw6Jjzqt7Ts7LCtpE6fpl+sNML1KxednI8Hh0ocPrQnJ/Cfa/9Ty9bps1QfRpU7br8B5Z+yetejWQRSQ6zVJKkklvv5OUw0TGJBp3hfxlwB61hwXwv/6smziqPkABKBoxWtJHGhS47hZPSNoHjHm9S69jcmeEOGphJmgWg5BfHKF0MdlqoaVT6TXyysWyFxc/tXJBMjwigNOODB11MEKypAL0IWq21omaXSx9d5KtOLkTrErINabtkg85KWKW1oSMqTBB9s+r/VUTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqkCm7cjQBBnKmUS4m8dKdVysGWiy9WwyFSVwv47GfZIxGVEtO8Sr6qxHpKhpNzpjNq81Nl12pGxbNAw2NQSqFKv3Oi55EroVO4iI5igfRoi7l2BPC2kOkepS3I1mQSvupq8SYirUD8j6UJQeTS2UY24jlBpdVsb7KJ5LBumzrptAkrK2nrrWuwjYlFHUaMoZK3hk3HbiygVbSgrSk9MTRrrYhVitNPFUmy7OY7ba1px/rqYlKH7re+JzDf2qOCpOfQy8Y2+ztoliTjx1QuPHnACgFTMFzBHRoGD6crTn2jot5ZYvnbEDa/Tem/pO8v+8Ymus4n2PEzNvcVO2HCMrkYM89JGWnPJD4WvpP50zaZh5bJflPDXZzMuKCtPK6FnZPpGNtl5H0nDgBmKEgYKqZSUqApFRNxyVEgq93ecfYGfo3S0bqXWlg5WJGBpOeboDxSJ13IDRpHGQmiFYLlKqLs0ooOfCWKTNk1k1WcBAAIUg9BBrue7Q267v2Qj01VkX9+41pfTHm0GM3tjmV3S7fs/7RPZ6zrqTJzPuPO9m52Ypm6OaOn4bdS79AZ1wdfPNbbO1qd78PGpJTb8sHQ3069nFzcCRTTTkkJAJ1v68EsNBZ4fwllE1wZq309a1+bw41mufDf/6smwObfGABcxoQNNvS2p3rbgAZQNuUiGbC60kzOG6KeI1gwot6oGBSadFenk846sU6say++c1EPJep5F7bU1qepXorqVDPumQ7aEkzWRO53ZFmp3JybOhUIW7urAmdqG2eD+3dXX/2VlTumbnF1Fanf3VTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVYKbjbcljYBX5b+29pvU5TQIDoVBASdaExKKZSBSLpjVW74ogy4q37IPSBDjiRL0BIYCH2MKI+8vcIxh+AMIJXRDCs1cEqb2ankZlnvNzyO098sr8P/8ygIs3OHudI6CLoU130wf/lpGvvYi5Yac1u7p+SAIpRNOTWNNu9EOAiAHjypzIYquwQqEUKZqN9kJAvuV3QlP9sSPzcnk6jXQB4jOUKFUaKKc9gjWTbakkr9+/a+2vzLvYcan/wV5Z+Cbn6w8w3lEbhpscadxKWFo+y5muTR+aQ1Vjv73N3dGjMVrgX0f/9///7ahTbbjktqZIWWW5YzB2jQTIgXDY1TQMYF75Q7y/autTgWXRtqNE8zL9BYmRTofkoSNyceGBQKjKeGlWpJFz4rEUis1WQq3a8mKvGfHZAquoFDscHi1ijmCMcICMFStUyu2FjGF2aghnDEDeQKyq5zzelEcEmC43bV6S0WKU47Agii2jg9NmIiCqKOEooLjf/WABETkbSRN/KUxe285zlxQjlbdOyEeLEV1Xy4j7TaBPZFT33Oq6w8si+Rze1QIj5XSu26MnVhYgs8R3EVDjddNA6yJMgPyk1UB68pETMKLYQaJLt+eMQYyy4v/6skxsNekAA5dPRGsLG0p1pNh9DykYUf2HDaykcWKctCApp5mxznO+68EkuRt3tzs2CRh2rkbVghyDGQYkh2Pwn0MvXisOS2FtVRtTESWujM9YlK8alIx/p+7LZp/RKY1txouvZp03un6l6tP1/SuiOW51TEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVYUTicdlrIAWsN4YrzOU0DLSShhpH4GNvDT3O+XLlL0d17Ln22pBFgjdAaS9eXKvsoup0P1oqxXRAHNWjejWVWwJI77+v25dNaLEd4WRmRw8prO5nW1OM/vlzLp9LM086l4puTHc9mLlm0W4I7n7Q86dZfGHpoSr0WuVnIKNQuKWOW21oErqAsniGTIP0mbcXkUvK0wkf8e+yLCtVcGokTwnkDX3ETV4o0rpaxQFUGFl1MjlNdEGbYXBgEEJexZxiBGkg55S1iReXk87JWnLFcNHyrDSIWUy8XHAAslFtSBSwUsxKBQKctjTSWNukpqdCaYq4AhECQ1IWCpuEwNluVLuy6prTe7ZZ/tPsRPF2wsERjbj+QrTKg1sv4cp2o5SsDzK8p15TMkNoY3jCzyvrtTVqHbd1VNaRslxchrx2qisaNekT6PzlFJ7mMRMMlTlhm2ln5ziNJV0yOszlPjR4ciqnTlhGlM6Fy3zxhQEWdkL5xu5Xzr30ta18pqM+X2yIV2aZKCLYYibFSvq/vHS+2oDGao5LaiUXjvV3UkAwMAAHlgGi8ASkU1bLfMHhaHhm6zr2YR7lER5OTH2TQsktpZRBLvIorjtXMf/6smyhSuSAA+tcQ+ssG/plJKitDwYZFbGjA608z8oZM6H1pI4sKYJFVdSZZEkU2UzBIxpekxdWKTdbWxAvnWAsosz4jotBkENT1BCItTS7Mx1CSkhcOQlKBoD2I93MUahgeNUYyMwjmzM5pTYZCiIKJfoVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVIUcaTklqQJfM+53n+BN0AMLay3ZRVj48NvEGV8zHLtUevfBG82B+FbZbEmt3w2iM4jv1zBeU3cuvduhRIkJ1YkOWEjiHoNzcxkqrjRKMT6boZFd9XNcrnkpqQiK7Ayh7EZN7EydUkM3pD45v4Xa/12/OmjhSI98wSkwoiO1RtMjCDS+oae7ltbac/L7r0w+OjZfF4bjsqFKQC5zaaR4ACqPGW2IpUZbKF1HI5TET6VcgTJp1UDUmKVYI0Rn8VqofTbhVmtkCn4kvNNSrmxcEmbV4DRac8cpOKLWQ73NkzYyeV/5qxh5iNiWbHVnz6UQWwGZmUNIoVt2yoOyYb8V6sLbKjlUdu0aJCv6uV2ftLMuBZTYJC1JuIKxI6lpjesbB5zXUc1NGy+tCUi2hJSw7sPzRi4TVYltoniCdIJi9EzEeLtv73us8C1FIBIBuFIAjOOPhTDAoEOI+eLvUHHGwTeOoTHcDuTgqV1D6Jq7EECO5K5IMdeGa9qET9eYUkhZpBlxOdQshqAVXKRhmobLtYYDP/XSgLLLciKSW9cvzLWH7g583wguKHFrrs2E1zGIsfVSiHIz6NlMiQwpRppJqmUkQoOmYtM4iTV7ROv/6smwpguYABBxhQ+sMG3p9bBhaYSNuUmmhDaywbeIVreDphI25olYQw20CCmFE5BsjLhUE5FmlWqd0YGa3MtcGaF53Y8GxLPCYLJsruSG2qend6f3udQYoVr08TFA4MeF+HP/P260HCXM9vy7uWtcwf9PVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVwAQAWABq1OajCCAwgWdMfaAlglSQ7BBxKJRyvOHkY6S9NbT5eDa2q8anfxE08vOSwZBmwx8ueYHJEEVkAsIgKpv25ms6v9i875AxyoR/2N2M9sivW+WWtaZ8Ox1eYaZ0u6/Qvoo6jTd2+7F3p7/ZmrxLYrqnJMf9rg+Dh07KZrkCfYvCc6Ydvk6b8O0xnjlB7rBkuToiHUZOD14FoAtOSxppv7OVyIvociqoX5cL40VVHSsNSsFQME8U2vG3rqKDQ7TTEZIpu0t3BZAdFscI4NDDRlB0tmCPxoKPDmVutKN1WabiYni5q0lJn2WD/Spc1kpH7qrg0xekWIWvvmlgYrpsNu9BzuVNolHV5UlRELTjmjxIRHERehKzXJ4IjwwDYGCru5lSDyEdcEEKuRpIl4dypIknsa4IUPfK5TSiplEE13ZbArIZxiK8S7e4OQHiRY6KFVCcgRDq4pEkzBGKVwOEzeJTQRVyjaNQ8wI4APG1Bo2YseJQT3BKCBOwMOZBoxxKQxNsgICpHpykiz7ePy5cQiI0xPyi+mpU8+sXeK6C+EwQUYEGOMB0NHw4GgoCyFatSgCJRvrgUbyjssqZJP63qCtm+8zp1pDbcg0bBpx/8v/6skxubekABNVrv0spNCKOzGhNZShqEd1xBUwkbcGfJuJ1lI2kqKCK15fNXhy+FEbT4xcqgYO4EHDXIkhZZAWCQGRJnM+Fk/8VKvM7bw8nmul75yfLT6n/lL5slUk1Pv/l5vhMf2uYs4KGW5BUotBNEYyPTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVXGFBXI0SSvsXKWOCEEGZiyj9e37NE/EIZ+CLpBjd5Aq07YPU1YnOLoVB0wKRHOhsDkNh8VlFDavOoOywiYE+HRUyCDtQ2YDQsBJcFoWFqMdE9GKzi2QqEVHgWER+yx7I8rPm4LoMRWMjGhFFpZGr1J1jzhrBBnGBkwcqdENl5KiotWmSQPUNY2TQvmnklgoQU5GiSVjzVeaS1Oi+UUnY5LB0MTJVvnLFzLPuOpXFZTc+pVxghjkYys1jQCASKFgyWEgiEZFNInH4MK3iiz8TPvE7KlrIKY+uTYc6lnYduDfVruxeb4SYc8KcKbJTY0Pf8LwlOTOsh4TN6lHpGxwrH2u2eS87MKhGMcFHxTLo8C1xMZiw6Wf6Alj66Of6MebfYEL5BG5r3DbLGTU4jbvOBKGRmHCWrh6vXTDWfQt35mNr2sQkRot6JKuOCsVXGzgrJifZccerWncWLZvVY5aGhyWFYGAbe6ONVLC966886JKx6IYGPbBLHnXQ8rnEqCAhUQHSiKDPDhTYy2Ka4jeHTzqg7XtysZ7SLemTqFQxZIMgJCh2MIuEK9PqZ28M2J21f7sMI6XiLSiSckiIAV793ZLMFiZQeWPtJJQMGtZZdS8ys567LM3IN8SUIMnYqHCRhx4L3Mkk+CiP/6sEzGgPQABGtmwNMpG3CSjEgaZSO2Up3c/sywbcoAsWG1lI395K0snM3Ngym0lBJBBJ/fjFSWZTS0sV5Grg63iwpSFSeiHJKsj3e53PagmGJymxlf2Nbf9bOxoXwvMZ7lup9RKTllkzKQbUgdGMGRTSRMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoGjZnLG0m9Xt1XQTsBuWls2XnP2jGone73LnxJX0v1iHfHzlAuCPfr5Z1E0cyLQaN8mBZdAbMRbRPi1R6emND9IXegKPhXJqLEkxs7AsIL6iU9NXDGtmkI7kxmLF9yV4xAnGOMO6YhKR/SDKwVIb11EK0EjCwTzYx1MKrHGFhmDIW/AbZmSGoRgdosRoxjOlWEvdySEgBax1Z5oLHeifv2MlM0rJo1N8ATJLf5uVuHVURKDpx1LTl0DRWrRfFYmpTcqhSLl0t1XXt+IuxmbkO5XIPiborE/vuZYZbaWOy9yMjqIUU91BoQ9UE6Wv05KBrbclaEipqTnXSnseRlxo+ZgpmBZwJoxNuy1tNvC9n11kyjHUboyCCuzp7FBizgynD6jPKamXQmMr+5h4Um0RgX0tF3LVk8hLYGfMaIa1ieqtaLhOfiOtdLmwf7iNwzCpnXzMly26SXnfM07evGZ+7llzdM8u29DemLMjcK0eiqofzGornMimjn3pcrxnPbKNvC2U+PsbGv48vmZ0b2X2/jI4xTCn01ePpZMRyjktjRIe9fllLyw4XNk1nlcDGDciCme+4uPe1dppruiLESGPspXYk0//qyTL9J4YAEf2fB0wkcUHQIqGphI29SjZ8JrLDRQeMsYjWTDjVnBEm7kFrc1KqkjHs/fnxF1oXJcFFcgU9IyMPCJ41Wk9pnJoR+Zk2Xb5ZzTDLDe3Y5DhomR32hnTfMz0IjhkbsgPqUPTpjkm1MxsAP75dMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqbTTrhlkjQJeeGOEEvaWda5L6Sy0oY4yGDKmHKjgeQTnbLeRUDsfTUwRoS2f/5bcpzDzUFrQ7FHrj8fwrGLHD3uwruWwLGFjzDbG4kHkaXFWDg6Z7I7Yx92P9W/4oXW4lTiPGzwTGsg94/7/Ts4n9hXKxuQuMTotwUFanHMOble0LWHFnLGkm7nL1WVvygw1XmMMv6azICorlQOW1Hsa/Fa94aSXe2sm1vRISxLIyjiJ4oSyJJtizxqSfG0ZQ2AwPdQRhBAXcWc/7LQbWBZDj1NUsK6bqtjVIVeFD8lp5mlvFfEkQLkXsvhrroZh8qC9uyTzOFh8mHDAqJahQUbp/+gkstluSWIgl7t3e0TXibQZO9D8aTqaG/i6HZwgEtS8pxKcJ1R3ZSRD0aiOoPGCa+jWD4WI0ARbunhuUhY+uYKqseyw7B8MBwfloCaVm3iQsMMGqdZsllvsw6mdenF5HbSjLf7Lv4MLkNMsead6+S/6i7b12+pLe9Z7mVdfxblTuUUc2pTtvdwNLuXfLLMI28y1ZaeUrNo/0d02/1BNNNNyW1IlOSm7l1L+VZ3HMu3Me4UELg60T9tEcxZljMLuYXUigIESoTDDAnZFLkKAsKx9dIic0OkLLxCgBJA8QgMVN//qybFcN8AAEBmPD6wwb+n+L+EphI24TdaEJrDDN4kezYXT0mb1ZcZn0fPWnqe91oZ1kyjS2ualGfH90VTHvm7pD7h2u03bozXX8i2dOtiyjUVMddUt7N7f7Zk2+R7RtBDLTzMTc35m3N12hJtto+NRIPBJMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkWerltjak3ly9LogTNd2rP6lpINLF9ZPjctul2/b5xxexo365hJlAfZ0gZCihxGXVNvTEqpmYq1QpIiEMJq6hlJQ7B2aneMDXGKtvh6YcKxHC8ylT09R2J3eExfTn8sOSwnT4dfoOTy4gnIK3zHIThtz6RabOR+jfnReoNTkVCidbdltaSTwx/PsJCwmCW683krGylMdnJSUY2G1dNU9uYl18qlT1jq6pERyYSI7rDMpMXUEyL1a2kJ0K4GgRlBjtmUVjhvTnloxuRgsWj+WhTanNK8Ic17Evn7/ggR55/C/8D2pdKSYr5/lVx9ud/0TahbcccsSID3vGzKoHPMEoExlsOsKXUkDRI2YyqGI7oo4D/8deX+yP18Yk8ciSQOJnnC8XjAtOfpwHfrFolKO0lH6KjNrhXlZudM3CyyjkAJ3xZr8uzWfMuCbdODWyIkvfz5v/l7TN/F5++zD3HZi6nMjzO5Vyztt/djxslexuFIvjsHx9aL5q+5Y4Ab+6aSGKW5HhcxswQm8bsKFeMOQU08sux7Fe60UQAXVhqcnyPet7gnqaOokzFbNc1c9dcWOCMg050qEQ+oJSOA/iOzhDOimUXRaayKCiWC//qyTIPa5QAT8WPC0wkb8nFIGJ1hI29R1YkLrLDN6mayoGmWGbgzsszaOO8oZrq5pusyNTeHye69UQmiZm18Q22pU0+nfFpNDdXZjIxK/rPTeqjcVGSX9Q1O4qmqMW7zplNrO5rZsatYLC4ADtshpXUbjk1MQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWTE6W7LYkEX3WXLmKgDv3qOUzxpKqemedc6m1yKiB6CuDrg8uxR4FklkdnSlAthiCG4x1lNZbYR2D5O+RlJqZmJiPqweS7sqcuUcs9oXmkcovFVb0nztD3PsPI3/b5/wt8p2+2UpTPHob1Oi2Fy3vKsFsppRtyzVohPOfTCnTKGzW23g5iJZ3fe0/PS2xu5xGGTiBs+e2vKDaeicNiRxVDCCqz9Yi+bfLsWLrAwTYeEHO114Zk7mZuW02o5uddSPMoX00f+LxDPO0zPz/Yyn13Ii8k4m4gsvMbSMSHEvQ0/tVl92XkmE04447a2EnqhrX4+vkDGXe7N2Px0LJh905Xujp2TX404usqgjbUV0KKo7yImE4BgqKIEAdFAcRqsFBgT8ZeBASEEA0OvNqqKCvCdHQRJEhTJaAMTJng0EQUmmlvG6OEVWSr4T6k5b0/+0cgRSbVlmZrOQKqi0k9jpGkC3xmnL6SCKSSRKXW1Yak9h2tHwomU8NJE3IfXi9oGxazbIrXMlLnbCBibblsakl+vnYyqBQbBqteldEDlE+N05Z3dUEnrTcJic2UvPr7Uu/+GPNcmohGg1fYeV7B/642MiurJbOnryE+ee0mMcjTHdbML//qybCek6YADj1vEawYbenOq6J09I29UOZ8JrCTRqmO0IPWGGjCZQkGWjvKoACAy2IpYfWajqXMd4N+bv6n1knwrd9kzlmtZvkzTqxrzno6lytlK4STO0rJ1ox2Q7HZqWY7ZqMMx1ezt6TI4VjNVzSdf9apMQU1FMy45OS41qqqqqqqqqqqiLq04yAS57YttWA3DScbK0noB4qTJgziZLDtXHVT7RWN4RaYXc2kjfpAfQRRIxORi6xOpuyhFPDbDJQvggesMWIDKxbYjy+k5I9NqxmDHqWEV/qsuYUjIQZmnPXimwgVIwuYcEURKPsV19Ja+L1ehjUlUGhO9wqI2pBlZEhiCAkoscyoVE3JZEQUsv5jKnZOQ1q89lbmm9W/XubwbJoRihjVNLSUQn1ihtJgbCbxC2dKkqN+NF1TembmmaMNqU/UrKw7R7WZLx1Pe6nW8zjqeeNQ/0qzPD2Z9BBlnBpiaRlSNjE0qnCBozJ1vPQ1FZMaBrFa+Nqy2Gv/dtOrvJW/HEAdUi1O4xuIuI/R3PORKQNcjDcELHGotRoCjByNR1MjCFDcWGSgcBAJZ6emJBMgMlItdZGT1xtryw1Upi1GODr5EjiKpoUquBgRM0ud2gJAKGLS1zt+02pmnLN0ibYMfFRM4GOPal3SO3czccg93JrZtPiCp1C5mZk4oFIas/09TelOSTNe0ij/DtKiVlXkiomu3I7VraoPsn5x2V6c/dxMmfsC8rCEU8gLLbkjtrZSe6Zi4N4D+Ll2s/DrEstObrcdFFLVsKDLDTfRI1ifF/IrGnG5fwaiOoK8JEHZ/isNZ9MlJmJ02eWXYWE5Z//qyTLMF9oAEFWfCUekben3qWG1lI39VCaT4zDDNykk0YXT2DjypEON9zGcsydzLXJ6XWtxZX9cZaoOMRfvDI1uhrkIAGE7UWDGuLhwneKDUFuDRyFwWOYfGrFTiiRBHGUXTFHDtM4ngsMiZ2NFJbgrpkQNMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqMCxR079rBlRKY3oiYmYzpj7PB2APIVJrldGcXAD2vqQtsNlkVj+SGteA4WYlWtObc3q9SrhFqRufIuMpm6KxnIkk4I9OxskFhOZWKg41ZMjIrOYl5lrTtTIappFQYTYMTJhIcguJhwkbPFWi+lF0m3GUdCKwTSicajowJ4EZrm1wgMo9a7yZdibQuFCMLpoDJ6jpRMkbnQ4s84gtpI2YMoH4QaijCsnXpeYrtQ4kgzKRbRVG6Ca9amle9v5KKSr4rXs1vJDVK7C0idlZBcnsNAzEDe5RnVqw4BtgSJXI+Il0WR5tP9dquB13d5vnW7MebAfLhIuPDCRml1x0wIupR5Xl1k/eeP9bWwZCYOzK5QFwriXg5tAQSOwkEQUIFF+hNXokzzhlNzyNimTJuUIKnS45NY2lSOJvSdBKoHnnm/3XdxZUiiXunXok+8XRJUxOuze4zrHX0//+SO/BoYrr3ckiIBbSPKlAnT/j0tOcMZ/v70h28NPrtlVeIBOFJ2LSpB4BZZMht+FPp1X4eRmtr14TjVnyYflBQtM+7/uIww4m1/fktbVi/rKLzfIZ6+q3+9y3mEBqzE2BquxDlZ36dTqBCEk5Ek2/ndeuQhznE24xwK4gaH/72G5+4XXq6XKe//qybAzv8AAGjXg8C09L8ovLyAY9g25MdJMRQLzDqbQmoSj0jbk3ccYesfkvabbgo9ucIQJ4kDKplKS9M2Zgr4kMRqFWcKZbne/xx72SamcLpn+VzL5CyzhKTTzWz+FkI0Ihb073Td8nyvLKQ7ltcUGnXtoCCHnJGik6W5flHWsGDotqKQNDjWQNWifEpHldNQxKh8eYr8q2lZYGg7xrBOJZ4dALWrBKLxwXx2JJuVCkvwenxwBVcpXoSIqg6KxUV0NleOi16hhlTB12qaWBI0oECBpgI64RXB/PKl1rl7b21nHPsIHlqx9hzTulh9Di4IR2eXKKNxmibcpN9y8fmYWWyOnlWmgWW3LiKZzFfnVpqR0uaYyZhAu4JKm1GvQ8ro+qcz6GmSiom5LakQVb3jUoIg3eSRHGfhwuCLykF6phi4MvrXgjdOoqwJyoOJ24sm5uXWXS0WSSB80L5IhIS4+hTn6JYPpdEohcmEhWXIH7Fx2kKOKFtOv5iOWLw8h/F7vz5w0JxxkEqIIRSDAgtIYDQNqsnHuDlHXEGhGVpzFBCOQRmL/FEgpCbKkPGRDjQ+xKSMcgOsMtJjSrHgIEv6P6QIDSiPefOQC1czVZS88lyXWZolpnvvZbtM7le4/L98geetqiltqjVW4/K+aUzszD+JWTzmBGtZHtUpw7SiQXbqV3P8pT1evRUnYbabS1TXN1p6mWsLSnAuvC0qHlWaTzL2SkdZSucjsoJjdSo6nQQiFox7oMn3zG6Fln8uLXvmsa4r5NJYRfUDZg84yIMmStW77zId/fJq1nv/aVU6lL+2BG+sN1mQYAZVfqWqtfVLfW//qybKuc/4AFkmc/0ywz8pwM+E1hg48U0a76zDDRyou0X+WUmjmQ4BbjMlZQzoxpAMm5nameENS7JKLDTaNScxphFTcAJD7TLBKYDxGDmSGid7VkJMsZxN7DLFQciWyUkpXAiECfg2gZNivqH/osvNog1IsHdP04JBWBkrzXtSmMPZ9NTfnXdVlF1e42z7Sx9J0jEsrSOZgnw7/Y845sE2TS10TPhf5Tq7NnsszVYjHL01DmM9/ajtiu+Ps6/zXgBVm40kk8rfy5whLozxo7AWVSSfZ79+rqu6BM5ORUkI0mhCZ7Y+u5GkbD9D7JvCdETRProCd6BNM6SGn3Gb07xNB2c0UCpwWdB1iniRH7EOPaSuS51yr36DW3pFNrk68zNV0/KmWRZFvT/blVUEQm2t4puEXMjEXcxZmywPFPv9PQAhKzkiSTf4a3erJxY357OwQMe6RVNqYEvlc00yb0R/mJye2XPSJieZEZH1y2zk2kfQnCIkUKs2sFhOiUQxy2UiMh/BqtSNhCpZde/3QokbjyZqrc9mzKspsVp25n+/EKnRRLwzJmyqS4TssPiuxFGrE5HL30xz7AdYj//QAAC18rfaI1MOzzGUHK8P/RI5ULYFdbD2o47Ydr5+35iyXB8q1X9BmraS2WPp1BetcS4ikuHm6RMX7wrYUaNWskCFxrYjFqidPFJv5KTe9SqOidc7yT69YqUI+5LGi68OzpISbKUHXPU/fJmoNKIJ3KF+U4g0lJ6sXO0irH1WbItJPG5DDHy0Hush60tsmECipPbELRFCM4KZ8wkWAilFLEQSuVLtrsfNxXVsfW2n1y179IylNX//qybKnU2gAED2TBUYkb8HyMqDphI24TUZ7/J7DNwho0YTWGDbzyLFK2tkJHFHXqIy2rOjhrFxjEIwlpDAKVxkfxM/46JY4XhLP8FmYcVQSHghIgZouAqahylo0Ql6qmRIpm9dG3hq5Sg1OQWpgowT1r9I5xCIqSCzNMnNC6rK/NGyYSef5SEma4PkREWtGoXWpBRyOSS7NpOYxvFG8GFIq3sVCSYoNibnkHs5NiWW7LnadrwiVIk1EskjGMQGEleyTyYJlyMrBEJySRZcGkEEU3A16THOJpYHOPHc4EH571HZDYje6w+W8hc85O2GmLe5wrf2nZC8iIqdmXdzKeDF7qwNEJyh/bUOKzTfqBVccPmbZiC7WHJbHFsPhL7H7LhDrQSbKM+X4ixJCnZ3lSGBAaBKyWMiNkhZQomGg4amKpEqSROgbQR1BNl5emoRmDNi+x2AAqAndilTwoBZ1pkqBhAPJEuqdIcmcZkySm6jcKyOL5etTJd761DMETUoCEOUtBhrBZl4jirSIMfX/Q4aAFpbOExk3EcjYAsZ0ofUcQQFEz8G5jzIalk65Qdlep2vq0SXT/sV1LMJCSpDfROXiWsDpeFTYnnp8Jp+ej4ThsvBsnIxKJG2PNlMlerDOILtVrcCSYA0QSP8IuLNXlnQgEUYBqgGisXycoQbZerbpA+t2JukdD6abyswpOB+uUgnkClgqsyi2dI7LD2syW3HTZ3f0ExZzS5Fuj0iuWfGYVOpV3c6o3uVnhn8+MZpvfqUoIUMnGyk3d7hcsPGF9MepoxlSGEitLJfwvz7Fn2kTN4Tq5+XmnitBHK9fpaPmjg7Cu//qyTFaV8IADt1zE6ekbeoar+DlhI38WRej2TLDNwoUz4CmGGfgSoscowlQ1iyHhGXso7Ib7RmdIl7g5WWuKUNakJLIfyo+b3oZrZKeOvVvWTR5VwpjmxTJab9k0vIr3nq2TbqSuxk0YeZ6LMwijrvqshRt9B2LrUGy5MOn4qaVzN5eRF93QaMowGiiEpCSpEzPBS60fTEFNRTMuOTkuNVVVVVVVVVVVVVVVVW1Qq3ZJI2Sm67mhuE9CWoUVgZyFEZ5A0NHUl73RJkqMLew+ooooK3S7Mjvbot3dfmOxrI9Kjz9rUNNLe9ORVh7U1h9d/lvLUjdDJesWVr9Lw8uXn88zpWWag2VNmGhJn5F3pMR8BmnCCR+2OP83fOLHW7BBTKhRbkiJJf49ygp3RClGmzJ6V9ggAlSB89/yV4YRizOFsPSRHVz9IVC0Tok1oPt0QNFIKitt+MGaIVDCIsCWEisnCtOKyH6yjZwpF+x92v19+ecQqadMogGYIEwU/YEUFj3p82soJICOsbKTOU4k5m/iBAoYqNTlQKUoYu6TBZB8h8QZVHeSCnzDljtt2/zkk176zg9wUsjxqrOQ1ue5sWAfat8WIn1VF2S8kNNoQIbsiPFCVLhpcQsKF2pJSbjJldZcleqxAxFb0zvkf6PAfQVaRcl3qG0YZmz0rBLwyRYbGSnHp9hobxKzzhQtVHjzJu0qNSVUPGdjzzRlNJRyigjUMZqQtAqiAqQVkOdexHYybkFBqbLHBba/dFplDRVUmm1Bl6JAT8KOVdHh9MSi6IGBNIPTLvSIWDI3sYGCUNEEhUGhS4nFL4k4kRREwik4LRKN//qyTGpl44ADmlnEamYceooMyE1hI49PvZsVp6Rt6mQv31mEmblFdKKUSTqd//6Al2d/X5cvWe9yjT6uDP/WXnu0bsizItcWx8PmSVhvfSjbNmoNyXlzmrl9ubJ1nNElrDBRFZiLWV/gno/UAooLM6h+TipMQU1FqsFG43Jbak05d3lju+BnNAp6lqWLDqQpJo85FSWLRcqovjs+uF6tYS9JpwbLYKuqJMJdzC4fHD5stQYzs4PkNg6vqL38uEKc5t9anfJZp3/J4+shDVD1TbVrpnFu+M55V5zPsTG1Hb7m37v+FqZ+VkxFf9m1SdbJs71GHu2sZjbNPEaqif6Bc4Fcm8qQk4m5LY0SpFn9vocGYkkZSEpRj7+K7UpRtayOcmzBCJFSM4kmS2GiPImEa0CNEubMFd7NkOz7coE6YpDGFM7gYgPxX9TvqdL+ZZPaWilTpdI1KEG/yP6X1cu/H5OZkzkykVb2pGZPxPrYJt5QaORKU6De+fgxgpFlKOWJEpw6UhNaZASCwrMmoY5SOjXlixl/UW7fvfVUrKwQlXFWKJOId8ycL+wtemNzI2wKdXFgcjQYp4jmQA0RqGEqIGUOOXpdBiC22ZPAMVGFEMwdA72gxYJXH1B0DDHByBu1PGVAkxtgYchyBqbjUuKwlXdwxCmACizXz1IHB4ModK0DNIJ002DoiPEGMjZUPMwgk9f/qAg/IrzksxoZhqgTdjl+XyiHWmCSIiyRFpxLirFzAc5dwINmBm2ipFXI8P1TjtJ04OSfR5lIS1F3ORxH+n3FRMp+LhaW04edVmaFITEDBiNjqyJR9weY6yt5jNd4mbYT//qybNtU/QAEVmPDawwzenYLmH09I29TQaEHp6R6YrQ0HxmHmbnWyEFuIvV40MKdsy5K5A3pdm5WH5c6Z0EiW5s9z0vtLvtRA3Sj5XaXv8jhWJaYiG1ZM5ucYDVY9AmdgIbUFylqBNGw+3XlvfuRa4Q/+xJMQU1FMy45OS41qqqqqqoAB1f+bvxZabZRCVQj6s6PI8ylItd5IbL4jyl2WHG6XKgYAeMDUqllQgFk7dIiIEJrGaJhWTBNl+wkM0yM+QVpgbshiwjUHmMZJBmL0qplyn2Lq27HCjp09qKd1bzfbzii07J5enWhdapcEoiqy/rVHj6i7offu3luTwp37wyKyCda/1ruGiJaU7KN1qLYus0M7zzWkMdyrZKxGakoyQCscbtnlcSY22p2Pw2whyM7UXrV9kjGFq9XX3z4y2FTB9SldciiaiHtkPzwqHTpZP1kRNUNj8YMu3XOPj0EHF4AAskccqwRQhMBkaGJpAezoonKMAAnUUSmYsOYgJUKVZAarw6YSjrDOOcbqwZqCNzwjNiCqmdIoDRQq5I6FawRHsjkMh6ZgSKCEgKRO5Gym5jc13GOCM0OwxR41XTZo8uer5ARo1lIWwohCipxQBCs5ChGLCBsfBFYiJsGiMYQqkTcE+whtK3NNLWcckgpaaCLCUWFPyVmma0odfV9oeaPsmtKCO0UaWUGYPc25Rb14Yk2z6CS6084alsZycMEDQDFuFu+a1JfTOmQoY1OURFO//6nNdrckJJLz1qtn05hV5lL5iMQqeoHbRRrFtl3U9n1LK5GiTGSo4VnEcRdToS8cj5UYKZfOkRNhKidYcF842ge//qybC/M+AAEyGi/yewzcI7tGCphg28RFZ0FTCRvwjS0YOmGDbyrcVDDAaAgeY9w6anwKos/RnKgAiuQMEGpDKcQ/UWrUUbhpgGj04DCsxm1M1ouAzMObXxGdsLmLzOSDMtVDDkCeBlW4MFpjWsCDESwyBVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUC22W47Ykk3qSaPZzElSDOnDkJSWxIHjsHoJ6SiE3Kg2mQrY63nK1CPtJigEgCih6ASQAoSgQfgbbLxkaRizyiFE2MdaTdmXTLLxVJf2VU9OvSUycUSI8w7mX2Mw7WpkakkkhZLKe6vf6l9bLlrqTTVasw407ZTCTrLw0ZicTTwpLMd59EZ3MyYc482J3Mm2zzkcqwAIBMaRJKtdv0r+Polq+D6083mgkDaw9NUuC5lHzK56fyjX5HhAiiKQlAyBERyuHI4ic1AfvnZ2TSc06Q0axTUmO0hWvHZOo8qc9mJM0yiZBsgMQpDrSCFzZXi+SOlWDjvB6jmHlqG9krbmZkaL5IrqTEkEkZCazQi/U8hmkIOIEpDzdS4CJQZ3ChUBiywZI1rNzDjrdOtCyRCYmm5YkUpV7zO7Rlxl05UOWhwTBHZelyq5JFAxlTUUUl1Vof1qQOtIlSPQDhmRkEW0ZGOxXvSM3br6MYlMfgQEeZU8ihBWdzN20Y9A4cz5k6PdzPDqHY1LLZHOEXCNqAkZMEBlxIme5lmr4JGiHi6HMDxCBERCI0G8bMhOPZMY4M9lRCar8Aam5PZqIVFxNH2OovrPkIkDjWvxtDJB9TJ0JBA3ETTibBpp4OmWNsg//qyTGPn7gAEnmjCaekzeJhMV/phg34QcZsLrCRt6eczoOT0jbwncTs6JSEyadaT2osMlWMSpm1p6/wq2pqaXPi1j3cmLjAypP+BHZhk7kRttm7EtBzWKmi9B0gcsavgTRyWZOrHdu57ZzrVjjFtmHxn5VVMQU1FMy45OS41VVVVVVWCN/LVWn8r1SlQkup2PUr+gFSEMcpuVoSCrs52xIlmKW1kZ5CkLIHNLKySgJYlMlMpiw8FTI/mBTPAZND6P69c+pWrLL3bKIbJeLRgPymLjT/OLA5rpThVlLhc8SgkUXbxW/Sn++zKPrKkPKC3vp/r+OZsXcopvmo70S+t6dNVFso7NTCmkp2pl76JylDyzUTUzfoO3/5yem1HjdP/XNraJ7bdogCa/5RKy66ytRYVOOE6cB58llnC0GRuw0tKCCSlRdOF50OJ8RBLCwyXwFpKpQVw9HjzZ9WNwtoaa2WU3yu5mG+fOMekU8uIjN7lF9zaR+WpWKNEBCVHQ90JKqGw7cpmBhwbuUobLOhvOV2Qh0CA1Jb+bKZuuOEXp0AIjOHLVqcG5qoCfiQUlN37kiIKdcfS8oi9KXEOK3tIzG9TjOGEcV8vM3z3WWcZxMIBZE2h4XyvJZZb9n4y/qwgldmGAmtSwxdSebAX0OC7CrrzhCDRRz+f13pJ6uREb3pElLI0Bt2IiCSQk5wR2odK1n6wSiVrs9qlIj5oEPeDWpInnRbNIPmq2AKuWvZ21ufEzME8EXOca8ZI90JgCdNVUFEGkRK4KNJe9BQ6Rk5KKhAOD3SfR3HBslQiFGjFSzCUjyRQ3QbIkM4wMYM4JhQpdiDW//qyTBwo+AAFHGi/Mwwz8oZsOBkww9VPeYkLR7Bt6mCyn5j0jbiHviz0fIzgJRIc8ho1x0WBAePBNCDAN4EGTEHFBEGWlDBJmKFCgrlYeHo6YR3Xe3uIzJRRu6DsMBsIKAXAT4g1EkDQIkjyHCjeffkmpklMQU1FMy45OUAjSCuVBy3J1irqiF3OWsZHXtBniTGneWFl2jVrJBwQVbXvwdmvLi0l2TN8fH/OU4WE0z1hMcDoqO4HiEIsnJYMSGiIuTOTicToP9zYY3SDvnowrWnIm4ZuXW3aa91yqm0ntSSdGv41oM/75JaTVOslp6G4ZDa3aS1R5K+P8o02be3+P81u7Y7Tmvz4X+qdjyJv8QewqWOM/qkCLORtpt3my9iNYAHDVPtQXIBtON9PB1M9bXuIbZRqjzbcH/Q5iizsDKj09HS7KnmliWmS0YkmGV8KnDTxKZUioKm1iGTYgvqMIaINckjMs2SSM0tHvyAL+g6U7D7QnPT42TuJ1OHcq800ruB7uuc2xq3uW2lTiHdsgftS8FxXm8K9PHJ5G1iO6aguIdUsX2nzllmDmmqRRpoTUClG23rUiU6Wnyv7mIRB1uI9oRwrO7UVoKkZ3mao8msf8nWnGnyCBcWgWCkOyAKjID5weHumziM2MisTx2EqJEvjWLfXSiQoXJRx0HN/CDPkYjkMPXUmWm7pHi+jDjpmOSQjlI3gg1Qsr0wVLCGyMtEqetNfIjJVKtLEc5nj3fBly9ga1Zg16BbcAQFuNFJy18v8VANFfN5pi9DyjTerJ55OtkvTGzKYniQZ3Vrh4LF3z06OAOpnzJSfE47XGqRO8Z4k//qyTJIt+4AEyWi+swwzcprM6Ao9JtIRLZcLrDBt6hyzYCj2DihSn1mrzhBAJtzMZgLahLD73ORwuQ8+pGGbM3mpLHaquT+ZvTpFEsJYUByIYhArHmWo+TGAtubludeZJwNyBBtjCuCsqlUKgQeIjkJ3fQpMQU1FMy45ORAQCAUm2ipHXMSDl8BJmNum1MQM3HjeYm3dsoY0bb1ki5IQmmtgKBKHGdTWUJJsRTNImXgONNJHgYY8seK80sgQRYqcd4+RmRfnSttn282nf+JVvrv9ab5S4R+JoeLxNmsyYZZoHHdoO1gpCOTcOgkcd2U77uU1Q5Ct24aS9d81o9PfxmmF3MNIut9tr03oUCtfgA5Wb/KfYCWyTDLGaijnbZqvkjPOR9e6yF5Dta5qsYJZFJItWMO4pH+ApuK0yhNCtOveQx2dEAsD+hEWMCzBHjQhAUWNCeILHGLCUoXTGYFREXIyRVNByF5CRBuSB7DgschpiBsVqW2lDu8OjkrsJlI1OwfjFS31FGT7Fr+sH9KUhmWkgSexq7O4Vrf3Iyik76h1Y1IGZAms8Y0aIyq/uvJIULmWFhy4mTVYWML1p+t8cklm1xWFBTRvxrTAps3H92ZHsq8Rctf7MkZyua9YQhdnP8cvvcfrNU76uIiKo5GjkbZm+SeWY5fz1d3LJ7+8/cOqm1FPc+kjdS70vnpXufWzxsmUVUVii5rMeI8/ZltX/T2cUUAVuWmyxaeVJGCkKY64qpYAZwgbLPFSEDAXKSZR6KSASPLrhs4kiVEgmPgq5EmIAcLQTNmR4KvH1iEqNyWIFiYYJlRk6b0JKd7KJuJYCWju//qyTKKQ+4AEc2TA6ekzUI1tGBlhg28RdaMHR7DNonOyX5j0mbmjdKr1TyHg+U0nMqcJWxl0U6jrt8Vrw6JZUJMXBmmy73TU7u0z1Vhz8uXzZn/30yNUzY0qxszn5e6XHaWSw3iBq5mNl7d4SXs983f5aqpMQU1FMy45OS41qqqqqqqqqqqqqgEprcjSUk8OPpwUg54MfTShRMzlZ3KSoHdN6MwxRYzOU64aBIZfdbLIlQKT/Ix5Rqlywprj07XlKs+1C2/ZiC7jZvQbZZQbOSDZSU6fnQR/jsK72dtN/a4gWCBGaMjrcqEgowgajqHI1Cuh2DDSxlCQq51UyRKGp5L2rwOh1ayAg8eHSGrABeWr6kU6TkkHnjMemVQ1BIT4OQshBEfZhFJ4TxKY1QbUmjLBQLgkPDY6SoUIoOKsrzeJ0Ore3vYZye8N1HVUAiBsGYCTAijOptkCBGJcSO0JTAAQAG1gjYGAZfTYjLYiEGGJGLY2dHFOjCwBGiMZKaODNkERiFEQZYgMM0DpsIJEKkEg8BGGGYOCMkze/ZZfjwEVqckTUkjQ4We0h/P9vlafRI1rsiVIhaC88kjBAqnp7ScqQpCUoPCYGgvBDBknBRM7aBuu4naRBSkRs3FGYJQwzqaKwMxkaIQyqTYCgUxih0wepRg8IsmH+EeGlcOQlHeDglDwXRT4UMpRZRzUQxTI7Gwix3IhZZOgn5lBIxCicl4yFm/1TEK+wf+1pq/P6KES0tgGFTDRcHgtAz41WHCSl6Ow6jJQ9rZHoHjZW6J7gNomVhAmG+PJrMIHHLNBjCybm4CUrSjNHU5aRLi00A2Mgo94//qwTMWL9YDEK2NBUewbcpGsp+YxI24ReaMDR6RtwlQyXwjEmsCNSOyUzsswgtHCGjqPcy9hDNT0zVGwYHCoPcOdj59rt7XGflae6GF+pfYnTrXaW3A02dIm5N/GIYGn6szL8Il9JIxXgwJzZf/vG44JrkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgKttJJxxK37HfFUdEjflsGq5FDi5IuTQt2Q4mc2NgSwMssHsiSfrzc4L+vFp/kStxh5fRKyF7Yg9Ijdai3YHrsKFbGKTJ4CcvHoUVfEiB5elVIOzRbDI6Ao9isqKjyVDzoWLBYkj3kwwIBE7gnVopgjQZObP+n8JjMyj8lI9RDWaBqvQv3eY9epIUUpuuLahAYEbiu6l2JI/mpesz/UyC3M5RU/KPFibYdp4OHjCeHgCZGJ4FppZSRMLTrkYQ0zT38cgd/MtsEvdKXT+l2QrckJKznvTr5PP4ViOR9SsiHlTz9CMv3QXBuxTcgUS1Y4y0+fzc0B7AlpEpKIxUKpyhF2Jcg3t4Z8EATjLAhMdEWwuq5iQFtkjyzM6XfOEBtLu3nYkF0oIh5K12zXXanb4N4tkxdnFNSJp5O3wwQJyuMGHJCxBjRj0VJSJGW3M6EdQ03aeizUKHVns8t9TNIsRxrt5hC73Me7KNm0/PhBoYpQ10uY29z097USaGhVzs5y4GEChiiSFNhnLt4qkoVFRx9rUtd7qE6TdcJRLbT/6G3sSseAXQHOidx/BE3Fpf7apIfC4b1spjzRU2oAh0LqEBAyhA0+1BSCY1ENrTkXxTXc6GSJ0DrJ1ZTLM6z/+rJMSDftiAQraMA5hh6AcKzIWjzDbxRFovjnmRtCQTPgsPSZvYEE30sJSZC2ReXxaUoWszu+Z9tpabo6ezQbRU6ZiN4gVmJX3/Y5de96fR1+IVbo7hzacgWZPzscdLO1QZZUHYz99iSKu553pIva3vCFFQS0o25Ja0ipTNc42LavbzScwCGRs8Zky1yvImvePYCiFiOKpml6pzwZJE+aJEQ8uebYWXRHlz3g5v7MhBCAziEEt9r+877Ayvrek2n5Dt5Ci7OBP9jlL2/57XXN86eVz3kNO6b8Jcjb7lJ9m2taTBabAK1M3zPWVjmOwYBoKhXTODLrMa22ovBkIZDYbsTus0GJMvNzNWWV0tRn/d7VjxdTvWGFqDCmEbGZNuRFp3MnVjXMsQhvw0NGbW49RPo4ZzUR1sbYlvq6IJ4LIzlhOD8hZuuITDQQoKGOLYYUwcLKg5tg04KghGIo48gaLY04C1RwBCL0wwf3sczVFrkVqc+HKs9bvMZCTOO1554suVCJMWPrEwerQMCSR/ZwyEoknkYnrFRjEqQg7KxbE5mywIwSbVLHEu2MlKEXxoYNk/HRPURlzhxp2Pomg5MxFXLSEvdMajYV0KfomaxllFKIFFcgRMMLRkiSRoYKPWgu8PRA4ctJCKLfTZ1HTe5J6dFNNbSUSts1VWlnRayKE35xOK0yhZzuhFm/tqe6Xq9R19p+0vjQdy3WweEJK6QBiLVutlDdehfhYVnL84yyIg5aa8Qfi3BUNVLMMrVBGPHbHBTEwKBiUyOXhYmLQyKxJhIcPLi0SC4aEUrkM7P2z04cSx8lNIzOFOXXlhs/bTj3+43/+rJMohb/gKOIZUPp6Rt6jcz35jzD1BW5wPQsMM3KzzMe2YYaOaG8ssP2n3lFTlurIMxIzU0CR0HAhqwpiZMIJiEFSijktTFAna5MnS10mBi07A7tkWCBxJibot0Fxk3b/UVMgwWsQjUVrsRTtmIC1iggJXQZAkSERNjFpTxI9bXrplL36OVVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUQEhlJuRlpOXN1oSXI/qgBUfPftT9wVVZRx6JSaqwtEuSgoGJKSlzq1HmxauqkuuO+g7wXI2mxP+TS8GicZ/x4+b/l818Xp3TYu5jtm/ktbHTZo3oLZp+v/yW7WrtyoLaoUm5OJMpzYpS5EGl2b6olLE1ylauUqze7Jq4Ipxu5PlaFmkwq8KsyQmUKFYUoezRtVzYNqWXs2pKUYzmVEygOe0Fa+vF2bVfY+qqlw9nVG6v7GU56qwEx8jMKNas9jtZjxImH2Go07CM1El8Z40Vkwwz/7bZRak7xtfTSOL+M5xIA9xa2Rga2M7RS3kZ1fZlWJaZDaCc+JBZOiEVQUQFDxdI4dhEo65RkwjQCTYrMzDYURi5KfiIDDD24pMfbkgawgLpUy8bQnE5vTWTSf7UTl8pReb0GI0oPYRitSaZpwrQaVHlZI4ZJVaNQtGKGOp3CvdpMgTQThAuzyNaM9QCg+qiJFMUpgk1U+5KKi/QJO1d67eI5tsbCHR+v9u1kFJqKOSOuSnWxcFiCZAQE5AFxIjQPhBZpibL3Dx88JmVhPUSlA46zTZONNO0UWgJMQNQqtPUWTUeQSIJhj9U+bW//+rJMx0LfgAMCG8NoKTBacGw4SiUjX1WNoP9HsTDiPjPgtGSY9ZT01UGErsU7Afsqss5zDTDyiZZhNj48Y7KZVOm/ty65WQd0MRSdI0skBsJEcCdjmdE/rbF1apj1GHXpeaVK8JKojUkYmruZjlxpVwXwFUQam/2m7U3q7IlpYusytxFHD1mIaH6n5fo1C/MJTBgZHSJQPJqoVtVliz9JWJXYDlQ+mL7TxJ5TZOu1F2bJ9X4o56tExZVfuVsdny9lyRpnRS2sp9pRXeqnDF1UFomJw+OjEx2toQttdA/plO3fMljrjeRr614oG2NbMqa1n8scV3+tTG6LTVsryrSC7Co5BUUU41aCo6hjMlJWgmyCo5BWOqqyClRgJjUKrVQq7ATWMBHVVaoUSUYU0Zj1VSVVWMzOwZjVVWBRK7Mx1mahQEThgokoBAR0BDCtQokmDCVjATGoVjUKJWMBLsGY1VWoUBE4YCFcAgI6FAVwokTwUBHBQY9QoniqBNNxuWRtuWbmd6oYEy1RGSYI1M9rG7OSxCOS9/2LiooqTx2iqI/POLy0tDpCiRFC1YmRInFiqKh+ctTiEkdnSkm+FErOpyi4erovI1TOliTNxrSce6JQo+GWxKnmeuamr7PRx7F5MsYeRO3kdMMWxGsSl87MkRrmmgVtpsFkWzNI59L1EquRnfjIq+nF4AAQKomomxIRgCHjoIUI6I8X4sYoBnEFGkO80C1GMOEuxKx6DHJyPonqlPArzFN4zzsZ0qcIGhkKAmLBYBSKR8cNKlE/J7snTmlTihsyTKnF3GiZCcIyQ0QkRVcwLkpYbUeZJUS5IbZIior/+rJM45L/gAQ5ZcFJ7DN4f0z3qQxjb1HpnwmksMurFrVcSPSa4YDhiQGIuUl5Fwz7DealrUkSNMTUSBRR6YYcCgQtAcEhJxMIWRBjTEA6JwszSKSToJ4079h9+XjFFtqKRph60SRpRNSREiYTQSInFoKSko+EoUGNwdrZyH0XWKkVlQAAZVQC5IsXKWfEgfITYoRio8Rw7KJZplVaWolkaTh44VXN5hySRE8zSCRKCymTWS3TEyWH/WZZ2EzEoXVNdKMtKNr/xtNdRdDjL2K3y06Zu5nmzvcet9QeVCZSMX43cdpymvM1m2H6Ftn76otlEzzkT0C6RPvov5NmJzXkjLX0sNUZBUC424EpqWQSjZ1LQHJzoJBBEfaNEysVScsmf0StnrPdUHYhTyddPNp57j5DZBkWeTsmm9ra3ZpgrEz/p9085led3DMKstqnFtsw04334UhhUfYwwhkEIrH3UDLf4zKgpUP0y/p71BWIFfG9ebTe0z0EDIQfh1rMPwM09CWRGk3HY43ZVJob0VqW5RqQZKecAiNfYLSCQUyhIqctrIgysJxYsXsvmHoklIjl70L1VPh5XnpDLnbiCeM+e+z14xiynzbMh2fseZe/Li2fuyamvGupkkj6shEByJ0FnRFIpUikW1x05ON6SXh66Cyz8pG2z+U4VjI5+IzMJ6dsCTV5nvxW6Gdls1QS8DUYdKL0aiAUamy/8FhcGOHNFeR244F0ZKleF5M0fbgrVlTvkQ3HQu83EWGMk3xwnimDTVL2DASTx4+YpHivHOir8q9Qr51JMttY0weK3FC5ccU5aXOU+kk8PmeiGbJutuevoTD/+rJMVY/4AAQ6Zb9JKTH4eCuH0w0mBFAVbwmjJNYrKTRfZYexvM8wtXwMJEJ05Mj2pwrfL2wlZ18tVpRXYv64kaODpfCWk7UaGVDyxzCUmz+7RYdHt6E/ffOXLVZfMG1K8xOB5vCtYWvrB3ddgeiVLTmNDYq7iREhF6XSiSe0ilVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVKShLSQyquBMJDxRZkK60cXBtlnMXzE3QidqdrC3cy7Q61UNslBdFFzcQnmW1ROmPZni9QulOlZUnlYe0Q60HXErPpA+iB9IFIplKJlYTLWYWsyUzKQPpA+kLRTKmysPK0x00HXEqLqC6g/pxibIpsiYbphdmOmnqF0os6CpPMwnGJuuJXBumBBANvSXuWm5Bh1+wXcn4++os6xb1VmuT8PTGcfd5f7x1J24Kg+jHU2uYJ2C5ISERMBRQNDRKAguJEo6RMJKJvepUaELkW+4InKRcQzSQKQh4dhBGV7yttppyOTq2UeQxn9mUmNWOqTA6SkIIJgmZNJie6drZo6h1aIRG7KF2gdI+wqlSf8ugyMwcU6e/eRVNh5X11m5OgR8EJ9qUgCKqpbDmEAECKBixCAwN3MIIcOaCAgArkhUeHH67F9pOLeIIQ4SIhYGBluBnCRI7xCTDlTfCFTCJXO52hxYtAAIMYhMpk79r6JdN3miaXmiUOIEOBu2UjhzghOoTuUQYwCFnk76uB6IIIzVjAxkPIeIMeq9tpIpRFj5RXBlpJROzAFZuXANM750oJtvwIgNIsmrJwMknDJCrSwi3Bi//+rJMyrjggARBZ73gYjAKm41noWEjrE4VevjBiHQp57Og6JMO3B+wMf2liSbebyTtN0q3cpRnaoZoGpORK1cisVTV8TW/N55sj9OQWJJb0lClGuDTMKpAzO60lrLV6TQBQclVnGIKJKoaakRqsPY9jlE3Kh2RVSabSkOkSYmzeKSXMAckINY9SChHTcPNGCHHUn1WgAUyjbobaGpMBDFGdKlKAesUIYStOlvMUNUYJ6HeoGsRUdBjk8FKYDzHC/LkrTmSLxEoScpnHCiThUwhRXn0S4nqvOk9BMkyrE+ISZAmqsdzEqNsQk8YMpui4nsq3CO8cjBJqdRvCHR34mqpQ4np+KdWK9ZMEnAxY5kp5FE2FtXCZTJ0k5HcY6cPJDT9U59EKgn8/P0TVENAWkIK4jCLVWJdKnKnVgbxCjiJ6XE0W8gp4luOpXTjBFJOV02q1wOokJ4HUnTpIKUAV0JCmEnpeicm8p2xrwK6WxApk4Y6QKZCXZknL1m1jmXBS4izRT6lSQ1icQKmUCSyli7Tuz1vcIInY+lrpCIIEAiITt+naEe7u7Pu7CIqTtaRCQIIKOZ1zyyMXd38QAPUCGHjpKDBS22IuxKSnCKQZ1cW5Yvek4G7iw4gkCISJzKIiBEFu7udPz6713CDDCBkMgzftkfx3b9nbMf9owpC0wABYQNOPFQh5dwAeQ5CCVpvgzAJSHVzgqEXNeev0PUiLIQM4Wj0+IgN/MzwmJ0JlpYYMkQ6gvlAA/TEDyewhnQcmDp/7zCBBAgaPQ0meTMLrG9lIMWmeHCGsrDC15b22NESm8Fp3SHjT045hYWTGe7YhBk4nlz/+rJMHsH/gAicbztR7x56dY0X2hhmzRX95O5HsNKC5jRfqPYmzBMw1JcRKeXpi0CbXyYhEIYAISTZDD15ccyWXFsWssLaD0sKCL9oH6zZuEy6yppVmJ/23e+Qmp3GITjhCVptlFKKFmbbP12fx9MC9t+IogW7e24ujC6hODUrFkx8PWdYKkvcWKjJxzG6Yv4+JcRAL9jI3YEcyMkx4Qk7AiDOnKVRELEZBgzSDkRiLbekyqoqxo9RMROkh0iJb1dRbqn1CNSSFtGjcRmlBdNlelBTMVpJLJlGmMyKAiJLkWKYdXZWEkSRU2fYYZXPjpcVz01kz7GujCVtzW1R6EnUV0bP3i7YXWRlEBdnHigkLqIGWCD/P4ZutRVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUpAgpuORtqS3JbOleFTkUTn6gIULYWKYjIdxsPES4AH/m0NFHmxSxbSs6k8m1iUIax+iNJvcDUtVeJRjxU81BaoVbGg0mhoBaccBtaIUCcCTUbldccbt6u8FhJRZOeCkAqWtjGZnpZaAqjCWR88KQIECivUNhmNCMKSUoIVIJUJ/52cApNEbiE5OhDjNjCEzM95UjCzp2M/O54YyEzjFDzP/8rnWfO0vkhTZUIYy3TdAA9okgqVq2XPXYsNsFG2G2ET4sKeLCml2a2iyiyzf/3ONNGioUKLCmt/9yhTS//7mllFHX//JNtsN//nGnfeUUMGzW//80o2x+5TTiRQ7//uWOQCRbUlckUTcn/Ltmq2KWEZ+V1qAq5mLD/+rJMbTONAAJ1FMToIxh4Yyw4jRgjy0ocAQeghGupkiBh9JMOVZifSI1JUJR2oVBSUnX1pWhmgERDcOQDylQr6nll6cWA8ljXbTKyThl59iFD7ytuhMKROpF0/n2fl7l2nI5d+PtUzTZbvXRN9+Y+Y/3zKigaQQknK3XqszIcmcQDGGEFF4MgxB7vTEHIRz0zEIcgo8nsR3ISm2XE7bEC0/ZSBiEYemYhkEMPJ6Yh4QknsREkMvv4lOzMJ0q2QjtBZPTEGMjD04htIKPvsQwhnc+iGaYEGhexEPGPrPZSsswYLTZzEzEHs/SCEREk1xGQgjHgGBE/yJEcpxyWySSNzXqDMoMrbWYseuDKFw6+GyU4uZXTgPC/Y/frnTjBYYzgIVkWY77SArwqKHcdQ93ZBsqghbIe5xj09wa/ATFNd6vbVSERkzdPKVzIjha0yWmVTfW5DGpIk/Mx3tGESuo2etg5ktUTkY5I0GGIAEpNSG34aZYlai0a1JjLH7YMth2qWJotBd09oRG8DulemGUVITjQBDoRaupIULpAa4wFRJlYuwYKPCgEgSGaSsKkS+6ElXMEInNXXbJnhdcs6rYhUlSsAmcX9UMVaWeTLEgo9MzYIWaLAS6S0YEaqW9EZAhy+UxUvmhlqUBrZC4SSSeqKLlPuCBqIAkCnMghYMGtcwBXI1dppe5TctCgQW4j8hNU0L5JaroR+WBc6KuUz1XL1LDLqYymNA11SlWFG5PqGbqaSogoFVqxraqynIICzdQWkZC0wtky9TWkZkw8siuRBafuQC4tWUv7BEHrtU6ViVteNriAIYCJFLrMvZAhUDVCzgL/+rJMOAf/gAQoX75owjKKcyz4bRkjeWv56tRs4TnBzzRgdDEORA1mNLUiBVEygAdf0cdsAFUgAQJ9TKaKDzhoSU6WwIBm/a6+qmS+y1qjzHmWpVLnQGo2roDQKkgmEIgBoBhclWGRKAw8hWFTYIiVIEh4QioVFwAkgJNIgVNZUQwIinJI5JsMGAmYMxtAwExhhVwomMzAQroaidugJM3DYUzAQEzHGZmZmZRJQCAgJq2uoUmb9hR/s2zMbCtvZmAgJeMx1VbUvZjZgICAj/Y9gJmZvUmbjRj+qv+wYCY6GAgIU3GZV2FMzH67alQwo+axoBVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAQIAABWl4DAwMDA3NEAwMDAwNzgABgYGBgbno4GBgYG56OHAwMW58dw4t3P3d3dz93dwN393d3c/OHAwMWc/Of/xERETiBAAAABCFAiIiJ/EREQviIiIXoiACIhaIiIiFxERET0CAAAACAQggCBz8Tg+D4e5WInSggooSOLEOl/8jJ0sInSysJHFiHSxTIr/KxE6PKwkcWIdLFMkef2ERpZWEjixDpYpkjy//mTyso44h0sVhhDpZn//LFHHEOlisMIFpZmR//Ypjo6WKKGEC0spkZp/YpmjpYrDCBaWViN0v8pmTpYo4hOgQyUSEk9ZPDqqoCAqzaqoCAgLNqqhQEBZuqqqrN1VAQEBZvVVVWb6qqrN9VVVm/VVUQnhCEIv//+zMql7MzKpfGZlVfjMyqvxmZVUvZmVVL2ZlVf9mCiQVg0DIKu/FgaesFQaVFVop5v/+rJMlOSpAAOiWTxQYh+AdI9FkAADAAyJWvehhH4BSQAhKBCNLVFGSxFphHhHwknEDyBhZniTPDOUycx+wMZpPTJ/JH6LO8sj4kn5HEunIvuj/qf+jC1IxYspoMn4kv+zPnI/Uj/qe3ZH/Zb69Pv61+TkFUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAgqRzTCgosiUkaoGwkmRgkWicics1RLSJiLEi0TqnJwlaLJOiWidpuU88BQUpbW5q2vlYds4dZErGotE7Zw2EnRZJ0TUTlkYJOi5Epc5Wmui1ai29tn9rROyqNUSeZNhJ5ZI3JytIwk6LonbOVpE8bSRaJ1zRqiT5/9dnjZqTSlz2SNh38qhAASLjloKZCLyaa60J5raDlrvQcdRaDagUZb9U6Q6KZZwug2Np8rct2y95dOQxCHIYfhuag8LwuMATEdlQeBlbFNJaaCRELH+YAmCw2FsBThq0HEY9yF8FwH+ny5qMetHCEF4XAh51i3knbILt5mWOwRGxQQS/lzNAggtgagQxUnXHYycCSA5CSQC2HQoEWDkJJIWwnBBEoSs+zTbjkFsMQlaDOQ6GlOMIk4h6XYIqvdE/BzixqMlYm5C1oL8TNRivgqwj4N9Dmg0D3Ms3xD0u2mm7/+rJMaEetDwAAAGkAAAAIh0z3Vxhm0AAAAaQAAAAkgztbXYebOFGZGNqVEhfEZ9vKH4JIGoIQoDkHGtogQgTBDBXAkAuBJzcPA/0UIQJoIYoTgH2XtgOQhBnj/XBc3cIFhe+yBDD09smFhCHjDyZNNiCEH0xBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQARo0BDMNHRUpEQqFAVLc5RyBIMYOCmYBQKZAg9MvkS9IQVo4GIEAgEKEDB90ObiDQwyQIDMCxbB4YSUqJmBJmPMoVnyZdZSSK68GVLkF2xQu034hCm6sxqBaxBous/QcguOuZWFeReIFHAjlVAYZDkw8UYVAp/LDr3LbJPJCoImTTboqxKpJ8qu7AKLJZ9A9IRXD+JQp7vurA7z5K7VVHRomJeBzGvMCVImCuwvfRNmTBbASBXUl+oPDyUCsKmTDnQZWX7YaraiNAS20UHnZKu1IsiFG2npeOC1AvwtJdjdYAV+osHQWEcklC1RG8cQVBJ8RAiCDAFzXXViclkCbiJyBjDU2Xll7bKQWBDANDzWc5zGCYjW2uKoJbLAI/F+G7qbOWlwtImM7jaIZMTUMasPEVXexD6CVxu+hquZW5V0sa2sdhsnhqGIZjrjrgh2bly8Ux45FYBjLbtq9MsmXoqQpkjeRRwYWw/u5eI6rbUy0dbLtUIKktGjo3Jp1b+e09Xa00+eko5UviTmRursosA4Rw2DVEnKWCjWamotGX/+rJMn//PjwAAAGkAAAAJbC9Wsm9YZgAAAaQAAAAiAi9gJMMO/apOSOeNo1zrw2OdZajgEWhaMyVvNVVP2JbLVufnXlNR2eNmWW2bJqtbZq0Zx5rs6AVsozn2YqWJHpP/s/uy/rq2sYUuFVLBhPTZBWKIUkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrgApAnrLri6iHJnEHggWFlIZZMve/jD7u9MUffbTMv5bZnMkm0Y8ST0ydy5pA/XohJCT7ZCb/whQNw4GYAKHOgiIX1wQhEQGLBCPSi4ThAY4tKfxMAr+hPJuaJQMwMWEEKHNC08nNCYAUDNBFPzkSTlp/wmPqA5CKBBVVdOlJJoLd4ynyZUDA2gQ1TBQ4gMUPWbAMdYIHJRyX667cHXlqYqN0w/K5mJDBUIE+nSlccQHImxRpSj6wikmsuZ+FOBlHsOpWtqEqVQ2aj7LCaS5aCckiKtDHJjJ4P8ZqoJifkMgxyrsvBNzrQhPr0hNgcqSUxkuAMIYY6Xp/GkTMmzgu0qoiel0GMSFpSBfwrSRCxDlVilenaTgaw/U8jhbRXiRLuCfhplsOtOF1PlQpwxy8FeP1dI4hQ+UQonKKXU8BvI0fR5KUtqUIMzq2yuP3/+rJM2XumjwAAAGkAAAAId+s3uhhD8EAAAaQAAAAkijyc2YebPT+O1YL8haoGkLGHKlRbpDLEBPJRpSGSoV0cx6xTsLYWM1GlPFtH0Zp4khJwXs1CXHqbRYi2pFCedszgpABFzMgx6HhaLxpwlbo6YHR8lUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVGSRpT5OTULFxQbFhMShYZOhQVoDZlEQlg8RoEZIfJRUITqi6iMwaQlki5QugRnmlU4JqIzxpCRHG3NIVlVip0kFxLJVZUscRsNMolSxUpnCtE8tXJUyEvcjdtVpKhrI3bb1q1yGC7ioxOkydhtYrPTIqpUiGkXrEZ61BrTLC+J6rOMpk6x+K0zm99VzKGsVqT49MhxFRwjP/+rJsyNJMD/WuZbZRLE+6L+AHegQiAQAAAaQAAAAgAAA0gAAABAfMoiERAqHyAnPGiUiEI0HiMkbc0hIip1A27QYlDFBQlT1KSwJB40sUah4q2aAopmh6ha/1t6kPrbrFP8U/gIXZMhIVFZn//6hfizNQukxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+rJsOxMAD/AAAGkAAAAIAAANIAAAAQAAAaQAAAAgAAA0gAAABExBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=\"","export default \"data:audio/mpeg;base64,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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=\"","export default \"data:audio/mpeg;base64,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\"","import microphoneIcon from \"./assets/icons/microphone.svg?inline\";\r\nimport microphoneIconRaw from \"./assets/icons/microphone.svg?raw\";\r\nimport restartIcon from \"./assets/icons/restart.svg?inline\";\r\nimport restartIconRaw from \"./assets/icons/restart.svg?raw\";\r\nimport closeIcon from \"./assets/icons/close.svg?inline\";\r\nimport closeIconRaw from \"./assets/icons/close.svg?raw\";\r\nimport stopIcon from \"./assets/icons/stop.svg?inline\";\r\nimport stopIconRaw from \"./assets/icons/stop.svg?raw\";\r\nimport bulutLogo from \"./assets/icons/bulut_logo.svg\";\r\nimport bulutLogoRaw from \"./assets/icons/bulut_logo.svg?raw\";\r\nimport sentSfx from \"./assets/sfx/sent.mp3\";\r\nimport thinkingSfx from \"./assets/sfx/thinking.mp3\";\r\nimport toolCallSfx from \"./assets/sfx/tool_call.mp3\";\r\nimport completedSfx from \"./assets/sfx/completed.mp3\";\r\n\r\nexport const microphoneIconUrl = microphoneIcon;\r\nexport const microphoneIconContent = microphoneIconRaw;\r\nexport const restartIconUrl = restartIcon;\r\nexport const restartIconContent = restartIconRaw;\r\nexport const closeIconUrl = closeIcon;\r\nexport const closeIconContent = closeIconRaw;\r\nexport const stopIconUrl = stopIcon;\r\nexport const stopIconContent = stopIconRaw;\r\nexport const logoUrl = bulutLogo;\r\nexport const logoContent = bulutLogoRaw;\r\nexport const sentSfxUrl = sentSfx;\r\nexport const thinkingSfxUrl = thinkingSfx;\r\nexport const toolCallSfxUrl = toolCallSfx;\r\nexport const completedSfxUrl = completedSfx;\r\n","\r\nimport type { CSSProperties, JSX } from \"preact\";\r\nimport { useMemo } from \"preact/hooks\";\r\n\r\nexport type SvgIconProps = Omit<JSX.IntrinsicElements[\"svg\"], \"style\"> & {\r\n src: string;\r\n title?: string;\r\n /**\r\n * If true, replaces fill and stroke attributes with \"currentColor\" in the inner SVG content.\r\n * Default: true\r\n */\r\n stripColors?: boolean;\r\n style?: CSSProperties;\r\n // Explicitly add common props to ensure destructuring works smoothly\r\n className?: string;\r\n fill?: string;\r\n stroke?: string;\r\n strokeWidth?: string | number;\r\n width?: string | number;\r\n height?: string | number;\r\n};\r\n\r\nexport function SvgIcon({\r\n src,\r\n width,\r\n height,\r\n title,\r\n stripColors = true,\r\n className,\r\n style,\r\n fill,\r\n stroke,\r\n strokeWidth,\r\n ...props\r\n}: SvgIconProps) {\r\n const { viewBox, content } = useMemo(() => {\r\n if (!src) return { viewBox: \"0 0 24 24\", content: \"\" };\r\n\r\n const trimmedSrc = src.trim();\r\n // Extract viewBox\r\n const viewBoxMatch = trimmedSrc.match(/viewBox=\"([^\"]*)\"/);\r\n const viewBox = viewBoxMatch ? viewBoxMatch[1] : \"0 0 24 24\";\r\n\r\n // Extract inner content by removing the outer <svg> wrapper\r\n // We remove the opening <svg ...> tag and the closing </svg> tag only.\r\n let content = trimmedSrc.replace(/^<svg[^>]*>/i, \"\").replace(/<\\/svg>\\s*$/i, \"\");\r\n\r\n return { viewBox, content };\r\n }, [src]);\r\n\r\n const cleanContent = useMemo(() => {\r\n if (!content) return \"\";\r\n let nextContent = content;\r\n\r\n if (stripColors) {\r\n // Force inner nodes to use props instead of hardcoded SVG values.\r\n nextContent = nextContent\r\n .replace(/fill=\"[^\"]*\"/gi, `fill=\"${fill}\"`)\r\n .replace(/stroke=\"[^\"]*\"/gi, `stroke=\"${stroke}\"`);\r\n }\r\n\r\n if (strokeWidth !== undefined) {\r\n const strokeWidthValue = String(strokeWidth);\r\n nextContent = /stroke-width=\"[^\"]*\"/i.test(nextContent)\r\n ? nextContent.replace(/stroke-width=\"[^\"]*\"/gi, `stroke-width=\"${strokeWidthValue}\"`)\r\n : nextContent.replace(\r\n /<(path|circle|ellipse|line|polyline|polygon|rect)\\b/gi,\r\n `<$1 stroke-width=\"${strokeWidthValue}\"`,\r\n );\r\n }\r\n\r\n return nextContent;\r\n }, [content, stripColors, fill, stroke, strokeWidth]);\r\n\r\n return (\r\n <svg\r\n viewBox={viewBox}\r\n width={width}\r\n height={height}\r\n className={className}\r\n style={{\r\n display: \"inline-block\",\r\n verticalAlign: \"middle\",\r\n flexShrink: 0,\r\n ...style,\r\n }}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n dangerouslySetInnerHTML={{ __html: cleanContent }}\r\n >\r\n {title && <title>{title}</title>}\r\n </svg>\r\n );\r\n}\r\n","import {\r\n BUTTON_SIZE,\r\n POSITION_BOTTOM,\r\n POSITION_RIGHT,\r\n COLORS,\r\n SHADOW,\r\n TRANSITIONS,\r\n BORDER_RADIUS,\r\n getContrastIconFilter,\r\n} from \"../styles/constants\";\r\nimport { closeIconContent, microphoneIconContent, stopIconContent } from \"../assets\";\r\nimport { SvgIcon } from \"./SvgIcon\";\r\n\r\ninterface ChatButtonProps {\r\n onMicClick: () => void;\r\n onCancelRecording: () => void;\r\n onStopTask: () => void;\r\n isRecording: boolean;\r\n isBusy: boolean;\r\n showBubble: boolean;\r\n onBubbleClick: () => void;\r\n previewMessage: string | null;\r\n onPreviewClick: () => void;\r\n onPreviewClose: () => void;\r\n}\r\n\r\nexport const ChatButton = ({\r\n onMicClick,\r\n onCancelRecording,\r\n onStopTask,\r\n isRecording,\r\n isBusy,\r\n showBubble,\r\n onBubbleClick,\r\n previewMessage,\r\n onPreviewClick,\r\n onPreviewClose,\r\n}: ChatButtonProps) => {\r\n const bgColor = COLORS.primary;\r\n\r\n const containerStyle: { [key: string]: string } = {\r\n position: \"fixed\",\r\n right: `${POSITION_RIGHT}px`,\r\n bottom: `${POSITION_BOTTOM}px`,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"flex-end\",\r\n gap: \"8px\",\r\n zIndex: \"9999\",\r\n fontFamily: \"\\\"Geist\\\", sans-serif\",\r\n };\r\n\r\n const controlsRowStyle: { [key: string]: string } = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"10px\",\r\n };\r\n\r\n const buttonStyle: { [key: string]: string } = {\r\n width: `${BUTTON_SIZE}px`,\r\n height: `${BUTTON_SIZE}px`,\r\n minWidth: `${BUTTON_SIZE}px`,\r\n minHeight: `${BUTTON_SIZE}px`,\r\n borderRadius: BORDER_RADIUS.button,\r\n backgroundColor: bgColor,\r\n color: \"#ffffff\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n transition: `background-color ${TRANSITIONS.fast}, transform ${TRANSITIONS.fast}`,\r\n position: \"relative\",\r\n flexShrink: \"0\",\r\n };\r\n\r\n const iconStyle: { [key: string]: string } = {\r\n width: \"24px\",\r\n height: \"24px\",\r\n display: \"block\",\r\n filter: getContrastIconFilter(bgColor),\r\n };\r\n\r\n const showStopButton = isBusy && !isRecording;\r\n\r\n const handleClick = () => {\r\n if (showStopButton) {\r\n onStopTask();\r\n } else if (isRecording) {\r\n onCancelRecording();\r\n } else {\r\n onMicClick();\r\n }\r\n };\r\n\r\n // Shared close button style\r\n const closeBtnStyle: { [key: string]: string } = {\r\n position: \"absolute\",\r\n top: \"6px\",\r\n right: \"6px\",\r\n width: \"20px\",\r\n height: \"20px\",\r\n borderRadius: \"50%\",\r\n border: \"none\",\r\n background: \"transparent\",\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n fontSize: \"12px\",\r\n lineHeight: \"1\",\r\n color: COLORS.text,\r\n padding: \"0\",\r\n };\r\n\r\n const renderPopup = (\r\n content: preact.ComponentChildren,\r\n onClick: () => void,\r\n onClose: (() => void) | null,\r\n extraClass: string,\r\n scrollable: boolean,\r\n ) => (\r\n <div\r\n className={`bulut-popup ${extraClass}`}\r\n style={{ cursor: \"pointer\" }}\r\n onClick={onClick}\r\n >\r\n {/* Close button */}\r\n {onClose && (\r\n <button\r\n type=\"button\"\r\n style={closeBtnStyle}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onClose();\r\n }}\r\n aria-label=\"Kapat\"\r\n >\r\n <SvgIcon\r\n strokeWidth={3}\r\n src={closeIconContent}\r\n stroke={\"currentColor\"}\r\n height={14}\r\n />\r\n </button>\r\n )}\r\n\r\n {/* Text content */}\r\n <div\r\n style={{\r\n paddingRight: onClose ? \"22px\" : \"0\",\r\n wordBreak: \"break-word\",\r\n ...(scrollable ? { maxHeight: \"96px\", overflowY: \"auto\" } : {}),\r\n }}\r\n >\r\n {content}\r\n </div>\r\n </div>\r\n );\r\n\r\n return (\r\n <>\r\n <style>{`\r\n @import url('https://fonts.googleapis.com/css2?family=Geist:wght@100..900&display=swap');\r\n\r\n .bulut-popup {\r\n background: #ffffff;\r\n color: ${COLORS.text};\r\n padding: 10px 14px;\r\n border-radius: 12px;\r\n font-size: 14px;\r\n line-height: 1.4;\r\n position: relative;\r\n overflow: visible;\r\n box-shadow: ${SHADOW};\r\n }\r\n .bulut-popup-bubble {\r\n animation: bulut-bubbleIn 400ms ease-out;\r\n }\r\n .bulut-popup-preview {\r\n animation: bulut-popIn ${TRANSITIONS.medium};\r\n }\r\n\r\n /* Desktop: limit width, lean to right */\r\n .bulut-popup {\r\n max-width: 320px;\r\n }\r\n\r\n /* Mobile: full-width layout with popup filling remaining space */\r\n @media (max-width: 600px) {\r\n .bulut-fab-container:has(.bulut-popup) {\r\n left: 16px !important;\r\n right: 16px !important;\r\n }\r\n .bulut-fab-container:has(.bulut-popup) .bulut-controls-row {\r\n width: 100%;\r\n }\r\n .bulut-popup {\r\n flex: 1;\r\n min-width: 0;\r\n max-width: none;\r\n }\r\n }\r\n\r\n @keyframes bulut-popIn {\r\n from { opacity: 0; transform: translateX(10px); }\r\n to { opacity: 1; transform: translateX(0); }\r\n }\r\n @keyframes bulut-bubbleIn {\r\n 0% { opacity: 0; transform: translateX(10px) scale(0.95); }\r\n 60% { opacity: 1; transform: translateX(-4px) scale(1.02); }\r\n 100% { opacity: 1; transform: translateX(0) scale(1); }\r\n }\r\n @keyframes bulut-badgeIn {\r\n from { opacity: 0; transform: translateY(-4px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `}</style>\r\n\r\n <div className=\"bulut-fab-container\" style={containerStyle}>\r\n <div className=\"bulut-controls-row\" style={controlsRowStyle}>\r\n {/* Welcome bubble */}\r\n {showBubble &&\r\n !isRecording &&\r\n !previewMessage &&\r\n renderPopup(\r\n \"Destek lazımsa hemen konuşmaya başlayabiliriz!\",\r\n onBubbleClick,\r\n null,\r\n \"bulut-popup-bubble\",\r\n false,\r\n )}\r\n\r\n {/* New-message preview */}\r\n {previewMessage &&\r\n renderPopup(\r\n previewMessage,\r\n onPreviewClick,\r\n onPreviewClose,\r\n \"bulut-popup-preview\",\r\n true,\r\n )}\r\n\r\n {/* Main mic / cancel button */}\r\n <button\r\n style={buttonStyle}\r\n onClick={handleClick}\r\n onMouseEnter={(e) => {\r\n Object.assign(e.currentTarget.style, {\r\n backgroundColor: COLORS.primaryHover,\r\n transform: \"scale(1.05)\",\r\n });\r\n }}\r\n onMouseLeave={(e) => {\r\n Object.assign(e.currentTarget.style, {\r\n transform: \"scale(1)\",\r\n });\r\n }}\r\n aria-label={showStopButton ? \"Görevi durdur\" : isRecording ? \"Kaydı iptal et\" : \"Konuşmaya başla\"}\r\n >\r\n <SvgIcon\r\n src={showStopButton ? stopIconContent : isRecording ? closeIconContent : microphoneIconContent}\r\n aria-hidden=\"true\"\r\n fill-opacity={0}\r\n stroke={\"currentColor\"}\r\n style={iconStyle}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n","/**\r\n * Tunable parameters for page context collection.\r\n *\r\n * Adjust these values to control how much information the agent receives\r\n * about the current page. Lower values reduce token usage (and latency);\r\n * higher values give the LLM more detail to work with.\r\n */\r\n\r\n/** Maximum number of links to include in the context. */\r\nexport const MAX_LINKS = 20;\r\n\r\n/** Maximum number of interactable elements to include. */\r\nexport const MAX_INTERACTABLES = 24;\r\n\r\n/** Maximum number of headings (h1-h3) to include. */\r\nexport const MAX_HEADINGS = 10;\r\n\r\n/** Maximum number of main-content text snippets. */\r\nexport const MAX_TEXT_SNIPPETS = 4;\r\n\r\n/** Maximum character length for the outer-HTML skeleton digest. */\r\nexport const MAX_OUTER_HTML_DIGEST = 760;\r\n\r\n/** Maximum number of pages kept in the in-memory context cache. */\r\nexport const MAX_CACHED_PAGES = 20;\r\n\r\n/** Maximum number of DOM elements scanned per page. */\r\nexport const MAX_PAGE_SCAN_ELEMENTS = 2000;\r\n\r\n/** Maximum number of event-handler hints collected per element. */\r\nexport const MAX_EVENT_HINTS_PER_ELEMENT = 4;\r\n\r\n/** Maximum top-level DOM branches sampled for the branch digest. */\r\nexport const MAX_BRANCH_SAMPLES = 4;\r\n\r\n/** Maximum tree depth for each branch digest sample. */\r\nexport const MAX_BRANCH_DEPTH = 2;\r\n\r\n/** Maximum character length for the full context summary. */\r\nexport const MAX_CONTEXT_SUMMARY_CHARS = 3400;\r\n\r\n/** Maximum character length for context summary + recent page history. */\r\nexport const MAX_CONTEXT_WITH_HISTORY_CHARS = 4200;\r\n","export interface PageContext {\r\n links: string[];\r\n interactables: string[];\r\n summary: string;\r\n}\r\n\r\nexport interface CachedPageContextEntry {\r\n url: string;\r\n summary: string;\r\n links: string[];\r\n interactables: string[];\r\n capturedAt: number;\r\n version: number;\r\n}\r\n\r\nexport interface PageContextSummaryInput {\r\n url: string;\r\n title: string;\r\n lang: string;\r\n headings: string[];\r\n landmarks: string[];\r\n links: string[];\r\n interactables: string[];\r\n interactionSignals: string[];\r\n pageBlueprint: string[];\r\n textSnippets: string[];\r\n outerHtmlDigest: string;\r\n}\r\n\r\ninterface InteractableCandidate {\r\n line: string;\r\n score: number;\r\n order: number;\r\n}\r\n\r\ninterface PageSignalSnapshot {\r\n links: string[];\r\n interactables: string[];\r\n interactionSignals: string[];\r\n pageBlueprint: string[];\r\n}\r\n\r\nimport {\r\n MAX_LINKS,\r\n MAX_INTERACTABLES,\r\n MAX_HEADINGS,\r\n MAX_TEXT_SNIPPETS,\r\n MAX_OUTER_HTML_DIGEST,\r\n MAX_CACHED_PAGES,\r\n MAX_PAGE_SCAN_ELEMENTS,\r\n MAX_EVENT_HINTS_PER_ELEMENT,\r\n MAX_BRANCH_SAMPLES,\r\n MAX_BRANCH_DEPTH,\r\n MAX_CONTEXT_SUMMARY_CHARS,\r\n MAX_CONTEXT_WITH_HISTORY_CHARS,\r\n} from \"./contextConfig\";\r\n\r\nexport { MAX_CONTEXT_SUMMARY_CHARS };\r\n\r\nexport const PAGE_CONTEXT_CACHE_VERSION = 2;\r\nexport const PAGE_CONTEXT_CACHE_KEY = \"auticbot_page_context_cache_v2\";\r\n\r\nconst NON_CONTENT_TAGS = new Set([\r\n \"script\",\r\n \"style\",\r\n \"noscript\",\r\n \"template\",\r\n \"link\",\r\n \"meta\",\r\n]);\r\n\r\nconst NATIVE_INTERACTIVE_TAGS = new Set([\r\n \"a\",\r\n \"button\",\r\n \"input\",\r\n \"textarea\",\r\n \"select\",\r\n \"summary\",\r\n \"details\",\r\n \"option\",\r\n]);\r\n\r\nconst INTERACTIVE_ROLES = new Set([\r\n \"button\",\r\n \"link\",\r\n \"tab\",\r\n \"menuitem\",\r\n \"option\",\r\n \"checkbox\",\r\n \"radio\",\r\n \"switch\",\r\n \"combobox\",\r\n \"textbox\",\r\n \"searchbox\",\r\n \"slider\",\r\n \"spinbutton\",\r\n \"treeitem\",\r\n]);\r\n\r\nconst TRACKED_DISPLAY_VALUES = new Set([\r\n \"block\",\r\n \"inline\",\r\n \"inline-block\",\r\n \"flex\",\r\n \"inline-flex\",\r\n \"grid\",\r\n \"inline-grid\",\r\n]);\r\n\r\nconst TRACKED_POSITION_VALUES = new Set([\r\n \"relative\",\r\n \"absolute\",\r\n \"fixed\",\r\n \"sticky\",\r\n]);\r\n\r\nconst EVENT_HINT_NAMES = [\r\n \"click\",\r\n \"dblclick\",\r\n \"mousedown\",\r\n \"mouseup\",\r\n \"pointerdown\",\r\n \"pointerup\",\r\n \"touchstart\",\r\n \"touchend\",\r\n \"keydown\",\r\n \"keyup\",\r\n \"keypress\",\r\n \"input\",\r\n \"change\",\r\n \"submit\",\r\n \"focus\",\r\n \"blur\",\r\n];\r\n\r\nconst ARIA_INTERACTION_ATTRS = [\r\n \"aria-controls\",\r\n \"aria-expanded\",\r\n \"aria-haspopup\",\r\n \"aria-pressed\",\r\n \"aria-selected\",\r\n];\r\n\r\nconst DATA_INTERACTION_PATTERN =\r\n /(action|click|press|toggle|target|trigger|nav|open|close|menu|modal|command|submit)/i;\r\n\r\nconst pageContextCache = new Map<string, CachedPageContextEntry>();\r\nlet cacheHydrated = false;\r\n\r\nconst normalizeWhitespace = (value: string): string =>\r\n value.replace(/\\s+/g, \" \").trim();\r\n\r\nconst truncate = (value: string, maxChars: number): string => {\r\n if (value.length <= maxChars) {\r\n return value;\r\n }\r\n\r\n const suffix = \"\\n...[truncated]\";\r\n return `${value.slice(0, Math.max(0, maxChars - suffix.length))}${suffix}`;\r\n};\r\n\r\nconst truncateInline = (value: string, maxChars: number): string => {\r\n if (value.length <= maxChars) {\r\n return value;\r\n }\r\n return `${value.slice(0, Math.max(0, maxChars - 3))}...`;\r\n};\r\n\r\nconst canonicalUrl = (rawUrl: string): string => {\r\n try {\r\n return new URL(rawUrl, rawUrl).href;\r\n } catch {\r\n return rawUrl;\r\n }\r\n};\r\n\r\nconst isCacheEntry = (value: unknown): value is CachedPageContextEntry => {\r\n if (typeof value !== \"object\" || value === null) {\r\n return false;\r\n }\r\n\r\n const obj = value as Record<string, unknown>;\r\n return (\r\n typeof obj.url === \"string\" &&\r\n typeof obj.summary === \"string\" &&\r\n Array.isArray(obj.links) &&\r\n Array.isArray(obj.interactables) &&\r\n typeof obj.capturedAt === \"number\" &&\r\n typeof obj.version === \"number\"\r\n );\r\n};\r\n\r\nconst bumpCount = (map: Map<string, number>, key: string): void => {\r\n if (!key) {\r\n return;\r\n }\r\n map.set(key, (map.get(key) ?? 0) + 1);\r\n};\r\n\r\nconst formatTopCounts = (map: Map<string, number>, maxItems: number): string => {\r\n if (map.size === 0) {\r\n return \"none\";\r\n }\r\n\r\n return Array.from(map.entries())\r\n .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))\r\n .slice(0, maxItems)\r\n .map(([name, count]) => `${name}*${count}`)\r\n .join(\", \");\r\n};\r\n\r\nconst parseTabIndex = (value: string | null): number | null => {\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n const parsed = Number.parseInt(value, 10);\r\n return Number.isNaN(parsed) ? null : parsed;\r\n};\r\n\r\nconst compactToken = (value: string, maxChars: number = 18): string => {\r\n const compact = value.replace(/\\s+/g, \"-\").replace(/[^a-zA-Z0-9_-]/g, \"\");\r\n return compact ? truncateInline(compact, maxChars) : \"\";\r\n};\r\n\r\nconst getElementDepth = (element: Element): number => {\r\n let depth = 0;\r\n let cursor: Element | null = element;\r\n while (cursor?.parentElement) {\r\n depth += 1;\r\n cursor = cursor.parentElement;\r\n if (cursor === document.body) {\r\n break;\r\n }\r\n }\r\n return depth;\r\n};\r\n\r\nconst getPrimaryRole = (element: Element): string => {\r\n const rawRole = normalizeWhitespace(element.getAttribute(\"role\") || \"\")\r\n .toLowerCase()\r\n .split(\" \")[0];\r\n return rawRole || \"\";\r\n};\r\n\r\nconst hydrateCacheFromStorage = (): void => {\r\n if (cacheHydrated || typeof sessionStorage === \"undefined\") {\r\n return;\r\n }\r\n\r\n cacheHydrated = true;\r\n\r\n try {\r\n const raw = sessionStorage.getItem(PAGE_CONTEXT_CACHE_KEY);\r\n if (!raw) {\r\n return;\r\n }\r\n\r\n const parsed = JSON.parse(raw);\r\n if (!Array.isArray(parsed)) {\r\n return;\r\n }\r\n\r\n for (const value of parsed) {\r\n if (!isCacheEntry(value)) {\r\n continue;\r\n }\r\n if (value.version !== PAGE_CONTEXT_CACHE_VERSION) {\r\n continue;\r\n }\r\n pageContextCache.set(value.url, value);\r\n }\r\n if (pageContextCache.size > 0) {\r\n console.info(\r\n `[Autic] context cache restored entries=${pageContextCache.size}`,\r\n );\r\n }\r\n } catch (error) {\r\n console.warn(\"[Autic] context cache restore failed\", error);\r\n }\r\n};\r\n\r\nconst persistCacheToStorage = (): void => {\r\n if (typeof sessionStorage === \"undefined\") {\r\n return;\r\n }\r\n\r\n try {\r\n const serialized = JSON.stringify(\r\n Array.from(pageContextCache.values()).sort(\r\n (a, b) => a.capturedAt - b.capturedAt,\r\n ),\r\n );\r\n sessionStorage.setItem(PAGE_CONTEXT_CACHE_KEY, serialized);\r\n } catch (error) {\r\n console.warn(\"[Autic] context cache persist failed\", error);\r\n }\r\n};\r\n\r\nconst pruneOldestCacheEntries = (): void => {\r\n if (pageContextCache.size <= MAX_CACHED_PAGES) {\r\n return;\r\n }\r\n\r\n const sorted = Array.from(pageContextCache.values()).sort(\r\n (a, b) => a.capturedAt - b.capturedAt,\r\n );\r\n const overflow = sorted.length - MAX_CACHED_PAGES;\r\n for (let i = 0; i < overflow; i += 1) {\r\n pageContextCache.delete(sorted[i].url);\r\n }\r\n};\r\n\r\nconst buildSummaryWithHistory = (\r\n current: CachedPageContextEntry,\r\n): string => {\r\n const recentPages = Array.from(pageContextCache.values())\r\n .filter((entry) => entry.url !== current.url)\r\n .sort((a, b) => b.capturedAt - a.capturedAt)\r\n .slice(0, 3);\r\n\r\n if (recentPages.length === 0) {\r\n return current.summary;\r\n }\r\n\r\n const historySection = [\r\n \"Recent Page Memory:\",\r\n ...recentPages.map((entry) => {\r\n const compactSummary = normalizeWhitespace(entry.summary).slice(0, 180);\r\n return `- ${entry.url} :: ${compactSummary}`;\r\n }),\r\n ].join(\"\\n\");\r\n\r\n return truncate(\r\n `${current.summary}\\n\\n${historySection}`,\r\n MAX_CONTEXT_WITH_HISTORY_CHARS,\r\n );\r\n};\r\n\r\nconst isVisible = (element: Element): boolean => {\r\n if (element.getAttribute(\"aria-hidden\") === \"true\") {\r\n return false;\r\n }\r\n\r\n if (element instanceof HTMLElement && element.hidden) {\r\n return false;\r\n }\r\n\r\n const style = window.getComputedStyle(element);\r\n if (style.display === \"none\" || style.visibility === \"hidden\") {\r\n return false;\r\n }\r\n\r\n const rect = element.getBoundingClientRect();\r\n return rect.width > 0 && rect.height > 0;\r\n};\r\n\r\nconst toAbsoluteUrl = (href: string): string => {\r\n try {\r\n return new URL(href, window.location.href).href;\r\n } catch {\r\n return href;\r\n }\r\n};\r\n\r\nconst escapeCssValue = (value: string): string => {\r\n if (typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\") {\r\n return CSS.escape(value);\r\n }\r\n\r\n return value.replace(/([ #;&,.+*~':\"!^$\\[\\]()=>|\\/@])/g, \"\\\\$1\");\r\n};\r\n\r\nconst buildSelector = (element: Element): string => {\r\n const tag = element.tagName.toLowerCase();\r\n\r\n if (element.id) {\r\n return `#${escapeCssValue(element.id)}`;\r\n }\r\n\r\n const name = element.getAttribute(\"name\");\r\n if (name) {\r\n return `${tag}[name=\"${escapeCssValue(name)}\"]`;\r\n }\r\n\r\n const ariaLabel = element.getAttribute(\"aria-label\");\r\n if (ariaLabel) {\r\n return `${tag}[aria-label=\"${escapeCssValue(ariaLabel)}\"]`;\r\n }\r\n\r\n const classes = Array.from(element.classList)\r\n .filter(Boolean)\r\n .slice(0, 2)\r\n .map((className) => `.${escapeCssValue(className)}`)\r\n .join(\"\");\r\n if (classes) {\r\n return `${tag}${classes}`;\r\n }\r\n\r\n const parent = element.parentElement;\r\n if (!parent) {\r\n return tag;\r\n }\r\n\r\n const siblingsOfTag = Array.from(parent.children).filter(\r\n (sibling) => sibling.tagName === element.tagName,\r\n );\r\n const index = siblingsOfTag.indexOf(element) + 1;\r\n return `${tag}:nth-of-type(${index})`;\r\n};\r\n\r\nconst getElementLabel = (element: Element): string => {\r\n const text = normalizeWhitespace(\r\n (element instanceof HTMLElement ? element.innerText : element.textContent) ||\r\n \"\",\r\n );\r\n const ariaLabel = normalizeWhitespace(element.getAttribute(\"aria-label\") || \"\");\r\n const title = normalizeWhitespace(element.getAttribute(\"title\") || \"\");\r\n const placeholder = normalizeWhitespace(\r\n element.getAttribute(\"placeholder\") || \"\",\r\n );\r\n const name = normalizeWhitespace(element.getAttribute(\"name\") || \"\");\r\n const value =\r\n element instanceof HTMLInputElement ||\r\n element instanceof HTMLTextAreaElement ||\r\n element instanceof HTMLButtonElement\r\n ? normalizeWhitespace(element.value || \"\")\r\n : \"\";\r\n\r\n const classHint = Array.from(element.classList)\r\n .map((item) => compactToken(item, 16))\r\n .find(Boolean);\r\n const fallback =\r\n (element.id && `#${element.id}`) ||\r\n (classHint && `.${classHint}`) ||\r\n buildSelector(element);\r\n\r\n const label =\r\n text || ariaLabel || title || placeholder || value || name || fallback;\r\n\r\n if (element.tagName.toLowerCase() === \"input\") {\r\n const inputType = element.getAttribute(\"type\") || \"text\";\r\n return `${inputType} ${label || \"input\"}`;\r\n }\r\n\r\n return label || \"untitled\";\r\n};\r\n\r\nconst getEventHints = (element: Element): string[] => {\r\n const record = element as unknown as Record<string, unknown>;\r\n const eventHints: string[] = [];\r\n\r\n for (const eventName of EVENT_HINT_NAMES) {\r\n const handlerKey = `on${eventName}`;\r\n const hasInlineHandler = Boolean(element.getAttribute(handlerKey));\r\n const hasPropertyHandler = typeof record[handlerKey] === \"function\";\r\n\r\n if (!hasInlineHandler && !hasPropertyHandler) {\r\n continue;\r\n }\r\n\r\n eventHints.push(eventName);\r\n if (eventHints.length >= MAX_EVENT_HINTS_PER_ELEMENT) {\r\n break;\r\n }\r\n }\r\n\r\n return eventHints;\r\n};\r\n\r\nconst getAriaInteractionHints = (element: Element): string[] =>\r\n ARIA_INTERACTION_ATTRS.filter((attrName) => element.hasAttribute(attrName)).map(\r\n (attrName) => attrName.replace(\"aria-\", \"\"),\r\n );\r\n\r\nconst getDataInteractionHints = (element: Element): string[] =>\r\n element\r\n .getAttributeNames()\r\n .filter(\r\n (attrName) =>\r\n attrName.startsWith(\"data-\") && DATA_INTERACTION_PATTERN.test(attrName),\r\n )\r\n .slice(0, 2)\r\n .map((attrName) => attrName.replace(\"data-\", \"\"));\r\n\r\nconst getStyleHints = (style: CSSStyleDeclaration): string[] => {\r\n const styleHints: string[] = [];\r\n\r\n if (style.cursor === \"pointer\") {\r\n styleHints.push(\"cursor:pointer\");\r\n }\r\n\r\n if (\r\n style.display === \"flex\" ||\r\n style.display === \"grid\" ||\r\n style.display === \"inline-flex\" ||\r\n style.display === \"inline-grid\"\r\n ) {\r\n styleHints.push(`display:${style.display}`);\r\n }\r\n\r\n if (style.position === \"fixed\" || style.position === \"sticky\") {\r\n styleHints.push(`position:${style.position}`);\r\n }\r\n\r\n return styleHints.slice(0, 2);\r\n};\r\n\r\nconst buildBlueprintToken = (element: Element): string => {\r\n const tag = element.tagName.toLowerCase();\r\n const idToken = element.id ? `#${compactToken(element.id)}` : \"\";\r\n const classToken = Array.from(element.classList)\r\n .map((item) => compactToken(item, 16))\r\n .find(Boolean);\r\n\r\n return `${tag}${idToken}${classToken ? `.${classToken}` : \"\"}`;\r\n};\r\n\r\nconst buildBranchDigest = (element: Element, depth: number): string => {\r\n const token = buildBlueprintToken(element);\r\n if (depth <= 0) {\r\n return token;\r\n }\r\n\r\n const children = Array.from(element.children)\r\n .filter((child) => !NON_CONTENT_TAGS.has(child.tagName.toLowerCase()))\r\n .filter((child) => isVisible(child));\r\n if (children.length === 0) {\r\n return token;\r\n }\r\n\r\n const sampled = children\r\n .slice(0, 3)\r\n .map((child) => buildBranchDigest(child, depth - 1));\r\n const overflow =\r\n children.length > sampled.length ? `+${children.length - sampled.length}` : \"\";\r\n\r\n return `${token}>${sampled.join(\"+\")}${overflow}`;\r\n};\r\n\r\nconst collectDomBranchDigest = (): string[] => {\r\n const root = document.body ?? document.documentElement;\r\n const topLevelNodes = Array.from(root.children)\r\n .filter((child) => !NON_CONTENT_TAGS.has(child.tagName.toLowerCase()))\r\n .filter((child) => isVisible(child))\r\n .slice(0, MAX_BRANCH_SAMPLES);\r\n\r\n return topLevelNodes.map((child) =>\r\n truncateInline(buildBranchDigest(child, MAX_BRANCH_DEPTH), 140),\r\n );\r\n};\r\n\r\nconst formatSection = (title: string, lines: string[]): string => {\r\n if (lines.length === 0) {\r\n return `${title}:\\n- none`;\r\n }\r\n\r\n return `${title}:\\n${lines.join(\"\\n\")}`;\r\n};\r\n\r\nconst buildOuterHtmlDigest = (): string => {\r\n const raw = document.body?.outerHTML || document.documentElement.outerHTML;\r\n\r\n const withoutScripts = raw\r\n .replace(/<script[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<style[\\s\\S]*?<\\/style>/gi, \"\")\r\n .replace(/<noscript[\\s\\S]*?<\\/noscript>/gi, \"\")\r\n .replace(/<!--[\\s\\S]*?-->/g, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n\r\n const structural = withoutScripts\r\n .replace(/>[^<]*</g, \"><\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n\r\n return truncate(structural, MAX_OUTER_HTML_DIGEST);\r\n};\r\n\r\nconst collectTextSnippets = (): string[] => {\r\n const root =\r\n document.querySelector(\"main, article, [role='main']\") ?? document.body;\r\n const snippets: string[] = [];\r\n const seen = new Set<string>();\r\n\r\n const candidates = Array.from(root.querySelectorAll(\"p, li, h1, h2, h3\"));\r\n for (const node of candidates) {\r\n if (!isVisible(node)) {\r\n continue;\r\n }\r\n\r\n const text = normalizeWhitespace(node.textContent || \"\");\r\n if (!text || text.length < 20) {\r\n continue;\r\n }\r\n\r\n const compact = truncateInline(text, 180);\r\n if (seen.has(compact)) {\r\n continue;\r\n }\r\n\r\n seen.add(compact);\r\n snippets.push(`- ${compact}`);\r\n if (snippets.length >= MAX_TEXT_SNIPPETS) {\r\n break;\r\n }\r\n }\r\n\r\n return snippets;\r\n};\r\n\r\nconst collectLandmarkSnapshot = (): string[] => {\r\n const probes: Array<{ label: string; selector: string }> = [\r\n { label: \"main\", selector: \"main, [role='main']\" },\r\n { label: \"nav\", selector: \"nav, [role='navigation']\" },\r\n { label: \"section\", selector: \"section\" },\r\n { label: \"article\", selector: \"article\" },\r\n { label: \"form\", selector: \"form\" },\r\n { label: \"a\", selector: \"a\" },\r\n { label: \"button\", selector: \"button\" },\r\n { label: \"input\", selector: \"input\" },\r\n { label: \"role=button/link\", selector: \"[role='button'], [role='link']\" },\r\n { label: \"onclick attrs\", selector: \"[onclick]\" },\r\n {\r\n label: \"other event attrs\",\r\n selector:\r\n \"[onpointerdown], [onpointerup], [onkeydown], [onkeyup], [onchange], [onsubmit]\",\r\n },\r\n { label: \"tabindex\", selector: \"[tabindex]\" },\r\n { label: \"contenteditable\", selector: \"[contenteditable='true']\" },\r\n { label: \"inline cursor styles\", selector: \"[style*='cursor']\" },\r\n ];\r\n\r\n return probes.map(\r\n ({ label, selector }) => `- ${label}: ${document.querySelectorAll(selector).length}`,\r\n );\r\n};\r\n\r\nconst collectPageSignalSnapshot = (): PageSignalSnapshot => {\r\n const allElements = Array.from(document.querySelectorAll(\"*\"));\r\n const sampledElements = allElements.slice(0, MAX_PAGE_SCAN_ELEMENTS);\r\n\r\n const links: string[] = [];\r\n const linkSet = new Set<string>();\r\n const interactableCandidates = new Map<string, InteractableCandidate>();\r\n const tagCounts = new Map<string, number>();\r\n const roleCounts = new Map<string, number>();\r\n const eventCounts = new Map<string, number>();\r\n const displayCounts = new Map<string, number>();\r\n const positionCounts = new Map<string, number>();\r\n\r\n let visibleElements = 0;\r\n let maxDepth = 0;\r\n let semanticInteractables = 0;\r\n let nonSemanticInteractables = 0;\r\n let eventHintElements = 0;\r\n let tabStopElements = 0;\r\n let pointerCursorElements = 0;\r\n let dataHintElements = 0;\r\n let ariaHintElements = 0;\r\n let contentEditableElements = 0;\r\n\r\n for (let order = 0; order < sampledElements.length; order += 1) {\r\n const element = sampledElements[order];\r\n const tag = element.tagName.toLowerCase();\r\n\r\n if (NON_CONTENT_TAGS.has(tag)) {\r\n continue;\r\n }\r\n\r\n if (!isVisible(element)) {\r\n continue;\r\n }\r\n\r\n visibleElements += 1;\r\n bumpCount(tagCounts, tag);\r\n\r\n const role = getPrimaryRole(element);\r\n if (role) {\r\n bumpCount(roleCounts, role);\r\n }\r\n\r\n const depth = getElementDepth(element);\r\n if (depth > maxDepth) {\r\n maxDepth = depth;\r\n }\r\n\r\n const style = window.getComputedStyle(element);\r\n if (TRACKED_DISPLAY_VALUES.has(style.display)) {\r\n bumpCount(displayCounts, style.display);\r\n }\r\n if (TRACKED_POSITION_VALUES.has(style.position)) {\r\n bumpCount(positionCounts, style.position);\r\n }\r\n\r\n const eventHints = getEventHints(element);\r\n if (eventHints.length > 0) {\r\n eventHintElements += 1;\r\n for (const eventName of eventHints) {\r\n bumpCount(eventCounts, eventName);\r\n }\r\n }\r\n\r\n const tabIndex = parseTabIndex(element.getAttribute(\"tabindex\"));\r\n const hasTabStop = tabIndex !== null && tabIndex >= 0;\r\n if (hasTabStop) {\r\n tabStopElements += 1;\r\n }\r\n\r\n const hasPointerCursor = style.cursor === \"pointer\";\r\n if (hasPointerCursor) {\r\n pointerCursorElements += 1;\r\n }\r\n\r\n const dataHints = getDataInteractionHints(element);\r\n if (dataHints.length > 0) {\r\n dataHintElements += 1;\r\n }\r\n\r\n const ariaHints = getAriaInteractionHints(element);\r\n if (ariaHints.length > 0) {\r\n ariaHintElements += 1;\r\n }\r\n\r\n const isContentEditable = element.getAttribute(\"contenteditable\") === \"true\";\r\n if (isContentEditable) {\r\n contentEditableElements += 1;\r\n }\r\n\r\n const href = element.getAttribute(\"href\");\r\n const isNativeInteractive = NATIVE_INTERACTIVE_TAGS.has(tag) && (tag !== \"a\" || Boolean(href));\r\n const isRoleInteractive = INTERACTIVE_ROLES.has(role);\r\n const isDisabled =\r\n element.hasAttribute(\"disabled\") ||\r\n element.getAttribute(\"aria-disabled\") === \"true\";\r\n\r\n if (\r\n tag === \"a\" &&\r\n href &&\r\n !href.startsWith(\"#\") &&\r\n !href.startsWith(\"javascript:\")\r\n ) {\r\n const absoluteHref = toAbsoluteUrl(href);\r\n const label = getElementLabel(element) || absoluteHref;\r\n const line = `- ${truncateInline(label, 90)} -> ${truncateInline(absoluteHref, 140)}`;\r\n\r\n if (!linkSet.has(line)) {\r\n linkSet.add(line);\r\n links.push(line);\r\n if (links.length >= MAX_LINKS) {\r\n // Keep scanning other elements for page blueprint and interactables.\r\n }\r\n }\r\n }\r\n\r\n const hasInteractionSignals =\r\n isNativeInteractive ||\r\n isRoleInteractive ||\r\n isContentEditable ||\r\n eventHints.length > 0 ||\r\n hasTabStop ||\r\n hasPointerCursor ||\r\n dataHints.length > 0 ||\r\n ariaHints.length > 0;\r\n\r\n if (!hasInteractionSignals || isDisabled) {\r\n continue;\r\n }\r\n\r\n if (isNativeInteractive) {\r\n semanticInteractables += 1;\r\n } else {\r\n nonSemanticInteractables += 1;\r\n }\r\n\r\n const selector = buildSelector(element);\r\n const label = truncateInline(getElementLabel(element), 90);\r\n const styleHints = getStyleHints(style);\r\n const signalTokens: string[] = [];\r\n\r\n if (eventHints.length > 0) {\r\n signalTokens.push(`evt:${eventHints.join(\"|\")}`);\r\n }\r\n if (isRoleInteractive) {\r\n signalTokens.push(`role:${role}`);\r\n }\r\n if (hasTabStop) {\r\n signalTokens.push(`tab:${tabIndex}`);\r\n }\r\n if (dataHints.length > 0) {\r\n signalTokens.push(`data:${dataHints.join(\"|\")}`);\r\n }\r\n if (ariaHints.length > 0) {\r\n signalTokens.push(`aria:${ariaHints.join(\"|\")}`);\r\n }\r\n if (styleHints.length > 0) {\r\n signalTokens.push(`css:${styleHints.join(\"|\")}`);\r\n } else if (hasPointerCursor) {\r\n signalTokens.push(\"css:cursor:pointer\");\r\n }\r\n\r\n const signalBlock =\r\n signalTokens.length > 0 ? ` [${signalTokens.join(\"; \")}]` : \"\";\r\n const line = truncateInline(\r\n `- ${tag} ${selector}${signalBlock} (${label})`,\r\n 240,\r\n );\r\n\r\n const score =\r\n eventHints.length * 5 +\r\n (isNativeInteractive ? 5 : 0) +\r\n (isRoleInteractive ? 4 : 0) +\r\n (hasTabStop ? 2 : 0) +\r\n (hasPointerCursor ? 2 : 0) +\r\n (dataHints.length > 0 ? 2 : 0) +\r\n (ariaHints.length > 0 ? 1 : 0) +\r\n (isContentEditable ? 2 : 0);\r\n\r\n const existing = interactableCandidates.get(line);\r\n if (!existing || score > existing.score) {\r\n interactableCandidates.set(line, { line, score, order });\r\n }\r\n }\r\n\r\n const interactables = Array.from(interactableCandidates.values())\r\n .sort((a, b) => b.score - a.score || a.order - b.order)\r\n .slice(0, MAX_INTERACTABLES)\r\n .map((candidate) => candidate.line);\r\n\r\n const interactiveRoleCounts = new Map(\r\n Array.from(roleCounts.entries()).filter(([role]) =>\r\n INTERACTIVE_ROLES.has(role),\r\n ),\r\n );\r\n\r\n const interactionSignals = [\r\n `- coverage: semantic=${semanticInteractables}, non-semantic=${nonSemanticInteractables}, contenteditable=${contentEditableElements}`,\r\n `- listener hints: ${formatTopCounts(eventCounts, 8)}`,\r\n `- interaction cues: tabindex>=0=${tabStopElements}, pointer-cursor=${pointerCursorElements}, data-hints=${dataHintElements}, aria-hints=${ariaHintElements}`,\r\n `- role hints: ${formatTopCounts(interactiveRoleCounts, 8)}`,\r\n \"- listener scope: inline/on* handlers are detected directly; addEventListener handlers are inferred via cues.\",\r\n ].map((line) => truncateInline(line, 250));\r\n\r\n const branchDigest = collectDomBranchDigest();\r\n const pageBlueprint = [\r\n `- nodes: total=${allElements.length}, scanned=${sampledElements.length}, visible=${visibleElements}, max-depth=${maxDepth}${allElements.length > sampledElements.length ? \", sampling=on\" : \"\"}`,\r\n `- tag density: ${formatTopCounts(tagCounts, 10)}`,\r\n `- role density: ${formatTopCounts(roleCounts, 8)}`,\r\n `- layout density: display(${formatTopCounts(displayCounts, 6)}), position(${formatTopCounts(positionCounts, 4)})`,\r\n `- branch digest: ${branchDigest.length > 0 ? branchDigest.join(\" || \") : \"none\"}`,\r\n ].map((line) => truncateInline(line, 260));\r\n\r\n return {\r\n links: links.slice(0, MAX_LINKS),\r\n interactables,\r\n interactionSignals,\r\n pageBlueprint,\r\n };\r\n};\r\n\r\nexport const buildPageContextSummary = (\r\n input: PageContextSummaryInput,\r\n maxChars: number = MAX_CONTEXT_SUMMARY_CHARS,\r\n): string => {\r\n const sections = [\r\n formatSection(\"Meta\", [\r\n `- URL: ${input.url || \"unknown\"}`,\r\n `- Title: ${input.title || \"unknown\"}`,\r\n `- Lang: ${input.lang || \"unknown\"}`,\r\n ]),\r\n formatSection(\"Headings\", input.headings),\r\n formatSection(\"Landmark Snapshot\", input.landmarks),\r\n formatSection(\"Interaction Signals\", input.interactionSignals),\r\n formatSection(\"Compressed Page Blueprint\", input.pageBlueprint),\r\n formatSection(\"Top Links\", input.links),\r\n formatSection(\"Top Interactables\", input.interactables),\r\n formatSection(\"Main Content Snippets\", input.textSnippets),\r\n formatSection(\"OuterHTML Skeleton\", [\r\n `- ${input.outerHtmlDigest || \"unavailable\"}`,\r\n ]),\r\n ];\r\n\r\n return truncate(sections.join(\"\\n\\n\"), maxChars);\r\n};\r\n\r\nexport const clearPageContextCache = (): void => {\r\n pageContextCache.clear();\r\n cacheHydrated = false;\r\n if (typeof sessionStorage !== \"undefined\") {\r\n sessionStorage.removeItem(PAGE_CONTEXT_CACHE_KEY);\r\n }\r\n};\r\n\r\nexport const getCachedPageContexts = (): CachedPageContextEntry[] => {\r\n hydrateCacheFromStorage();\r\n return Array.from(pageContextCache.values()).sort(\r\n (a, b) => b.capturedAt - a.capturedAt,\r\n );\r\n};\r\n\r\nexport const getPageContext = (): PageContext => {\r\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\r\n return {\r\n links: [],\r\n interactables: [],\r\n summary: \"\",\r\n };\r\n }\r\n\r\n hydrateCacheFromStorage();\r\n const url = canonicalUrl(window.location.href);\r\n const cached = pageContextCache.get(url);\r\n if (cached) {\r\n console.info(`[Autic] context cache hit url=${url}`);\r\n return {\r\n links: cached.links,\r\n interactables: cached.interactables,\r\n summary: buildSummaryWithHistory(cached),\r\n };\r\n }\r\n\r\n console.info(`[Autic] context cache miss url=${url}`);\r\n\r\n const snapshot = collectPageSignalSnapshot();\r\n const headings = Array.from(document.querySelectorAll(\"h1, h2, h3\"))\r\n .filter((element) => isVisible(element))\r\n .map((element) =>\r\n `- ${truncateInline(normalizeWhitespace(element.textContent || \"\"), 120)}`,\r\n )\r\n .filter((line) => line !== \"- \")\r\n .slice(0, MAX_HEADINGS);\r\n\r\n const summary = buildPageContextSummary({\r\n url,\r\n title: document.title,\r\n lang: document.documentElement.lang,\r\n headings,\r\n landmarks: collectLandmarkSnapshot(),\r\n links: snapshot.links,\r\n interactables: snapshot.interactables,\r\n interactionSignals: snapshot.interactionSignals,\r\n pageBlueprint: snapshot.pageBlueprint,\r\n textSnippets: collectTextSnippets(),\r\n outerHtmlDigest: buildOuterHtmlDigest(),\r\n });\r\n\r\n const entry: CachedPageContextEntry = {\r\n url,\r\n summary,\r\n links: snapshot.links,\r\n interactables: snapshot.interactables,\r\n capturedAt: Date.now(),\r\n version: PAGE_CONTEXT_CACHE_VERSION,\r\n };\r\n\r\n pageContextCache.set(url, entry);\r\n pruneOldestCacheEntries();\r\n persistCacheToStorage();\r\n console.info(\r\n `[Autic] context cache stored url=${url} size=${pageContextCache.size}`,\r\n );\r\n\r\n return {\r\n links: entry.links,\r\n interactables: entry.interactables,\r\n summary: buildSummaryWithHistory(entry),\r\n };\r\n};\r\n","import { getPageContext } from \"./context\";\r\nimport { COLORS } from \"../styles/constants\";\r\n\r\nconst AGENT_CURSOR_ID = \"auticbot-agent-cursor\";\r\nconst CURSOR_STORAGE_KEY = \"auticbot_agent_cursor_state\";\r\nexport const CURSOR_MOVE_DURATION_MS = 900;\r\nexport const SCROLL_DURATION_MS = 900;\r\nconst CURSOR_EASING = \"cubic-bezier(0.4, 0, 0.2, 1)\";\r\nconst CURSOR_HOVER_RADIUS_PX = 14;\r\n\r\n// ── Pending Agent Resume State (survives page reloads) ──────────────\r\n\r\nconst RESUME_STORAGE_KEY = \"bulut_agent_resume\";\r\nconst RESUME_TTL_MS = 60_000; // 1 minute\r\n\r\nexport interface PendingAgentResume {\r\n sessionId: string;\r\n projectId: string;\r\n model: string;\r\n voice: string;\r\n accessibilityMode: boolean;\r\n pendingToolCalls: Array<{\r\n call_id: string;\r\n tool: string;\r\n args: Record<string, unknown>;\r\n }>;\r\n completedResults: Array<{ call_id: string; result: string }>;\r\n savedAt: number;\r\n}\r\n\r\nexport const savePendingAgentResume = (\r\n state: Omit<PendingAgentResume, \"savedAt\">,\r\n): void => {\r\n if (typeof localStorage === \"undefined\") return;\r\n try {\r\n localStorage.setItem(\r\n RESUME_STORAGE_KEY,\r\n JSON.stringify({ ...state, savedAt: Date.now() }),\r\n );\r\n } catch {\r\n // localStorage may be full or blocked\r\n }\r\n};\r\n\r\nexport const getPendingAgentResume = (): PendingAgentResume | null => {\r\n if (typeof localStorage === \"undefined\") return null;\r\n const raw = localStorage.getItem(RESUME_STORAGE_KEY);\r\n if (!raw) return null;\r\n try {\r\n const parsed = JSON.parse(raw) as PendingAgentResume;\r\n if (Date.now() - parsed.savedAt > RESUME_TTL_MS) {\r\n clearPendingAgentResume();\r\n return null;\r\n }\r\n return parsed;\r\n } catch {\r\n clearPendingAgentResume();\r\n return null;\r\n }\r\n};\r\n\r\nexport const clearPendingAgentResume = (): void => {\r\n if (typeof localStorage === \"undefined\") return;\r\n localStorage.removeItem(RESUME_STORAGE_KEY);\r\n};\r\n\r\ninterface PersistedCursorState {\r\n url: string;\r\n x: number;\r\n y: number;\r\n visible: boolean;\r\n}\r\n\r\ntype InteractAction = \"move\" | \"click\" | \"type\" | \"submit\";\r\n\r\ninterface InteractToolCall {\r\n tool: \"interact\";\r\n action: InteractAction;\r\n selector?: string;\r\n text?: string;\r\n x?: number;\r\n y?: number;\r\n}\r\n\r\ninterface NavigateToolCall {\r\n tool: \"navigate\";\r\n url: string;\r\n}\r\n\r\ninterface GetPageContextToolCall {\r\n tool: \"getPageContext\";\r\n}\r\n\r\ninterface ScrollToolCall {\r\n tool: \"scroll\";\r\n selector: string;\r\n}\r\n\r\nexport type AgentToolCall =\r\n | InteractToolCall\r\n | NavigateToolCall\r\n | GetPageContextToolCall\r\n | ScrollToolCall;\r\n\r\nexport interface ParsedAgentResponse {\r\n reply: string;\r\n toolCalls: AgentToolCall[];\r\n}\r\n\r\ninterface JsonObject {\r\n [key: string]: unknown;\r\n}\r\n\r\ninterface ResolvedTarget {\r\n element?: HTMLElement;\r\n x: number;\r\n y: number;\r\n}\r\n\r\nconst isObject = (value: unknown): value is JsonObject =>\r\n typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n\r\nconst asString = (value: unknown): string | undefined =>\r\n typeof value === \"string\" && value.trim() ? value.trim() : undefined;\r\n\r\nconst asNumber = (value: unknown): number | undefined =>\r\n typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\r\n\r\nconst extractJsonCandidate = (raw: string): string => {\r\n const trimmed = raw.trim();\r\n const fencedMatch = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)\\s*```/i);\r\n if (fencedMatch?.[1]) {\r\n return fencedMatch[1].trim();\r\n }\r\n return trimmed;\r\n};\r\n\r\nconst extractFirstJsonObject = (input: string): string | null => {\r\n const start = input.indexOf(\"{\");\r\n if (start < 0) {\r\n return null;\r\n }\r\n\r\n let depth = 0;\r\n let inString = false;\r\n let isEscaped = false;\r\n\r\n for (let i = start; i < input.length; i += 1) {\r\n const char = input[i];\r\n\r\n if (inString) {\r\n if (isEscaped) {\r\n isEscaped = false;\r\n } else if (char === \"\\\\\") {\r\n isEscaped = true;\r\n } else if (char === '\"') {\r\n inString = false;\r\n }\r\n continue;\r\n }\r\n\r\n if (char === '\"') {\r\n inString = true;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"}\") {\r\n depth -= 1;\r\n if (depth === 0) {\r\n return input.slice(start, i + 1);\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst parseJsonFromRaw = (raw: string): unknown => {\r\n const candidate = extractJsonCandidate(raw);\r\n try {\r\n return JSON.parse(candidate);\r\n } catch {\r\n const objectCandidate = extractFirstJsonObject(candidate);\r\n if (!objectCandidate) {\r\n return null;\r\n }\r\n try {\r\n return JSON.parse(objectCandidate);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n};\r\n\r\nconst sanitizeToolCalls = (value: unknown): AgentToolCall[] => {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n const toolCalls: AgentToolCall[] = [];\r\n\r\n for (const item of value) {\r\n if (!isObject(item)) {\r\n continue;\r\n }\r\n\r\n if (item.tool === \"interact\") {\r\n const action = asString(item.action) as InteractAction | undefined;\r\n if (!action || ![\"move\", \"click\", \"type\", \"submit\"].includes(action)) {\r\n continue;\r\n }\r\n\r\n toolCalls.push({\r\n tool: \"interact\",\r\n action,\r\n selector: asString(item.selector),\r\n text: typeof item.text === \"string\" ? item.text : undefined,\r\n x: asNumber(item.x),\r\n y: asNumber(item.y),\r\n });\r\n continue;\r\n }\r\n\r\n if (item.tool === \"navigate\") {\r\n const url = asString(item.url);\r\n if (!url) {\r\n continue;\r\n }\r\n\r\n toolCalls.push({\r\n tool: \"navigate\",\r\n url,\r\n });\r\n continue;\r\n }\r\n\r\n if (item.tool === \"getPageContext\") {\r\n toolCalls.push({\r\n tool: \"getPageContext\",\r\n });\r\n continue;\r\n }\r\n\r\n if (item.tool === \"scroll\") {\r\n const selector = asString(item.selector);\r\n if (!selector) {\r\n continue;\r\n }\r\n\r\n toolCalls.push({\r\n tool: \"scroll\",\r\n selector,\r\n });\r\n }\r\n }\r\n\r\n return toolCalls;\r\n};\r\n\r\nexport const parseAgentResponse = (raw: string): ParsedAgentResponse => {\r\n const parsed = parseJsonFromRaw(raw);\r\n if (!isObject(parsed)) {\r\n return {\r\n reply: raw.trim(),\r\n toolCalls: [],\r\n };\r\n }\r\n\r\n const reply = asString(parsed.reply) || \"\";\r\n const toolCalls = sanitizeToolCalls(parsed.tool_calls ?? parsed.toolCalls);\r\n\r\n return {\r\n reply,\r\n toolCalls,\r\n };\r\n};\r\n\r\nexport const clamp = (value: number, min: number, max: number): number =>\r\n Math.min(max, Math.max(min, value));\r\n\r\nexport const easeInOutCubic = (progress: number): number => {\r\n if (progress < 0.5) {\r\n return 4 * progress * progress * progress;\r\n }\r\n return 1 - Math.pow(-2 * progress + 2, 3) / 2;\r\n};\r\n\r\nexport const easeInOutSine = (progress: number): number =>\r\n -(Math.cos(Math.PI * progress) - 1) / 2;\r\n\r\nexport const isRectOutsideViewport = (\r\n rect: Pick<DOMRect, \"top\" | \"bottom\">,\r\n viewportHeight: number,\r\n): boolean => rect.top < 0 || rect.bottom > viewportHeight;\r\n\r\nexport const computeCenteredScrollTop = (\r\n currentScrollY: number,\r\n rectTop: number,\r\n rectHeight: number,\r\n viewportHeight: number,\r\n maxScrollTop: number,\r\n): number => {\r\n const desired =\r\n currentScrollY + rectTop - (viewportHeight / 2 - rectHeight / 2);\r\n return clamp(desired, 0, Math.max(0, maxScrollTop));\r\n};\r\n\r\nexport const animateWindowScrollTo = async (\r\n targetY: number,\r\n durationMs: number = SCROLL_DURATION_MS,\r\n): Promise<void> => {\r\n if (typeof window === \"undefined\") {\r\n return;\r\n }\r\n\r\n const startY = window.scrollY;\r\n const delta = targetY - startY;\r\n if (Math.abs(delta) < 1) {\r\n return;\r\n }\r\n\r\n await new Promise<void>((resolve) => {\r\n const raf =\r\n window.requestAnimationFrame ||\r\n ((callback: FrameRequestCallback) => window.setTimeout(() => callback(performance.now()), 16));\r\n\r\n const startTime = performance.now();\r\n\r\n const step = (now: number) => {\r\n const elapsed = now - startTime;\r\n const progress = clamp(elapsed / durationMs, 0, 1);\r\n const eased = easeInOutSine(progress);\r\n window.scrollTo(0, startY + delta * eased);\r\n\r\n if (progress < 1) {\r\n raf(step);\r\n } else {\r\n resolve();\r\n }\r\n };\r\n\r\n raf(step);\r\n });\r\n};\r\n\r\nconst getPersistedCursorState = (): PersistedCursorState | null => {\r\n if (typeof localStorage === \"undefined\") {\r\n return null;\r\n }\r\n\r\n try {\r\n const raw = localStorage.getItem(CURSOR_STORAGE_KEY);\r\n if (!raw) {\r\n return null;\r\n }\r\n\r\n const parsed = JSON.parse(raw) as Partial<PersistedCursorState>;\r\n if (\r\n typeof parsed.url !== \"string\" ||\r\n typeof parsed.x !== \"number\" ||\r\n !Number.isFinite(parsed.x) ||\r\n typeof parsed.y !== \"number\" ||\r\n !Number.isFinite(parsed.y)\r\n ) {\r\n return null;\r\n }\r\n\r\n return {\r\n url: parsed.url,\r\n x: parsed.x,\r\n y: parsed.y,\r\n visible: parsed.visible !== false,\r\n };\r\n } catch {\r\n return null;\r\n }\r\n};\r\n\r\nconst persistCursorState = (x: number, y: number, visible: boolean) => {\r\n if (typeof localStorage === \"undefined\") {\r\n return;\r\n }\r\n\r\n try {\r\n const payload: PersistedCursorState = {\r\n url: window.location.href,\r\n x,\r\n y,\r\n visible,\r\n };\r\n localStorage.setItem(CURSOR_STORAGE_KEY, JSON.stringify(payload));\r\n } catch {\r\n // No-op: localStorage may be unavailable or blocked.\r\n }\r\n};\r\n\r\nconst setCursorPosition = (cursor: HTMLElement, x: number, y: number) => {\r\n cursor.style.left = `${x}px`;\r\n cursor.style.top = `${y}px`;\r\n};\r\n\r\nconst getCursorPosition = (cursor: HTMLElement): { x: number; y: number } => ({\r\n x: Number.parseFloat(cursor.style.left) || 0,\r\n y: Number.parseFloat(cursor.style.top) || 0,\r\n});\r\n\r\nconst setCursorVisibility = (cursor: HTMLElement, visible: boolean) => {\r\n cursor.style.opacity = visible ? \"1\" : \"0\";\r\n};\r\n\r\nlet cursorHoverTrackingInitialized = false;\r\nconst initializeCursorHoverTracking = () => {\r\n if (cursorHoverTrackingInitialized) {\r\n return;\r\n }\r\n cursorHoverTrackingInitialized = true;\r\n\r\n document.addEventListener(\"mousemove\", (event) => {\r\n const cursor = document.getElementById(AGENT_CURSOR_ID);\r\n if (!(cursor instanceof HTMLElement)) {\r\n return;\r\n }\r\n\r\n if (cursor.style.opacity !== \"1\") {\r\n return;\r\n }\r\n\r\n const { x, y } = getCursorPosition(cursor);\r\n const pointerX = event.pageX;\r\n const pointerY = event.pageY;\r\n const distance = Math.hypot(pointerX - x, pointerY - y);\r\n\r\n if (distance <= CURSOR_HOVER_RADIUS_PX) {\r\n setCursorVisibility(cursor, false);\r\n persistCursorState(x, y, false);\r\n }\r\n });\r\n};\r\n\r\nconst applyStoredCursorStateForCurrentUrl = (cursor: HTMLElement) => {\r\n const stored = getPersistedCursorState();\r\n if (!stored || stored.url !== window.location.href) {\r\n return;\r\n }\r\n\r\n setCursorPosition(cursor, stored.x, stored.y);\r\n setCursorVisibility(cursor, stored.visible);\r\n};\r\n\r\nconst ensureCursor = (): HTMLElement => {\r\n const existing = document.getElementById(AGENT_CURSOR_ID);\r\n if (existing) {\r\n // Keep cursor color in sync with the current theme\r\n existing.style.background = COLORS.primary;\r\n initializeCursorHoverTracking();\r\n return existing as HTMLElement;\r\n }\r\n\r\n const cursor = document.createElement(\"div\");\r\n cursor.id = AGENT_CURSOR_ID;\r\n cursor.style.position = \"absolute\";\r\n cursor.style.left = \"0px\";\r\n cursor.style.top = \"0px\";\r\n cursor.style.opacity = \"0\";\r\n const width = 25;\r\n cursor.style.width = `${width}px`;\r\n cursor.style.height = `${width}px`;\r\n cursor.style.borderRadius = \"50%\";\r\n const baseColor = COLORS.primary;\r\n cursor.style.background = baseColor;\r\n const border = 25 * 16 / 100;\r\n cursor.style.border = `${border}px solid #ffffff`;\r\n cursor.style.boxShadow = \"0px 0px 10px rgba(0, 11, 26, 0.5)\";\r\n cursor.style.boxSizing = \"border-box\";\r\n cursor.style.zIndex = \"2147483647\";\r\n cursor.style.pointerEvents = \"none\";\r\n cursor.style.transform = \"translate(-50%, -50%)\";\r\n cursor.style.transition = `left ${CURSOR_MOVE_DURATION_MS}ms ${CURSOR_EASING}, top ${CURSOR_MOVE_DURATION_MS}ms ${CURSOR_EASING}, opacity 150ms ease-out`;\r\n document.body.appendChild(cursor);\r\n initializeCursorHoverTracking();\r\n applyStoredCursorStateForCurrentUrl(cursor);\r\n console.info(`[Autic] cursor created color=${baseColor} duration=${CURSOR_MOVE_DURATION_MS}ms`);\r\n return cursor;\r\n};\r\n\r\nconst moveCursor = async (x: number, y: number) => {\r\n const cursor = ensureCursor();\r\n setCursorPosition(cursor, x, y);\r\n setCursorVisibility(cursor, true);\r\n persistCursorState(x, y, true);\r\n await new Promise((resolve) => setTimeout(resolve, CURSOR_MOVE_DURATION_MS));\r\n};\r\n\r\nconst getElementCenter = (element: HTMLElement): { x: number; y: number } => {\r\n const rect = element.getBoundingClientRect();\r\n return {\r\n x: rect.left + window.scrollX + rect.width / 2,\r\n y: rect.top + window.scrollY + rect.height / 2,\r\n };\r\n};\r\n\r\nconst CONTAINS_SELECTOR_PATTERN = /^(.*?):contains\\((['\"])(.*?)\\2\\)\\s*$/;\r\n\r\nconst findElementBySelector = (selector: string): Element | null => {\r\n try {\r\n return document.querySelector(selector);\r\n } catch (error) {\r\n const containsMatch = selector.match(CONTAINS_SELECTOR_PATTERN);\r\n if (!containsMatch) {\r\n console.warn(`AuticBot selector invalid: ${selector}`, error);\r\n return null;\r\n }\r\n\r\n const baseSelector = containsMatch[1]?.trim() || \"*\";\r\n const expectedText = containsMatch[3]?.trim() || \"\";\r\n if (!expectedText) {\r\n console.warn(`AuticBot selector contains empty text: ${selector}`);\r\n return null;\r\n }\r\n\r\n try {\r\n const candidates = document.querySelectorAll(baseSelector);\r\n for (const candidate of candidates) {\r\n if (candidate.textContent?.includes(expectedText)) {\r\n return candidate;\r\n }\r\n }\r\n return null;\r\n } catch (fallbackError) {\r\n console.warn(`AuticBot selector fallback invalid: ${selector}`, fallbackError);\r\n return null;\r\n }\r\n }\r\n};\r\n\r\nconst resolveTarget = (call: InteractToolCall): ResolvedTarget | null => {\r\n if (call.selector) {\r\n const selected = findElementBySelector(call.selector);\r\n\r\n if (selected instanceof HTMLElement) {\r\n const center = getElementCenter(selected);\r\n return {\r\n element: selected,\r\n x: center.x,\r\n y: center.y,\r\n };\r\n }\r\n console.warn(`AuticBot interact: selector not found: ${call.selector}`);\r\n }\r\n\r\n if (typeof call.x === \"number\" && typeof call.y === \"number\") {\r\n return {\r\n x: call.x,\r\n y: call.y,\r\n };\r\n }\r\n\r\n console.warn(\"AuticBot interact: missing target selector or coordinates.\", call);\r\n return null;\r\n};\r\n\r\nconst dispatchMouseEvent = (\r\n element: HTMLElement,\r\n type: string,\r\n x: number,\r\n y: number,\r\n) => {\r\n element.dispatchEvent(\r\n new MouseEvent(type, {\r\n bubbles: true,\r\n cancelable: true,\r\n view: window,\r\n clientX: x - window.scrollX,\r\n clientY: y - window.scrollY,\r\n }),\r\n );\r\n};\r\n\r\nconst typeIntoElement = (element: HTMLElement, text: string) => {\r\n const tagName = element.tagName.toUpperCase();\r\n if (tagName === \"INPUT\" || tagName === \"TEXTAREA\") {\r\n (element as HTMLInputElement).focus();\r\n (element as HTMLInputElement).value = text;\r\n element.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n return;\r\n }\r\n\r\n if (element.isContentEditable) {\r\n element.focus();\r\n element.textContent = text;\r\n element.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n return;\r\n }\r\n\r\n console.warn(\r\n \"AuticBot interact: type action requires input, textarea, or contenteditable target.\",\r\n );\r\n};\r\n\r\nconst submitElement = (element: HTMLElement) => {\r\n if (element.tagName === \"FORM\") {\r\n (element as HTMLFormElement).requestSubmit();\r\n return;\r\n }\r\n\r\n if (element.tagName === \"BUTTON\" && (element as HTMLButtonElement).form) {\r\n (element as HTMLButtonElement).form?.requestSubmit();\r\n return;\r\n }\r\n\r\n const parentForm = element.closest(\"form\");\r\n if (parentForm) {\r\n parentForm.requestSubmit();\r\n return;\r\n }\r\n\r\n console.warn(\"AuticBot interact: submit action requires a form target.\");\r\n};\r\n\r\nconst slowScrollElementIntoView = async (element: HTMLElement): Promise<void> => {\r\n await slowScrollElementIntoViewWithMode(element, false);\r\n};\r\n\r\nconst slowScrollElementIntoViewWithMode = async (\r\n element: HTMLElement,\r\n forceCenter: boolean,\r\n): Promise<void> => {\r\n const rect = element.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n\r\n if (!forceCenter && !isRectOutsideViewport(rect, viewportHeight)) {\r\n return;\r\n }\r\n\r\n const maxScrollTop = Math.max(\r\n 0,\r\n Math.max(document.body.scrollHeight, document.documentElement.scrollHeight) - viewportHeight,\r\n );\r\n const targetY = computeCenteredScrollTop(\r\n window.scrollY,\r\n rect.top,\r\n rect.height,\r\n viewportHeight,\r\n maxScrollTop,\r\n );\r\n\r\n await animateWindowScrollTo(targetY, SCROLL_DURATION_MS);\r\n};\r\n\r\nconst executeScroll = async (call: ScrollToolCall) => {\r\n const selected = findElementBySelector(call.selector);\r\n if (!(selected instanceof HTMLElement)) {\r\n console.warn(`AuticBot scroll: selector not found: ${call.selector}`);\r\n return;\r\n }\r\n\r\n await slowScrollElementIntoViewWithMode(selected, true);\r\n const center = getElementCenter(selected);\r\n await moveCursor(center.x, center.y);\r\n};\r\n\r\nconst executeInteract = async (call: InteractToolCall) => {\r\n const target = resolveTarget(call);\r\n if (!target) {\r\n return;\r\n }\r\n\r\n if (call.action === \"click\" && target.element) {\r\n await slowScrollElementIntoView(target.element);\r\n const center = getElementCenter(target.element);\r\n target.x = center.x;\r\n target.y = center.y;\r\n }\r\n\r\n await moveCursor(target.x, target.y);\r\n\r\n if (call.action === \"move\") {\r\n return;\r\n }\r\n\r\n if (!target.element) {\r\n console.warn(\"AuticBot interact: target element not available for action.\", call.action);\r\n return;\r\n }\r\n\r\n if (call.action === \"click\") {\r\n dispatchMouseEvent(target.element, \"pointerdown\", target.x, target.y);\r\n dispatchMouseEvent(target.element, \"mousedown\", target.x, target.y);\r\n dispatchMouseEvent(target.element, \"pointerup\", target.x, target.y);\r\n dispatchMouseEvent(target.element, \"mouseup\", target.x, target.y);\r\n target.element.click();\r\n return;\r\n }\r\n\r\n if (call.action === \"type\") {\r\n typeIntoElement(target.element, call.text ?? \"\");\r\n return;\r\n }\r\n\r\n submitElement(target.element);\r\n};\r\n\r\nconst isSamePageNavigation = (targetUrl: string): boolean => {\r\n try {\r\n const current = new URL(window.location.href);\r\n const target = new URL(targetUrl);\r\n return current.origin === target.origin && current.pathname === target.pathname;\r\n } catch {\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * Find the best matching link element for a target URL.\r\n * Supports exact href match, partial path/query/hash match,\r\n * and text-content match for framework <Link> components.\r\n */\r\nconst findMatchingLinkForTarget = (targetUrl: string): HTMLElement | null => {\r\n let parsedTarget: URL | null = null;\r\n try {\r\n parsedTarget = new URL(targetUrl, window.location.href);\r\n } catch {\r\n // will fall through to text-based matching\r\n }\r\n\r\n const allLinks = Array.from(\r\n document.querySelectorAll('a[href], [role=\"link\"][href], [data-href]'),\r\n ) as HTMLElement[];\r\n\r\n // 1. Exact href match\r\n for (const el of allLinks) {\r\n if (el instanceof HTMLAnchorElement && el.href === parsedTarget?.href) {\r\n return el;\r\n }\r\n }\r\n\r\n if (parsedTarget) {\r\n // 2. Match by pathname + search + hash (ignoring origin)\r\n for (const el of allLinks) {\r\n if (!(el instanceof HTMLAnchorElement)) continue;\r\n try {\r\n const elUrl = new URL(el.href, window.location.href);\r\n if (\r\n elUrl.pathname === parsedTarget.pathname &&\r\n elUrl.search === parsedTarget.search &&\r\n elUrl.hash === parsedTarget.hash\r\n ) {\r\n return el;\r\n }\r\n } catch {\r\n continue;\r\n }\r\n }\r\n\r\n // 3. Match by pathname only (query/hash may differ)\r\n for (const el of allLinks) {\r\n if (!(el instanceof HTMLAnchorElement)) continue;\r\n try {\r\n const elUrl = new URL(el.href, window.location.href);\r\n if (elUrl.pathname === parsedTarget.pathname) {\r\n return el;\r\n }\r\n } catch {\r\n continue;\r\n }\r\n }\r\n\r\n // 4. Partial href attribute match (covers relative paths, query strings)\r\n const rawUrl = targetUrl.replace(/^\\//, \"\");\r\n for (const el of allLinks) {\r\n const href = el.getAttribute(\"href\") || el.getAttribute(\"data-href\") || \"\";\r\n if (href && (href === targetUrl || href === rawUrl || href === `/${rawUrl}`)) {\r\n return el;\r\n }\r\n }\r\n }\r\n\r\n // 5. Text-content match (for framework <Link> or <button> navigations)\r\n const urlSegments = targetUrl\r\n .replace(/^https?:\\/\\/[^/]+/, \"\")\r\n .replace(/[?#].*$/, \"\")\r\n .split(\"/\")\r\n .filter(Boolean);\r\n const lastSegment = urlSegments[urlSegments.length - 1] || \"\";\r\n\r\n if (lastSegment) {\r\n // Also search query param values (e.g., ?tab=interact → \"interact\")\r\n let searchTerms = [lastSegment];\r\n if (parsedTarget) {\r\n for (const [, value] of parsedTarget.searchParams.entries()) {\r\n if (value) searchTerms.push(value);\r\n }\r\n if (parsedTarget.hash) {\r\n searchTerms.push(parsedTarget.hash.replace(/^#/, \"\"));\r\n }\r\n }\r\n searchTerms = searchTerms.map((t) => t.toLowerCase());\r\n\r\n // Look across all clickable elements\r\n const clickables = Array.from(\r\n document.querySelectorAll(\r\n 'a, button, [role=\"link\"], [role=\"tab\"], [role=\"button\"], [data-tab], [onclick]',\r\n ),\r\n ) as HTMLElement[];\r\n\r\n for (const el of clickables) {\r\n const text = (el.textContent || \"\").trim().toLowerCase();\r\n const ariaLabel = (el.getAttribute(\"aria-label\") || \"\").toLowerCase();\r\n const dataTab = (el.getAttribute(\"data-tab\") || \"\").toLowerCase();\r\n for (const term of searchTerms) {\r\n if (\r\n text === term ||\r\n ariaLabel === term ||\r\n dataTab === term ||\r\n text.includes(term)\r\n ) {\r\n return el;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst executeNavigate = async (call: NavigateToolCall): Promise<boolean> => {\r\n try {\r\n const targetUrl = call.url;\r\n let resolvedUrl: string;\r\n try {\r\n resolvedUrl = new URL(targetUrl, window.location.href).href;\r\n } catch {\r\n resolvedUrl = targetUrl;\r\n }\r\n\r\n const matchingElement = findMatchingLinkForTarget(targetUrl);\r\n\r\n if (matchingElement) {\r\n console.log(\"AuticBot navigate: clicking element\", resolvedUrl, matchingElement.tagName);\r\n await slowScrollElementIntoView(matchingElement);\r\n\r\n const center = getElementCenter(matchingElement);\r\n await moveCursor(center.x, center.y);\r\n\r\n matchingElement.dispatchEvent(new MouseEvent(\"pointerdown\", { bubbles: true, view: window }));\r\n matchingElement.dispatchEvent(new MouseEvent(\"mousedown\", { bubbles: true, view: window }));\r\n matchingElement.dispatchEvent(new MouseEvent(\"pointerup\", { bubbles: true, view: window }));\r\n matchingElement.dispatchEvent(new MouseEvent(\"mouseup\", { bubbles: true, view: window }));\r\n matchingElement.click();\r\n\r\n return !isSamePageNavigation(resolvedUrl);\r\n }\r\n\r\n // 6. Fallback: direct browser navigation (query param, hash, or full URL)\r\n console.log(\"AuticBot navigate: no matching element found, using direct navigation\", resolvedUrl);\r\n\r\n // Hash-only navigation\r\n try {\r\n const parsed = new URL(resolvedUrl);\r\n if (\r\n parsed.origin === window.location.origin &&\r\n parsed.pathname === window.location.pathname &&\r\n parsed.hash\r\n ) {\r\n window.location.hash = parsed.hash;\r\n return false;\r\n }\r\n } catch { /* continue */ }\r\n\r\n // Query-param or same-origin navigation via History API\r\n try {\r\n const parsed = new URL(resolvedUrl);\r\n if (parsed.origin === window.location.origin) {\r\n // Use pushState + popstate to trigger SPA routers\r\n const newPath = parsed.pathname + parsed.search + parsed.hash;\r\n window.history.pushState({}, \"\", newPath);\r\n window.dispatchEvent(new PopStateEvent(\"popstate\", { state: {} }));\r\n return false;\r\n }\r\n } catch { /* continue */ }\r\n\r\n // Cross-origin: full page navigation\r\n window.location.href = resolvedUrl;\r\n return true;\r\n } catch (error) {\r\n console.warn(\"AuticBot navigate: error\", call.url, error);\r\n return false;\r\n }\r\n};\r\n\r\nconst executeGetPageContext = async () => {\r\n const context = getPageContext();\r\n console.info(\r\n `[Autic] getPageContext tool executed links=${context.links.length} interactables=${context.interactables.length} summary_len=${context.summary.length}`,\r\n );\r\n};\r\n\r\nexport const executeToolCalls = async (toolCalls: AgentToolCall[]) => {\r\n for (const toolCall of toolCalls) {\r\n if (toolCall.tool === \"interact\") {\r\n await executeInteract(toolCall);\r\n continue;\r\n }\r\n\r\n if (toolCall.tool === \"scroll\") {\r\n await executeScroll(toolCall);\r\n continue;\r\n }\r\n\r\n if (toolCall.tool === \"getPageContext\") {\r\n await executeGetPageContext();\r\n continue;\r\n }\r\n\r\n if (toolCall.tool === \"navigate\") {\r\n const terminalNavigation = await executeNavigate(toolCall);\r\n if (terminalNavigation) {\r\n break;\r\n }\r\n }\r\n }\r\n};\r\n\r\n// ── Agent-mode tool execution (returns results) ─────────────────────\r\n\r\nexport type ToolCallWithId = AgentToolCall & {\r\n call_id: string;\r\n};\r\n\r\nexport interface ToolCallResult {\r\n call_id: string;\r\n result: string;\r\n}\r\n\r\n/**\r\n * Execute a single tool call and return a result string.\r\n * Used by the agent loop to feed results back into the LLM.\r\n */\r\nexport const executeSingleToolCall = async (\r\n call: ToolCallWithId,\r\n): Promise<ToolCallResult> => {\r\n const callId = call.call_id;\r\n try {\r\n if (call.tool === \"interact\") {\r\n await executeInteract(call);\r\n return {\r\n call_id: callId,\r\n result: `Etkileşim başarılı: ${call.action}`,\r\n };\r\n }\r\n\r\n if (call.tool === \"scroll\") {\r\n await executeScroll(call);\r\n return {\r\n call_id: callId,\r\n result: \"Öğeye kaydırma başarılı.\",\r\n };\r\n }\r\n\r\n if (call.tool === \"getPageContext\") {\r\n const context = getPageContext();\r\n return {\r\n call_id: callId,\r\n result: context.summary,\r\n };\r\n }\r\n\r\n if (call.tool === \"navigate\") {\r\n await executeNavigate(call);\r\n // Wait for navigation / SPA routing to settle\r\n await new Promise((resolve) => setTimeout(resolve, 1500));\r\n const context = getPageContext();\r\n return {\r\n call_id: callId,\r\n result: `Navigasyon tamamlandı. Şu anki sayfa: ${window.location.href}\\nSayfa bağlamı: ${context.summary}`,\r\n };\r\n }\r\n\r\n return { call_id: callId, result: \"Bilinmeyen araç.\" };\r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n console.warn(`[Autic] Tool execution error: ${call.tool}`, error);\r\n return { call_id: callId, result: `Hata: ${msg}` };\r\n }\r\n};\r\n\r\nconst restoreCursorFromStorageForCurrentUrl = () => {\r\n if (typeof document === \"undefined\" || typeof window === \"undefined\") {\r\n return;\r\n }\r\n\r\n const stored = getPersistedCursorState();\r\n if (!stored || stored.url !== window.location.href) {\r\n return;\r\n }\r\n\r\n ensureCursor();\r\n};\r\n\r\nif (typeof document !== \"undefined\") {\r\n if (document.readyState === \"loading\") {\r\n document.addEventListener(\"DOMContentLoaded\", restoreCursorFromStorageForCurrentUrl, {\r\n once: true,\r\n });\r\n } else {\r\n restoreCursorFromStorageForCurrentUrl();\r\n }\r\n}\r\n","import {\r\n savePendingAgentResume,\r\n clearPendingAgentResume,\r\n type PendingAgentResume,\r\n} from \"../agent/tools\";\r\n\r\nexport type ChatRole = \"system\" | \"user\" | \"assistant\";\r\n\r\nexport interface ChatMessage {\r\n role: ChatRole;\r\n content: string;\r\n}\r\n\r\ninterface ApiErrorBody {\r\n detail?: string;\r\n error?: string;\r\n message?: string;\r\n}\r\n\r\ninterface SseEventPayload {\r\n type?: string;\r\n session_id?: string;\r\n user_text?: string;\r\n assistant_text?: string;\r\n delta?: string;\r\n audio?: string;\r\n format?: string;\r\n mime_type?: string;\r\n sample_rate?: number;\r\n error?: string;\r\n}\r\n\r\ninterface TtsWsEventPayload {\r\n type?: string;\r\n request_id?: string;\r\n seq?: number;\r\n audio?: string;\r\n format?: string;\r\n mime_type?: string;\r\n sample_rate?: number;\r\n error?: string;\r\n retryable?: boolean;\r\n last_seq?: number;\r\n}\r\n\r\ninterface SttWsEventPayload {\r\n type?: string;\r\n session_id?: string;\r\n seq?: number;\r\n text?: string;\r\n error?: string;\r\n retryable?: boolean;\r\n}\r\n\r\nexport type AudioStreamState = \"rendering\" | \"playing\" | \"done\" | \"fallback\";\r\nexport const TTS_WS_RETRY_DELAYS_MS = [250, 750, 1500];\r\n\r\nconst normalizeBaseUrl = (baseUrl: string): string => {\r\n const trimmed = baseUrl.trim().replace(/\\/+$/, \"\");\r\n if (/^https?:\\/\\//i.test(trimmed)) {\r\n return trimmed;\r\n }\r\n // Treat host-only values like \"api.bulut.lu\" as HTTPS absolute URLs.\r\n return `https://${trimmed}`;\r\n};\r\nconst toWebSocketUrl = (baseUrl: string, path: string): string => {\r\n const normalized = normalizeBaseUrl(baseUrl);\r\n const url = new URL(normalized);\r\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\r\n url.pathname = `${url.pathname.replace(/\\/$/, \"\")}${path}`;\r\n url.search = \"\";\r\n url.hash = \"\";\r\n return url.toString();\r\n};\r\n\r\nconst createRequestId = (): string => {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n return `tts-${Date.now()}-${Math.random().toString(16).slice(2)}`;\r\n};\r\n\r\nexport const parseTtsWsEventPayload = (\r\n value: unknown,\r\n): TtsWsEventPayload | null => {\r\n try {\r\n if (typeof value !== \"string\") {\r\n return null;\r\n }\r\n return JSON.parse(value) as TtsWsEventPayload;\r\n } catch {\r\n return null;\r\n }\r\n};\r\n\r\nexport const parseSttWsEventPayload = (\r\n value: unknown,\r\n): SttWsEventPayload | null => {\r\n try {\r\n if (typeof value !== \"string\") {\r\n return null;\r\n }\r\n return JSON.parse(value) as SttWsEventPayload;\r\n } catch {\r\n return null;\r\n }\r\n};\r\n\r\nexport const shouldAcceptAudioSeq = (\r\n incomingSeq: number,\r\n highestSeqSeen: number,\r\n): boolean => incomingSeq > highestSeqSeen;\r\n\r\nexport const shouldFallbackToSse = (error: unknown): boolean => {\r\n if (typeof error === \"object\" && error !== null && \"retryable\" in error) {\r\n return Boolean((error as { retryable?: boolean }).retryable);\r\n }\r\n return true;\r\n};\r\n\r\nconst parseErrorBody = async (response: Response): Promise<string> => {\r\n try {\r\n const data = (await response.json()) as ApiErrorBody;\r\n const detail = data.detail;\r\n if (typeof detail === \"string\") return detail;\r\n if (detail && typeof detail === \"object\") return JSON.stringify(detail);\r\n return data.error || data.message || response.statusText;\r\n } catch {\r\n return response.statusText;\r\n }\r\n};\r\n\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => {\r\n setTimeout(resolve, ms);\r\n });\r\n\r\nexport const base64ToUint8Array = (base64: string): Uint8Array<ArrayBuffer> => {\r\n // Strip potential data URI prefix if present\r\n const cleanBase64 = base64.replace(/^data:audio\\/\\w+;base64,/, \"\");\r\n const binaryString = atob(cleanBase64);\r\n const bytes = new Uint8Array(binaryString.length) as Uint8Array<ArrayBuffer>;\r\n for (let i = 0; i < binaryString.length; i += 1) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n return bytes;\r\n};\r\n\r\nconst blobToBase64 = async (blob: Blob): Promise<string> => {\r\n const bytes = new Uint8Array(await blob.arrayBuffer());\r\n const chunkSize = 0x8000;\r\n let binary = \"\";\r\n for (let i = 0; i < bytes.length; i += chunkSize) {\r\n binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize));\r\n }\r\n return btoa(binary);\r\n};\r\n\r\nconst createWavHeader = (\r\n length: number,\r\n sampleRate: number = 16000,\r\n): Uint8Array<ArrayBuffer> => {\r\n const buffer = new ArrayBuffer(44);\r\n const view = new DataView(buffer);\r\n const channels = 1;\r\n\r\n // RIFF chunk descriptor\r\n view.setUint32(0, 0x52494646, false); // \"RIFF\"\r\n view.setUint32(4, 36 + length, true); // file length - 8\r\n view.setUint32(8, 0x57415645, false); // \"WAVE\"\r\n\r\n // fmt sub-chunk\r\n view.setUint32(12, 0x666d7420, false); // \"fmt \"\r\n view.setUint32(16, 16, true); // Subchunk1Size (16 for PCM)\r\n view.setUint16(20, 1, true); // AudioFormat (1 for PCM)\r\n view.setUint16(22, channels, true); // NumChannels\r\n view.setUint32(24, sampleRate, true); // SampleRate\r\n view.setUint32(28, sampleRate * channels * 2, true); // ByteRate\r\n view.setUint16(32, channels * 2, true); // BlockAlign\r\n view.setUint16(34, 16, true); // BitsPerSample\r\n\r\n // data sub-chunk\r\n view.setUint32(36, 0x64617461, false); // \"data\"\r\n view.setUint32(40, length, true); // Subchunk2Size\r\n\r\n return new Uint8Array(buffer) as Uint8Array<ArrayBuffer>;\r\n};\r\nconst waitForPlaybackEnd = async (\r\n audioElement: HTMLAudioElement,\r\n): Promise<void> => {\r\n if (audioElement.ended) {\r\n return;\r\n }\r\n\r\n await new Promise<void>((resolve, reject) => {\r\n const watchdog = window.setInterval(() => {\r\n if (!audioElement.ended) {\r\n console.info(\"[Bulut] playback watchdog: still playing...\");\r\n }\r\n }, 30000);\r\n\r\n const onEnded = () => {\r\n cleanup();\r\n resolve();\r\n };\r\n\r\n const onError = () => {\r\n cleanup();\r\n reject(new Error(\"Ses oynatma hatası oluştu.\"));\r\n };\r\n\r\n const cleanup = () => {\r\n window.clearInterval(watchdog);\r\n audioElement.removeEventListener(\"ended\", onEnded);\r\n audioElement.removeEventListener(\"error\", onError);\r\n };\r\n\r\n audioElement.addEventListener(\"ended\", onEnded);\r\n audioElement.addEventListener(\"error\", onError);\r\n });\r\n};\r\n\r\n\r\n\r\nconst playBufferedAudio = async (\r\n chunks: Uint8Array<ArrayBuffer>[],\r\n mimeType: string,\r\n sampleRate: number = 16000,\r\n onAudioStateChange?: (state: AudioStreamState) => void,\r\n): Promise<void> => {\r\n if (chunks.length === 0) {\r\n onAudioStateChange?.(\"done\");\r\n return;\r\n }\r\n\r\n // Debug info\r\n const totalBytes = chunks.reduce((acc, c) => acc + c.byteLength, 0);\r\n console.log(`[Bulut] Playing buffered audio: ${chunks.length} chunks, ${totalBytes} bytes, type=${mimeType}`);\r\n\r\n onAudioStateChange?.(\"fallback\");\r\n\r\n const blobParts: ArrayBuffer[] = chunks.map((chunk) => {\r\n const copied = new Uint8Array(chunk.byteLength) as Uint8Array<ArrayBuffer>;\r\n copied.set(chunk);\r\n return copied.buffer;\r\n });\r\n\r\n // Verify magic numbers and detect MIME type\r\n let detectedMime = mimeType;\r\n if (chunks.length > 0 && chunks[0].length >= 4) {\r\n const header = Array.from(chunks[0].slice(0, 4))\r\n .map(b => b.toString(16).padStart(2, '0').toUpperCase())\r\n .join(' ');\r\n console.log(`[Bulut] Audio header (hex): ${header}`);\r\n\r\n // Magic number detection\r\n if (header.startsWith(\"49 44 33\")) { // ID3\r\n detectedMime = \"audio/mpeg\";\r\n } else if (header.startsWith(\"FF F3\") || header.startsWith(\"FF F2\")) { // MP3 Sync\r\n detectedMime = \"audio/mpeg\";\r\n } else if (header.startsWith(\"52 49 46 46\")) { // RIFF (WAV)\r\n detectedMime = \"audio/wav\";\r\n } else if (header.startsWith(\"1A 45 DF A3\")) { // EBML (WebM)\r\n detectedMime = \"audio/webm\";\r\n }\r\n }\r\n\r\n // Ensure valid MIME type\r\n // Ensure valid MIME type or wrap raw PCM\r\n let safeMimeType = detectedMime && detectedMime.includes(\"/\") ? detectedMime : \"audio/mpeg\";\r\n let finalBlobParts: BlobPart[] = blobParts;\r\n\r\n if (mimeType === \"audio/pcm\") {\r\n // Wrap raw PCM in WAV container\r\n const totalLength = chunks.reduce((acc, c) => acc + c.byteLength, 0);\r\n const header = createWavHeader(totalLength, sampleRate);\r\n finalBlobParts = [header.buffer, ...blobParts];\r\n safeMimeType = \"audio/wav\";\r\n console.log(`[Bulut] Wrapped raw PCM in WAV (rate=${sampleRate})`);\r\n }\r\n\r\n console.log(`[Bulut] Creating blob with type: ${safeMimeType} (original: ${mimeType})`);\r\n const blob = new Blob(finalBlobParts, { type: safeMimeType });\r\n\r\n const audioElement = new Audio();\r\n const objectUrl = URL.createObjectURL(blob);\r\n\r\n try {\r\n audioElement.preload = \"auto\";\r\n audioElement.autoplay = true;\r\n // Some browsers need this\r\n audioElement.setAttribute(\"playsinline\", \"true\");\r\n audioElement.src = objectUrl;\r\n\r\n await audioElement.play();\r\n onAudioStateChange?.(\"playing\");\r\n await waitForPlaybackEnd(audioElement);\r\n onAudioStateChange?.(\"done\");\r\n } catch (err) {\r\n console.error(`[Bulut] Playback failed: ${err}`, { mimeType: safeMimeType, size: blob.size });\r\n onAudioStateChange?.(\"done\"); // Signal done to unblock UI even on error\r\n throw err;\r\n } finally {\r\n audioElement.pause();\r\n audioElement.removeAttribute(\"src\");\r\n audioElement.load();\r\n URL.revokeObjectURL(objectUrl);\r\n }\r\n};\r\n\r\nexport interface StreamController {\r\n stop: () => void;\r\n done: Promise<void>;\r\n}\r\n\r\nexport const parseSseEventPayload = (eventBlock: string): SseEventPayload | null => {\r\n const dataLines = eventBlock\r\n .split(/\\r?\\n/)\r\n .map((line) => line.trim())\r\n .filter((line) => line.startsWith(\"data:\"))\r\n .map((line) => line.slice(5).trimStart());\r\n\r\n if (dataLines.length === 0) {\r\n return null;\r\n }\r\n\r\n const dataStr = dataLines.join(\"\\n\");\r\n if (dataStr === \"[DONE]\") {\r\n return { type: \"done\" };\r\n }\r\n\r\n try {\r\n return JSON.parse(dataStr) as SseEventPayload;\r\n } catch (error) {\r\n console.warn(\"Error parsing SSE chunk:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const isAudioSsePayload = (\r\n payload: SseEventPayload,\r\n): payload is SseEventPayload & { audio: string } =>\r\n typeof payload.audio === \"string\" &&\r\n (payload.type === undefined || payload.type === \"audio\");\r\n\r\n// ── Separated Endpoint Helpers ──────────────────────────────────────\r\n\r\nexport async function transcribeAudio(\r\n baseUrl: string,\r\n file: File,\r\n projectId: string,\r\n sessionId: string | null,\r\n language: string,\r\n onRequestSent?: () => void,\r\n): Promise<{ text: string; session_id: string }> {\r\n const url = `${normalizeBaseUrl(baseUrl)}/chat/stt`;\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n formData.append(\"project_id\", projectId);\r\n if (sessionId) formData.append(\"session_id\", sessionId);\r\n formData.append(\"language\", language);\r\n\r\n const responsePromise = fetch(url, { method: \"POST\", body: formData });\r\n onRequestSent?.();\r\n const response = await responsePromise;\r\n if (!response.ok) {\r\n throw new Error(await parseErrorBody(response));\r\n }\r\n return response.json();\r\n}\r\n\r\nexport interface SttWsResult {\r\n text: string;\r\n session_id: string;\r\n}\r\n\r\nexport interface SttWsEvents {\r\n onRequestSent?: () => void;\r\n onSessionId?: (sessionId: string) => void;\r\n onPartial?: (payload: { seq: number; text: string }) => void;\r\n}\r\n\r\nexport interface SttWsController {\r\n pushChunk: (chunk: Blob) => Promise<void>;\r\n stop: () => Promise<SttWsResult>;\r\n cancel: () => void;\r\n}\r\n\r\nexport const startSttWebSocketStream = (\r\n baseUrl: string,\r\n config: {\r\n projectId: string;\r\n sessionId: string | null;\r\n language?: string;\r\n mimeType?: string;\r\n },\r\n events: SttWsEvents = {},\r\n): SttWsController => {\r\n const wsUrl = toWebSocketUrl(baseUrl, \"/chat/stt/ws\");\r\n console.info(\"[Bulut] STT WS connecting to\", wsUrl);\r\n const socket = new WebSocket(wsUrl);\r\n let seq = 0;\r\n let finalText = \"\";\r\n let finalSessionId = config.sessionId || \"\";\r\n let stopped = false;\r\n let settled = false;\r\n // All chunk sends and the final stop are chained through sendQueue\r\n // so the \"stop\" message always follows all enqueued chunks.\r\n let sendQueue: Promise<void> = Promise.resolve();\r\n\r\n let resolveStart: (() => void) | null = null;\r\n let rejectStart: ((error: Error & { retryable?: boolean }) => void) | null = null;\r\n const startPromise = new Promise<void>((resolve, reject) => {\r\n resolveStart = resolve;\r\n rejectStart = reject;\r\n });\r\n\r\n let resolveDone: ((result: SttWsResult) => void) | null = null;\r\n let rejectDone: ((error: Error & { retryable?: boolean }) => void) | null = null;\r\n const donePromise = new Promise<SttWsResult>((resolve, reject) => {\r\n resolveDone = resolve;\r\n rejectDone = reject;\r\n });\r\n\r\n const rejectAll = (error: Error & { retryable?: boolean }) => {\r\n if (settled) return;\r\n settled = true;\r\n console.warn(\"[Bulut] STT WS rejected:\", error.message);\r\n rejectStart?.(error);\r\n rejectDone?.(error);\r\n };\r\n\r\n const resolveDoneIfPossible = () => {\r\n if (settled) return;\r\n if (!finalText.trim() || !finalSessionId) return;\r\n settled = true;\r\n resolveStart?.();\r\n resolveDone?.({\r\n text: finalText.trim(),\r\n session_id: finalSessionId,\r\n });\r\n };\r\n\r\n socket.onopen = () => {\r\n console.info(\"[Bulut] STT WS connected, sending start\");\r\n events.onRequestSent?.();\r\n socket.send(\r\n JSON.stringify({\r\n type: \"start\",\r\n project_id: config.projectId,\r\n session_id: config.sessionId || undefined,\r\n language: config.language || \"tr\",\r\n mime_type: config.mimeType || \"audio/webm\",\r\n }),\r\n );\r\n };\r\n\r\n socket.onmessage = (event) => {\r\n const payload = parseSttWsEventPayload(String(event.data));\r\n if (!payload) return;\r\n\r\n if (payload.type === \"start_ack\" && typeof payload.session_id === \"string\") {\r\n console.info(\"[Bulut] STT WS start_ack received, session:\", payload.session_id);\r\n finalSessionId = payload.session_id;\r\n events.onSessionId?.(payload.session_id);\r\n resolveStart?.();\r\n return;\r\n }\r\n\r\n if (payload.type === \"partial\" && typeof payload.text === \"string\") {\r\n events.onPartial?.({\r\n seq: typeof payload.seq === \"number\" ? payload.seq : 0,\r\n text: payload.text,\r\n });\r\n return;\r\n }\r\n\r\n if (payload.type === \"final\" && typeof payload.text === \"string\") {\r\n console.info(\"[Bulut] STT WS final text received:\", payload.text.slice(0, 80));\r\n finalText = payload.text;\r\n if (typeof payload.session_id === \"string\") {\r\n finalSessionId = payload.session_id;\r\n events.onSessionId?.(payload.session_id);\r\n }\r\n return;\r\n }\r\n\r\n if (payload.type === \"done\") {\r\n console.info(\"[Bulut] STT WS done\");\r\n resolveDoneIfPossible();\r\n socket.close();\r\n return;\r\n }\r\n\r\n if (payload.type === \"error\") {\r\n console.error(\"[Bulut] STT WS server error:\", payload.error);\r\n const err = buildError(payload.error || \"stt_ws_error\", payload.retryable !== false);\r\n rejectAll(err);\r\n socket.close();\r\n }\r\n };\r\n\r\n socket.onerror = (ev) => {\r\n console.error(\"[Bulut] STT WS transport error\", ev);\r\n rejectAll(buildError(\"stt_ws_transport_error\", true));\r\n };\r\n\r\n socket.onclose = (ev) => {\r\n console.info(\"[Bulut] STT WS closed code=%d reason=%s\", ev.code, ev.reason);\r\n if (settled) return;\r\n if (finalText && finalSessionId) {\r\n resolveDoneIfPossible();\r\n return;\r\n }\r\n rejectAll(buildError(\"stt_ws_closed_before_done\", true));\r\n };\r\n\r\n return {\r\n pushChunk: (chunk: Blob): Promise<void> => {\r\n if (stopped || chunk.size === 0) return Promise.resolve();\r\n // Chain the entire operation (wait for connection, base64-encode,\r\n // send) into sendQueue so that a later stop() is guaranteed to\r\n // follow all previously-enqueued chunks.\r\n sendQueue = sendQueue.then(async () => {\r\n if (stopped) return;\r\n await startPromise;\r\n if (stopped) return;\r\n const audio = await blobToBase64(chunk);\r\n seq += 1;\r\n if (stopped || socket.readyState !== WebSocket.OPEN) return;\r\n console.debug(\"[Bulut] STT WS sending chunk seq=%d size=%d\", seq, chunk.size);\r\n socket.send(JSON.stringify({ type: \"chunk\", seq, audio }));\r\n });\r\n return sendQueue;\r\n },\r\n stop: (): Promise<SttWsResult> => {\r\n console.info(\"[Bulut] STT WS stop requested, draining %d pending chunks\", seq);\r\n // Chain after all pending pushChunk operations so the server\r\n // always receives every chunk before the stop message.\r\n sendQueue = sendQueue.then(async () => {\r\n await startPromise;\r\n if (stopped) return;\r\n if (socket.readyState === WebSocket.OPEN) {\r\n console.info(\"[Bulut] STT WS sending stop after seq=%d\", seq);\r\n socket.send(JSON.stringify({ type: \"stop\" }));\r\n }\r\n });\r\n return donePromise;\r\n },\r\n cancel: () => {\r\n stopped = true;\r\n try {\r\n socket.close();\r\n } catch {\r\n // no-op\r\n }\r\n },\r\n };\r\n};\r\n\r\ninterface TtsCollectResult {\r\n chunks: Uint8Array<ArrayBuffer>[];\r\n mimeType: string;\r\n sampleRate: number;\r\n}\r\n\r\nconst buildError = (message: string, retryable: boolean = true): Error & { retryable: boolean } => {\r\n const error = new Error(message) as Error & { retryable: boolean };\r\n error.retryable = retryable;\r\n return error;\r\n};\r\n\r\nconst collectTtsViaSse = async (\r\n baseUrl: string,\r\n assistantText: string,\r\n voice: string,\r\n accessibilityMode: boolean,\r\n isStopped: () => boolean,\r\n setReader: (reader: ReadableStreamDefaultReader<Uint8Array> | undefined) => void,\r\n): Promise<TtsCollectResult> => {\r\n const ttsFormData = new FormData();\r\n ttsFormData.append(\"text\", assistantText);\r\n ttsFormData.append(\"voice\", voice);\r\n ttsFormData.append(\"accessibility_mode\", String(accessibilityMode));\r\n\r\n const ttsResponse = await fetch(`${normalizeBaseUrl(baseUrl)}/chat/tts`, {\r\n method: \"POST\",\r\n body: ttsFormData,\r\n });\r\n\r\n if (!ttsResponse.ok) {\r\n throw buildError(await parseErrorBody(ttsResponse), false);\r\n }\r\n\r\n const reader = ttsResponse.body?.getReader();\r\n if (!reader) {\r\n throw buildError(\"TTS response body is not readable\", false);\r\n }\r\n\r\n setReader(reader);\r\n\r\n const chunks: Uint8Array<ArrayBuffer>[] = [];\r\n let mimeType = \"audio/mpeg\";\r\n let sampleRate = 16000;\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n\r\n while (true) {\r\n if (isStopped()) {\r\n break;\r\n }\r\n\r\n const { done, value } = await reader.read();\r\n if (done) {\r\n break;\r\n }\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n const blocks = buffer.split(/\\r?\\n\\r?\\n/);\r\n buffer = blocks.pop() || \"\";\r\n\r\n for (const block of blocks) {\r\n const payload = parseSseEventPayload(block);\r\n if (!payload) {\r\n continue;\r\n }\r\n\r\n if (isAudioSsePayload(payload)) {\r\n const format = payload.format || \"mp3\";\r\n mimeType = payload.mime_type || (format === \"webm\" ? \"audio/webm\" : \"audio/mpeg\");\r\n chunks.push(base64ToUint8Array(payload.audio));\r\n if (payload.sample_rate) {\r\n sampleRate = payload.sample_rate;\r\n }\r\n }\r\n }\r\n }\r\n\r\n reader.releaseLock();\r\n setReader(undefined);\r\n\r\n return { chunks, mimeType, sampleRate };\r\n};\r\n\r\nconst collectTtsViaWebSocket = async (\r\n baseUrl: string,\r\n assistantText: string,\r\n voice: string,\r\n accessibilityMode: boolean,\r\n isStopped: () => boolean,\r\n setSocket: (socket: WebSocket | null) => void,\r\n): Promise<TtsCollectResult> => {\r\n const wsUrl = toWebSocketUrl(baseUrl, \"/chat/tts/ws\");\r\n const requestId = createRequestId();\r\n const chunks: Uint8Array<ArrayBuffer>[] = [];\r\n let mimeType = \"audio/mpeg\";\r\n let sampleRate = 16000;\r\n let highestSeqSeen = 0;\r\n\r\n const connectOnce = (): Promise<void> =>\r\n new Promise((resolve, reject) => {\r\n if (isStopped()) {\r\n reject(buildError(\"stream_stopped\", false));\r\n return;\r\n }\r\n\r\n let done = false;\r\n let finalError: (Error & { retryable?: boolean }) | null = null;\r\n const socket = new WebSocket(wsUrl);\r\n setSocket(socket);\r\n\r\n const finalize = (\r\n mode: \"resolve\" | \"reject\",\r\n error?: Error & { retryable?: boolean },\r\n ) => {\r\n socket.onopen = null;\r\n socket.onmessage = null;\r\n socket.onerror = null;\r\n socket.onclose = null;\r\n setSocket(null);\r\n if (mode === \"resolve\") {\r\n resolve();\r\n return;\r\n }\r\n reject(error || buildError(\"tts_ws_closed\", true));\r\n };\r\n\r\n socket.onopen = () => {\r\n console.info(\r\n `[Bulut] TTS WS connected request_id=${requestId} resume_seq=${highestSeqSeen}`,\r\n );\r\n socket.send(\r\n JSON.stringify({\r\n type: \"start\",\r\n request_id: requestId,\r\n text: assistantText,\r\n voice,\r\n accessibility_mode: accessibilityMode,\r\n last_seq: highestSeqSeen,\r\n }),\r\n );\r\n };\r\n\r\n socket.onmessage = (event) => {\r\n const payload = parseTtsWsEventPayload(String(event.data));\r\n if (!payload) {\r\n console.warn(\"[Bulut] TTS WS invalid JSON payload\");\r\n return;\r\n }\r\n\r\n if (payload.type === \"audio\" && typeof payload.audio === \"string\") {\r\n const seq = typeof payload.seq === \"number\" ? payload.seq : 0;\r\n if (shouldAcceptAudioSeq(seq, highestSeqSeen)) {\r\n chunks.push(base64ToUint8Array(payload.audio));\r\n highestSeqSeen = seq;\r\n if (payload.mime_type) {\r\n mimeType = payload.mime_type;\r\n }\r\n if (typeof payload.sample_rate === \"number\") {\r\n sampleRate = payload.sample_rate;\r\n }\r\n } else {\r\n console.info(\r\n `[Bulut] TTS WS duplicate chunk ignored request_id=${requestId} seq=${seq} seen=${highestSeqSeen}`,\r\n );\r\n }\r\n\r\n if (socket.readyState === WebSocket.OPEN) {\r\n socket.send(\r\n JSON.stringify({\r\n type: \"ack\",\r\n request_id: requestId,\r\n last_seq: highestSeqSeen,\r\n }),\r\n );\r\n }\r\n return;\r\n }\r\n\r\n if (payload.type === \"done\") {\r\n const streamLastSeq =\r\n typeof payload.last_seq === \"number\" ? payload.last_seq : highestSeqSeen;\r\n if (streamLastSeq > highestSeqSeen) {\r\n finalError = buildError(\"tts_ws_sequence_gap\", true);\r\n done = false;\r\n socket.close();\r\n return;\r\n }\r\n done = true;\r\n socket.close();\r\n return;\r\n }\r\n\r\n if (payload.type === \"error\") {\r\n finalError = buildError(payload.error || \"tts_ws_error\", payload.retryable !== false);\r\n done = false;\r\n socket.close();\r\n }\r\n };\r\n\r\n socket.onerror = () => {\r\n if (!finalError) {\r\n finalError = buildError(\"tts_ws_transport_error\", true);\r\n }\r\n };\r\n\r\n socket.onclose = () => {\r\n if (isStopped()) {\r\n finalize(\"reject\", buildError(\"stream_stopped\", false));\r\n return;\r\n }\r\n if (done) {\r\n finalize(\"resolve\");\r\n return;\r\n }\r\n finalize(\"reject\", finalError || buildError(\"tts_ws_closed_before_done\", true));\r\n };\r\n });\r\n\r\n for (let attempt = 0; attempt <= TTS_WS_RETRY_DELAYS_MS.length; attempt += 1) {\r\n if (attempt > 0) {\r\n const delay = TTS_WS_RETRY_DELAYS_MS[attempt - 1];\r\n console.warn(\r\n `[Bulut] TTS WS retry attempt=${attempt} delay_ms=${delay} last_seq=${highestSeqSeen}`,\r\n );\r\n await sleep(delay);\r\n }\r\n\r\n try {\r\n await connectOnce();\r\n return { chunks, mimeType, sampleRate };\r\n } catch (error) {\r\n const retryable =\r\n shouldFallbackToSse(error);\r\n const message = error instanceof Error ? error.message : String(error);\r\n console.warn(\r\n `[Bulut] TTS WS attempt failed attempt=${attempt} retryable=${retryable} error=${message}`,\r\n );\r\n if (!retryable || attempt === TTS_WS_RETRY_DELAYS_MS.length) {\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n throw buildError(\"tts_ws_exhausted\", true);\r\n};\r\n\r\n// ── Agent-mode Types ────────────────────────────────────────────────\r\n\r\nexport interface AgentToolCallInfo {\r\n call_id: string;\r\n tool: string;\r\n args: Record<string, unknown>;\r\n}\r\n\r\nexport interface AgentVoiceChatEvents {\r\n onSttRequestSent?: () => void;\r\n onTranscription?: (data: {\r\n session_id: string;\r\n user_text: string;\r\n }) => void;\r\n onAssistantDelta?: (delta: string) => void;\r\n onAssistantDone?: (assistantText: string) => void;\r\n onAudioStateChange?: (state: AudioStreamState) => void;\r\n onError?: (error: string) => void;\r\n /** Called when the agent requests tool execution on the frontend. */\r\n onToolCalls?: (calls: AgentToolCallInfo[]) => void;\r\n /** Called after each tool has been executed with the result. */\r\n onToolResult?: (callId: string, toolName: string, result: string) => void;\r\n /** Called at the start of each agent iteration. */\r\n onIteration?: (iteration: number, maxIterations: number) => void;\r\n /** Called when the backend confirms / creates a session ID. */\r\n onSessionId?: (sessionId: string) => void;\r\n /**\r\n * Called when the agent emits a reply text followed by tool calls.\r\n * This text is spoken aloud before the tools run so the user hears\r\n * every piece of the conversation, not just the final reply.\r\n */\r\n onIntermediateReply?: (text: string) => void;\r\n}\r\n\r\n/**\r\n * Standalone TTS helper: synthesize + play a text snippet.\r\n * Uses WebSocket TTS with SSE fallback, same as the main stream functions.\r\n */\r\nexport const speakText = async (\r\n baseUrl: string,\r\n text: string,\r\n voice: string,\r\n accessibilityMode: boolean,\r\n onAudioStateChange?: (state: AudioStreamState) => void,\r\n): Promise<void> => {\r\n const trimmed = text.trim();\r\n if (!trimmed) return;\r\n\r\n console.info(`[Bulut] speakText start (${trimmed.length} chars)`);\r\n onAudioStateChange?.(\"rendering\");\r\n let ttsResult: TtsCollectResult;\r\n\r\n const neverStopped = () => false;\r\n\r\n try {\r\n ttsResult = await collectTtsViaWebSocket(\r\n baseUrl, trimmed, voice, accessibilityMode,\r\n neverStopped,\r\n () => {},\r\n );\r\n } catch {\r\n ttsResult = await collectTtsViaSse(\r\n baseUrl, trimmed, voice, accessibilityMode,\r\n neverStopped,\r\n () => {},\r\n );\r\n }\r\n\r\n if (ttsResult.chunks.length > 0) {\r\n await playBufferedAudio(\r\n ttsResult.chunks, ttsResult.mimeType, ttsResult.sampleRate,\r\n onAudioStateChange,\r\n );\r\n } else {\r\n onAudioStateChange?.(\"done\");\r\n }\r\n};\r\n\r\n// ── Agent Voice Chat Stream (STT → Agent WS → TTS) ─────────────────\r\n\r\nexport const agentVoiceChatStream = (\r\n baseUrl: string,\r\n audioFile: File,\r\n projectId: string,\r\n sessionId: string | null,\r\n config: {\r\n model: string;\r\n voice: string;\r\n pageContext?: string;\r\n accessibilityMode?: boolean;\r\n },\r\n events: AgentVoiceChatEvents,\r\n executeTool: (call: AgentToolCallInfo) => Promise<{ call_id: string; result: string }>,\r\n): StreamController => {\r\n let isStopped = false;\r\n let activeSocket: WebSocket | null = null;\r\n let activeReader: ReadableStreamDefaultReader<Uint8Array> | undefined;\r\n let errorEmitted = false;\r\n\r\n const donePromise = new Promise<void>(async (resolve, reject) => {\r\n try {\r\n // ── 1. STT ────────────────────────────────────────────────\r\n if (isStopped) return resolve();\r\n const sttResult = await transcribeAudio(\r\n baseUrl,\r\n audioFile,\r\n projectId,\r\n sessionId,\r\n \"tr\",\r\n events.onSttRequestSent,\r\n );\r\n\r\n const currentSessionId = sttResult.session_id;\r\n let effectiveSessionId = currentSessionId;\r\n const userText = sttResult.text;\r\n\r\n events.onTranscription?.({\r\n session_id: currentSessionId,\r\n user_text: userText,\r\n });\r\n\r\n if (isStopped) return resolve();\r\n\r\n // ── 2. Agent loop via WebSocket ───────────────────────────\r\n const assistantText = await new Promise<string>((agentResolve, agentReject) => {\r\n if (isStopped) { agentResolve(\"\"); return; }\r\n\r\n const wsUrl = toWebSocketUrl(baseUrl, \"/chat/agent/ws\");\r\n const socket = new WebSocket(wsUrl);\r\n activeSocket = socket;\r\n\r\n let finalReply = \"\";\r\n let resolved = false;\r\n let accumulatedDelta = \"\";\r\n\r\n const finish = (reply: string) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentResolve(reply);\r\n };\r\n\r\n const fail = (error: Error) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentReject(error);\r\n };\r\n\r\n socket.onopen = () => {\r\n console.info(\"[Bulut] Agent WS connected\");\r\n socket.send(JSON.stringify({\r\n type: \"start\",\r\n project_id: projectId,\r\n session_id: currentSessionId,\r\n user_text: userText,\r\n model: config.model,\r\n page_context: config.pageContext,\r\n accessibility_mode: config.accessibilityMode,\r\n }));\r\n };\r\n\r\n socket.onmessage = async (event) => {\r\n let data: Record<string, unknown>;\r\n try {\r\n data = JSON.parse(String(event.data));\r\n } catch {\r\n console.warn(\"[Bulut] Agent WS invalid JSON\");\r\n return;\r\n }\r\n\r\n const msgType = data.type as string;\r\n\r\n if (msgType === \"session\" && typeof data.session_id === \"string\") {\r\n effectiveSessionId = data.session_id as string;\r\n events.onSessionId?.(effectiveSessionId);\r\n return;\r\n }\r\n\r\n if (msgType === \"iteration\") {\r\n events.onIteration?.(\r\n data.iteration as number,\r\n data.max_iterations as number,\r\n );\r\n return;\r\n }\r\n\r\n if (msgType === \"reply_delta\" && typeof data.delta === \"string\") {\r\n accumulatedDelta += data.delta;\r\n events.onAssistantDelta?.(data.delta);\r\n return;\r\n }\r\n\r\n if (msgType === \"tool_calls\" && Array.isArray(data.calls)) {\r\n const calls = data.calls as AgentToolCallInfo[];\r\n\r\n // Speak accumulated text before running tools\r\n if (accumulatedDelta.trim()) {\r\n events.onIntermediateReply?.(accumulatedDelta.trim());\r\n }\r\n accumulatedDelta = \"\";\r\n\r\n events.onToolCalls?.(calls);\r\n\r\n const results: { call_id: string; result: string }[] = [];\r\n for (const call of calls) {\r\n // Save resume state before navigate in case of full-page reload\r\n const isNavigate = call.tool === \"navigate\";\r\n if (isNavigate) {\r\n savePendingAgentResume({\r\n sessionId: effectiveSessionId,\r\n projectId,\r\n model: config.model,\r\n voice: config.voice,\r\n accessibilityMode: Boolean(config.accessibilityMode),\r\n pendingToolCalls: calls.map((c) => ({\r\n call_id: c.call_id,\r\n tool: c.tool,\r\n args: c.args,\r\n })),\r\n completedResults: [...results],\r\n });\r\n }\r\n\r\n const result = await executeTool(call);\r\n\r\n // If we reach here, no full-page reload happened\r\n if (isNavigate) {\r\n clearPendingAgentResume();\r\n }\r\n\r\n events.onToolResult?.(call.call_id, call.tool, result.result);\r\n results.push(result);\r\n }\r\n\r\n if (socket.readyState === WebSocket.OPEN) {\r\n socket.send(JSON.stringify({\r\n type: \"tool_results\",\r\n results,\r\n }));\r\n }\r\n return;\r\n }\r\n\r\n if (msgType === \"agent_done\") {\r\n finalReply = (data.final_reply as string) || \"\";\r\n events.onAssistantDone?.(finalReply);\r\n if (typeof data.session_id === \"string\") {\r\n events.onSessionId?.(data.session_id as string);\r\n }\r\n finish(finalReply);\r\n return;\r\n }\r\n\r\n if (msgType === \"error\") {\r\n const errMsg = (data.error as string) || \"Agent error\";\r\n errorEmitted = true;\r\n events.onError?.(errMsg);\r\n fail(new Error(errMsg));\r\n return;\r\n }\r\n };\r\n\r\n socket.onerror = () => {\r\n console.error(\"[Bulut] Agent WS error\");\r\n errorEmitted = true;\r\n events.onError?.(\"Agent WebSocket connection error\");\r\n fail(new Error(\"Agent WebSocket connection error\"));\r\n };\r\n\r\n socket.onclose = () => {\r\n console.info(\"[Bulut] Agent WS closed\");\r\n finish(finalReply);\r\n };\r\n });\r\n\r\n activeSocket = null;\r\n\r\n // ── 3. TTS ────────────────────────────────────────────────\r\n if (isStopped || !assistantText) {\r\n return resolve();\r\n }\r\n\r\n console.info(\r\n `[Bulut] TTS start mode=agent voice=${config.voice}`,\r\n );\r\n\r\n events.onAudioStateChange?.(\"rendering\");\r\n let ttsResult: TtsCollectResult;\r\n\r\n try {\r\n ttsResult = await collectTtsViaWebSocket(\r\n baseUrl,\r\n assistantText,\r\n config.voice,\r\n Boolean(config.accessibilityMode),\r\n () => isStopped,\r\n (socket) => { activeSocket = socket; },\r\n );\r\n } catch (wsError) {\r\n if (isStopped) return resolve();\r\n console.warn(\r\n `[Bulut] TTS WS failed, falling back to SSE: ${wsError instanceof Error ? wsError.message : String(wsError)}`,\r\n );\r\n ttsResult = await collectTtsViaSse(\r\n baseUrl,\r\n assistantText,\r\n config.voice,\r\n Boolean(config.accessibilityMode),\r\n () => isStopped,\r\n (reader) => { activeReader = reader; },\r\n );\r\n }\r\n\r\n if (!isStopped && ttsResult.chunks.length > 0) {\r\n await playBufferedAudio(\r\n ttsResult.chunks,\r\n ttsResult.mimeType,\r\n ttsResult.sampleRate,\r\n events.onAudioStateChange,\r\n );\r\n } else {\r\n events.onAudioStateChange?.(\"done\");\r\n }\r\n\r\n resolve();\r\n } catch (err) {\r\n // Only emit onError if it hasn't been emitted already by the WS handler\r\n if (!errorEmitted) {\r\n const msg = err instanceof Error ? err.message : String(err);\r\n events.onError?.(msg);\r\n }\r\n reject(err);\r\n } finally {\r\n activeReader?.cancel().catch(() => { });\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n activeSocket = null;\r\n }\r\n });\r\n\r\n return {\r\n stop: () => {\r\n isStopped = true;\r\n if (activeReader) {\r\n activeReader.cancel().catch(() => { });\r\n }\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n },\r\n done: donePromise,\r\n };\r\n};\r\n\r\n// ── Agent Text Chat Stream (no STT, Agent WS → TTS) ────────────────\r\n\r\nexport const agentTextChatStream = (\r\n baseUrl: string,\r\n userText: string,\r\n projectId: string,\r\n sessionId: string | null,\r\n config: {\r\n model: string;\r\n voice: string;\r\n pageContext?: string;\r\n accessibilityMode?: boolean;\r\n },\r\n events: AgentVoiceChatEvents,\r\n executeTool: (call: AgentToolCallInfo) => Promise<{ call_id: string; result: string }>,\r\n): StreamController => {\r\n let isStopped = false;\r\n let activeSocket: WebSocket | null = null;\r\n let activeReader: ReadableStreamDefaultReader<Uint8Array> | undefined;\r\n let errorEmitted = false;\r\n\r\n const donePromise = new Promise<void>(async (resolve, reject) => {\r\n try {\r\n if (isStopped) return resolve();\r\n\r\n // ── 1. Agent loop via WebSocket ───────────────────────────\r\n const assistantText = await new Promise<string>((agentResolve, agentReject) => {\r\n if (isStopped) { agentResolve(\"\"); return; }\r\n\r\n const wsUrl = toWebSocketUrl(baseUrl, \"/chat/agent/ws\");\r\n const socket = new WebSocket(wsUrl);\r\n activeSocket = socket;\r\n\r\n let finalReply = \"\";\r\n let resolved = false;\r\n let effectiveSessionId = sessionId || \"\";\r\n let accumulatedDelta = \"\";\r\n\r\n const finish = (reply: string) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentResolve(reply);\r\n };\r\n\r\n const fail = (error: Error) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentReject(error);\r\n };\r\n\r\n socket.onopen = () => {\r\n socket.send(JSON.stringify({\r\n type: \"start\",\r\n project_id: projectId,\r\n session_id: sessionId,\r\n user_text: userText,\r\n model: config.model,\r\n page_context: config.pageContext,\r\n accessibility_mode: config.accessibilityMode,\r\n }));\r\n };\r\n\r\n socket.onmessage = async (event) => {\r\n let data: Record<string, unknown>;\r\n try {\r\n data = JSON.parse(String(event.data));\r\n } catch { return; }\r\n\r\n const msgType = data.type as string;\r\n\r\n if (msgType === \"session\" && typeof data.session_id === \"string\") {\r\n effectiveSessionId = data.session_id as string;\r\n events.onSessionId?.(effectiveSessionId);\r\n return;\r\n }\r\n\r\n if (msgType === \"iteration\") {\r\n events.onIteration?.(\r\n data.iteration as number,\r\n data.max_iterations as number,\r\n );\r\n return;\r\n }\r\n\r\n if (msgType === \"reply_delta\" && typeof data.delta === \"string\") {\r\n accumulatedDelta += data.delta;\r\n events.onAssistantDelta?.(data.delta);\r\n return;\r\n }\r\n\r\n if (msgType === \"tool_calls\" && Array.isArray(data.calls)) {\r\n const calls = data.calls as AgentToolCallInfo[];\r\n\r\n // Speak accumulated text before running tools\r\n if (accumulatedDelta.trim()) {\r\n events.onIntermediateReply?.(accumulatedDelta.trim());\r\n }\r\n accumulatedDelta = \"\";\r\n\r\n events.onToolCalls?.(calls);\r\n\r\n const results: { call_id: string; result: string }[] = [];\r\n for (const call of calls) {\r\n const isNavigate = call.tool === \"navigate\";\r\n if (isNavigate) {\r\n savePendingAgentResume({\r\n sessionId: effectiveSessionId,\r\n projectId,\r\n model: config.model,\r\n voice: config.voice,\r\n accessibilityMode: Boolean(config.accessibilityMode),\r\n pendingToolCalls: calls.map((c) => ({\r\n call_id: c.call_id,\r\n tool: c.tool,\r\n args: c.args,\r\n })),\r\n completedResults: [...results],\r\n });\r\n }\r\n\r\n const result = await executeTool(call);\r\n\r\n if (isNavigate) {\r\n clearPendingAgentResume();\r\n }\r\n\r\n events.onToolResult?.(call.call_id, call.tool, result.result);\r\n results.push(result);\r\n }\r\n\r\n if (socket.readyState === WebSocket.OPEN) {\r\n socket.send(JSON.stringify({\r\n type: \"tool_results\",\r\n results,\r\n }));\r\n }\r\n return;\r\n }\r\n\r\n if (msgType === \"agent_done\") {\r\n finalReply = (data.final_reply as string) || \"\";\r\n events.onAssistantDone?.(finalReply);\r\n if (typeof data.session_id === \"string\") {\r\n events.onSessionId?.(data.session_id as string);\r\n }\r\n finish(finalReply);\r\n return;\r\n }\r\n\r\n if (msgType === \"error\") {\r\n const errMsg = (data.error as string) || \"Agent error\";\r\n errorEmitted = true;\r\n events.onError?.(errMsg);\r\n fail(new Error(errMsg));\r\n return;\r\n }\r\n };\r\n\r\n socket.onerror = () => {\r\n errorEmitted = true;\r\n events.onError?.(\"Agent WebSocket error\");\r\n fail(new Error(\"Agent WebSocket error\"));\r\n };\r\n socket.onclose = () => finish(finalReply);\r\n });\r\n\r\n activeSocket = null;\r\n\r\n // ── 2. TTS ────────────────────────────────────────────────\r\n if (isStopped || !assistantText) return resolve();\r\n\r\n events.onAudioStateChange?.(\"rendering\");\r\n let ttsResult: TtsCollectResult;\r\n\r\n try {\r\n ttsResult = await collectTtsViaWebSocket(\r\n baseUrl, assistantText, config.voice, Boolean(config.accessibilityMode),\r\n () => isStopped,\r\n (socket) => { activeSocket = socket; },\r\n );\r\n } catch (wsError) {\r\n if (isStopped) return resolve();\r\n ttsResult = await collectTtsViaSse(\r\n baseUrl, assistantText, config.voice, Boolean(config.accessibilityMode),\r\n () => isStopped,\r\n (reader) => { activeReader = reader; },\r\n );\r\n }\r\n\r\n if (!isStopped && ttsResult.chunks.length > 0) {\r\n await playBufferedAudio(\r\n ttsResult.chunks, ttsResult.mimeType, ttsResult.sampleRate,\r\n events.onAudioStateChange,\r\n );\r\n } else {\r\n events.onAudioStateChange?.(\"done\");\r\n }\r\n\r\n resolve();\r\n } catch (err) {\r\n if (!errorEmitted) {\r\n const msg = err instanceof Error ? err.message : String(err);\r\n events.onError?.(msg);\r\n }\r\n reject(err);\r\n } finally {\r\n activeReader?.cancel().catch(() => { });\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n activeSocket = null;\r\n }\r\n });\r\n\r\n return {\r\n stop: () => {\r\n isStopped = true;\r\n if (activeReader) activeReader.cancel().catch(() => { });\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n },\r\n done: donePromise,\r\n };\r\n};\r\n\r\n// ── Agent Resume Stream (after page navigation reload) ──────────────\r\n//\r\n// When a navigate tool causes a full-page reload, the agent WS is lost.\r\n// This function opens a new WS with {type: \"resume\"}, sends the\r\n// completed tool results (including the navigate result with the new\r\n// page context), and continues the agent loop from where it left off.\r\n\r\nexport const agentResumeStream = (\r\n baseUrl: string,\r\n resumeState: PendingAgentResume,\r\n pageContext: string,\r\n events: AgentVoiceChatEvents,\r\n executeTool: (call: AgentToolCallInfo) => Promise<{ call_id: string; result: string }>,\r\n): StreamController => {\r\n let isStopped = false;\r\n let activeSocket: WebSocket | null = null;\r\n let activeReader: ReadableStreamDefaultReader<Uint8Array> | undefined;\r\n let errorEmitted = false;\r\n\r\n // Build tool results for the calls that were pending when the page reloaded.\r\n // Navigate results include the new page context; other tools that couldn't\r\n // execute get a descriptive skip message.\r\n const allResults = [...resumeState.completedResults];\r\n for (const tc of resumeState.pendingToolCalls) {\r\n if (allResults.some((r) => r.call_id === tc.call_id)) continue;\r\n if (tc.tool === \"navigate\") {\r\n allResults.push({\r\n call_id: tc.call_id,\r\n result: `Navigasyon tamamlandı. Şu anki sayfa: ${typeof window !== \"undefined\" ? window.location.href : \"\"}\\nSayfa bağlamı: ${pageContext}`,\r\n });\r\n } else {\r\n allResults.push({\r\n call_id: tc.call_id,\r\n result: \"Sayfa yeniden yüklendi, bu araç çalıştırılamadı.\",\r\n });\r\n }\r\n }\r\n\r\n const donePromise = new Promise<void>(async (resolve, reject) => {\r\n try {\r\n if (isStopped) return resolve();\r\n\r\n let effectiveSessionId = resumeState.sessionId;\r\n\r\n const assistantText = await new Promise<string>((agentResolve, agentReject) => {\r\n if (isStopped) { agentResolve(\"\"); return; }\r\n\r\n const wsUrl = toWebSocketUrl(baseUrl, \"/chat/agent/ws\");\r\n const socket = new WebSocket(wsUrl);\r\n activeSocket = socket;\r\n\r\n let finalReply = \"\";\r\n let resolved = false;\r\n let accumulatedDelta = \"\";\r\n\r\n const finish = (reply: string) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentResolve(reply);\r\n };\r\n\r\n const fail = (error: Error) => {\r\n if (resolved) return;\r\n resolved = true;\r\n agentReject(error);\r\n };\r\n\r\n socket.onopen = () => {\r\n console.info(\"[Bulut] Agent WS resume connected\");\r\n socket.send(JSON.stringify({\r\n type: \"resume\",\r\n project_id: resumeState.projectId,\r\n session_id: resumeState.sessionId,\r\n model: resumeState.model,\r\n page_context: pageContext,\r\n accessibility_mode: resumeState.accessibilityMode,\r\n pending_tool_calls: resumeState.pendingToolCalls,\r\n tool_results: allResults,\r\n }));\r\n };\r\n\r\n socket.onmessage = async (event) => {\r\n let data: Record<string, unknown>;\r\n try {\r\n data = JSON.parse(String(event.data));\r\n } catch { return; }\r\n\r\n const msgType = data.type as string;\r\n\r\n if (msgType === \"session\" && typeof data.session_id === \"string\") {\r\n effectiveSessionId = data.session_id as string;\r\n events.onSessionId?.(effectiveSessionId);\r\n return;\r\n }\r\n\r\n if (msgType === \"iteration\") {\r\n events.onIteration?.(\r\n data.iteration as number,\r\n data.max_iterations as number,\r\n );\r\n return;\r\n }\r\n\r\n if (msgType === \"reply_delta\" && typeof data.delta === \"string\") {\r\n accumulatedDelta += data.delta;\r\n events.onAssistantDelta?.(data.delta);\r\n return;\r\n }\r\n\r\n if (msgType === \"tool_calls\" && Array.isArray(data.calls)) {\r\n const calls = data.calls as AgentToolCallInfo[];\r\n\r\n // Speak accumulated text before running tools\r\n if (accumulatedDelta.trim()) {\r\n events.onIntermediateReply?.(accumulatedDelta.trim());\r\n }\r\n accumulatedDelta = \"\";\r\n\r\n events.onToolCalls?.(calls);\r\n\r\n const results: { call_id: string; result: string }[] = [];\r\n for (const call of calls) {\r\n const isNavigate = call.tool === \"navigate\";\r\n if (isNavigate) {\r\n savePendingAgentResume({\r\n sessionId: effectiveSessionId,\r\n projectId: resumeState.projectId,\r\n model: resumeState.model,\r\n voice: resumeState.voice,\r\n accessibilityMode: resumeState.accessibilityMode,\r\n pendingToolCalls: calls.map((c) => ({\r\n call_id: c.call_id,\r\n tool: c.tool,\r\n args: c.args,\r\n })),\r\n completedResults: [...results],\r\n });\r\n }\r\n\r\n const result = await executeTool(call);\r\n\r\n if (isNavigate) {\r\n clearPendingAgentResume();\r\n }\r\n\r\n events.onToolResult?.(call.call_id, call.tool, result.result);\r\n results.push(result);\r\n }\r\n\r\n if (socket.readyState === WebSocket.OPEN) {\r\n socket.send(JSON.stringify({ type: \"tool_results\", results }));\r\n }\r\n return;\r\n }\r\n\r\n if (msgType === \"agent_done\") {\r\n finalReply = (data.final_reply as string) || \"\";\r\n events.onAssistantDone?.(finalReply);\r\n if (typeof data.session_id === \"string\") {\r\n events.onSessionId?.(data.session_id as string);\r\n }\r\n finish(finalReply);\r\n return;\r\n }\r\n\r\n if (msgType === \"error\") {\r\n const errMsg = (data.error as string) || \"Agent error\";\r\n errorEmitted = true;\r\n events.onError?.(errMsg);\r\n fail(new Error(errMsg));\r\n return;\r\n }\r\n };\r\n\r\n socket.onerror = () => {\r\n errorEmitted = true;\r\n events.onError?.(\"Agent WebSocket error\");\r\n fail(new Error(\"Agent WebSocket error\"));\r\n };\r\n\r\n socket.onclose = () => finish(finalReply);\r\n });\r\n\r\n activeSocket = null;\r\n\r\n // ── TTS ────────────────────────────────────────────────\r\n if (isStopped || !assistantText) return resolve();\r\n\r\n console.info(`[Bulut] TTS start mode=resume voice=${resumeState.voice}`);\r\n events.onAudioStateChange?.(\"rendering\");\r\n let ttsResult: TtsCollectResult;\r\n\r\n try {\r\n ttsResult = await collectTtsViaWebSocket(\r\n baseUrl, assistantText, resumeState.voice, Boolean(resumeState.accessibilityMode),\r\n () => isStopped,\r\n (socket) => { activeSocket = socket; },\r\n );\r\n } catch (wsError) {\r\n if (isStopped) return resolve();\r\n console.warn(\r\n `[Bulut] TTS WS failed, falling back to SSE: ${wsError instanceof Error ? wsError.message : String(wsError)}`,\r\n );\r\n ttsResult = await collectTtsViaSse(\r\n baseUrl, assistantText, resumeState.voice, Boolean(resumeState.accessibilityMode),\r\n () => isStopped,\r\n (reader) => { activeReader = reader; },\r\n );\r\n }\r\n\r\n if (!isStopped && ttsResult.chunks.length > 0) {\r\n await playBufferedAudio(\r\n ttsResult.chunks, ttsResult.mimeType, ttsResult.sampleRate,\r\n events.onAudioStateChange,\r\n );\r\n } else {\r\n events.onAudioStateChange?.(\"done\");\r\n }\r\n\r\n resolve();\r\n } catch (err) {\r\n if (!errorEmitted) {\r\n const msg = err instanceof Error ? err.message : String(err);\r\n events.onError?.(msg);\r\n }\r\n reject(err);\r\n } finally {\r\n activeReader?.cancel().catch(() => { });\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n activeSocket = null;\r\n }\r\n });\r\n\r\n return {\r\n stop: () => {\r\n isStopped = true;\r\n if (activeReader) activeReader.cancel().catch(() => { });\r\n if (activeSocket && activeSocket.readyState <= WebSocket.OPEN) {\r\n activeSocket.close();\r\n }\r\n },\r\n done: donePromise,\r\n };\r\n};\r\n","import {\r\n completedSfxUrl,\r\n sentSfxUrl,\r\n thinkingSfxUrl,\r\n toolCallSfxUrl,\r\n} from \"../assets\";\r\n\r\nexport type SfxName = \"sent\" | \"thinking\" | \"toolCall\" | \"completed\";\r\n\r\nconst SFX_SOURCES: Record<SfxName, string> = {\r\n sent: sentSfxUrl,\r\n thinking: thinkingSfxUrl,\r\n toolCall: toolCallSfxUrl,\r\n completed: completedSfxUrl,\r\n};\r\n\r\nclass SfxManager {\r\n private queue: SfxName[] = [];\r\n private active = false;\r\n\r\n private playNow(name: SfxName): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (typeof window === \"undefined\") {\r\n resolve();\r\n return;\r\n }\r\n\r\n const audio = new Audio(SFX_SOURCES[name]);\r\n audio.preload = \"auto\";\r\n\r\n let settled = false;\r\n const finalize = () => {\r\n if (settled) return;\r\n settled = true;\r\n audio.onended = null;\r\n audio.onerror = null;\r\n resolve();\r\n };\r\n\r\n audio.onended = finalize;\r\n audio.onerror = finalize;\r\n void audio.play().catch(() => finalize());\r\n });\r\n }\r\n\r\n private async drain(): Promise<void> {\r\n if (this.active) return;\r\n this.active = true;\r\n try {\r\n while (this.queue.length > 0) {\r\n const next = this.queue.shift();\r\n if (!next) continue;\r\n await this.playNow(next);\r\n }\r\n } finally {\r\n this.active = false;\r\n }\r\n }\r\n\r\n playCue(name: SfxName): void {\r\n if (typeof window === \"undefined\") return;\r\n this.queue.push(name);\r\n if (!this.active) {\r\n void this.drain();\r\n }\r\n }\r\n}\r\n\r\nconst sfxManager = new SfxManager();\r\n\r\nexport const playCue = (name: SfxName): void => {\r\n sfxManager.playCue(name);\r\n};\r\n\r\n","import { useEffect, useLayoutEffect, useRef, useState } from \"preact/hooks\";\r\nimport type { JSX } from \"preact\";\r\nimport type { BulutRuntimeConfig } from \"../index\";\r\nimport {\r\n agentTextChatStream,\r\n agentVoiceChatStream,\r\n agentResumeStream,\r\n startSttWebSocketStream,\r\n speakText,\r\n type AudioStreamState,\r\n type StreamController,\r\n type AgentToolCallInfo,\r\n type SttWsController,\r\n} from \"../api/client\";\r\nimport {\r\n executeSingleToolCall,\r\n parseAgentResponse,\r\n getPendingAgentResume,\r\n clearPendingAgentResume,\r\n type ToolCallWithId,\r\n} from \"../agent/tools\";\r\nimport { getPageContext } from \"../agent/context\";\r\nimport {\r\n WINDOW_WIDTH,\r\n WINDOW_HEIGHT,\r\n POSITION_BOTTOM,\r\n POSITION_RIGHT,\r\n COLORS,\r\n TRANSITIONS,\r\n BORDER_RADIUS,\r\n SHADOW,\r\n} from \"../styles/constants\";\r\nimport {\r\n closeIconContent,\r\n microphoneIconContent,\r\n stopIconContent,\r\n restartIconContent,\r\n logoContent,\r\n} from \"../assets\";\r\nimport { StreamingJsonParser } from \"../utils/streamingJson\";\r\nimport { playCue, type SfxName } from \"../audio/sfxManager\";\r\n\r\nimport { SvgIcon } from \"./SvgIcon\";\r\n\r\nexport interface ChatWindowHandle {\r\n startRecording: () => void;\r\n cancelRecording: () => void;\r\n stopTask: () => void;\r\n}\r\n\r\ninterface ChatWindowProps {\r\n onClose: () => void;\r\n config: BulutRuntimeConfig;\r\n accessibilityMode?: boolean;\r\n onAccessibilityToggle?: () => void;\r\n hidden?: boolean;\r\n actionsRef?: { current: ChatWindowHandle | null };\r\n onRecordingChange?: (recording: boolean) => void;\r\n onBusyChange?: (busy: boolean) => void;\r\n onPreviewChange?: (text: string | null) => void;\r\n}\r\n\r\ninterface Message {\r\n id: number;\r\n text: string;\r\n isUser: boolean;\r\n /** \"message\" (default) | \"tool\" for tool call indicators */\r\n type?: \"message\" | \"tool\";\r\n}\r\n\r\ntype RecordingMode = \"vad\" | \"press\";\r\n\r\ntype StorageLike = {\r\n removeItem: (key: string) => void;\r\n};\r\n\r\nconst STORAGE_KEY = \"bulut_chat_history\";\r\nconst TIMESTAMP_KEY = \"bulut_chat_timestamp\";\r\nconst SESSION_ID_KEY = \"bulut_session_id\";\r\nconst TTL_MS = 5 * 60 * 1000;\r\nconst VAD_THRESHOLD = 0.06;\r\nconst SILENCE_DURATION_MS = 500;\r\nexport const HOLD_THRESHOLD_MS = 250;\r\n\r\nconst STATUS_LABELS = {\r\n ready: \"Hazır\",\r\n loading: \"Yükleniyor\",\r\n listening: \"Dinliyor\",\r\n transcribing: \"Metne dönüştürülüyor\",\r\n thinking: \"Düşünüyor\",\r\n playingAudio: \"Ses oynatılıyor\",\r\n runningTools: \"Araç çalıştırılıyor\",\r\n} as const;\r\n\r\nexport const getGreetingText = (agentName: string): string =>\r\n `Merhaba, ben ${agentName}. Bu web sayfasında neler yapalım?`;\r\n\r\nexport interface StatusFlags {\r\n isBusy: boolean;\r\n isRecording: boolean;\r\n isTranscribing: boolean;\r\n isThinking: boolean;\r\n isRenderingAudio: boolean;\r\n isPlayingAudio: boolean;\r\n isRunningTools: boolean;\r\n}\r\n\r\nexport const resolveStatusText = (flags: StatusFlags): string => {\r\n if (flags.isRecording) return STATUS_LABELS.listening;\r\n if (flags.isRunningTools) return STATUS_LABELS.runningTools;\r\n if (flags.isPlayingAudio) return STATUS_LABELS.playingAudio;\r\n if (flags.isThinking) return STATUS_LABELS.thinking;\r\n if (flags.isTranscribing) return STATUS_LABELS.transcribing;\r\n if (flags.isBusy) return STATUS_LABELS.loading;\r\n return STATUS_LABELS.ready;\r\n};\r\n\r\nexport const formatDurationMs = (durationMs: number): string => {\r\n const totalSeconds = Math.max(0, Math.floor(durationMs / 1000));\r\n const minutes = Math.floor(totalSeconds / 60)\r\n .toString()\r\n .padStart(2, \"0\");\r\n const seconds = (totalSeconds % 60).toString().padStart(2, \"0\");\r\n return `${minutes}:${seconds}`;\r\n};\r\n\r\nexport const classifyMicGesture = (\r\n durationMs: number,\r\n thresholdMs: number = HOLD_THRESHOLD_MS,\r\n): \"tap\" | \"hold\" => (durationMs >= thresholdMs ? \"hold\" : \"tap\");\r\n\r\nexport const createInitialMessages = (agentName: string): Message[] => [\r\n {\r\n id: 1,\r\n text: getGreetingText(agentName),\r\n isUser: false,\r\n },\r\n];\r\n\r\nexport const clearPersistedChatState = (storage: StorageLike | null): void => {\r\n if (!storage) {\r\n return;\r\n }\r\n\r\n storage.removeItem(STORAGE_KEY);\r\n storage.removeItem(TIMESTAMP_KEY);\r\n storage.removeItem(SESSION_ID_KEY);\r\n};\r\n\r\nexport const scrollElementToBottom = (\r\n element: { scrollTop: number; scrollHeight: number } | null,\r\n): void => {\r\n if (!element) {\r\n return;\r\n }\r\n\r\n element.scrollTop = element.scrollHeight;\r\n};\r\n\r\nconst normalizeError = (error: unknown) => {\r\n if (error instanceof Error) {\r\n return error.message;\r\n }\r\n return \"Bilinmeyen hata\";\r\n};\r\n\r\nconst getNextMessageId = (messages: Message[]): number => {\r\n const maxId = messages.reduce((acc, message) => Math.max(acc, message.id), 0);\r\n return maxId + 1;\r\n};\r\n\r\nexport interface AssistantPayloadResolution {\r\n displayText: string;\r\n toolCalls: ReturnType<typeof parseAgentResponse>[\"toolCalls\"];\r\n}\r\n\r\nexport const resolveAssistantPayload = (\r\n assistantText: string,\r\n): AssistantPayloadResolution => {\r\n const parsed = parseAgentResponse(assistantText);\r\n return {\r\n displayText: parsed.reply || assistantText,\r\n toolCalls: parsed.toolCalls,\r\n };\r\n};\r\n\r\nexport const shouldAutoListenAfterAudio = (\r\n accessibilityMode: boolean,\r\n isRecording: boolean,\r\n isBusy: boolean,\r\n): boolean => accessibilityMode && !isRecording && !isBusy;\r\n\r\nexport const ChatWindow = ({\r\n onClose,\r\n config,\r\n accessibilityMode = false,\r\n onAccessibilityToggle,\r\n hidden = false,\r\n actionsRef,\r\n onRecordingChange,\r\n onBusyChange,\r\n onPreviewChange,\r\n}: ChatWindowProps) => {\r\n const [messages, setMessages] = useState<Message[]>(() => {\r\n if (typeof localStorage !== \"undefined\") {\r\n const saved = localStorage.getItem(STORAGE_KEY);\r\n const timestamp = localStorage.getItem(TIMESTAMP_KEY);\r\n\r\n if (saved && timestamp) {\r\n const timePassed = Date.now() - parseInt(timestamp, 10);\r\n if (timePassed < TTL_MS) {\r\n try {\r\n return JSON.parse(saved) as Message[];\r\n } catch {\r\n // Ignore parse error and continue with default.\r\n }\r\n } else {\r\n clearPersistedChatState(localStorage);\r\n }\r\n }\r\n }\r\n\r\n return createInitialMessages(config.agentName);\r\n });\r\n\r\n const [isBusy, setIsBusy] = useState(false);\r\n const [isRecording, setIsRecording] = useState(false);\r\n const [isTranscribing, setIsTranscribing] = useState(false);\r\n const [isThinking, setIsThinking] = useState(false);\r\n const [isRenderingAudio, setIsRenderingAudio] = useState(false);\r\n const [isPlayingAudio, setIsPlayingAudio] = useState(false);\r\n const [isRunningTools, setIsRunningTools] = useState(false);\r\n const [recordingDurationMs, setRecordingDurationMs] = useState(0);\r\n const [statusOverride, setStatusOverride] = useState<string | null>(null);\r\n\r\n const resolvedStatusText = resolveStatusText({\r\n isBusy,\r\n isRecording,\r\n isTranscribing,\r\n isThinking,\r\n isRenderingAudio,\r\n isPlayingAudio,\r\n isRunningTools,\r\n });\r\n const statusText = statusOverride ?? resolvedStatusText;\r\n\r\n const isBusyRef = useRef(isBusy);\r\n const isRecordingRef = useRef(isRecording);\r\n\r\n const nextMessageIdRef = useRef(getNextMessageId(messages));\r\n const recorderRef = useRef<MediaRecorder | null>(null);\r\n const streamRef = useRef<MediaStream | null>(null);\r\n const audioChunksRef = useRef<BlobPart[]>([]);\r\n const activeStreamControllerRef = useRef<StreamController | null>(null);\r\n const sessionIdRef = useRef<string | null>(\r\n typeof localStorage !== \"undefined\"\r\n ? (() => {\r\n const ts = localStorage.getItem(TIMESTAMP_KEY);\r\n if (ts && Date.now() - parseInt(ts, 10) < TTL_MS) {\r\n return localStorage.getItem(SESSION_ID_KEY);\r\n }\r\n return null;\r\n })()\r\n : null,\r\n );\r\n\r\n const silenceStartRef = useRef<number | null>(null);\r\n const vadIntervalRef = useRef<number | null>(null);\r\n const audioContextRef = useRef<AudioContext | null>(null);\r\n const sourceRef = useRef<MediaStreamAudioSourceNode | null>(null);\r\n\r\n const discardNextRecordingRef = useRef(false);\r\n\r\n const micPressStartRef = useRef<number | null>(null);\r\n const micHoldTimeoutRef = useRef<number | null>(null);\r\n const micHoldTriggeredRef = useRef(false);\r\n const recordingModeRef = useRef<RecordingMode | null>(null);\r\n const pendingStopAfterStartRef = useRef(false);\r\n const startRecordingPendingRef = useRef(false);\r\n\r\n const assistantMessageIdRef = useRef<number | null>(null);\r\n const assistantTextBufferRef = useRef(\"\");\r\n const transcriptionReceivedRef = useRef(false);\r\n const assistantDoneReceivedRef = useRef(false);\r\n\r\n const recordingStartedAtRef = useRef<number | null>(null);\r\n const recordingTimerIntervalRef = useRef<number | null>(null);\r\n\r\n const messagesContainerRef = useRef<HTMLDivElement | null>(null);\r\n const messagesContentRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const pendingUserTextRef = useRef<string | null>(null);\r\n const pendingAssistantTextRef = useRef<string>(\"\");\r\n const streamingJsonParserRef = useRef<StreamingJsonParser | null>(null);\r\n const awaitingAssistantResponseRef = useRef(false);\r\n const activeSttWsRef = useRef<SttWsController | null>(null);\r\n const liveTranscriptionMessageIdRef = useRef<number | null>(null);\r\n const liveTranscriptionTextRef = useRef(\"\");\r\n const autoListenSuppressedRef = useRef(false);\r\n\r\n useEffect(() => {\r\n isBusyRef.current = isBusy;\r\n }, [isBusy]);\r\n\r\n useEffect(() => {\r\n isRecordingRef.current = isRecording;\r\n }, [isRecording]);\r\n\r\n // Report state changes to parent\r\n useEffect(() => { onRecordingChange?.(isRecording); }, [isRecording]);\r\n useEffect(() => { onBusyChange?.(isBusy); }, [isBusy]);\r\n\r\n // Derive and report preview text to parent\r\n useEffect(() => {\r\n if (!onPreviewChange) return;\r\n if (isRecording) {\r\n onPreviewChange(STATUS_LABELS.listening);\r\n return;\r\n }\r\n // When audio is rendering/playing, show the actual message text\r\n if (isRenderingAudio || isPlayingAudio) {\r\n const lastAssistant = [...messages].reverse().find(m => !m.isUser && m.type !== \"tool\");\r\n onPreviewChange(lastAssistant?.text ?? getGreetingText(config.agentName));\r\n return;\r\n }\r\n if (isBusy || isTranscribing || isThinking || isRunningTools) {\r\n const st = statusOverride ?? resolveStatusText({\r\n isBusy, isRecording, isTranscribing, isThinking,\r\n isRenderingAudio, isPlayingAudio, isRunningTools,\r\n });\r\n onPreviewChange(st);\r\n return;\r\n }\r\n // Show last assistant message (or greeting)\r\n const lastAssistant = [...messages].reverse().find(m => !m.isUser && m.type !== \"tool\");\r\n onPreviewChange(lastAssistant?.text ?? getGreetingText(config.agentName));\r\n }, [isRecording, isBusy, isTranscribing, isThinking, isRunningTools,\r\n isPlayingAudio, isRenderingAudio, statusOverride, messages]);\r\n\r\n const playSfx = (name: SfxName) => {\r\n playCue(name);\r\n };\r\n\r\n useEffect(() => {\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(messages));\r\n localStorage.setItem(TIMESTAMP_KEY, Date.now().toString());\r\n }\r\n }, [messages]);\r\n\r\n const scrollMessagesToBottom = () => {\r\n scrollElementToBottom(messagesContainerRef.current);\r\n };\r\n\r\n useLayoutEffect(() => {\r\n scrollMessagesToBottom();\r\n }, [messages, statusText, isBusy, isRecording]);\r\n\r\n useEffect(() => {\r\n const content = messagesContentRef.current;\r\n if (!content || typeof ResizeObserver === \"undefined\") {\r\n return;\r\n }\r\n\r\n const observer = new ResizeObserver(() => {\r\n scrollMessagesToBottom();\r\n });\r\n\r\n observer.observe(content);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n const stopRecordingTimer = () => {\r\n if (recordingTimerIntervalRef.current !== null) {\r\n window.clearInterval(recordingTimerIntervalRef.current);\r\n recordingTimerIntervalRef.current = null;\r\n }\r\n recordingStartedAtRef.current = null;\r\n };\r\n\r\n const startRecordingTimer = () => {\r\n stopRecordingTimer();\r\n recordingStartedAtRef.current = Date.now();\r\n setRecordingDurationMs(0);\r\n\r\n recordingTimerIntervalRef.current = window.setInterval(() => {\r\n const startedAt = recordingStartedAtRef.current;\r\n if (startedAt === null) {\r\n setRecordingDurationMs(0);\r\n return;\r\n }\r\n setRecordingDurationMs(Date.now() - startedAt);\r\n }, 200);\r\n };\r\n\r\n const resetProcessingFlags = () => {\r\n setIsTranscribing(false);\r\n setIsThinking(false);\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n setIsRunningTools(false);\r\n setStatusOverride(null);\r\n assistantMessageIdRef.current = null;\r\n assistantTextBufferRef.current = \"\";\r\n transcriptionReceivedRef.current = false;\r\n assistantDoneReceivedRef.current = false;\r\n awaitingAssistantResponseRef.current = false;\r\n pendingUserTextRef.current = null;\r\n pendingAssistantTextRef.current = \"\";\r\n };\r\n\r\n const clearMicHoldTimeout = () => {\r\n if (micHoldTimeoutRef.current !== null) {\r\n window.clearTimeout(micHoldTimeoutRef.current);\r\n micHoldTimeoutRef.current = null;\r\n }\r\n };\r\n\r\n const cleanupVAD = () => {\r\n if (vadIntervalRef.current !== null) {\r\n clearInterval(vadIntervalRef.current);\r\n vadIntervalRef.current = null;\r\n }\r\n\r\n if (sourceRef.current) {\r\n sourceRef.current.disconnect();\r\n sourceRef.current = null;\r\n }\r\n\r\n if (audioContextRef.current) {\r\n audioContextRef.current.close().catch(() => {});\r\n audioContextRef.current = null;\r\n }\r\n\r\n silenceStartRef.current = null;\r\n };\r\n\r\n const stopStreamTracks = () => {\r\n if (!streamRef.current) {\r\n return;\r\n }\r\n\r\n streamRef.current.getTracks().forEach((track) => track.stop());\r\n streamRef.current = null;\r\n };\r\n\r\n const stopActiveStream = () => {\r\n if (!activeStreamControllerRef.current) {\r\n return;\r\n }\r\n\r\n activeStreamControllerRef.current.stop();\r\n activeStreamControllerRef.current = null;\r\n };\r\n\r\n const cancelActiveSttWs = () => {\r\n const activeSttWs = activeSttWsRef.current;\r\n activeSttWsRef.current = null;\r\n activeSttWs?.cancel();\r\n liveTranscriptionMessageIdRef.current = null;\r\n liveTranscriptionTextRef.current = \"\";\r\n };\r\n\r\n useEffect(\r\n () => () => {\r\n clearMicHoldTimeout();\r\n pendingStopAfterStartRef.current = false;\r\n\r\n stopActiveStream();\r\n cancelActiveSttWs();\r\n cleanupVAD();\r\n stopStreamTracks();\r\n stopRecordingTimer();\r\n\r\n const recorder = recorderRef.current;\r\n if (recorder) {\r\n recorder.ondataavailable = null;\r\n recorder.onstop = null;\r\n recorder.onerror = null;\r\n if (recorder.state !== \"inactive\") {\r\n recorder.stop();\r\n }\r\n recorderRef.current = null;\r\n }\r\n\r\n cancelActiveSttWs();\r\n },\r\n [],\r\n );\r\n\r\n // ── Resume agent loop after full-page navigation ────────────────\r\n useEffect(() => {\r\n const resumeState = getPendingAgentResume();\r\n if (!resumeState) return;\r\n\r\n clearPendingAgentResume();\r\n console.info(\"[Bulut] Resuming agent after navigation\");\r\n\r\n // Restore session ID from resume state\r\n if (resumeState.sessionId) {\r\n sessionIdRef.current = resumeState.sessionId;\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(SESSION_ID_KEY, resumeState.sessionId);\r\n }\r\n }\r\n\r\n setIsBusy(true);\r\n setIsRunningTools(true);\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n\r\n const freshPageContext = getPageContext().summary;\r\n\r\n const resumeToolExec = async (\r\n call: AgentToolCallInfo,\r\n ): Promise<{ call_id: string; result: string }> => {\r\n const toolCall: ToolCallWithId = {\r\n tool: call.tool as \"navigate\" | \"getPageContext\" | \"interact\" | \"scroll\",\r\n call_id: call.call_id,\r\n ...call.args,\r\n } as ToolCallWithId;\r\n return executeSingleToolCall(toolCall);\r\n };\r\n\r\n const controller = agentResumeStream(\r\n config.backendBaseUrl,\r\n resumeState,\r\n freshPageContext,\r\n {\r\n onSessionId: (sid) => {\r\n if (sid && sid !== sessionIdRef.current) {\r\n sessionIdRef.current = sid;\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(SESSION_ID_KEY, sid);\r\n }\r\n }\r\n },\r\n onAssistantDelta: (delta) => {\r\n setIsRunningTools(false);\r\n setIsThinking(true);\r\n setStatusOverride(null);\r\n\r\n pendingAssistantTextRef.current += delta;\r\n\r\n if (assistantMessageIdRef.current === null) {\r\n assistantMessageIdRef.current = appendMessage(\r\n pendingAssistantTextRef.current,\r\n false,\r\n );\r\n } else {\r\n updateMessageText(\r\n assistantMessageIdRef.current,\r\n pendingAssistantTextRef.current,\r\n );\r\n }\r\n },\r\n onAssistantDone: (assistantText) => {\r\n playSfx(\"completed\");\r\n setStatusOverride(null);\r\n setIsThinking(false);\r\n setIsRenderingAudio(true);\r\n\r\n const finalDisplayText =\r\n assistantText || pendingAssistantTextRef.current;\r\n pendingAssistantTextRef.current = finalDisplayText;\r\n\r\n if (assistantMessageIdRef.current !== null) {\r\n updateMessageText(\r\n assistantMessageIdRef.current,\r\n finalDisplayText,\r\n );\r\n } else {\r\n assistantMessageIdRef.current = appendMessage(\r\n finalDisplayText,\r\n false,\r\n );\r\n }\r\n },\r\n onIntermediateReply: (text) => {\r\n void speakText(\r\n config.backendBaseUrl, text, config.voice,\r\n accessibilityMode, handleAudioStateChange,\r\n ).catch((err) => console.warn(\"[Bulut] intermediate TTS failed\", err));\r\n },\r\n onToolCalls: (calls) => {\r\n if (calls.length > 0) {\r\n playSfx(\"toolCall\");\r\n }\r\n setIsRunningTools(true);\r\n setStatusOverride(STATUS_LABELS.runningTools);\r\n\r\n for (const call of calls) {\r\n const toolLabel =\r\n call.tool === \"navigate\"\r\n ? `Sayfaya gidiliyor: ${call.args.url ?? \"\"}`\r\n : call.tool === \"getPageContext\"\r\n ? \"Sayfa bağlamı alınıyor…\"\r\n : call.tool === \"interact\"\r\n ? `Etkileşim: ${call.args.action ?? \"\"}`\r\n : call.tool === \"scroll\"\r\n ? \"Kaydırılıyor…\"\r\n : call.tool;\r\n\r\n appendMessage(`${toolLabel}`, false);\r\n setMessages((prev) => {\r\n const last = prev[prev.length - 1];\r\n if (last && !last.isUser) {\r\n return [\r\n ...prev.slice(0, -1),\r\n { ...last, type: \"tool\" as const },\r\n ];\r\n }\r\n return prev;\r\n });\r\n }\r\n\r\n assistantMessageIdRef.current = null;\r\n pendingAssistantTextRef.current = \"\";\r\n },\r\n onToolResult: () => {},\r\n onIteration: () => {\r\n playSfx(\"thinking\");\r\n setIsThinking(true);\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n },\r\n onAudioStateChange: handleAudioStateChange,\r\n onError: (err) => {\r\n setStatusOverride(null);\r\n appendMessage(`Hata: ${err}`, false);\r\n },\r\n },\r\n resumeToolExec,\r\n );\r\n\r\n activeStreamControllerRef.current = controller;\r\n\r\n controller.done\r\n .catch(() => {})\r\n .finally(() => {\r\n setIsBusy(false);\r\n setIsRunningTools(false);\r\n setIsThinking(false);\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n setStatusOverride(null);\r\n pendingAssistantTextRef.current = \"\";\r\n assistantMessageIdRef.current = null;\r\n activeStreamControllerRef.current = null;\r\n\r\n if (\r\n !autoListenSuppressedRef.current &&\r\n shouldAutoListenAfterAudio(\r\n accessibilityMode,\r\n isRecordingRef.current,\r\n isBusyRef.current,\r\n )\r\n ) {\r\n void startRecording(\"vad\");\r\n }\r\n });\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const appendMessage = (text: string, isUser: boolean): number => {\r\n const id = nextMessageIdRef.current++;\r\n setMessages((previous) => [\r\n ...previous,\r\n {\r\n id,\r\n text,\r\n isUser,\r\n },\r\n ]);\r\n return id;\r\n };\r\n\r\n const updateMessageText = (id: number, text: string) => {\r\n setMessages((previous) =>\r\n previous.map((message) =>\r\n message.id === id ? { ...message, text } : message,\r\n ),\r\n );\r\n };\r\n\r\n const upsertLiveUserTranscription = (text: string) => {\r\n const normalized = text.trim();\r\n if (!normalized) {\r\n return;\r\n }\r\n liveTranscriptionTextRef.current = normalized;\r\n if (liveTranscriptionMessageIdRef.current === null) {\r\n liveTranscriptionMessageIdRef.current = appendMessage(normalized, true);\r\n return;\r\n }\r\n updateMessageText(liveTranscriptionMessageIdRef.current, normalized);\r\n };\r\n\r\n const clearLiveUserTranscriptionState = () => {\r\n liveTranscriptionMessageIdRef.current = null;\r\n liveTranscriptionTextRef.current = \"\";\r\n };\r\n\r\n const handleAudioStateChange = (state: AudioStreamState) => {\r\n if (state === \"rendering\") {\r\n setIsRenderingAudio(true);\r\n setIsPlayingAudio(false);\r\n return;\r\n }\r\n\r\n if (state === \"playing\") {\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(true);\r\n return;\r\n }\r\n\r\n if (state === \"fallback\") {\r\n setIsRenderingAudio(true);\r\n setIsPlayingAudio(false);\r\n return;\r\n }\r\n\r\n if (state === \"done\") {\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n return;\r\n }\r\n\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n };\r\n\r\n const finalizeStreamCycle = () => {\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n setIsBusy(false);\r\n setIsTranscribing(false);\r\n setIsThinking(false);\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n setIsRunningTools(false);\r\n pendingUserTextRef.current = null;\r\n pendingAssistantTextRef.current = \"\";\r\n assistantMessageIdRef.current = null;\r\n if (activeStreamControllerRef.current) {\r\n activeStreamControllerRef.current = null;\r\n }\r\n if (\r\n !autoListenSuppressedRef.current &&\r\n shouldAutoListenAfterAudio(\r\n accessibilityMode,\r\n isRecordingRef.current,\r\n isBusyRef.current,\r\n )\r\n ) {\r\n console.info(\"[Bulut] chat-window auto-listen trigger after stream completion\");\r\n void startRecording(\"vad\");\r\n }\r\n };\r\n\r\n const runAgentForUserText = async (userText: string) => {\r\n if (!config.projectId) {\r\n appendMessage(\"Hata: Project ID yapılandırılmamış.\", false);\r\n return;\r\n }\r\n\r\n const normalizedUserText = userText.trim();\r\n if (!normalizedUserText) {\r\n appendMessage(\"Ses kaydı metne dönüştürülemedi. Lütfen tekrar deneyin.\", false);\r\n return;\r\n }\r\n\r\n setIsBusy(true);\r\n setIsTranscribing(false);\r\n setIsThinking(true);\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n setIsRunningTools(false);\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n awaitingAssistantResponseRef.current = true;\r\n\r\n try {\r\n pendingUserTextRef.current = normalizedUserText;\r\n upsertLiveUserTranscription(normalizedUserText);\r\n clearLiveUserTranscriptionState();\r\n\r\n stopActiveStream();\r\n const pageContext = getPageContext().summary;\r\n\r\n const handleToolExecution = async (\r\n call: AgentToolCallInfo,\r\n ): Promise<{ call_id: string; result: string }> => {\r\n const toolCall: ToolCallWithId = {\r\n tool: call.tool as\r\n | \"navigate\"\r\n | \"getPageContext\"\r\n | \"interact\"\r\n | \"scroll\",\r\n call_id: call.call_id,\r\n ...call.args,\r\n } as ToolCallWithId;\r\n return executeSingleToolCall(toolCall);\r\n };\r\n\r\n const controller = agentTextChatStream(\r\n config.backendBaseUrl,\r\n normalizedUserText,\r\n config.projectId,\r\n sessionIdRef.current,\r\n {\r\n model: config.model,\r\n voice: config.voice,\r\n pageContext,\r\n accessibilityMode,\r\n },\r\n {\r\n onSessionId: (sid) => {\r\n if (sid && sid !== sessionIdRef.current) {\r\n sessionIdRef.current = sid;\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(SESSION_ID_KEY, sid);\r\n }\r\n }\r\n },\r\n onAssistantDelta: (delta) => {\r\n setIsTranscribing(false);\r\n setIsThinking(true);\r\n setIsRunningTools(false);\r\n if (awaitingAssistantResponseRef.current) {\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n }\r\n\r\n pendingAssistantTextRef.current += delta;\r\n\r\n if (assistantMessageIdRef.current === null) {\r\n assistantMessageIdRef.current = appendMessage(\r\n pendingAssistantTextRef.current,\r\n false,\r\n );\r\n } else {\r\n updateMessageText(\r\n assistantMessageIdRef.current,\r\n pendingAssistantTextRef.current,\r\n );\r\n }\r\n },\r\n onAssistantDone: (assistantText) => {\r\n playSfx(\"completed\");\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n setIsThinking(false);\r\n setIsRenderingAudio(true);\r\n\r\n const finalDisplayText = assistantText || pendingAssistantTextRef.current;\r\n pendingAssistantTextRef.current = finalDisplayText;\r\n\r\n if (assistantMessageIdRef.current !== null) {\r\n updateMessageText(\r\n assistantMessageIdRef.current,\r\n finalDisplayText,\r\n );\r\n } else {\r\n assistantMessageIdRef.current = appendMessage(\r\n finalDisplayText,\r\n false,\r\n );\r\n }\r\n },\r\n onIntermediateReply: (text) => {\r\n void speakText(\r\n config.backendBaseUrl, text, config.voice,\r\n accessibilityMode, handleAudioStateChange,\r\n ).catch((err) => console.warn(\"[Bulut] intermediate TTS failed\", err));\r\n },\r\n onToolCalls: (calls) => {\r\n if (calls.length > 0) {\r\n playSfx(\"toolCall\");\r\n }\r\n setIsRunningTools(true);\r\n setStatusOverride(STATUS_LABELS.runningTools);\r\n\r\n for (const call of calls) {\r\n const toolLabel =\r\n call.tool === \"navigate\"\r\n ? `Sayfaya gidiliyor: ${call.args.url ?? \"\"}`\r\n : call.tool === \"getPageContext\"\r\n ? \"Sayfa bağlamı alınıyor…\"\r\n : call.tool === \"interact\"\r\n ? `Etkileşim: ${call.args.action ?? \"\"}`\r\n : call.tool === \"scroll\"\r\n ? \"Kaydırılıyor…\"\r\n : call.tool;\r\n\r\n appendMessage(`${toolLabel}`, false);\r\n setMessages((prev) => {\r\n const last = prev[prev.length - 1];\r\n if (last && !last.isUser) {\r\n return [\r\n ...prev.slice(0, -1),\r\n { ...last, type: \"tool\" as const },\r\n ];\r\n }\r\n return prev;\r\n });\r\n }\r\n\r\n assistantMessageIdRef.current = null;\r\n pendingAssistantTextRef.current = \"\";\r\n },\r\n onToolResult: () => {},\r\n onIteration: () => {\r\n playSfx(\"thinking\");\r\n setIsThinking(true);\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n },\r\n onAudioStateChange: handleAudioStateChange,\r\n onError: (err) => {\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n appendMessage(`Hata: ${err}`, false);\r\n },\r\n },\r\n handleToolExecution,\r\n );\r\n\r\n activeStreamControllerRef.current = controller;\r\n await controller.done;\r\n } catch (error) {\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n if (error instanceof Error) {\r\n appendMessage(`Hata: ${error.message}`, false);\r\n }\r\n } finally {\r\n finalizeStreamCycle();\r\n }\r\n };\r\n\r\n const handleAudioBlob = async (blob: Blob) => {\r\n if (!config.projectId) {\r\n appendMessage(\"Hata: Project ID yapılandırılmamış.\", false);\r\n return;\r\n }\r\n\r\n setIsBusy(true);\r\n setIsTranscribing(true);\r\n setIsThinking(false);\r\n setIsRenderingAudio(false);\r\n setIsPlayingAudio(false);\r\n setIsRunningTools(false);\r\n resetProcessingFlags(); // Start fresh\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n awaitingAssistantResponseRef.current = true;\r\n\r\n try {\r\n const fileType = blob.type || \"audio/webm\";\r\n const extension = fileType.includes(\"ogg\")\r\n ? \"ogg\"\r\n : fileType.includes(\"wav\")\r\n ? \"wav\"\r\n : fileType.includes(\"mpeg\") || fileType.includes(\"mp3\")\r\n ? \"mp3\"\r\n : \"webm\";\r\n const file = new File([blob], `voice-input.${extension}`, {\r\n type: fileType,\r\n });\r\n\r\n stopActiveStream();\r\n\r\n const pageContext = getPageContext().summary;\r\n\r\n // Helper: bridge an AgentToolCallInfo to a ToolCallWithId\r\n const handleToolExecution = async (\r\n call: AgentToolCallInfo,\r\n ): Promise<{ call_id: string; result: string }> => {\r\n const toolCall: ToolCallWithId = {\r\n tool: call.tool as\r\n | \"navigate\"\r\n | \"getPageContext\"\r\n | \"interact\"\r\n | \"scroll\",\r\n call_id: call.call_id,\r\n ...call.args,\r\n } as ToolCallWithId;\r\n return executeSingleToolCall(toolCall);\r\n };\r\n\r\n const controller = agentVoiceChatStream(\r\n config.backendBaseUrl,\r\n file,\r\n config.projectId,\r\n sessionIdRef.current,\r\n {\r\n model: config.model,\r\n voice: config.voice,\r\n pageContext,\r\n accessibilityMode,\r\n },\r\n {\r\n onSttRequestSent: () => {\r\n playSfx(\"sent\");\r\n },\r\n onTranscription: (data) => {\r\n if (data.session_id && data.session_id !== sessionIdRef.current) {\r\n sessionIdRef.current = data.session_id;\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(SESSION_ID_KEY, data.session_id);\r\n }\r\n }\r\n\r\n const normalized = data.user_text.trim();\r\n if (normalized) {\r\n const previousUserText = pendingUserTextRef.current;\r\n pendingUserTextRef.current = normalized;\r\n if (liveTranscriptionMessageIdRef.current !== null) {\r\n updateMessageText(liveTranscriptionMessageIdRef.current, normalized);\r\n clearLiveUserTranscriptionState();\r\n } else if (previousUserText !== normalized) {\r\n appendMessage(normalized, true);\r\n }\r\n }\r\n\r\n setIsTranscribing(false);\r\n setIsThinking(true);\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n },\r\n onSessionId: (sid) => {\r\n if (sid && sid !== sessionIdRef.current) {\r\n sessionIdRef.current = sid;\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(SESSION_ID_KEY, sid);\r\n }\r\n }\r\n },\r\n onAssistantDelta: (delta) => {\r\n setIsTranscribing(false);\r\n setIsThinking(true);\r\n setIsRunningTools(false);\r\n if (awaitingAssistantResponseRef.current) {\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n }\r\n\r\n // Agent returns plain text (not JSON), stream it directly\r\n pendingAssistantTextRef.current += delta;\r\n\r\n if (assistantMessageIdRef.current === null) {\r\n assistantMessageIdRef.current = appendMessage(\r\n pendingAssistantTextRef.current,\r\n false,\r\n );\r\n } else {\r\n updateMessageText(\r\n assistantMessageIdRef.current,\r\n pendingAssistantTextRef.current,\r\n );\r\n }\r\n },\r\n onAssistantDone: (assistantText) => {\r\n playSfx(\"completed\");\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n setIsThinking(false);\r\n setIsRenderingAudio(true);\r\n\r\n const finalDisplayText =\r\n assistantText || pendingAssistantTextRef.current;\r\n\r\n streamingJsonParserRef.current = null;\r\n pendingAssistantTextRef.current = finalDisplayText;\r\n\r\n if (assistantMessageIdRef.current !== null) {\r\n updateMessageText(\r\n assistantMessageIdRef.current,\r\n finalDisplayText,\r\n );\r\n } else {\r\n assistantMessageIdRef.current = appendMessage(\r\n finalDisplayText,\r\n false,\r\n );\r\n }\r\n },\r\n onIntermediateReply: (text) => {\r\n void speakText(\r\n config.backendBaseUrl, text, config.voice,\r\n accessibilityMode, handleAudioStateChange,\r\n ).catch((err) => console.warn(\"[Bulut] intermediate TTS failed\", err));\r\n },\r\n onToolCalls: (calls) => {\r\n if (calls.length > 0) {\r\n playSfx(\"toolCall\");\r\n }\r\n setIsRunningTools(true);\r\n setStatusOverride(STATUS_LABELS.runningTools);\r\n\r\n // Show each tool call as a small indicator message\r\n for (const call of calls) {\r\n const toolLabel =\r\n call.tool === \"navigate\"\r\n ? `Sayfaya gidiliyor: ${call.args.url ?? \"\"}`\r\n : call.tool === \"getPageContext\"\r\n ? \"Sayfa bağlamı alınıyor…\"\r\n : call.tool === \"interact\"\r\n ? `Etkileşim: ${call.args.action ?? \"\"}`\r\n : call.tool === \"scroll\"\r\n ? \"Kaydırılıyor…\"\r\n : call.tool;\r\n\r\n appendMessage(`${toolLabel}`, false);\r\n // Mark the tool message\r\n setMessages((prev) => {\r\n const last = prev[prev.length - 1];\r\n if (last && !last.isUser) {\r\n return [\r\n ...prev.slice(0, -1),\r\n { ...last, type: \"tool\" as const },\r\n ];\r\n }\r\n return prev;\r\n });\r\n }\r\n\r\n // Reset assistant message ref so next reply gets a new bubble\r\n assistantMessageIdRef.current = null;\r\n pendingAssistantTextRef.current = \"\";\r\n },\r\n onToolResult: (_callId, _toolName, _result) => {\r\n // Tool result sent back to agent automatically.\r\n // Could display detailed result here if needed.\r\n },\r\n onIteration: (_iteration, _maxIterations) => {\r\n // Agent started a new reasoning iteration\r\n playSfx(\"thinking\");\r\n setIsThinking(true);\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n },\r\n onAudioStateChange: handleAudioStateChange,\r\n onError: (err) => {\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n appendMessage(`Hata: ${err}`, false);\r\n },\r\n },\r\n handleToolExecution,\r\n );\r\n\r\n activeStreamControllerRef.current = controller;\r\n await controller.done;\r\n\r\n // Safety: Ensure messages are flushed if not already\r\n // (e.g. if audio 'done' event didn't fire for some reason or there was no audio)\r\n /* if (pendingUserTextRef.current || pendingAssistantTextRef.current) {\r\n // flushPendingMessages(); // Removed as we stream now\r\n } */\r\n } catch (error) {\r\n // Error already shown via onError callback — don't duplicate\r\n awaitingAssistantResponseRef.current = false;\r\n setStatusOverride(null);\r\n } finally {\r\n finalizeStreamCycle();\r\n }\r\n };\r\n\r\n const stopRecording = (options?: { discard?: boolean }) => {\r\n const recorder = recorderRef.current;\r\n if (!recorder || recorder.state === \"inactive\") {\r\n return;\r\n }\r\n\r\n if (options?.discard) {\r\n discardNextRecordingRef.current = true;\r\n }\r\n\r\n cleanupVAD();\r\n recorder.stop();\r\n };\r\n\r\n const setupVAD = (stream: MediaStream, recorder: MediaRecorder) => {\r\n const AudioCtx =\r\n window.AudioContext ||\r\n (window as Window & { webkitAudioContext?: typeof AudioContext })\r\n .webkitAudioContext;\r\n\r\n if (!AudioCtx) {\r\n return;\r\n }\r\n\r\n const context = new AudioCtx();\r\n audioContextRef.current = context;\r\n\r\n const analyser = context.createAnalyser();\r\n analyser.fftSize = 256;\r\n\r\n const source = context.createMediaStreamSource(stream);\r\n sourceRef.current = source;\r\n source.connect(analyser);\r\n\r\n const dataArray = new Uint8Array(analyser.frequencyBinCount);\r\n silenceStartRef.current = null;\r\n let speechDetected = false;\r\n\r\n vadIntervalRef.current = window.setInterval(() => {\r\n if (!isRecordingRef.current || recorder.state === \"inactive\") {\r\n cleanupVAD();\r\n return;\r\n }\r\n\r\n analyser.getByteFrequencyData(dataArray);\r\n\r\n let sum = 0;\r\n for (const value of dataArray) {\r\n sum += value;\r\n }\r\n const average = sum / dataArray.length;\r\n const volume = average / 255;\r\n\r\n if (volume < VAD_THRESHOLD) {\r\n if (silenceStartRef.current === null) {\r\n silenceStartRef.current = Date.now();\r\n return;\r\n }\r\n\r\n const silenceDuration = Date.now() - silenceStartRef.current;\r\n if (speechDetected && silenceDuration > SILENCE_DURATION_MS) {\r\n stopRecording();\r\n }\r\n return;\r\n }\r\n\r\n speechDetected = true;\r\n silenceStartRef.current = null;\r\n }, 50);\r\n };\r\n\r\n const startRecording = async (mode: RecordingMode) => {\r\n if (\r\n isBusyRef.current ||\r\n isRecordingRef.current ||\r\n startRecordingPendingRef.current\r\n ) {\r\n return;\r\n }\r\n\r\n setStatusOverride(STATUS_LABELS.listening);\r\n\r\n if (!navigator.mediaDevices?.getUserMedia) {\r\n setStatusOverride(null);\r\n appendMessage(\"Bu tarayıcıda mikrofon kullanılamıyor.\", false);\r\n return;\r\n }\r\n\r\n if (typeof MediaRecorder === \"undefined\") {\r\n setStatusOverride(null);\r\n appendMessage(\"Bu tarayıcıda MediaRecorder desteklenmiyor.\", false);\r\n return;\r\n }\r\n\r\n startRecordingPendingRef.current = true;\r\n\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n streamRef.current = stream;\r\n\r\n // Use low bitrate for speech — opus handles voice well at 16-24 kbps\r\n // and produces ~4-5x smaller payloads, speeding up the upload to fal.\r\n const recorderOptions: MediaRecorderOptions = {\r\n audioBitsPerSecond: 16_000,\r\n };\r\n\r\n // Prefer opus-in-ogg (smaller container) → opus-in-webm → browser default\r\n const preferredMimeTypes = [\r\n \"audio/ogg;codecs=opus\",\r\n \"audio/webm;codecs=opus\",\r\n \"audio/webm\",\r\n ];\r\n for (const mime of preferredMimeTypes) {\r\n if (MediaRecorder.isTypeSupported(mime)) {\r\n recorderOptions.mimeType = mime;\r\n break;\r\n }\r\n }\r\n\r\n const recorder = new MediaRecorder(stream, recorderOptions);\r\n recorderRef.current = recorder;\r\n audioChunksRef.current = [];\r\n clearLiveUserTranscriptionState();\r\n\r\n const sttMimeType = (recorder.mimeType || recorderOptions.mimeType || \"audio/webm\")\r\n .split(\";\")[0]\r\n .trim() || \"audio/webm\";\r\n\r\n const sttWsController = startSttWebSocketStream(\r\n config.backendBaseUrl,\r\n {\r\n projectId: config.projectId,\r\n sessionId: sessionIdRef.current,\r\n language: \"tr\",\r\n mimeType: sttMimeType,\r\n },\r\n {\r\n onRequestSent: () => {\r\n playSfx(\"sent\");\r\n },\r\n onSessionId: (sid) => {\r\n if (!sid || sid === sessionIdRef.current) {\r\n return;\r\n }\r\n sessionIdRef.current = sid;\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(SESSION_ID_KEY, sid);\r\n }\r\n },\r\n onPartial: ({ text }) => {\r\n if (!text.trim()) {\r\n return;\r\n }\r\n upsertLiveUserTranscription(text);\r\n },\r\n },\r\n );\r\n activeSttWsRef.current = sttWsController;\r\n\r\n recorder.ondataavailable = (event) => {\r\n if (event.data.size > 0) {\r\n audioChunksRef.current.push(event.data);\r\n if (activeSttWsRef.current) {\r\n void activeSttWsRef.current.pushChunk(event.data).catch((error) => {\r\n console.warn(\r\n `[Bulut] STT WS chunk send failed: ${error instanceof Error ? error.message : String(error)}`,\r\n );\r\n });\r\n }\r\n }\r\n };\r\n\r\n recorder.onerror = () => {\r\n appendMessage(\"Mikrofon kaydı sırasında bir hata oluştu.\", false);\r\n };\r\n\r\n recorder.onstop = async () => {\r\n setIsRecording(false);\r\n isRecordingRef.current = false;\r\n recordingModeRef.current = null;\r\n stopRecordingTimer();\r\n\r\n cleanupVAD();\r\n stopStreamTracks();\r\n\r\n const shouldDiscard = discardNextRecordingRef.current;\r\n discardNextRecordingRef.current = false;\r\n\r\n const blob = new Blob(audioChunksRef.current, {\r\n type: recorder.mimeType || \"audio/webm\",\r\n });\r\n audioChunksRef.current = [];\r\n\r\n const currentSttWs = activeSttWsRef.current;\r\n activeSttWsRef.current = null;\r\n\r\n if (shouldDiscard) {\r\n currentSttWs?.cancel();\r\n clearLiveUserTranscriptionState();\r\n setStatusOverride(null);\r\n return;\r\n }\r\n\r\n if (blob.size === 0) {\r\n currentSttWs?.cancel();\r\n clearLiveUserTranscriptionState();\r\n setStatusOverride(null);\r\n appendMessage(\"Ses kaydı alınamadı. Lütfen tekrar deneyin.\", false);\r\n return;\r\n }\r\n\r\n setIsTranscribing(true);\r\n setStatusOverride(STATUS_LABELS.transcribing);\r\n\r\n try {\r\n if (currentSttWs) {\r\n const sttResult = await currentSttWs.stop();\r\n if (sttResult.session_id && sttResult.session_id !== sessionIdRef.current) {\r\n sessionIdRef.current = sttResult.session_id;\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(SESSION_ID_KEY, sttResult.session_id);\r\n }\r\n }\r\n if (sttResult.text.trim()) {\r\n upsertLiveUserTranscription(sttResult.text);\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n await runAgentForUserText(sttResult.text);\r\n return;\r\n }\r\n }\r\n } catch (error) {\r\n console.warn(\r\n `[Bulut] STT WS finalization failed, falling back to HTTP POST /chat/stt: ${error instanceof Error ? error.message : String(error)}`,\r\n );\r\n } finally {\r\n clearLiveUserTranscriptionState();\r\n }\r\n\r\n console.info(\"[Bulut] Using HTTP POST fallback for STT (streaming WS did not succeed)\");\r\n setStatusOverride(STATUS_LABELS.thinking);\r\n await handleAudioBlob(blob);\r\n };\r\n\r\n if (mode === \"vad\") {\r\n setupVAD(stream, recorder);\r\n }\r\n\r\n recorder.start(200);\r\n recordingModeRef.current = mode;\r\n setIsRecording(true);\r\n isRecordingRef.current = true;\r\n startRecordingTimer();\r\n\r\n if (pendingStopAfterStartRef.current) {\r\n pendingStopAfterStartRef.current = false;\r\n stopRecording();\r\n }\r\n } catch (error) {\r\n const errMsg = normalizeError(error);\r\n if (errMsg.toLowerCase().includes(\"permission\") || errMsg.toLowerCase().includes(\"denied\")) {\r\n autoListenSuppressedRef.current = true;\r\n }\r\n cancelActiveSttWs();\r\n setStatusOverride(null);\r\n appendMessage(`Mikrofon hatası: ${errMsg}`, false);\r\n cleanupVAD();\r\n stopStreamTracks();\r\n pendingStopAfterStartRef.current = false;\r\n setIsRecording(false);\r\n isRecordingRef.current = false;\r\n stopRecordingTimer();\r\n } finally {\r\n if (!isRecordingRef.current && !isBusyRef.current) {\r\n setStatusOverride(null);\r\n }\r\n startRecordingPendingRef.current = false;\r\n }\r\n };\r\n\r\n const resetMicGesture = () => {\r\n micPressStartRef.current = null;\r\n micHoldTriggeredRef.current = false;\r\n clearMicHoldTimeout();\r\n };\r\n\r\n const handleMicPointerDown = (\r\n event: JSX.TargetedPointerEvent<HTMLButtonElement>,\r\n ) => {\r\n event.preventDefault();\r\n\r\n if (isBusyRef.current) {\r\n return;\r\n }\r\n\r\n if (isRecordingRef.current) {\r\n // In VAD mode, tapping the button cancels; in press mode, it sends\r\n if (recordingModeRef.current === \"vad\") {\r\n stopRecording({ discard: true });\r\n } else {\r\n stopRecording();\r\n }\r\n return;\r\n }\r\n\r\n micPressStartRef.current = Date.now();\r\n micHoldTriggeredRef.current = false;\r\n clearMicHoldTimeout();\r\n\r\n if (event.currentTarget.setPointerCapture) {\r\n try {\r\n event.currentTarget.setPointerCapture(event.pointerId);\r\n } catch {\r\n // No-op.\r\n }\r\n }\r\n\r\n micHoldTimeoutRef.current = window.setTimeout(() => {\r\n if (\r\n micPressStartRef.current === null ||\r\n isBusyRef.current ||\r\n isRecordingRef.current\r\n ) {\r\n return;\r\n }\r\n\r\n micHoldTriggeredRef.current = true;\r\n void startRecording(\"press\");\r\n }, HOLD_THRESHOLD_MS);\r\n };\r\n\r\n const handleMicPointerUp = (\r\n event: JSX.TargetedPointerEvent<HTMLButtonElement>,\r\n ) => {\r\n event.preventDefault();\r\n\r\n if (event.currentTarget.releasePointerCapture) {\r\n try {\r\n event.currentTarget.releasePointerCapture(event.pointerId);\r\n } catch {\r\n // No-op.\r\n }\r\n }\r\n\r\n const startedAt = micPressStartRef.current;\r\n const wasHold = micHoldTriggeredRef.current;\r\n resetMicGesture();\r\n\r\n if (startedAt === null) {\r\n return;\r\n }\r\n\r\n if (wasHold) {\r\n if (isRecordingRef.current) {\r\n stopRecording();\r\n } else if (startRecordingPendingRef.current) {\r\n pendingStopAfterStartRef.current = true;\r\n }\r\n return;\r\n }\r\n\r\n const duration = Date.now() - startedAt;\r\n if (classifyMicGesture(duration) === \"tap\") {\r\n void startRecording(\"vad\");\r\n }\r\n };\r\n\r\n const handleMicPointerCancel = (\r\n event: JSX.TargetedPointerEvent<HTMLButtonElement>,\r\n ) => {\r\n handleMicPointerUp(event);\r\n };\r\n\r\n const handleRestart = () => {\r\n resetMicGesture();\r\n pendingStopAfterStartRef.current = false;\r\n\r\n stopActiveStream();\r\n cancelActiveSttWs();\r\n\r\n if (recorderRef.current && recorderRef.current.state !== \"inactive\") {\r\n stopRecording({ discard: true });\r\n } else {\r\n discardNextRecordingRef.current = false;\r\n cleanupVAD();\r\n stopStreamTracks();\r\n }\r\n\r\n stopRecordingTimer();\r\n setRecordingDurationMs(0);\r\n\r\n clearPersistedChatState(\r\n typeof localStorage !== \"undefined\" ? localStorage : null,\r\n );\r\n\r\n sessionIdRef.current = null;\r\n const initialMessages = createInitialMessages(config.agentName);\r\n nextMessageIdRef.current = getNextMessageId(initialMessages);\r\n setMessages(initialMessages);\r\n\r\n setIsBusy(false);\r\n isBusyRef.current = false;\r\n setIsRecording(false);\r\n isRecordingRef.current = false;\r\n resetProcessingFlags();\r\n };\r\n\r\n // Auto-listen when accessibility mode is activated (initial trigger)\r\n useEffect(() => {\r\n if (!accessibilityMode || autoListenSuppressedRef.current) return;\r\n const timer = window.setTimeout(() => {\r\n if (!isRecordingRef.current && !isBusyRef.current && !startRecordingPendingRef.current && !autoListenSuppressedRef.current) {\r\n void startRecording(\"vad\");\r\n }\r\n }, 500);\r\n return () => window.clearTimeout(timer);\r\n }, [accessibilityMode]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const stopTask = () => {\r\n stopActiveStream();\r\n cancelActiveSttWs();\r\n stopRecording({ discard: true });\r\n cleanupVAD();\r\n stopStreamTracks();\r\n resetProcessingFlags();\r\n setIsBusy(false);\r\n };\r\n\r\n // Expose recording actions to parent via actionsRef\r\n if (actionsRef) {\r\n actionsRef.current = {\r\n startRecording: () => {\r\n autoListenSuppressedRef.current = false;\r\n void startRecording(\"vad\");\r\n },\r\n cancelRecording: () => {\r\n cancelActiveSttWs();\r\n const recorder = recorderRef.current;\r\n if (recorder && recorder.state !== \"inactive\") {\r\n stopRecording({ discard: true });\r\n } else {\r\n cleanupVAD();\r\n stopStreamTracks();\r\n }\r\n },\r\n stopTask,\r\n };\r\n }\r\n\r\n const windowStyle: { [key: string]: string } = {\r\n position: \"fixed\",\r\n bottom: `${POSITION_BOTTOM}px`,\r\n right: `${POSITION_RIGHT}px`,\r\n width: `${WINDOW_WIDTH}px`,\r\n maxHeight: `${WINDOW_HEIGHT}px`,\r\n backgroundColor: \"hsla(0, 0%, 100%, 1)\",\r\n borderRadius: BORDER_RADIUS.window,\r\n display: hidden ? \"none\" : \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n zIndex: \"10000\",\r\n animation: hidden ? \"none\" : `slideIn ${TRANSITIONS.medium}`,\r\n boxShadow: SHADOW,\r\n fontFamily: \"\\\"Geist\\\", sans-serif\",\r\n };\r\n\r\n const headerStyle: { [key: string]: string } = {\r\n padding: \"14px 16px\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n };\r\n\r\n const headerActionsStyle: { [key: string]: string } = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"6px\",\r\n };\r\n\r\n const headerButtonStyle: { [key: string]: string } = {\r\n background: \"none\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n padding: \"4px\",\r\n borderRadius: \"6px\",\r\n color: COLORS.text,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n transition: `color ${TRANSITIONS.fast}, background-color ${TRANSITIONS.fast}`,\r\n };\r\n\r\n const messagesContainerStyle: { [key: string]: string } = {\r\n padding: \"0px 16px\",\r\n overflowY: \"auto\",\r\n flex: \"1\",\r\n minHeight: \"0\",\r\n };\r\n\r\n const messagesListStyle: { [key: string]: string } = {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: \"16px\",\r\n };\r\n\r\n const messageStyle = (isUser: boolean): JSX.CSSProperties => ({\r\n maxWidth: \"84%\",\r\n padding: isUser ? \"9px 14px\" : \"0px 0px\",\r\n borderRadius: BORDER_RADIUS.message,\r\n fontSize: \"14px\",\r\n lineHeight: \"140%\",\r\n wordWrap: \"break-word\",\r\n whiteSpace: \"pre-wrap\",\r\n alignSelf: isUser ? \"flex-end\" : \"flex-start\",\r\n backgroundColor: isUser ? COLORS.messageUser : \"\",\r\n color: isUser ? COLORS.messageUserText : \"hsla(215, 100%, 5%, 1)\",\r\n });\r\n\r\n const footerStyle: { [key: string]: string } = {\r\n padding: \"10px 12px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: \"8px\",\r\n };\r\n\r\n const statusPanelStyle: { [key: string]: string } = {\r\n flex: \"1\",\r\n minHeight: \"34px\",\r\n borderRadius: \"10px\",\r\n color: COLORS.text,\r\n fontSize: \"14px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n padding: \"0 10px\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n opacity: \"0.7\",\r\n };\r\n\r\n const footerActionsStyle: { [key: string]: string } = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"8px\",\r\n flexShrink: \"0\",\r\n };\r\n\r\n const recordingTimerStyle: { [key: string]: string } = {\r\n minWidth: \"46px\",\r\n fontSize: \"12px\",\r\n fontWeight: \"700\",\r\n color: COLORS.text,\r\n textAlign: \"right\",\r\n };\r\n\r\n const micFooterButtonStyle: { [key: string]: string } = {\r\n width: \"37px\",\r\n height: \"37px\",\r\n borderRadius: \"999px\",\r\n background: \"transparent\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n cursor: \"pointer\",\r\n color: \"#ffffff\",\r\n border: \"1px solid hsla(215, 100%, 5%, 0.5)\",\r\n transition: `transform ${TRANSITIONS.fast}`,\r\n };\r\n\r\n const isVadRecording = isRecording && recordingModeRef.current === \"vad\";\r\n const showStopButton = isBusy && !isRecording;\r\n const disableMicControl = isBusy;\r\n\r\n return (\r\n <div className=\"bulut-chat-window\" style={windowStyle}>\r\n <style>{`\r\n @keyframes slideIn {\r\n from {\r\n opacity: 0;\r\n transform: translateY(10px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n\r\n .bulut-header-btn:hover:not(:disabled) {\r\n color: ${COLORS.text};\r\n }\r\n\r\n .bulut-footer-btn:hover:not(:disabled) {\r\n transform: scale(1.04);\r\n }\r\n\r\n .bulut-header-btn:disabled,\r\n .bulut-footer-btn:disabled {\r\n cursor: not-allowed;\r\n opacity: 0.5;\r\n transform: none;\r\n }\r\n\r\n @keyframes bulut-dots {\r\n 0% { content: '.'; }\r\n 33% { content: '..'; }\r\n 66% { content: '...'; }\r\n }\r\n\r\n .bulut-status-dots::after {\r\n content: '.';\r\n animation: bulut-dots 1.2s steps(1) infinite;\r\n display: inline-block;\r\n min-width: 12px;\r\n text-align: left;\r\n }\r\n\r\n /* Mobile: full-screen chat window */\r\n @media (max-width: 600px) {\r\n .bulut-chat-window {\r\n top: 0 !important;\r\n left: 0 !important;\r\n right: 0 !important;\r\n bottom: 0 !important;\r\n width: 100% !important;\r\n max-height: 100% !important;\r\n height: 100% !important;\r\n border-radius: 0 !important;\r\n }\r\n .bulut-close-btn {\r\n width: 40px !important;\r\n height: 40px !important;\r\n padding: 8px !important;\r\n }\r\n .bulut-close-btn svg {\r\n width: 26px !important;\r\n height: 26px !important;\r\n }\r\n }\r\n `}</style>\r\n\r\n <div style={headerStyle}>\r\n <SvgIcon\r\n src={logoContent}\r\n title=\"Bulut Logo\"\r\n style={{ maxWidth: \"80px\", height: \"auto\" }}\r\n stripColors={false}\r\n />\r\n <div style={headerActionsStyle}>\r\n <button\r\n type=\"button\"\r\n className=\"bulut-header-btn\"\r\n style={headerButtonStyle}\r\n onClick={handleRestart}\r\n aria-label=\"Sohbeti yeniden başlat\"\r\n title=\"Sohbeti yeniden başlat\"\r\n >\r\n <SvgIcon src={restartIconContent} width={22} />\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"bulut-header-btn bulut-close-btn\"\r\n style={{\r\n ...headerButtonStyle,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n onClick={onClose}\r\n aria-label=\"Sohbeti kapat\"\r\n title=\"Sohbeti kapat\"\r\n >\r\n <SvgIcon\r\n fill-opacity={\"0\"}\r\n stroke={\"currentColor\"}\r\n src={closeIconContent}\r\n width={22}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div style={messagesContainerStyle} ref={messagesContainerRef}>\r\n <div style={messagesListStyle} ref={messagesContentRef}>\r\n {messages.map((message) => (\r\n <div\r\n key={message.id}\r\n style={\r\n message.type === \"tool\"\r\n ? {\r\n padding: \"9px 14px\",\r\n fontSize: \"14px\",\r\n lineHeight: \"1.4\",\r\n color: \"hsla(215, 100%, 5%, 1)\",\r\n fontWeight: 600,\r\n backgroundColor: \"hsla(215, 100%, 5%, 0.05)\",\r\n borderRadius: \"10px\",\r\n alignSelf: \"flex-start\",\r\n maxWidth: \"84%\",\r\n }\r\n : messageStyle(message.isUser)\r\n }\r\n >\r\n {message.text}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div style={footerStyle}>\r\n <div style={{ ...statusPanelStyle, transition: \"opacity 0.2s ease-out\" }}>\r\n {statusText !== STATUS_LABELS.ready ? (\r\n <span className=\"bulut-status-dots\" title={statusText}>\r\n {statusText}\r\n </span>\r\n ) : onAccessibilityToggle ? (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"8px\",\r\n }}\r\n >\r\n <span\r\n style={{\r\n fontSize: \"12px\",\r\n opacity: \"0.6\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n Erişilebilirlik\r\n </span>\r\n <button\r\n type=\"button\"\r\n onClick={onAccessibilityToggle}\r\n aria-label={\r\n accessibilityMode\r\n ? \"Erişilebilirlik modunu kapat\"\r\n : \"Erişilebilirlik modunu aç\"\r\n }\r\n style={{\r\n width: \"36px\",\r\n height: \"20px\",\r\n borderRadius: \"10px\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n padding: \"2px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n backgroundColor: accessibilityMode\r\n ? COLORS.primary\r\n : \"hsla(215, 10%, 75%, 1)\",\r\n transition: `background-color ${TRANSITIONS.fast}`,\r\n flexShrink: \"0\",\r\n }}\r\n >\r\n <span\r\n style={{\r\n width: \"16px\",\r\n height: \"16px\",\r\n borderRadius: \"50%\",\r\n backgroundColor: \"#ffffff\",\r\n display: \"block\",\r\n transition: `transform ${TRANSITIONS.fast}`,\r\n transform: accessibilityMode\r\n ? \"translateX(16px)\"\r\n : \"translateX(0)\",\r\n boxShadow: \"0 1px 3px rgba(0,0,0,0.2)\",\r\n }}\r\n />\r\n </button>\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n <div style={footerActionsStyle}>\r\n {isRecording ? (\r\n <span style={recordingTimerStyle}>\r\n {formatDurationMs(recordingDurationMs)}\r\n </span>\r\n ) : null}\r\n {showStopButton ? (\r\n <button\r\n type=\"button\"\r\n className=\"bulut-footer-btn\"\r\n style={micFooterButtonStyle}\r\n onClick={stopTask}\r\n aria-label=\"Görevi durdur\"\r\n title=\"Görevi durdur\"\r\n >\r\n <SvgIcon\r\n fill-opacity={\"0\"}\r\n stroke={\"hsla(215, 100%, 5%, 1)\"}\r\n src={stopIconContent}\r\n width={22}\r\n />\r\n </button>\r\n ) : (\r\n <button\r\n type=\"button\"\r\n className=\"bulut-footer-btn\"\r\n style={micFooterButtonStyle}\r\n onPointerDown={handleMicPointerDown}\r\n onPointerUp={handleMicPointerUp}\r\n onPointerCancel={handleMicPointerCancel}\r\n disabled={disableMicControl}\r\n aria-label={isVadRecording ? \"Kaydı iptal et\" : isRecording ? \"Kaydı durdur\" : \"Kaydı başlat\"}\r\n title={\r\n isVadRecording\r\n ? \"Kaydı iptal et\"\r\n : isRecording\r\n ? \"Kaydı durdur\"\r\n : \"Dokun: VAD, Basılı tut: bırakınca gönder\"\r\n }\r\n >\r\n <SvgIcon\r\n fill-opacity={\"0\"}\r\n stroke={\"hsla(215, 100%, 5%, 1)\"}\r\n src={isVadRecording ? closeIconContent : microphoneIconContent}\r\n width={22}\r\n />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import { useState, useEffect, useRef, useCallback } from \"preact/hooks\";\r\nimport \"./globals.css\";\r\nimport { render } from \"preact\";\r\nimport { ChatButton } from \"./components/ChatButton\";\r\nimport {\r\n ChatWindow,\r\n type ChatWindowHandle,\r\n} from \"./components/ChatWindow\";\r\nimport { COLORS } from \"./styles/constants\";\r\n\r\nexport type BulutVoice = \"alloy\" | \"zeynep\" | \"ali\";\r\n\r\nexport interface BulutOptions {\r\n containerId?: string;\r\n backendBaseUrl?: string;\r\n projectId?: string;\r\n}\r\n\r\nexport interface BulutRuntimeConfig {\r\n backendBaseUrl: string;\r\n projectId: string;\r\n model: string;\r\n voice: BulutVoice;\r\n baseColor: string;\r\n agentName: string;\r\n}\r\n\r\n/** Default LLM model — keep in sync with backend config.DEFAULT_LLM_MODEL */\r\nconst DEFAULT_LLM_MODEL = \"x-ai/grok-4.1-fast\";\r\n\r\nconst DEFAULT_AGENT_NAME = \"Bulut\";\r\n\r\nconst DEFAULT_CONFIG: BulutRuntimeConfig = {\r\n backendBaseUrl: \"https://api.bulut.lu\",\r\n projectId: \"\", // Must be provided\r\n model: DEFAULT_LLM_MODEL,\r\n voice: \"alloy\",\r\n baseColor: COLORS.primary,\r\n agentName: DEFAULT_AGENT_NAME,\r\n};\r\n\r\nconst isValidHexColor = (value: string): boolean =>\r\n /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(value);\r\n\r\nconst normalizeHexColor = (value: string): string => {\r\n const trimmed = value.trim();\r\n if (!isValidHexColor(trimmed)) {\r\n return DEFAULT_CONFIG.baseColor;\r\n }\r\n if (trimmed.length === 4) {\r\n const r = trimmed[1];\r\n const g = trimmed[2];\r\n const b = trimmed[3];\r\n return `#${r}${r}${g}${g}${b}${b}`.toLowerCase();\r\n }\r\n return trimmed.toLowerCase();\r\n};\r\n\r\nconst shadeHexColor = (hexColor: string, amount: number): string => {\r\n const normalized = normalizeHexColor(hexColor);\r\n const raw = normalized.slice(1);\r\n const toChannel = (start: number): number => parseInt(raw.slice(start, start + 2), 16);\r\n const clamp = (value: number): number => Math.max(0, Math.min(255, Math.round(value)));\r\n const adjust = (channel: number): number =>\r\n amount < 0 ? channel * (1 + amount) : channel + (255 - channel) * amount;\r\n const toHex = (channel: number): string => clamp(channel).toString(16).padStart(2, \"0\");\r\n\r\n const r = adjust(toChannel(0));\r\n const g = adjust(toChannel(2));\r\n const b = adjust(toChannel(4));\r\n\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n};\r\n\r\nconst applyTheme = (baseColor: string): void => {\r\n const normalized = normalizeHexColor(baseColor);\r\n COLORS.primary = normalized;\r\n COLORS.primaryHover = shadeHexColor(normalized, -0.15);\r\n COLORS.messageUser = normalized;\r\n};\r\n\r\ninterface RemoteProjectConfig {\r\n base_color: string;\r\n model: string;\r\n agent_name: string;\r\n voice: string;\r\n}\r\n\r\nconst fetchRemoteConfig = async (\r\n baseUrl: string,\r\n projectId: string,\r\n): Promise<RemoteProjectConfig | null> => {\r\n try {\r\n const url = baseUrl.replace(/\\/+$/, \"\");\r\n const res = await fetch(`${url}/projects/${projectId}/config`);\r\n if (!res.ok) return null;\r\n return (await res.json()) as RemoteProjectConfig;\r\n } catch {\r\n return null;\r\n }\r\n};\r\n\r\nconst resolveRuntimeConfig = (\r\n options: BulutOptions,\r\n): BulutRuntimeConfig => ({\r\n backendBaseUrl: options.backendBaseUrl || DEFAULT_CONFIG.backendBaseUrl,\r\n projectId: options.projectId || DEFAULT_CONFIG.projectId,\r\n model: DEFAULT_CONFIG.model,\r\n voice: DEFAULT_CONFIG.voice,\r\n baseColor: DEFAULT_CONFIG.baseColor,\r\n agentName: DEFAULT_CONFIG.agentName,\r\n});\r\n\r\ninterface BulutWidgetProps {\r\n config: BulutRuntimeConfig;\r\n}\r\n\r\nconst ACCESSIBILITY_MODE_KEY = \"bulut_accessibility_mode_enabled\";\r\nconst GEIST_FONT_FAMILY = \"Geist\";\r\nconst GEIST_STYLESHEET_ID = \"bulut-geist-font-stylesheet\";\r\nconst GEIST_STYLESHEET_URL =\r\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&display=swap\";\r\n\r\nconst ensureGeistStylesheet = (): void => {\r\n if (typeof document === \"undefined\") {\r\n return;\r\n }\r\n if (document.getElementById(GEIST_STYLESHEET_ID)) {\r\n return;\r\n }\r\n const link = document.createElement(\"link\");\r\n link.id = GEIST_STYLESHEET_ID;\r\n link.rel = \"stylesheet\";\r\n link.href = GEIST_STYLESHEET_URL;\r\n document.head.appendChild(link);\r\n};\r\n\r\nconst BulutWidget = ({ config }: BulutWidgetProps) => {\r\n // Live config that merges remote settings over initial config\r\n const [liveConfig, setLiveConfig] = useState<BulutRuntimeConfig>(config);\r\n const [configReady, setConfigReady] = useState(false);\r\n\r\n // Fetch remote project config on mount — widget stays hidden until done\r\n useEffect(() => {\r\n if (!config.projectId) {\r\n setConfigReady(true);\r\n return;\r\n }\r\n let cancelled = false;\r\n\r\n fetchRemoteConfig(config.backendBaseUrl, config.projectId).then((remote) => {\r\n if (cancelled) return;\r\n if (remote) {\r\n const merged: BulutRuntimeConfig = {\r\n ...config,\r\n baseColor: normalizeHexColor(remote.base_color || config.baseColor),\r\n model: remote.model || config.model,\r\n agentName: remote.agent_name || config.agentName,\r\n voice: (\r\n remote.voice === \"alloy\" || remote.voice === \"zeynep\" || remote.voice === \"ali\"\r\n ? remote.voice\r\n : config.voice\r\n ) as BulutVoice,\r\n };\r\n applyTheme(merged.baseColor);\r\n setLiveConfig(merged);\r\n }\r\n setConfigReady(true);\r\n });\r\n\r\n return () => { cancelled = true; };\r\n }, [config]);\r\n\r\n // Check localStorage for persisted state\r\n const [isOpen, setIsOpen] = useState(() => {\r\n if (typeof localStorage !== \"undefined\") {\r\n return localStorage.getItem(\"bulut_panel_open\") === \"true\";\r\n }\r\n return false;\r\n });\r\n\r\n const [showBubble, setShowBubble] = useState(false);\r\n const [isAccessibilityEnabled, setIsAccessibilityEnabled] = useState(() => {\r\n if (typeof localStorage === \"undefined\") {\r\n return false;\r\n }\r\n return localStorage.getItem(ACCESSIBILITY_MODE_KEY) === \"true\";\r\n });\r\n\r\n // State reported by ChatWindow\r\n const [isRecording, setIsRecording] = useState(false);\r\n const [isBusy, setIsBusy] = useState(false);\r\n const [previewMessage, setPreviewMessage] = useState<string | null>(null);\r\n const [previewDismissed, setPreviewDismissed] = useState(false);\r\n\r\n // Ref for delegating recording to ChatWindow\r\n const chatActionsRef = useRef<ChatWindowHandle | null>(null);\r\n\r\n const handlePreviewChange = useCallback((text: string | null) => {\r\n setPreviewMessage(text);\r\n if (text !== null) setPreviewDismissed(false);\r\n }, []);\r\n\r\n // Show welcome bubble once for 5 seconds\r\n useEffect(() => {\r\n if (isAccessibilityEnabled) {\r\n setShowBubble(false);\r\n return;\r\n }\r\n if (isOpen) return;\r\n if (typeof localStorage !== \"undefined\") {\r\n if (localStorage.getItem(\"bulut_bubble_shown\") === \"true\") return;\r\n }\r\n\r\n setShowBubble(true);\r\n const timer = setTimeout(() => {\r\n setShowBubble(false);\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(\"bulut_bubble_shown\", \"true\");\r\n }\r\n }, 5000);\r\n return () => clearTimeout(timer);\r\n }, [isOpen, isAccessibilityEnabled]);\r\n\r\n const toggleWidget = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n setShowBubble(false);\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(\"bulut_panel_open\", String(newState));\r\n }\r\n };\r\n\r\n const toggleAccessibilityMode = () => {\r\n const next = !isAccessibilityEnabled;\r\n setIsAccessibilityEnabled(next);\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(ACCESSIBILITY_MODE_KEY, String(next));\r\n }\r\n console.info(`[Bulut] accessibility mode toggled enabled=${next}`);\r\n };\r\n\r\n const handleClose = () => {\r\n setIsOpen(false);\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(\"bulut_panel_open\", \"false\");\r\n }\r\n console.info(\"Bulut chat window closed.\");\r\n };\r\n\r\n // Close on escape key\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\" && isOpen) {\r\n setIsOpen(false);\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.setItem(\"bulut_panel_open\", \"false\");\r\n }\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", handleEscape);\r\n return () => document.removeEventListener(\"keydown\", handleEscape);\r\n }, [isOpen]);\r\n\r\n if (!configReady) return null;\r\n\r\n return (\r\n <>\r\n {!isOpen && (\r\n <ChatButton\r\n onMicClick={() => chatActionsRef.current?.startRecording()}\r\n onCancelRecording={() => chatActionsRef.current?.cancelRecording()}\r\n onStopTask={() => chatActionsRef.current?.stopTask()}\r\n isRecording={isRecording}\r\n isBusy={isBusy}\r\n showBubble={showBubble}\r\n onBubbleClick={() => {\r\n setShowBubble(false);\r\n toggleWidget();\r\n }}\r\n previewMessage={previewDismissed ? null : previewMessage}\r\n onPreviewClick={() => toggleWidget()}\r\n onPreviewClose={() => setPreviewDismissed(true)}\r\n />\r\n )}\r\n <ChatWindow\r\n onClose={handleClose}\r\n config={liveConfig}\r\n accessibilityMode={isAccessibilityEnabled}\r\n onAccessibilityToggle={toggleAccessibilityMode}\r\n hidden={!isOpen}\r\n actionsRef={chatActionsRef}\r\n onRecordingChange={setIsRecording}\r\n onBusyChange={setIsBusy}\r\n onPreviewChange={handlePreviewChange}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nconst SHADOW_STYLE = `\r\n :host {\r\n all: initial;\r\n contain: layout style paint;\r\n font-family: \"${GEIST_FONT_FAMILY}\", sans-serif;\r\n color: hsla(215, 100%, 5%, 1);\r\n font-size: 16px;\r\n line-height: 1.4;\r\n -webkit-font-smoothing: antialiased;\r\n text-rendering: optimizeLegibility;\r\n }\r\n\r\n #bulut-shadow-mount {\r\n all: initial;\r\n color: inherit;\r\n font-family: \"${GEIST_FONT_FAMILY}\", sans-serif;\r\n font-size: inherit;\r\n line-height: inherit;\r\n }\r\n\r\n #bulut-shadow-mount * {\r\n font-family: \"${GEIST_FONT_FAMILY}\", sans-serif !important;\r\n color: inherit;\r\n }\r\n\r\n #bulut-shadow-mount *, #bulut-shadow-mount *::before, #bulut-shadow-mount *::after {\r\n box-sizing: border-box;\r\n }\r\n`;\r\n\r\n// Container host for the widget\r\nlet widgetContainer: HTMLElement | null = null;\r\nlet widgetMountNode: HTMLElement | null = null;\r\nlet createdContainer = false;\r\nlet isInitialized = false;\r\n\r\n/**\r\n * Initialize the Bulut chat widget\r\n * @param options - Optional configuration options\r\n */\r\nexport const init = (options: BulutOptions = {}) => {\r\n if (isInitialized) {\r\n console.warn(\"Bulut is already initialized\");\r\n return;\r\n }\r\n\r\n ensureGeistStylesheet();\r\n\r\n const runtimeConfig = resolveRuntimeConfig(options);\r\n applyTheme(runtimeConfig.baseColor);\r\n\r\n // Create or find container\r\n if (options.containerId) {\r\n widgetContainer = document.getElementById(options.containerId);\r\n createdContainer = false;\r\n } else {\r\n widgetContainer = document.createElement(\"div\");\r\n widgetContainer.id = \"bulut-container\";\r\n document.body.appendChild(widgetContainer);\r\n createdContainer = true;\r\n }\r\n\r\n if (!widgetContainer) {\r\n console.error(\"Bulut: Container not found\");\r\n return;\r\n }\r\n\r\n const shadowRoot = widgetContainer.shadowRoot || widgetContainer.attachShadow({ mode: \"open\" });\r\n shadowRoot.replaceChildren();\r\n\r\n const style = document.createElement(\"style\");\r\n style.textContent = SHADOW_STYLE;\r\n\r\n const mountNode = document.createElement(\"div\");\r\n mountNode.id = \"bulut-shadow-mount\";\r\n\r\n shadowRoot.append(style, mountNode);\r\n widgetMountNode = mountNode;\r\n\r\n // Render the widget\r\n render(<BulutWidget config={runtimeConfig} />, mountNode);\r\n isInitialized = true;\r\n\r\n console.log(\"Bulut initialized successfully\");\r\n};\r\n\r\n/**\r\n * Destroy the Bulut widget\r\n */\r\nexport const destroy = () => {\r\n if (!isInitialized) {\r\n return;\r\n }\r\n\r\n if (widgetMountNode) {\r\n render(null, widgetMountNode);\r\n widgetMountNode = null;\r\n }\r\n\r\n if (widgetContainer && createdContainer) {\r\n document.body.removeChild(widgetContainer);\r\n }\r\n\r\n widgetContainer = null;\r\n createdContainer = false;\r\n isInitialized = false;\r\n console.log(\"Bulut destroyed\");\r\n};\r\n\r\n/**\r\n * Check if the widget is initialized\r\n */\r\nexport const isReady = () => isInitialized;\r\n\r\nconst Bulut = {\r\n init,\r\n destroy,\r\n isReady,\r\n};\r\n\r\nif (typeof window !== \"undefined\") {\r\n (window as Window & { Bulut?: typeof Bulut }).Bulut = Bulut;\r\n}\r\n\r\n// Export the main widget component for advanced usage\r\nexport { BulutWidget };\r\n\r\n// Export components for custom implementations\r\nexport { ChatButton, ChatWindow };\r\n\r\nexport default Bulut;\r\n"],"names":["l","u","i","o","r","e","f","c","s","a","p","v","y","d","w","n","_","t","m","k","C","h","g","B","A","D","T","j","S","M","$","P","L","z","q","x","normalizeHexColor","useMemo","viewBox","content","jsx","jsxs","Fragment","label","line","_a","_b","_c","_d","useState","useRef","useEffect","lastAssistant","useLayoutEffect","clamp","useCallback","render"],"mappings":"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","x_google_ignoreList":[0,1,2]}